시나리오 요구사항에 대한 로직을 작성하다가 아래와 같은 생각이 들었다고 하자 너무나도 많은 흩어진 부분에서 공통적으로 적용되는 로직 존재 이러한 로직을 AOP(Aspect Oriented Programming)를 활용해서 공통 모듈화 위의 로직은 All or Nothing을 지켜야 하기 때문에 Transaction 처리가 필요하다고 가정하자 그러면 여기서 가장 심플하게 생각할 수 있는 구현 방안은 아래와 같다 Spring에서 제공해주는 @Aspect를 활용해서 Advice를 정의 적절한 위치에 대한 Pointcut을 정의해서 AOP 적용 All or Nothing을 지키기 위해서 Spring에서 제공해주는 @Transactional 활용 @Aspect @Component class ExtractCommo..
GitHub - sjiwon/security-jwt: Spring Security + JWT를 이용한 간단한 예제 Spring Security + JWT를 이용한 간단한 예제. Contribute to sjiwon/security-jwt development by creating an account on GitHub. github.com 깃허브 코드 부트 버전 = 3.2.0 Session vs Token [Network] Cookie & Session & Token HTTP의 Stateless HTTP 프로토콜은 기본적으로 요청 응답이 진행한 후 이전 통신에 대한 상태를 저장하지 않는 Stateless한 구조를 가지고 있다 HTTP가 Stateless함에 따라 다음과 같은 이점이 존재한다 상 sjiwon..
개선 포인트 GitHub - sjiwon/study-with-me-be: 여기서 구해볼래? Backend Repository (Refactoring) 여기서 구해볼래? Backend Repository (Refactoring). Contribute to sjiwon/study-with-me-be development by creating an account on GitHub. github.com 스터디 모집부터 진행 관리까지 하는 Study With Me 웹 애플리케이션에는 여러가지 기능이 있지만 본 포스팅에서 개선할 기능은 스터디 주차 생성이다 @RestController @RequiredArgsConstructor @RequestMapping("/api/studies/{studyId}/weeks") ..
문제 상황 [Spring] 부하 분산 & 서버 가용성을 위한 로드밸런싱 개요 [Spring] 테이블 조인 + 그룹 함수를 통한 정렬 쿼리 튜닝기 (with nGrinder 부하테스트) 개요 GitHub - sjiwon/study-with-me-be: 여기서 구해볼래? Backend Repository (Refactoring) 여기서 구해볼래? Backend Repository sjiwon-dev.tistory.com SPOF 구조를 해결하고 부하 분산, 가용성, 응답 최적화, ..등을 위해서 WAS Scale Out을 진행하였다 하지만 서버 로그를 살펴보다가 문제가 하나 발생한것을 파악했다 @Component @RequiredArgsConstructor public class UpdateWeeklyAtt..
개요 [Spring] 테이블 조인 + 그룹 함수를 통한 정렬 쿼리 튜닝기 (with nGrinder 부하테스트) 개요 GitHub - sjiwon/study-with-me-be: 여기서 구해볼래? Backend Repository (Refactoring) 여기서 구해볼래? Backend Repository (Refactoring). Contribute to sjiwon/study-with-me-be development by creating an account on GitHub. github.com 본 sjiwon-dev.tistory.com [Spring] ThreadPool & HikariCP 튜닝 (with nGrinder 부하테스트) 개요 [Spring] nGrinder 부하 테스트 1) 쿼리 튜..
개요 [Spring] nGrinder 부하 테스트 1) 쿼리 튜닝 개요 GitHub - sjiwon/study-with-me-be: 여기서 구해볼래? Backend Repository (Refactoring) 여기서 구해볼래? Backend Repository (Refactoring). Contribute to sjiwon/study-with-me-be development by creating an account on GitHub. github.com 본 sjiwon-dev.tistory.com 메인 페이지에 노출되는 스터디 조회 API와 관련된 3가지 쿼리에 대한 튜닝을 진행함으로써 기존에 구현한 로직과 비교해서 꽤 괜찮은 성능 향상을 이루어 냈다 등록날짜 기준 좋아요 개수 기준 리뷰 개수 기준 이번..
개요 GitHub - sjiwon/study-with-me-be: 여기서 구해볼래? Backend Repository (Refactoring) 여기서 구해볼래? Backend Repository (Refactoring). Contribute to sjiwon/study-with-me-be development by creating an account on GitHub. github.com 본 프로젝트 - Study With Me의 메인 페이지에서 가장 많이 조회가 될 거라고 예상되는 스터디 조회에 대한 부하 테스트를 진행하고 여러가지 튜닝을 해보려고 한다 스터디 조회에는 총 3가지 조건이 존재한다 등록날짜 좋아요 개수 리뷰 개수 개선에 앞서 트래픽? 트래픽이 많다? 대규모 트래픽이다?의 정의가 뭘까? 1..
개요 [Spring] HikariCP 1) DBCP란? DB Connection Web Application Server(WAS) ↔ DB Server간에 네트워크 통신을 위해서는 TCP/IP 기반으로 Connection을 맺어야 한다 WAS에서는 적절한 DB Driver를 통해서 DBMS에 Connection 요청을 진행한다 DB Driver는 WAS sjiwon-dev.tistory.com 위의 포스팅을 통해서 기본적인 DBCP에 대한 개념과 HikariCP의 핵심 컴포넌트에 대한 기본적인 개념을 알아보았다 본 포스팅에서는 HikariCP에서 실질적으로 DB Connection을 다루는 메커니즘에 대해서 알아볼 것이다 HikariCP 주요 필드 필드 설명 poolState HikariCP의 상태 → ..
DB Connection Web Application Server(WAS) ↔ DB Server간에 네트워크 통신을 위해서는 TCP/IP Connection을 맺어야 한다 WAS에서는 적절한 DB Driver를 통해서 DBMS에 Connection 요청을 진행한다 DB Driver는 WAS ↔ DBMS 사이에서 데이터를 주고 받는 통로 역할 Connection 요청을 처리할 DB Driver는 DBMS와 TCP/IP Connection을 맺는다 3-Way Handshake (SYN / ACK-SYN/ ACK) TCP/IP Connection을 맺은 후 DB Driver는 인증 정보를 DBMS에 전달한다 DBMS는 Client에 대한 인증을 진행하고 Connection 요청에 대한 DB Session을 생..
[Spring] Tomcat 1) Connector [Java] ThreadPool ThreadPool 어떤 요청이 들어왔을 때 해당 요청을 처리하기 위해서 쓰레드를 사용하는 가장 심플한 방법은 요청마다 쓰레드를 생성하고 할당하는 것이다 쓰레드가 필요한 시점에 생 sjiwon-dev.tistory.com 이전 포스팅에서는 Tomcat Connector에 대한 개념을 알아보았다 본 포스팅에서는 Tomcat 주요 설정값 및 시나리오 테스트를 진행할 것이다 Tomcat 주요 설정 값 minSpareThreads [default = 10] The minimum number of threads always kept running. This includes both active and idle threads. If..