~/tech-blog/posts/spring-db-connection-pool — zsh

커넥션 풀과 데이터소스 이해하기

커넥션 이해

과거에는 데이터베이스 커넥션을 획득할 때 복잡한 과정을 거쳤습니다.

  1. 애플리케이션 → DB 드라이버에 커넥션 조회
  2. DB 드라이버 → TCP/IP 커넥션 연결 (3 way handshake)
  3. DB 드라이버 → DB로 정보 전달(ID, PW와 기타 정보)
  4. 인증 완료 → 내부에 DB 세션을 생성
  5. DB에서 커넥션이 생성되었다고 → DB 드라이버에 응답
  6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환합니다.

[문제]

  1. 과정이 너무 복잡합니다.
  2. TCP/IP 커넥션을 새로 생성하기 위한 리소스를 매번 사용해야 합니다.
  3. 애플리케이션을 사용할 때 SQL 실행 + 커넥션을 새로 만드는 시간 = 응답 속도 지연이 발생합니다.

[해결 방법]

커넥션 풀을 미리 만들어서 사용합니다.

커넥션 풀은 미리 DB와 연결해놓고 필요할 때마다 풀에 있는 커넥션을 사용하기 때문에, 신규로 생성할 필요가 없습니다.

이제 애플리케이션 로직은 커넥션 풀에서 받은 커넥션을 사용해 SQL을 전달하고, 그 결과를 받아서 처리합니다.

중요한 것은 완료되면 커넥션을 종료하는 것이 아니라, 연결한 상태를 반환 한다는 것입니다.

그렇다면 DataSource는 어떻게 만들어져 있을까요?

DataSource는 추상화 인터페이스로, 핵심 기능은 커넥션 조회 하나입니다.

이제 필요한 커넥션 풀을 사용할 때마다 추상화 인터페이스를 DI를 통해서 변경해주면 됩니다.


이 글은 인프런 김영한 님의 「스프링 DB 1편 — 데이터 접근 핵심 원리」를 들으며 정리한 노트입니다.

댓글

GitHub 계정으로 로그인하시면 댓글과 질문을 남기실 수 있습니다. 남겨 주신 글은 이 저장소의 Discussions에 쌓입니다.

● main 214 posts UTF-8 LF © 2026 코징 RSS · GitHub