객체를 생성하는데 드는 비용이 비싼 경우 풀(Pool)을 이용하여 객체를 관리하곤 합니다. 디비커넥션풀(DB Connection Pool)이 대표적이죠.
이 풀에서 객체를 건네줄 때 라운드로빈으로 줄 수도 있고 스택과 같은 전략으로 줄 수도 있습니다. 디비 커넥션 풀의 경우, 둘 중에 어떤 전략이 더 좋을까요?
라운드로빈으로 객체를 반환할 경우를 생각해보겠습니다. 초당 1개의 요청이 들어오고 하나의 트랜잭션 처리에 1초가 걸리는 상황에서, 풀에서 관리하는 최대 객체가 100개라고 하면 아마도 100개 전체가 디비 서버와 연결되어 있을 것 입니다.
반면에 커넥션을 스택으로 처리했다면 디비서버와 연결되어 있는 객체는 단 1개입니다. 전략의 차이가 매우 크죠?
그렇다면 라운드로빈 전략은 쓸 데가 없을까요?
똑같은 디비를 여러 서버에 복제해서 쓰는 경우에 라운드로빈 전략을 활용할 수 있습니다. 하나의 커넥션 풀(스택전략)에서 특정 서버 디비 커넥션을 반환하도록 하고 그런 풀을 모아 다시 '풀의 풀'을 만듭니다. 그리고 이 '풀의 풀'에서 라운드로빈 전략으로 연결 객체를 반환하도록 꾸밉니다.
이런 약간 특수한 경우를 제외하고 디비커넥션풀에서는 스택 전략이 라운드로빈보다 낫습니다. 혹 다른 경우가 있다면 알려주세요. ^^
-------------------
며칠 전에 후배와 주고 받은 이야기를 정리해서 올려봤습니다.
