728x90
데이터베이스 종류에 따른 인터페이스 통합
- 애플리케이션에서 데이터베이스를 사용할 때, 커넥션 연결 → 쿼리 전달 → 응답 반환의 흐름을 사용한다.
- 그런데 데이터베이스마다 커넥션을 연결하는 방법이 다르다.
- 이를 통일하기 위해서 JDBC 표준 인터페이스가 만들어졌다 (DriverManager)
일반 커넥션과 커넥션 풀의 도입
- 데이터베이스 커넥션을 사용할 때 커넥션 풀을 사용한다
- 직접 커넥션을 연결할 수도 있고, 커넥션 풀을 사용할 수도 있다.
- 커넥션을 조회하는 방법을 추상화한게 DataSource이다
- DriverMangerDataSource
- HikariDataSource
트랜잭션의 도입
- DataSource에서 가져온 커넥션에 대해서 JDBC 코드를 반복해서 작성해야 한다
- 자동커밋과 수동 커밋에 대한 옵션을 직접 다루어야 하고
- 정상 처리, 예외처리에서 커밋과 롤백을 직접 호출해야한다
- 영속성 레이어의 예외처리가 서비스 계층까지 올라오는 문제도 있고
- 여러 개의 서비스 로직을 하나의 트랜잭션으로 처리할 때 커넥션을 직접 전달해야하는 문제도 있다
- 이를 해결하기 위해서 트랜잭션 매니저와 트랜잭션 동기화 매니저가 도입되었다
- 일단 쓰레드로컬을 사용하는 트랜잭션 매니저, 트랜잭션 동기화 매니저를 통해서 커넥션을 조회하기 때문에 파라미터로 커넥션을 전달해야하는 문제가 사라졌다
- 커넥션을 조회한 뒤, 정상, 실패에 따라서 커밋과 롤백을 수행해야하는 로직들은 트랜잭션 템플릿을 통해서 감추어졌다
- 트랜잭션 템플릿에 콜백으로 전달해야하는 비즈니스 로직은 애노테이션 기반의 영속성 처리 방식에서 완전히 고도화되었다
728x90
'DEV > Spring Data JPA' 카테고리의 다른 글
데이터베이스 트랜잭션과 락 2 (0) | 2024.03.19 |
---|---|
데이터베이스 트랜잭션과 락 1 (2) | 2024.03.18 |
Open Session In View (1) | 2024.03.18 |
Entity의 Id를 직접 지정할 때 주의사항 (persist vs merge) (0) | 2023.09.27 |
JpaRepository를 custom해서 사용하는 방법 (0) | 2023.09.24 |