싱글톤 패턴에 대해서 공부하다가 싱글톤 패턴이 데이터베이스에서 커넥션 풀(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
☺️ 수정이 필요한 부분이나 보충할 부분이 있다면 댓글 부탁드립니다. ☺️
'개발 일지 > 개인 프로젝트' 카테고리의 다른 글
프론트엔드 / 백엔드의 유효성 검증 (0) | 2024.07.03 |
---|---|
솔로 개발자도 CI를 적용해야할까? (1) | 2024.07.01 |