일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 플라이웨이트
- Item04
- @ControllerAdvice
- restTemplate
- JPA
- Spring Boot
- Proxy Patter
- FCM
- SQL 삽입 공격
- multi module
- deleteById
- springboot
- 데이터베이스
- Effective Java
- Effetive Java
- 트랜잭션
- Web
- NotEmpty
- 이펙티브 자바
- db
- 디자인 패턴
- Service Locator 패턴
- @Valid
- java
- NotBlank
- @MockBean
- @SpyBean
- Connection Pool
- Firebase
- Service Locator
- Today
- Total
NoTimeForDawdling
[DB] Connection Pool 본문
서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재합니다. 만약에 동시 접속자 수를 초과하게 될 경우 어떻게 될까요?
동시 접속자 수를 초과하게 된다면 에러(예외)가 발생할 겁니다. 예외가 발생하면 그 접속자는 더 이상 처리를 하지 못하므로, 사이트 이용자는 다시 접속을 해야 하는 불편함이 있습니다.
이를 해결하기 위해 탄생한 것이 Connection Pool입니다.
Connection Pool이란?
Connection Pool이란 동시 접속자가 가질 수 있는 Connection을 하나로 모아놓고 관리한다는 개념입니다.
누군가 접속하면 자신이 관리하는 Pool에 남아있는 Connection을 제공합니다. 하지만 남아있는 Connection이 없는 경우라면 해당 클라이언트는 대기 상태로 전환시킵니다.
대기하고 있다가 누군가가 다 사용하고 Connection을 반납하여 다시 Pool에 들어오면 대기 상태에 있던 클라이언트에게 순서대로 제공합니다.
즉, 데이터베이스와 연결된 Connection을 미리 만들어서 Pool속에 저장해 두고 있다가 필요할 때 Connection을 Pool에서 쓰고 다시 Pool에게 반환하게 됩니다.
위 그림과 같이 Pool에 미리 생성되어 있는 Connection을 가져다가 사용하고, 사용이 끝나면 Connection을 Pool에 반환합니다.
웹 프로그램에서는 데이터베이스의 환경설정과 연결 관리 등을 따로 XML파일이나 속성 파일을 사용해서 관리하고, 이렇게 설정된 정보를 이름을 사용하여 획득하는 방법을 사용합니다.
웹 컨테이너(WAS)가 실행되면서 Connection객체를 Pool에 생성해 둡니다. 미리 생성해두기 때문에 데이터베이스에 부하를 줄이고 유동적으로 연결을 관리할 수 있습니다.
장점
- 동시 접속자 수가 많은 서버에서 오버헤드를 방지할 수 있습니다.
- 한 번에 생성될 수 있는 Connection을 제어하기 때문에 동시 접속자 수가 몰려도 웹 애플리케이션이 쉽게 다운되지 않습니다.
- Pool속에 미리 Connection이 생성되어 있기 때문에 Connection을 생성하는데 드는 연결 시간이 소비되지 않습니다.
- Connection을 생성하고 닫는 시간이 소모되지 않기 때문에 그만큼 어플리케이션 실행 속도가 빨라집니다.
주의할 점
Connection Pool을 너무 크게 해놓으면 메모리 소모가 크고, 적게 해놓으면 Connection이 많이 발생할 경우 대기시간이 늘어나기 때문에 웹 사이트 동시 접속자 수 등 서버 부하에 따라 크기를 알맞게 조정해야 합니다.
참고
'DB' 카테고리의 다른 글
SQL Injection이란? (0) | 2021.03.24 |
---|---|
SQL vs NoSQL (0) | 2021.03.14 |
DB 데이터 캐싱(Caching) (0) | 2021.03.11 |
ORM(Object Relation Mapping)이란? (0) | 2021.03.10 |
DB 인덱스(Index) (0) | 2021.03.04 |