@Transactional 과 Test code 고찰 - 개발자들의 생각 모음

Spring/DB, Cache 연동 2024. 4. 22. 22:01

@Transactional 을 Test code 에서 사용할 때, 개발자 간에 논란이 좀 있다.. 개발자들의 생각을 알아보자.. 향로님 테스트 데이터 초기화에 @Transactional 사용하는 것에 대한 생각 https://jojoldu.tistory.com/761 테스트 데이터 초기화에 @Transactional 사용하는 것에 대한 생각 얼마 전에 2개의 핫한 컨텐츠가 공유되었다. 존경하는 재민님의 유튜브 - 테스트에서 @Transactional 을 사용해야 할까? 존경하는 토비님의 페이스북 2개의 컨텐츠에서 테스트 데이터 초기화에 @Transa jojoldu.tistory.com 토비님 테스트가 관리하는 트랜잭션 - 향로 님의 @Transactional 글을 읽고 https://toby.epril...

DBCP (HikariCP)

Spring/DB, Cache 연동 2024. 4. 22. 21:21

오늘 포스팅으로는Database Connection Pool (DBCP) 에 대해 정리해보겠다. 배경Application 과 Database 간의 통신은 TCP 기반으로 통신한다.따라서, 본격적으로 데이터를 주고 받기 이전에 연결을 하는 과정을 거친다. (TCP 연결 지향 특성)-> 3 way-handshaking또한, 데이터를 주고 받은 다음 연결을 끊어주는 과정도 거친다. (TCP 연결 지향 특성)-> 4 way-handshaking 실제 데이터를 주고 받기 전 후로 연결을 맺고 끊는 과정이 시간이 오래 걸리므로Backend API 응답 시간에 영향을 주게 되며이는 처리량에 영향을 주게된다 또한, Database Connection 개수의 제한을 두지 않으면 DB 과부하 상태가 될 수 있다. DBCP..

HttpHandler 생성과 동작

Spring Reactive Stack/Webflux 2024. 3. 15. 00:16

이전 포스팅에서 Netty 서버를 구동하기 위해 .. Spring 은 project reactor 의 Netty, Reactor Netty 를 의존하고 Reactor Netty 의 HttpServer 를 생성하기 위해 HttpServer 에는 HttpServer::handler 메서드가 있는데 Spring 에서는 HttpServer::handler 의 파라미터(함수형 인터페이스)에 사용할 구현체를 ReactorHttpHandlerAdapter 로 만들어 놨다. 그리고.. Spring 의 ReactorHttpHandlerAdapter 를 생성하기 위해서는 HttpHandler 를 주입받아야 하는 것을 확인했다. 이번 포스팅에서는 HttpHandler 의 생성과 동작에 대해 다뤄보겠다. HttpHandler..

Article Thumbnail
WebHandler 와 Spring

Spring Reactive Stack/Webflux 2024. 3. 10. 16:59

Spring 이 WebHandler 의 구현체인 DispatcherHandler(front handler) 를 등록하는 과정을 알아보자. spring boot autoconfigure 에서 자동 구성(Auto Configuration) 기능에 의해 동작하는 HttpHandlerAutoConfiguration 이다. 자동 구성 조건에 따라 HttpHandler 를 빈으로 등록하고 있는 것을 알 수 있다. HttpHandlerAutoConfiguration 에서 HttpHandler 를 생성할 때 호출하는 WebHttpHandlerBuilder::applicationContext 메서드 코드의 일부이다. Spring container 에서 WEB_HANDLER_BEAN_NAME("webHandler") 의 ..

Article Thumbnail
WebHandler 와 Netty 의 관계

Spring Reactive Stack/Webflux 2024. 3. 9. 00:21

WebHandler 에 대해 알아보겠다. WebHandler 는 .. Spring 5 부터 제공하는 web request 를 처리하는데 사용할 수 있는 인터페이스이다. 보통 Spring Reactive stack 에서 사용된다. Project Reactor 의 Reactor 에 의존한다. (Mono) 파라미터로 ServerWebExchange 는.. ServerHttpRequest, ServerHttpResponse 등을 얻을 수 있는 메서드를 제공하는 인터페이스이다. 즉, Servlet stack 의 Servlet, HttpServletRequest, HttpServletResponse 등의 역할과 유사하다고 볼 수 있다.. Spring Webflux 에서는 front handler 로.. WebHan..

Article Thumbnail
Spring Data JPA (Hibernate), N + 1 Query Problem

Spring/DB, Cache 연동 2024. 2. 20. 22:18

N + 1 문제가 일어나는 모든 경우의 수에 대해 알아보고.. 한번 정리를 해보겠다. N + 1 Query problem ? 어떤 엔티티를 조회하기 위해 쿼리(1)를 수행했는데 예상치 못한 쿼리들(N)이 추가로 수행되는 상황을 말한다. 주로 일대다, 다대일 관계에서 발생한다. 이번 포스팅에서 사용할 DB 다이어그램이다. Team 이 여러 Member 를 가지는 관계이다. N + 1 조회 문제가 일어나는 케이스를 살펴보겠다. 글로벌 페치 전략이 즉시 로딩(Eager loading) 인 경우 JPQL 을 이용하여 어떤 엔티티를 조회 할 경우 발생한다. -> 글로벌 페치 전략이 즉시 로딩이지만, 사용자의 쿼리(JPQL) 가 우선이기 때문에 JPQL 을 충실히 수행후, 글로벌 페치 전략에 의해 연관관계에 있는 ..

Article Thumbnail
Spring 과 JPA

Spring/DB, Cache 연동 2024. 2. 14. 22:24

J2EE 컨테이너 환경의 대표격인 Spring 에서 JPA 를 사용할 경우 알아야할 중요한 개념을 나열해보겠다. 순수하게 J2SE 환경에서 JPA 를 사용하면 개발자가 직접 EntityManager 를 생성해야하며, Transaction 도 관리해야한다. J2EE 환경에서 JPA 를 사용하면 트랜잭션 범위의 영속성 컨텍스트 전략이 기본으로 채택된다. Spring 에서 트랜잭션 범위와 영속성 컨텍스트 생존 범위가 동일한 전략을 따르면, 트랜잭션 AOP 를 활용한다. 트랜잭션 범위와 영속성 컨텍스트 생존 범위가 동일한 전략 해당 전략에서는 트랜잭션을 시작할 때, entityManager 를 생성하고 트랜잭션이 종료 될 때, entityManager 도 닫힌다. 트랜잭션이 같으면 동일한 EntityMana..

Netty 2

Spring Reactive Stack/Netty 2024. 1. 21. 19:43

Netty Channel 의 pipline 으로 수행되는 ChannelHandler 가 제공하는 메서드를 하나씩 정리해보겠다. ChannelInboundHandler inbound I/O 이벤트를 처리하기 위한 ChannelHandler 이다. inbound I/O 이벤트가 발생되면 각 이벤트에 맞는 아래 메서드를 호출 해준다. void channelRegistered(ChannelHandlerContext ctx) throws Exception; Netty Channel 이 EventLoop 에 등록되는 경우 호출된다. - Netty ServerSocketChannel 의 경우 서버를 시작하며 EventLoop 에 최초 1회 등록할 것이므로 그 때 1회 호출 될 것이다. - Netty SocketCha..