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..
Hash Function 데이터를 효율적으로 관리하기 위해서 임의의 길이를 가진 데이터 → 고정된 길이의 데이터로 매핑해주는 단방향 함수 특정 데이터에 대한 Hash Function을 적용해서 도출된 값을 Hash라고 한다 인터스텔라 → 20033 헬로우월드 → 12345 010-1234-4321 → 51231 ... Perfect Hash Function 서로 다른 객체 X, Y에 대해서 X.equals(Y)가 거짓이면 X.hashCode() != Y.hashCode()임을 보장할 수 있는 해시 함수 자료형 관점에서 값이 2개밖에 없는 Boolean이나 값 자체를 해시 함수로 표현할 수 있는 Integer, Long, ..과 같은 자료형들은 완전한 해시 함수를 구현할 수 있다 그러나 String이나 임..
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") ..
CORS Cross-Origin Resource Sharing (CORS) - HTTP | MDN Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources. CORS also relies on a mechanism by which developer.mozilla.org 웹 개발을 하다보면 언젠가 한번쯤은 CORS 관련 오류를 만날 수 밖에 없다 그러면 CORS란 뭘까? CORS (Cr..
문제 상황 [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) 쿼리 튜..
Race Condition 멀티 쓰레드 프로그래밍을 하게 된다면 Race Condition이라는 말은 누구나 한번쯤은 듣는 단어이다 그러면 Race Condition이란 무엇일까? 멀티 쓰레드 환경에서 공유 자원에 대한 Write Operation을 진행할 때 순서나 여러 조건에 의해서 결과값에 영향을 줄 수 있는 상황 여기서 결과값에 영향을 줄 수 있는 상황이란 다음과 같은 상황을 의미한다 공유 자원 count = 10이 존재 → ThreadA = count++ 작업 진행 → ThreadB = count-- 작업 진행 ThreadA ThreadB RegisterA = count (10) RegisterB = count (10) RegisterA = RegisterA + 1 (11) RegisterB =..
Class Loader 자바 소스코드가 실행되는 과정은 다음과 같다 자바 컴파일러가 소스 코드(.java) → 바이트 코드(.class)로 컴파일 생성된 바이트 코드는 완전한 기계어가 아니고 JVM이 이해할 수 있는 레벨의 코드 컴파일된 바이트 코드를 필요한 시점에 Class Loader가 JVM Runtime Data Area에 동적 로드 클래스 로딩은 Lazy Loading 방식으로 실제 해당 클래스가 사용될 때까지 로딩을 미룬다 로드된 바이트 코드를 인터프리터 & JIT 컴파일러에 의해서 기계어로 번역한 후 실행 ClassLoader의 주요 역할은 컴파일된 바이트 코드를 필요한 시점에 동적으로 JVM에 로드하고 이 과정에서 여러 검증 및 초기화를 진행한다 Class Loader 원칙 1. Deleg..