DBCP 설정 값 정하기

Spring/DB, Cache 연동 2024. 5. 1. 18:34

DBCP 를 사용할 때 다양한 설정 값들이 있다.설정 값을 어떻게 정하는지에 대한 간단한 가이드를 포스팅 해보겠다.설명은 HikariCP 옵션으로 진행하겠다. maximumPoolSizePool 이 제공할 수 있는 최대 커넥션 갯수이다. (idle + in-use) maximumPoolSize 설정 값을 정하기 위해서는..한 커넥션당 쿼리 실행 시간, 목표로하는 TPS 가 필요하다. 최대 TPS = 1 커넥션 당 초당 요청 처리 개수 * 동시 커넥션 개수위는 TPS 의 계산식이다.여기서 우리는 동시 커넥션 개수 (maximumPoolSize) 를 구할 것이다. 최대 TPS 는 목표로하는 TPS 이므로 알고 있는 값이다.1 커넥션 당 초당 요청 처리 개수는 1초를 1 커넥션당 쿼리 실행 시간으로 나눈 값이..

@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..

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..

JPA 등록, 기본 키 생성 전략

Spring/DB, Cache 연동 2023. 6. 19. 13:07

이번엔 JPA 의 등록 과정에 대해 알아보겠다. JPA 의 등록 과정은 크게 2단계를 따른다. 1. 영속성 컨텍스트에 엔티티 등록 -> 엔티티를 영속 상태로 변경 2. 플러시 과정을 거쳐 영속성 컨텍스트에 존재하는 엔티티를 DB 에 반영 -> 쓰기 지연 SQL 저장소의 SQL 을 DB 에 보낸다. 이제 자세하게 알아보겠다.. 먼저 위 사진을 한번 보자.. persist 메서드를 호출하면 해당 엔티티에 대해서.. insert 문이 생성되어 쓰기 지연 SQL 저장소에 저장되고 1차 캐시에 저장되는 두개의 작업이 이루어진다 코드를 통해 이해해보자.. addMember 메서드를 호출하면 어떤일이 발생하는지 알아보겠다. 1. @Transactional 어노테이션이 적용된 메서드이므로 수동 커밋 모드로 진행되며....

Article Thumbnail