백엔드/Spring

[Spring] 커넥션 풀

kwang2134 2024. 8. 27. 18:09
728x90
반응형

데이터베이스 커넥션

  • 일반적으로 데이터베이스 사용 시 커넥션을 매번 획득
  • 데이터베이스 커넥션 획득 과정
    1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회
    2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결 -> 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작 발생
    3. 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달
    4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성
    5. DB는 커넥션 생성이 완료되었다는 응답을 보냄
    6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환
  • 커넥션을 만드는 과정은 복잡하고 시간을 많이 소모
  • 애플리케이션에서도 TCP/IP 연결을 위한 리소스 소모
  • 많은 시간 소모 -> 좋지 않은 사용자 경험

커넥션 풀

  • 복잡하고 시간을 많이 소모하는 커넥션을 미리 생성해 두고 사용
  • 과정
    1. 애플리케이션 시작 시 필요한 만큼 커넥션을 미리 확보하여 풀에 보관
    2. 커넥션 풀에 들어있는 커넥션은 TCP/IP로 연결되어 있는 상태
    3. 커넥션 사용 시 풀에 이미 생성되어있는 커넥션을 객체 참조로 사용
    4. 커넥션을 사용한 후 종료시키지 않고 커넥션 풀에 다시 반납
  • 서버당 커넥션 풀의 개수를 제한하여 관리 -> 데이터베이스 서버 부하 감소
  • 최소 및 최대 풀 크기 지정 가능 
  • 일정 시간 동안 사용되지 않은 커넥션 유효성 주기적 검사 
  • 커넥션 생성 및 종료 오버헤드 감소로 응답 시간 개선
  • 보안
    • 사용자 인증 정보 암호화 저장
    • 커넥션 사용 후 즉시 반납하여 불필요한 데이터베이스 접근 방지

DataSource

  • 커넥션 획득하는 방법을 추상화한 인터페이스
  • DriverManager를 통해 커넥션을 획득하다 커넥션 풀로 변경 시 코드 변경이 필요
  • 사용자는 각 커넥션의 직접적인 코드에 의존하는 것이 아닌 DataSource 인터페이스에만 의존하여 커넥션을 획득
  • 커넥션 풀의 구현 기술을 변경하고 싶다면 구현체만 변경하여 사용
  • 설정과 사용을 분리
    • 설정: URL, USERNAME과 같이 필요한 속성들을 사용해 DataSource를 만드는 과정
    • 사용: 만들어진 DataSource의 getConnection()만 호출하여 사용 -> 설정이 어떤지 알 필요 없음
  • DataSource 보안
    • 애플리케이션 서버 레벨에서의 보안 설정 적용
    • 최소 권한 원칙에 따른 데이터베이스 접근 권한 설정

스프링 DB 1편 - 데이터 접근 핵심 원리 강의 | 김영한 - 인프런 (inflearn.com) 강의 내용 참고

 

728x90

'백엔드 > Spring' 카테고리의 다른 글

[Spring] 예외 처리  (1) 2024.08.30
[Spring] 트랜잭션 Transaction  (4) 2024.08.28
[Spring] JDBC  (0) 2024.08.26
[Spring] 파일 업로드  (0) 2024.08.25
[Spring] 스프링 타입 컨버터 Spring TypeConverter  (0) 2024.08.24