서버와 DB 연결 방식
1. 요청마다 새 커넥션 맺는 방법
2. 커넥션 풀링 : 서버가 미리 DB와 연결해놓고 연결해놓은 커넥션을 하나씩 맺어주는 방법
커넥션 풀
- 웹서버에서 DB를 사용하기 위해 DB를 연결해놓은 커넥션들을 저장해놓은 장소
- 서버 시작시 DB와 미리 일정 개수의 연결을 확보해 둠. -> 요청이 들어오면 풀에 있는 커넥션 하나 빌려줌. -> 작업 끝나면 커넥션 닫지 않고 반환 -> 다시 풀에 보관
왜쓰냐?
성능, 안정성, 비용 때문에
DataSource (JDBC)
- "DB 커넥션을 어떻게 얻어올까?" 라는 계약(규칙)만 정의하고, 실제 구현은 여러 방식이 가능함.
- JDBC에서는 커넥션 풀을 직접 만들지 않고, DataSource라는 인터페이스를 제공해 추상화함. -> 각 풀 라이브러리가 DataSource를 구현해서 스프링/애플리케이션 서버에서 통일된 방식으로 사용 가능함.
DataSource (JDBC) 구현 방식 3가지
1. 기본 구현 : 단순 커넥션 오브젝트 생성(DriverManager 대체)
2. 연결 풀링 구현 : 연결풀링에 자동으로 참여하는 연결 오브젝트 생성 (HikariCP, DBCP 등)
3. 분산 트랜잭션 구현 : 거의 항상 연결 풀링에 참여하는 연결 오브젝트 생성 (대규모 엔터프라이즈 환경)
커넥션 풀 라이브러리
- DBCP2 (Apache) : 전통적, 안정적, Spring Boot 1.x 기본
- HikariCP (현재표준) : 가장 빠르고 경량, Spring Boot 2.x 기본
- c3p0 (구버전) : 기능은 다양하지만 성능, 안정성 부족, 사실상 유지보수 거의 없음
흐름도
1. 요청 -> 서버에서 커넥션 풀로부터 하나 빌림.
2. SQL 실행 -> 결과 반환
3. 커넥션을 닫지 않고 풀에 반
'공간정보아카데미' 카테고리의 다른 글
Loosely coupled vs Tightly-coupled (0) | 2025.09.03 |
---|---|
스프링에서 Bean은 어떻게 등록되고 주입될까? (XML & Annotation 비교) (0) | 2025.09.02 |
Spring-DI-Bean Annotation (0) | 2025.09.02 |
Spring - DI - Bean Annotation / 커스텀 어노테이션 만들어보기 (1) | 2025.09.01 |
변수 vs 객체 / stack vs heap (0) | 2025.09.01 |