ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
๐Ÿ”น LLD Series #1: Singleton Design Pattern
Dev.toDev.to
Backend

Global Access Point ํ™•๋ณด๋ฅผ ํ†ตํ•œ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ๋ณด์žฅ ์„ค๊ณ„

๐Ÿ”น LLD Series #1: Singleton Design Pattern

MEGHA JAIN2026๋…„ 5์›” 4์ผ1๋ถ„beginner

Context

Logger๋‚˜ Database Connection๊ณผ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ค‘๋ณต ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•  ํ•„์š”์„ฑ ๋Œ€๋‘. ๋ฌด๋ถ„๋ณ„ํ•œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์œผ๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์™€ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์˜ ๋ณต์žก์„ฑ ํ•ด๊ฒฐ์ด ํ•ต์‹ฌ ๊ณผ์ œ.

Technical Solution

  • Private Constructor ์„ค์ •์„ ํ†ตํ•œ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ง์ ‘์ ์ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์ฐจ๋‹จ
  • Static Instance ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์ƒํƒœ ์œ ์ง€
  • Public Static Method(getInstance)๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ „์—ญ์ ์œผ๋กœ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ์ง„์ž…์  ์„ค๊ณ„
  • Lazy Initialization ๋ฐฉ์‹์„ ์ ์šฉํ•˜์—ฌ ์‹ค์ œ ๊ฐ์ฒด ์š”์ฒญ ์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ตœ์ ํ™” ๊ตฌ์กฐ
  • Multithreaded ํ™˜๊ฒฝ์˜ Race Condition ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ Synchronization ๋˜๋Š” Double-Checked Locking ๋„์ž… ๊ฒ€ํ†  ํ•„์š”

1. ์ƒ์„ฑ์ž๋ฅผ private์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์™„์ „ํžˆ ์ฐจ๋‹จํ–ˆ๋Š”๊ฐ€

2. Multithreaded ํ™˜๊ฒฝ์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ค‘๋ณต ์ƒ์„ฑ๋  ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋Š”๊ฐ€

3. Singleton ์ ์šฉ ์‹œ Unit Test์˜ ๋…๋ฆฝ์„ฑ์„ ์ €ํ•ดํ•˜๋Š” Tight Coupling์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๊ฐ€

์›๋ฌธ ์ฝ๊ธฐ