본문 바로가기
반응형

분류 전체보기242

[Spring Boot] JWT 튜토리얼 [chap.4~5] - 인프런 강의 이전 포스팅에 이어서... 외부와의 통신에 사용할 DTO 클래스 생성 dto > LoginDto.java dto > TockenDto.java dto > UserDto.java Repository 관련 코드 생성 JpaRepository를 extends 하여 findall, save 등의 메소드를 기본적으로 사용한다. repository > (I) UserRepository.java @EntityGraph : 쿼리가 수행될 때 Eager 조회로 attributePaths 정보를 같이 가져온다. 관련 로직 생성 service > CustomUserDetailsService.java Spring Security에서 중요한 부분인 UserDetailsService를 구현 UserDetailsService 를 .. 2023. 7. 2.
[Spring Boot] JWT 튜토리얼 [chap.1~3] - 인프런 강의 인프런 강의를 보고 실습하고 정리하기! (무료입니다~) 회원가입, 로그인, 권한 로직을 실제로 구현해보고 Spring Security의 인증과 인가 로직을 경험해본다. 인증 : Request를 보낸 User가 누구인지? 올바른 User인지 확인하는 과정 인가 : Request가 수행하고자 하는 행동이 허가된 행동인지를 확인하는 과정 [무료] Spring Boot JWT Tutorial - 인프런 | 강의 Spring Boot, Spring Security, JWT를 이용한 튜토리얼을 통해 인증과 인가에 대한 기초 지식을 쉽고 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com JWT : json 객체를 사용해서 토큰 저장하는 웹토큰 가볍게 적용할 수 있어서 사이드 프로젝.. 2023. 7. 1.
[공유] 이벤트 루프를 차단하지 않기 위한 실용적인 가이드 메인 스레드를 차단하지 않고 동기식 작업을 처리하는 방법 동기식 작업이 실행되는 동안 이벤트 루프는 어떤 작업도 수행할 수 없습니다. 방법1. 더 많은 노드(리소스) 투입하기 Node.js 의 기능 중 하나는 클러스터를 통한 손쉬운 수평 확장을 지원한다. 여러 서버를 병렬로 실행하여서 한 서버가 사용중일 경우 다른 서버가 들어오는 요청을 처리할 수 있도록 한다. 구현은 간단하지만, 이벤트 루프를 차단하지 않고 단순히 더 추가할 뿐이다. 방법2. 비동기적으로 수행하도록 리팩터링 하기 비동기 작업은 일반적으로 CPU에 종속되지 않는다. ex) 파일을 읽는데 10ms 가 걸리는 경우 - 1ms 미만은 CPU 대기 시간이고 나머지는 디스크 대기 시간일 경우가 많다. 동기 실행 블록 사이에 간격을 추가하여 알고리.. 2023. 6. 24.
[공유] (번역) 캐시 시스템 설계할 때 기억해야 할 6가지 캐싱 전략 캐시 시스템의 주요 성능 측정 지표 캐싱 시스템의 효율성과 성능을 향상시키기 위해서는 다양한 지표를 모니터링하는 것이 매우 중요합니다. 이를 통해 캐싱 시스템에 관한 중요한 비즈니스 결정을 내릴 수 있습니다. 캐시 적중률(hit ratio) 요청된 항목이 캐시에서 사용된 비율을 측정합니다. 캐시 적중률이 높을수록 캐시에서 더 많은 데이터가 제공되어, 외부 저장소에 액세스 할 필요성을 줄어들고 성능이 향상됩니다. 아래의 성능 지표를 모니터링한다면, 우리는 캐싱 시스템을 최적화하여 더 높은 처리량과 낮은 대기 시간을 달성할 수 있습니다. 지연 시간(latency) 데이터에 액세스하는 데 걸리는 시간을 의미합니다. 캐싱 시스템에서 낮은 대기 시간은 데이터가 더 빠르게 제공되는 것을 의미하여 전반적인 성능을 향.. 2023. 6. 18.
Nodejs 싱글스레드 스레드 한 프로세스에서 다양한 작업을 담당하는 최소 실행 단위ex) 크롬 브라우저(프로세스)에서 블로그 작성하기(스레드) , 유튜브 보기(스레드2)  멀티스레드 프로그래밍CPU는 한번에 하나의 명령만 실행할 수 있지만, 운영체제의 스케줄러가 매우 짧은 주기로 각기 다른 명령을 우선순위에 따라 실행시키면 동시에 여러 로직도 수행 가능하다.Context Switching이 발생하면서 부분적으로 각각의 스레드 작업을 끝낸다.대용량 처리에서 필수적단점: 오류를 찾아내기 어렵고 고려사항이 많다. Nodejs 싱글스레드 프로그래밍Nodejs는 하나의 메인스레드와 하나의 콜스택을 가지고 있다.싱글스레드라고 모두 같은 스레드 위에서 동작하지 않는다.단일 스레드이지만 백그라운드에서는 스레드 풀을 구성해 작업을 처리한다... 2023. 6. 7.
PHP 단점 - connection pool connection pool 이란? 미리 일정 수의 connection을 만들어 pool에 담아뒀다가 사용자 요청이 발생하면 연결해주고 연결 종료 시 다시 pool에 보관한다. DB 접속 요청이 늘어나도 DB 프로세스 개수는 일정하다. Connection pool을 이용하여 자원관리를 한다. PHP는 Connection pool 을 지원하지 않는다. DB 접속 시 사용자가 몰리면 DB가 죽을 수 있다. 대안 다른 프록시 미들웨어를 사용하는 것이 좋다. ex) SQL Relay, Rudiments 참고 Connection Pool이 없는 언어(PHP, Ruby)의 DB Connection 관리 PHP와 Ruby는 Connection Pool 기능이 없다! 위와 같이 Connection Pool 기능이 없는.. 2023. 6. 7.
마이크로서비스와 Nodejs 마이크로서비스 모놀리식 아키텍처를 단독으로 실행 가능한 다수의 모듈로 분해한 아키텍처 특징 개발과 배포에 상호 독립적이다. 독립적인 데이터 저장소를 가진다. 단점 공유 자원 접근이 어렵다. 배포와 실행이 복잡해진다. 분산 시스템 구현이 어렵다. 마이크로서비스가 유기적으로 동작해야 하므로 작고 가벼워야 한다. I/O가 동기 방식이라면 응답이 올 때까지 다음 요청을 처리하지 못하기 때문에 성능이 좋지 않다. --> 메시지-큐를 이용해 해결한다. I/O를 실제로 처리하는 서버를 별도로 두고, 요청받은 서버는 큐로 데이터를 전송한 후 이 요청을 처리한다. 처리가 되면 클라이언트에 보낸다. 하지만 위의 서버들을 구현하기에는 쉽지 않다. Node.js 내부적으로 이러한 메커니즘을 처리해주기 때문에 고민하지 않아도 .. 2023. 6. 6.
모놀리식 아키텍처의 한계 마이크로 아키텍처를 알기전에 모놀리식 아키텍처도 알아야할 것 같다. 모놀리식 아키텍처 : 하나의 애플리케이션 안에 모든 컴포넌트를 포함하는 구조 장점 하나의 애플리케이션으로 구성했기 때문에 배포가 쉽다 로드밸런서를 활용해 인스턴스만 늘리면 부하 문제도 해결 가능하다. 단점 분산처리가 비효율적이다. 전체 코드를 이해해야하고 코드를 관리하기 어렵다. 기능별로 코드가 독립적이지 않아 새로운 기술을 적용하기 어렵다. 분산 아키텍처의 필요성 코드수정에 부담이 없어야 하고 새로운 기능을 추가할 때는 기존 코드에 영향을 주지 않아야 한다. 필요한 기능만 분산 처리할 수 있어야 한다. 기능별로 최적화된 기술을 적용할 수 있어야 한다. 참고 Node.js 마이크로 서비스 코딩공작소 - 정대선 2023. 6. 5.
Nodejs 환경에서 Artillery로 부하테스트 하기 설치 프로덕션 레벨에서는 쓰이지 않기때문에 npm i -D artillery 맛보기 실행 --count : 가상의 사용자 수 -n : 요청 횟수 --rate : 초당 요청 ex) 100명의 사용자가 50번의 요청을 각각 보내는 것 = 5000번 요청 npm start npx artillery quick --count 100 -n 50 http://localhost:8001 ex) 60초 동안 5명이 초당 10번 요청을 보낸다. = 3000번 요청 artillery quick --duration 60 --rate 10 -n 5 http://localhost:5000 시나리오 설정 파일 (yaml 또는 json) config target : 테스트할 URL phases ex) 60초 동안 매초 1개의 요청을.. 2023. 5. 29.
728x90
반응형