📚 커넥션 풀이란?
- 여기에 생성된 커넥션은 지속적으로 재사용된다.
- 한 커넥션이 영원히 유지되는 것은 아니고, DBMS 설정에 따라 일정 시간 내에 쿼리를 실행하지 않으면 연결을 끊기도 한다. 이런 문제로 일어날 문제 상황을 방지하려면 커넥션 풀의 커넥션이 유효한지 주기적으로 검사해야 한다.
- 이와 관련된 속성
- minEvictableIdleTimeMillis
- timeBetweenEvictionRunsMillis
- testWhileIdle
커넥션 풀을 사용하는 이유는?
- 성능 때문이다. 매번 새로운 커넥션을 생성하면 그때마다 연결시간이 소모된다.
- 커넥션 풀을 사용하면 미리 커넥션을 생성했다가 필요할 때에 커넥션을 꺼내 쓰므로 커넥션을 구하는 시간이 줄어 전체 응답 시간도 짧아진다. -> 커넥션 풀을 초기화할 때 최소 수준의 커넥션을 미리 생성하는 것이 좋다.
📚 Transaction이란?
여러 쿼리를 논리적으로 하나의 작업으로 묶어준다.
한 쿼리라도 실패하면 전체 쿼리를 실패로 간주하고 실패 이전에 실행한 쿼리를 취소한다.
쿼리 실행 결과를 취소하고 DB를 기존 상태로 되돌리는 것을 롤백(rollback)이라 부른다.
📚 @Transaction 애노테이션
트랜잭션 범위를 이 애노테이션을 통해 매우 쉽게 지정할 수 있다.
실행하고 싶은 메서드에 해당 애노테이션만 붙이면 된다.
예시.
@Transactional
public void changePassword(Stringemail, StringoldPwd, StringnewPwd) {
Member member = memberDao.selectByEmail(email);
if (member == null)
throw new MemberNotFoundException();
member.changePassword(oldPwd,newPwd);
memberDao.update(member);
}
스프링은 @Transactional 애노테이션이 붙은 changePassword() 메서드를 동일한 트랜잭션 범위에서 실행한다.
=> 따라서 "memberDao.selectByEmail()에서 실행하는 쿼리 + member.changePassword()에서 실행하는 쿼리"는 한 트랜잭션에 묶인다.
@Transactional 애노테이션이 제대로 동작하려면 다음의 두 가지 내용을 스프링 설정에 추가해야 한다.
1. 플랫폼 트랜잭션 매니저(PlatformTransactionManager) 빈 설정
- PlatformTransactionManager : 스프링이 제공하는 트랜잭션 매니저 인터페이스
- 구현 기술에 상관없이 동일한 방식으로 트랜잭션을 처리하기 위해 이 인터페이스를 사용한다.
2. @Transactional 애노테이션 활성화 설정
- @EnableTransactionManagement 애노테이션은 @Transactional 애노테이션이 붙은 메서드를 트랜젝션 범위에서 실행하는 기능을 활성화한다. 등록된 PlatformTransactionManager을 통해 트랜잭션을 적용한다.
- @Transactional 애노테이션을 적용하기 위해 @EnableTransactionManagement 태그를 사용하면 스프링은 @Transactional 애노테이션이 적용된 빈 객체를 찾아서 알맞은 프록시 객체를 생성한다.
+ 스프링은 @Transactional 애노테이션을 통해 트랜잭션을 처리하기 위해 내부적으로 AOP를 사용한다.
(= 스프링은 프록시를 이용해서 트랜잭션을 처리한다.)
다음 업로드부터는 [스프링 부트 3 백엔드 개발자 되기: 자바편]으로 실습코드와 함께 공부할 예정이다. 스프링의 개념의 경우 이 게시물을 지속적으로 수정하거나 혹은 이 카테고리에 글을 업로드해서 더 깊게 공부할 생각이다.
https://product.kyobobook.co.kr/detail/S000201766024
스프링 부트 3 백엔드 개발자 되기: 자바 편 | 신선영 - 교보문고
스프링 부트 3 백엔드 개발자 되기: 자바 편 | ★ 자바 백엔드 개발자가 되고 싶다면 ★ 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은
product.kyobobook.co.kr
'개발 공부 중! > Spring' 카테고리의 다른 글
[자바 웹개발] Chap 02. 웹과 데이터베이스 (0) | 2024.01.21 |
---|---|
[자바 웹개발] Chap 01. 웹 프로그래밍의 시작 (0) | 2024.01.16 |
[스프링5 입문] Chap 07. AOP 프로그래밍 (2) | 2024.01.08 |
[스프링5 입문] Chap 06. 빈 라이프사이클과 범위 (0) | 2024.01.07 |
[스프링5 입문] Chap 05. 컴포넌트 스캔 (2) | 2024.01.06 |