hmk run dev

커넥션 풀 (connection pool) & keep alive 본문

mysql

커넥션 풀 (connection pool) & keep alive

hmk run dev 2022. 2. 5. 08:34

DB에 접근하는 서비스 처리요청

 

1. 매번 요청마다 connection이 필요하다.

2. 매번 요청마다 connection을 생성한다. - 전체 50% 이상의 공수

3. connection을 통해 요청을 처리한다.

4. connection을 닫는다.

 

매번 요청마다 connection을 생성하면 어플리케이션이 느려지거나 서버가 죽을 수 있다!

 

커넥션 풀 생성 시 고려할 사항

1. 너무 작다면 대기하는 요청이 많아진다.

2. 너무 크면 메모리 낭비가 심해진다.

3. 접속자 수, 서버 부하 등을 고려해 적절한 크기로 조정필요

 

 

Dao를 통해 예를 들어보자

 

1. 한개의 커넥션을 사용할 경우

MemberDao => connection 

MemberDao는 할당된 커넥션 객체를 이용해 DB에 접근 그러나 여러개의 Dao가 같은 커넥션 풀을 공유한다면?

 

MemberDao에선 delete 

ProjectDao에선 update

TaskDao에선 insert

이렇게 여러 작업이 동시에 일어나다 예외가 발생하고 롤백해야하는 상황이 온다면?

롤백은 항상 커넥션 객체 안에서 일어난다 그러므로 커넥션 객체를 공유해 사용한 작업들은 모두 롤백된다.

 

 

2. 개별 커넥션을 사용할 경우

그렇다면 각각 Dao별로 커넥션을 개별적으로 할당한다면??

>> 해당 Dao가 작업을 하지 않을때도 커넥션을 계속 물고 있어서 자원낭비 발생

 

소량의 커넥션 풀을 이용해 대여해주는 기법을 위의 문제들을 해결할 수 있다.

커넥션을 대여 해준다 (pooling) >  DB커넥션을 대여해준다 > DB 커넥션풀 

 

 

 

 

 

 

Comments