본문 바로가기

개발

왜 자원 풀은 싱글톤 패턴을 사용하는가?

싱글톤 패턴에 대해서 공부하다가 싱글톤 패턴이 데이터베이스에서 커넥션 풀(Connection Pool) / 쓰레드 풀(Thread Pool)에서  활용되는지 궁금해졌다.

 

💡 먼저, 싱글톤 패턴이란?

특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해 주는 패턴입니다.

즉, 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다.

 

💡 자원 풀 - 커넥션 풀(Connection Pool) / 스레드 풀(Thread Pool)이란?

시스템의 자원을 효율적으로 관리하기 위해 사용됩니다.

 

커넥션 풀이란?

- 데이터베이스 커넥션을 미리 생성해두고 필요할 때 재사용함으로써 데이터베이스 연결과 해제에 소모되는 자원과 시간을 절약하는 기술

스레드 풀이란?

- 작업 처리를 위한 스레드들을 미리 생성해 두고 이를 필요에 따라 재사용하는 기법

 

이러한 풀을 사용함으로써 각각의 요청마다 스레드를 생성하거나 데이터베이스 커넥션을 맺고 끊는 비용을 줄일 수 있기 때문입니다.

📝 왜 중요한 요소인가?
자원의 비효율적 사용으로 인해 시스템이 과부화되거나 반응 시간이 길어질 수 있기 때문입니다.

💡 그렇다면 왜 이러한 자원 풀에서 싱글톤을 활용할까요?

싱글톤의 이점 때문입니다.

싱글톤은 최초 한 번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있습니다. 뿐만 아니라 이미 생성된 인스턴스를 활용하니 속도 측면에서도 이점이 있다고 볼 수 있습니다.

자원 풀은 데이터베이스 연결이나 스레드 생성에 많은 비용이 필요합니다. 그렇기 때문에 싱글톤 패턴을 활용하여 미리 만들어놓은 후 재사용하면서 비용을 줄일 수 있습니다. (매번 생성하고 파괴하는것보다 한 번 생성하여 재사용)

📝 비용이 많이 드는 이유
커넥션 생성
- DB와 연결할 때 TCP 통신을 하기 때문, TCP 통신은 커넥션의 안정성과 신뢰성 보장을 위해 연결 시작 시 3-way handshake, 연결 종료 시 4-way handshake 과정을 거치기 때문에 통신 비용이 많이 소모됨

스레드 생성
- 스레드는 프로세스가 할당받은 메모리를 사용, JVM이 할당받은 메모리 내에서 메모리를 재할당하기에 스레드의 생성 비용은 고스란히 JVM 메모리의 소비가 됨

 


📚 참고

[책]헤드 퍼스트 디자인 패턴

https://f-lab.kr/insight/understanding-thread-and-connection-pool

https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

https://colour-my-memories-blue.tistory.com/15

https://velog.io/@jaeyunn_15/JavaKotlin-%EC%9E%90%EB%B0%94-%EC%8A%A4%EB%A0%88%EB%93%9C-%ED%92%80-%EC%83%9D%EC%84%B1-%EB%B9%84%EC%9A%A9


☺️ 수정이 필요한 부분이나 보충할 부분이 있다면 댓글 부탁드립니다. ☺️

 

'개발' 카테고리의 다른 글

솔로 개발자도 CI를 적용해야할까?  (0) 2024.07.01