본문 바로가기

Java and Spring

[Spring] 커넥션 풀과 데이터소스

이번 포스팅에서는 커넥션 풀데이터소스에대해 공부하고 사용하는 이유에 대해 알아보려 합니다.

 

커넥션 풀 - 커넥션을 담아두는 장소

커넥션 풀을 알아보기전에 어플리케이션에서 요청이 들어오면 어떤 흐름으로 진행되는지 알아보도록 하겠습니다.

  1. 어플리케이션 요청
  2. DB 드라이버를 통한 커넥션 요청(네트워크 통신 발생)
  3. 커넥션 반환

위와 같은 순서로 흐름이 진행됩니다.

하지만, 커넥션을 얻어오는 작업은 굉장히 무겁고 시간도 많이 들기때문에 매번 사용자의 요청이 있을때마다 커넥션을 만들어서 반환하는 방식은 트래픽이 많은 서비스에서는 적합하지 않습니다.

그래서 커넥션들을 미리 만들어두고 재사용하는 방식을 사용하게 되었는데, 미리 만들어둔 커넥션들을 담아두는 장소가 커넥션 풀입니다.

 

커넥션 풀을 사용하여 어플리케이션 서버가 동작하게 된다면, 아래와 같은 방식으로 돌아가게 됩니다.

  1. 어플리케이션 요청
  2. 커넥션 풀에 생성된 커넥션들을 사용(커넥션을 생성하지않기 때문에 네트워크 비용발생X)
  3. 사용이 완료되면 커넥션을 커넥션 풀에 반납

커넥션 풀을 사용하면, 커넥션을 생성하는 네트워크 통신 시간을 줄일 수 있기때문에 사용자에게 더 빠른 응답을 할 수 있습니다.

 

그렇다면, 커넥션 풀은 어떻게 사용하는 것일까요??

대부분 잘 만들어진 오픈소스를 활용하는데, 예를들어 DBCP, tomcat-jdbc pool, HikariCP 등이 있습니다.

 

데이터 소스 - 커넥션 풀을 사용하기위한 인터페이스

회사에서 커넥션 풀을 사용하기위해 DBCP 오픈소스를 사용하고 있다고 가정해보자!

시간이 지나서 성능상의 이슈로 DBCP -> HiKariCP 오픈소스로 변경하려고하면 기존 코드가 변경되어야 하는 단점이 생기게 됩니다.

 

이렇게 되면, OCP원칙에 위배가 되므로 자바에서는 DataSource라는 인터페이스를 제공하고, 각각의 커넥션 풀 오픈소스들은 인터페이스의 구현체를 제공함으로써 이 문제를 해결하게 됩니다.

즉, 커넥션을 획득하는 방법을 추상화하여, DI 주입만으로 객체지향의 OCP원칙을 지키게 됩니다.

'Java and Spring' 카테고리의 다른 글

Spring Boot에서 AWS Parameter Store 사용  (1) 2023.12.03
CORS(Cross-Origin Resource-Sharing)란?  (0) 2023.10.21
[Java] Message Digest 암호화 방식  (0) 2021.12.22
[Spring] 스프링 AOP  (0) 2021.12.15
[Spring] 빈 후처리기  (0) 2021.12.11