본문 바로가기
개발 공부 중!/Spring

[스프링5 입문] Chap 08. DB 연동

by 김evelyn 2024. 1. 12.

📚 커넥션 풀이란?

  • 여기에 생성된 커넥션은 지속적으로 재사용된다.
  • 한 커넥션이 영원히 유지되는 것은 아니고, 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