노 커넥션 풀
애플리케이션에서 데이터베이스 커넥션 획득 과정
1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션 조회
2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결 , 이 과정에서 3 way handshake 같은 TCP/IP 연결 을 위한 네트워크 동작이 발생
3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달
4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성
5. DB는 커넥션 생성이 완료되었다는 응답
6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환
애플리케이션도 TCP/IP 커넥션을 새로 생성하기 위해 리소스를 사용하고, DB도 커넥션과 세션을 생성해야합니다. 이는 SQL 실행하는 시간뿐만 아니라 커넥션을 새로 만드는 시간이 추가되어 결과적으로 응답속도에 영향을 줍니다.
이런 문제를 해결하기 위해 커넥션을 미리 생성해두고 빌렸다가 반납하는 커넥션 풀입니다.
커넥션 풀
커넥션 풀 초기화
애플리케이션 시작 시점에 필요한만큼 커넥션을 미리 확보해 풀에 보관합니다.
이때 커넥션을 연결하는 데에 오래 걸리기 때문에 커넥션을 만드는 과정은 애플리케이션 실행과 별도의 스레드에서 비동기로 진행해 애플리케이션 실행 속도를 늦추지 않습니다.
커넥션 풀에서 커넥션 빌려오기
애플리케이션 로직 실행 후 커넥션 풀에 커넥션 반환
커넥션을 종료하는 것이 아닌 살아있는 상태로 커넥션 풀에 반환합니다.
보통의 커넥션 풀의 구현은 커넥션을 닫는 로직이 실행되면 커넥션 풀에 반환됩니다.
이때 커넥션의 상태가 다음 애플리케이션 로직 시에도 적용되기 때문에 autocommit 등 상태를 초기화하고 닫습니다.
정리
1. 커넥션 생성은 코스트가 크기에 커넥션 풀로 관리합니다.
2. 커넥션 풀 초기화는 애플리케이션 실행하는 쓰레드와 다른 별도의 쓰레드에서 진행합니다.
3. 커넥션 풀에서 빌려온 커넥션을 닫으면 반환되고, 커넥션 상태를 초기화해야합니다.
출처
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard