Back-End/Spring

[Spring DB][커넥션풀과 데이터소스 이해] - 커넥션풀과 데이터소스란 무엇인가?

얄루몬 2022. 6. 22. 15:02

💻본 포스팅은 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 김영한'님의 강의를 듣고 작성되었습니다.

https://inf.run/As6W

 

스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의

www.inflearn.com


목차
1. 커넥션풀(ConnectionPool)
2. 데이터소스(Data source)

1. 커넥션풀(Connection Pool)

커넥션풀 이전의 문제 상황

  • DriveManager를 통해서 데이터베이스에 커넥션을 요청하면 매번 새로운 커넥션을 획득한다. 
  • 이때 커넥션을 계속해서 제한 없이 요청해서 받게 되면 TCP/IP 과정에서 많은 낭비가 일어나고 또한 TCP/IP 연결등의 여러 과정에 의해 시간이 오래 걸려 결국 사용자에게 응답 지연이라는 결과를 가져오게 된다.
  • 이러한 문제점을 해결하기 위해서 사용되는 개념이 커넥션풀이다.

커넥션풀?

  • 커넥션을 미리 제한된 개수만큼 생성해서 커넥션풀에서 관리하는 것을 커넥션풀이라고 한다.
  • 매번 커넥션을 요할 때 새로 생성해서 주는 것은 매우 비효율적인 일이기 때문에 커넥션풀을 사용한다.

기존의 DriveManager를사용한 커넥션 방법

 

기존의 DriveManager를사용한 커넥션 방법

커넥션 풀을 사용한 커넥션 방법

커넥션 풀을 사용한 커넥션 방법

[커넥션풀은 오픈소스로 잘 만들어져 있기 때문에 오픈소스를 활용해서 사용하는 것이 좋다.]

2. 데이터소스(Data source)

커넥션을 얻는 방법은 DriveManager를 사용하거나, 커넥션 풀을 사용하는 등의 다양한 방법이 존재한다.

 

이때 직접 커넥션을 매 요청마다 얻는 DriveManager를 사용하다 효과적인 관리를 위해 커넥션 풀을 사용하고 싶다면 이를 위해서는 어떤 방법을 사용해야할까? (즉, 커넥션 획득 방법을 변경하고 싶을때의 문제다.)

  • 커넥션을 획득하는 방법을 추상화한다.
  • DataSource를 자바에서는 커넥션을 획득하는 방법(DriveManger로 직접 획득, 혹은 오픈소스를 활용한 커넥션 풀을 사용하는 방법 등등.)을 추상화하는 인터페이스로 제공한다.
  • 그러나 DriveManager는 DataSource를 구현하지 않았기 때문에 DriveManagerDataSource를 사용해서 커넥션 획득 방법을 변경해주어야 합니다.

커넥션 획득 방법의 추상화?

말 그대로 커넥션 획득 방법을 하나로 고정해 놓는 것이 아닌 변경하고 싶을 때 구현부만 바꿔서 사용할 수 있게 한다는 의미로 대부분의 개발은 반복되는 코드의 표준화와 추상화 작업을 하는 것이라고 생각하면 편하다!