데이터베이스 커넥션
웹 애플리케이션과 DB는 서로 다른 시스템이이기 때문에 데이터베에스 드라이버를 사용하여 DB에 연결해야 한다.
즉, 데이터베이스와 통신을 위한 연결이다.
DB 연결 생명주기
- 데이터베이스 드라이버를 사용하는 데이터베이스 연결 열기.
- 데이터를 읽고 쓰기 위해 TCP 소켓 열기.
- TCP 소켓을 사용하여 데이터 통신.
- 데이터베이스 연결 닫기.
- TCP 소켓 닫기.
데이터베이스 커넥션 풀
User가 웹 애플리케이션에 요청이 들어올때마다 DB 연결하고, 끊어주는 것은 비효율 적인데,
이를 해결하기 위한 것이 커넥션풀이다.
커넥션 풀은 미리 여러개의 DB 커넥션을 풀에 만들어 두고, 필요할 때마다 꺼내 쓰는 것을 말한다.
또한 User와 연결이 끊어지면 풀에 반환하여 보관한다.
커넥션 풀 동작 원리
- Thread가 Connection을 요청하면 Connection Pool의 각자의 방식에 따라 놀고있는 Connection을 찾아 반환.
- 연결 가능한 Connection이 존재하지 않으면, HandOffQueue를 Polling하면서 다른 Thread가 Connection 반납을 기다림.
- 마지막에 사용한 Connection을 반납하면 Connection Pool이 Connection 사용 내역을 기록하고,
HandOffQueue에 반납된 Connection을 삽입한다. - HandOffQueue에 반납된 Connection을 Polling하던 Thread가 획득하고 작업을 이어나간다.
커넥션 풀 사용 장단점
장점
- DB 접속 설정 객체를 미리 만들어 연결하여 메모리에 등록해 놓기 때문에 불필요한 작업이 사라져 Client가 빠르게 접근할 수 있다.
- DB Connection 수를 제한할 수 있어 과도한 접속으로 인한 서버 자원을 아낄 수 있다.
- DB 접속 모듈을 공통화하여 DB 서버의 환경이 바뀌어도 쉽게 유지 보수가 가능하다.
- 연결이 끝난 Connection을 재사용함으로써 새로 객체를 만드는 비용을 줄일 수 있다.
단점
- 동시 접속자가 많을 경우 커넥션이 반납될 때까지 기다려야 한다.
- 너무 많은 커넥션을 생성할 시에는 커넥션도 객체이므로 많은 메모리를 차지하고, 프로그램의 성능을 떨어뜨린다.
커넥션 풀 크기 선택
커넥션 풀은 크다고 무조건 좋은 게 아니고 Connection의 주체는 Thread이므로 Thread도 같이 생각해야 한다.
- Thread Pool이 Connection Pool보다 작게 설정할 경우
- 트랜잭션을 처리하는 Thread가 사용하는 Connection 외에 남는 Connection은 메모리 공간만 차지하게 된다.
- Thread Pool과 Connection Pool 모두 크게 설정할 경우
- Thread 증가로 인해 더 많은 Context Switching이 발생한다.
더보기
컨텍스트 스위칭(Context Switching) : CPU가 한 프로세스에서 다른 프로세스로 전환하는 작업.
'CS > 데이터베이스' 카테고리의 다른 글
조인 (0) | 2024.04.04 |
---|---|
인덱스 (0) | 2024.04.01 |
저장 프로시저, 트리거 (0) | 2024.03.27 |
Schema (0) | 2024.03.26 |
RDB - NoSQL 차이점 (1) | 2024.03.18 |