본문 바로가기

전체 글846

Webflux Function Endpoints 정리 개요 Webflux에서는 HandlerFunction이라는 것을 통해 HTTP Request를 다루게 된다. HandlerFunction은 ServerRequest를 인자로 받고 지연된 ServerResponse(Mono)를 리턴한다. Request/Response 모두 JDK8에서 제공하는 기능을 통해 불변 객체로써 동작한다. HandlerFunction은 어노테이션 기반 프로그래밍에서 등장하는 @RequestMapping과 동일한 역할을 수행한다. 클라이언트로부터 들어오는 Request는 RouterFunction을 통해 다뤄진다. 해당 객체는 위에서 설명한 것 처럼, ServerRequest를 받고 지연된 ServerResponse를 리턴한다. Request가 라우터에 등록된 핸들러와 매칭되면 핸들.. 2023. 8. 17.
DB B Tree Index 정리 B-Tree 기반 인덱스 동작 방식 예를 들어 위와 같은 테이블이 있다고 가정해보자. 오른쪽은 실제 대상 테이블이고 왼쪽은 a컬럼에 대해서만 인덱스를 걸어둔 인덱스 정보라고 생각하면 된다. 인덱스 정보는 포인터(ptr)라는 데이터도 같이 가지고 있고 해당 포인터는 실제 MEMBMERS 테이블의 로우 위치를 가리키고 있다. 또한 인덱스 대상 컬럼을 기준으로 오름차순 정렬이 되어 저장된다. 예시 1 WHERE a = 9 라는 조건절을 통해 쿼리를 날린다고 생각해보자. 인덱스 테이블을 검색할 때 순차적으로 검색하는것이 아닌 Binary search를 하게 된다. 단계를 살펴보자면 아래와 같다. 인덱스 테이블에서 가운데 값인 5로 간다. 그리고 WHERE 조건과 동일한지 비교한다. 동일한 5와 9는 같지 않다... 2023. 8. 5.
Spring Camp 2023 - 실무에서 적용하는 테스트 코드 작성 방법과 노하우 개요 Spring Camp 2023, 김남윤님이 발표하신 실무에서 적용하는 테스트 코드 작성 방법과 노하우 영상을 보며 포스팅으로 정리한 글입니다. Mock Server 기반 테스트 코드 예를 들어 위와 같은 코드가 있다고 가정해보자. 해당 코드는 PartnerClient라는 클래스를 통해 파트너의 정보를 얻어오는데, 해당 클래스는 외부 통신을 수행하는 클래스이다. 이런 경우 위와 같이 Mock Server를 통해 실제 응답값을 모킹하여 테스트 코드를 작성하곤 한다. 그런데 이 때 PartnerClient를 사용하는 클래스가 위처럼 수많이 늘어나면 어떻게 될까? 당연히 모든 테스트마다 Mock Server를 통해 모킹하는 작업이 필요할 것이다. 나아가서 Mock Server가 아닌 @MockBean을 통.. 2023. 8. 5.
Spring AOP 개념 정리 AOP 적용 방식 AOP 적용 방식은 크게 3가지 방법이 있다. 컴파일 시점 .java 소스 코드를 컴파일러를 사용하여 .class를 만드는 시점에 부가 기능 로직을 추가한다. 이때는 AspectJ가 제공하는 특별한 컴파일러를 사용해야 하는데, 컴파일 된 .class를 디컴파일 해보면 실제로 AspectJ 관련 호출 코드가 코드상으로 들어가게 된다. AspectJ 컴파일러는 Aspect를 확인하여 해당 클래스가 적용 대상인지 확인하고 적용 대상인 경우 부가 기능 코드를 적용한다. 이렇게 원본 로직에 부가 기능이 추가되는 것을 위빙(Weaving)이라고 한다. 하지만 특별한 컴파일러도 필요하고 타 방법에 비해 복잡하다는 단점이 존재한다. (잘 사용하지 않음) 클래스 로딩 시점 자바를 실행하면 자바 언어는 .. 2023. 7. 20.
Spring 빈 후처리기 정리 의존성 추가 implementation("org.springframework.boot:spring-boot-starter-aop") 먼저 위처럼 aop에 관한 의존성을 추가해준다. 이렇게 하면 aspectjweaver라는 aspectJ 관련 라이브러리를 등록하고 스프링 부트가 AOP관련 클래스를 자동으로 빈으로 등록한다. AutoProxyCreator 스프링 부트는 AnnotationAwareAspectJAutoProxyCreator라는 빈 후처리기를 자동으로 빈으로 등록한다. 해당 빈은 자동으로 프록시를 생성해주는 클래스로써 스프링 빈으로 등록된 Advisor들을 자동으로 찾은 후 프록시가 필요하다면 자동으로 프록시를 적용해준다. 일반적으로 AOP를 구현할 때 클래스 위에 @Aspect 어노테이션을 붙.. 2023. 7. 19.
Spring DataSource/TransactionManager 정리 개요 Spring Batch 5 버전을 통해 배치를 생성하고 관리하고 있는데, 멀티 모듈로 구성된 상황에서 DataSource 설정 관련 동작이 원활하지 않아 Spring DataSource와 Transaction Manager에 대한 내용에 대해 정리한다. 본 포스팅의 내용은 인프런 김영한님의 데이터 접근 핵심 원리 강의에 기반한다. DataSource 일반적으로 커넥션을 얻는 방법으로 JDBC DriverManager를 직접 사용하거나 HikariCP등의 커넥션 풀을 사용하는 방법이 존재한다. DriverManager를 통해 커넥션을 획득하는 경우 항상 신규 커넥션을 획득하게 되는데 이를 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야할까? 어플리케이션 로직에서 DriverManager를 사용하.. 2023. 7. 19.