jOOQ? QueryDsl?The easiest way to write SQL in JavajOOQjOOQ LearnSpring 기반 웹 애플리케이션을 개발할 때 거의 대부분 JPA (Java Persistence API)라는 ORM을 선택한다 JPA를 활용해서 개발을 하다가 DSL을 통해서 동적 쿼리를 편리하게 작성하기 위해서 QueryDsl-JPA을 도입한다 QueryDsl에 대한 생각QueryDsl은 Type-Safe하게 JPQL을 작성할 수 있고 BooleanExpression을 통해서 Optional한 필드 쿼리 조건을 명시할 수 있다는 장점이 있다 하지만 QueryDsl도 결국 JPQL Builder이기 때문에 JPQL의 한계를 극복할 수는 없다성능결국 DB로 질의를 하는 순간에는 JPQL →..
시나리오 요구사항에 대한 로직을 작성하다가 아래와 같은 생각이 들었다고 하자 너무나도 많은 흩어진 부분에서 공통적으로 적용되는 로직 존재 이러한 로직을 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) 쿼리 튜..
Class Loader 자바 소스코드가 실행되는 과정은 다음과 같다 자바 컴파일러가 소스 코드(.java) → 바이트 코드(.class)로 컴파일 생성된 바이트 코드는 완전한 기계어가 아니고 JVM이 이해할 수 있는 레벨의 코드 컴파일된 바이트 코드를 필요한 시점에 Class Loader가 JVM Runtime Data Area에 동적 로드 클래스 로딩은 Lazy Loading 방식으로 실제 해당 클래스가 사용될 때까지 로딩을 미룬다 로드된 바이트 코드를 인터프리터 & JIT 컴파일러에 의해서 기계어로 번역한 후 실행 ClassLoader의 주요 역할은 컴파일된 바이트 코드를 필요한 시점에 동적으로 JVM에 로드하고 이 과정에서 여러 검증 및 초기화를 진행한다 Class Loader 원칙 1. Deleg..
개요 [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의 상태 → ..