ORM - Design Pattern

KjjeddΒ·2026λ…„ 1μ›” 26일

ORM

λͺ©λ‘ 보기
2/8
post-thumbnail

🧩 Design Patternμ΄λž€?

Design Pattern은 μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ—μ„œ λ°˜λ³΅ν•΄μ„œ λ“±μž₯ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜λŠ” κ²€μ¦λœ 섀계 방식이닀.
ν•œλ§ˆλ””λ‘œ λ§ν•˜λ©΄,

β€œμ΄ μƒν™©μ—μ„œλŠ” 보톡 μ΄λ ‡κ²Œ μ„€κ³„ν•˜λ©΄ μ½”λ“œκ°€ 덜 λ§κ°€μ§„λ‹€β€λΌλŠ” κ²½ν—˜μ˜ 좕적이닀.

🧠 μ™œ 이름이 Design + Pattern일까?

단어 의미
Design 섀계
Pattern λ°˜λ³΅λ˜λŠ” ν˜•νƒœ

즉, Design Pattern은
β€œλ°˜λ³΅μ μœΌλ‘œ λ°œμƒν•˜λŠ” 섀계 λ¬Έμ œμ— λŒ€ν•œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 섀계 ν…œν”Œλ¦Ώβ€μ΄λ‹€.

μ½”λ“œ ν•œ μ€„μ˜ λ¬Έμ œκ°€ μ•„λ‹ˆλΌ,
ꡬ쑰 Β· μ±…μž„ 뢄리 Β· ν™•μž₯성에 λŒ€ν•œ 이야기닀.


🚨 νŒ¨ν„΄ 없이 κ°œλ°œν•˜λ©΄ μƒκΈ°λŠ” 문제

μ•Œλ¦Ό μ‹œμŠ€ν…œμ„ 예둜 λ“€μ–΄λ³΄μž.

  • μ²˜μŒμ—” 이메일 μ•Œλ¦Όλ§Œ ν•„μš”ν•¨
  • β†’ SMS μΆ”κ°€
  • β†’ μΉ΄μΉ΄μ˜€ν†‘ μΆ”κ°€
  • β†’ μŠ¬λž™ μΆ”κ°€
  • β†’ β€œμ‚¬μš©μžκ°€ μ›ν•˜λŠ” μ•Œλ¦Όλ§Œ 선택 κ°€λŠ₯ν•˜κ²Œ ν•΄μ£Όμ„Έμš”β€

이 μš”κ΅¬μ‚¬ν•­μ„ νŒ¨ν„΄ 없이 μ²˜λ¦¬ν•˜λ©΄ 보톡 이런 μƒνƒœκ°€ λœλ‹€.

Order 클래슀
 β”œβ”€ 이메일 λ°œμ†‘ μ½”λ“œ
 β”œβ”€ SMS λ°œμ†‘ μ½”λ“œ
 β”œβ”€ 카카였 λ°œμ†‘ μ½”λ“œ
 β”œβ”€ μŠ¬λž™ λ°œμ†‘ μ½”λ“œ
 β”œβ”€ if λ¬Έ 폭발
 └─ μƒμ„±μž νŒŒλΌλ―Έν„° 폭발

πŸ’₯ 이 ꡬ쑰의 치λͺ…적인 문제

문제 μ„€λͺ…
μˆ˜μ •μ˜ 연쇄 λ°˜μ‘ μ•Œλ¦Ό ν•˜λ‚˜ μΆ”κ°€ν•  λ•Œλ§ˆλ‹€ Order 클래슀 μˆ˜μ •
ν…ŒμŠ€νŠΈ μ§€μ˜₯ μ΄λ©”μΌλ§Œ ν…ŒμŠ€νŠΈν•΄λ„ 전체 클래슀 ν•„μš”
μž¬μ‚¬μš© λΆˆκ°€ SMS κΈ°λŠ₯만 λ–Όμ–΄μ„œ μ“Έ 수 μ—†μŒ
μ±…μž„ κ³Όλ‹€ Orderκ°€ λ„ˆλ¬΄ λ§Žμ€ 역할을 가짐

πŸ‘‰ ν™•μž₯ λΆˆκ°€λŠ₯ν•œ ꡬ쑰가 됨.


✨ Design Pattern 적용: Observer Pattern

Observer Pattern의 핡심은 λ¬Έλ²•μ΄λ‚˜ 클래슀 ꡬ쑰가 μ•„λ‹ˆλ‹€.
β€œμ±…μž„μ„ μ–΄λ””κΉŒμ§€ μ•Œκ²Œ ν•  것인가”에 λŒ€ν•œ μ‚¬κ³ λ°©μ‹μ˜ μ „ν™˜μ΄λ‹€.

β€œλ³€ν™”κ°€ λ°œμƒν–ˆμ„ λ•Œ,
κ·Έ λ³€ν™”λ₯Ό μ•Œμ•„μ•Ό ν•˜λŠ” λŒ€μƒλ“€μ—κ²Œλ§Œ μžλ™μœΌλ‘œ μ•Œλ €μ£Όμžβ€

❌ νŒ¨ν„΄ λ„μž… μ „: μ™œ μ½”λ“œκ°€ μ§€μ˜₯이 λ˜λŠ”κ°€

λ””μžμΈ νŒ¨ν„΄μ΄ 없을 λ•Œ, λŒ€λΆ€λΆ„μ˜ μ½”λ“œλŠ” μ΄λ ‡κ²Œ μ‹œμž‘ν•œλ‹€.

  • Orderκ°€ 이메일을 직접 보낸닀
  • Orderκ°€ SMS도 직접 보낸닀
  • Orderκ°€ μΉ΄μΉ΄μ˜€ν†‘, μŠ¬λž™, ν‘Έμ‹œ μ•Œλ¦ΌκΉŒμ§€ μ „λΆ€ μ•ˆλ‹€

즉, Order 클래슀 ν•˜λ‚˜κ°€ λͺ¨λ“  μ•Œλ¦Ό 방식을 β€œλ‹€ μ•Œκ³ β€ μžˆλ‹€.

Order
 β”œβ”€ 이메일 λ°œμ†‘ μ½”λ“œ
 β”œβ”€ SMS λ°œμ†‘ μ½”λ“œ
 β”œβ”€ μΉ΄μΉ΄μ˜€ν†‘ λ°œμ†‘ μ½”λ“œ
 β”œβ”€ μŠ¬λž™ λ°œμ†‘ μ½”λ“œ
 └─ 쑰건문 (use_email, use_sms, use_kakao, ...)

이 ꡬ쑰의 μ§„μ§œ λ¬Έμ œλŠ” λ‹¨μˆœνžˆ μ½”λ“œκ°€ κΈΈλ‹€λŠ” 게 μ•„λ‹ˆλ‹€.

  • πŸ”§ μ•Œλ¦Ό ν•˜λ‚˜ μΆ”κ°€ β†’ Order 클래슀 μˆ˜μ •
  • πŸ§ͺ μ΄λ©”μΌλ§Œ ν…ŒμŠ€νŠΈν•˜κ³  싢어도 Order 전체 ν•„μš”
  • ♻️ SMS κΈ°λŠ₯만 λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ μž¬μ‚¬μš© λΆˆκ°€

즉, β€œλ³€κ²½β€μ΄ Orderλ₯Ό 계속 λ§κ°€λœ¨λ¦°λ‹€.


βœ… νŒ¨ν„΄ λ„μž… ν›„

Observer Pattern을 μ μš©ν•˜λ©΄ 질문 μžμ²΄κ°€ 바뀐닀.

β€œOrderκ°€ μ•Œλ¦Όμ„ μ–΄λ–»κ²Œ 보내야 ν•˜μ§€?” ❌
β€œλˆ„κ°€ 이 λ³€ν™”λ₯Ό μ•Œμ•„μ•Ό ν•˜μ§€?” βœ…

OrderλŠ” 이제 μ•Œλ¦Ό 방식이 무엇인지 μ „ν˜€ λͺ¨λ₯Έλ‹€.
κ·Έμ €β€œκ΄€μ‹¬ μžˆλŠ” λŒ€μƒ λͺ©λ‘β€λ§Œ κ΄€λ¦¬ν•œλ‹€.

πŸ“ ꡬ쑰 κ°œλ… (Observer Pattern)

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚    Order     β”‚
        β”‚  (Subject)   β”‚
        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ notify()
        β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚        Observers      β”‚
        β”‚  (send() κ·œμΉ™λ§Œ 곡유)    β”‚
        β”‚                       β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚   Email    β”‚        β”‚   Kakao    β”‚
  β”‚ Notifier   β”‚        β”‚ Notifier   β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • OrderλŠ” send()κ°€ μžˆλ‹€λŠ” μ‚¬μ‹€λ§Œ μ•ˆλ‹€
  • 각 μ•Œλ¦Όμ€ 자기 λ°©μ‹λŒ€λ‘œλ§Œ κ΅¬ν˜„ν•œλ‹€
  • μƒˆ μ•Œλ¦Ό μΆ”κ°€ μ‹œ Order μˆ˜μ • ❌

πŸ”₯ λ³€ν™” 포인트

ꡬ뢄 νŒ¨ν„΄ 미적용 Observer Pattern 적용
μƒˆ μ•Œλ¦Ό μΆ”κ°€ Order λ‚΄λΆ€ μˆ˜μ • μƒˆ 클래슀 μΆ”κ°€λ§Œ
Order μ±…μž„ μ£Όλ¬Έ + μ•Œλ¦Ό μ „λΆ€ 주문만 λ‹΄λ‹Ή
ν…ŒμŠ€νŠΈ 전체 클래슀 ν•„μš” μ•Œλ¦Ό λ‹¨μœ„ ν…ŒμŠ€νŠΈ κ°€λŠ₯
ν™•μž₯μ„± μš”κ΅¬μ‚¬ν•­ μΆ”κ°€κ°€ 곡포 μš”κ΅¬μ‚¬ν•­ μΆ”κ°€κ°€ 일상

🧠 핡심 정리

  • Observer Pattern은 μ•Œλ¦Ό νŒ¨ν„΄μ΄ μ•„λ‹ˆλ‹€
  • λ³€κ²½λ˜λŠ” λŒ€μƒκ³Ό, κ·Έ λ³€ν™”λ₯Ό μ†ŒλΉ„ν•˜λŠ” λŒ€μƒμ„ λΆ„λ¦¬ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€
  • β€œλˆ„κ°€ λˆ„κ΅¬λ₯Ό μ•Œμ•„μ•Ό ν•˜λŠ”κ°€β€λ₯Ό λŠμ–΄λ‚΄λŠ” 섀계닀

κ·Έλž˜μ„œ Design Pattern은 μ½”λ“œλ₯Ό 예쁘게 λ§Œλ“œλŠ” 기술이 μ•„λ‹ˆλΌ,
미래의 λ³€κ²½ λΉ„μš©μ„ 쀄이기 μœ„ν•œ λ³΄ν—˜μ΄λ‹€.

νŒ¨ν„΄μ„ μ™Έμš°λŠ” 것보닀,
β€œμ΄ μ½”λ“œμ—μ„œ 변경이 μ–΄λ””λ‘œ μ „νŒŒλ˜λŠ”κ°€?”λ₯Ό λ¨Όμ € 보자.

πŸ” νŒ¨ν„΄ 적용 ν›„ λ‹¬λΌμ§€λŠ” 점

Before After
κΈ°λŠ₯ μΆ”κ°€ = κΈ°μ‘΄ μ½”λ“œ μˆ˜μ • κΈ°λŠ₯ μΆ”κ°€ = 클래슀 μΆ”κ°€
Orderκ°€ λͺ¨λ“  κ±Έ μ•Ž OrderλŠ” μ•Œλ¦Όμ„ λͺ¨λ¦„
if λ¬Έ 폭탄 λ‹€ν˜•μ„± ν™œμš©
ν…ŒμŠ€νŠΈ 어렀움 κ°œλ³„ ν…ŒμŠ€νŠΈ κ°€λŠ₯

πŸ‘‰ 이게 λ°”λ‘œ ν™•μž₯μ—λŠ” μ—΄λ € 있고, μˆ˜μ •μ—λŠ” λ‹«ν˜€ μžˆλŠ” ꡬ쑰
(OCP: Open-Closed Principle)λ‹€.


🧠 Design Pattern을 λŒ€ν•˜λŠ” μ˜¬λ°”λ₯Έ μžμ„Έ

  • ❌ νŒ¨ν„΄ 이름 μ™Έμš°κΈ°
  • ❌ 무쑰건 νŒ¨ν„΄ μ μš©ν•˜κΈ°

λŒ€μ‹  μ΄λ ‡κ²Œ 생각해야 ν•œλ‹€.

β€œμ΄ μ½”λ“œκ°€ μ™œ 점점 μˆ˜μ •ν•˜κΈ° μ–΄λ €μ›Œμ§ˆκΉŒ?”
β€œμ±…μž„μ΄ ν•œ 곳에 λͺ°λ € μžˆμ§€ μ•Šμ€κ°€?”

νŒ¨ν„΄μ€ λͺ©μ μ΄ μ•„λ‹ˆλΌ μˆ˜λ‹¨μ΄λ‹€.
λ¬Έμ œκ°€ 보일 λ•Œ, ν•΄κ²°μ±…μœΌλ‘œ κΊΌλ‚΄ μ“°λŠ” 도ꡬ닀.


πŸ“š 자주 λ“±μž₯ν•˜λŠ” Design Pattern

νŒ¨ν„΄ 핡심 κ°œλ…
Singleton μ‹œμŠ€ν…œ μ „μ²΄μ—μ„œ ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•˜λŠ” 객체
Factory 객체 생성을 ν•œ κ³³μ—μ„œ μ±…μž„μ§
Observer μƒνƒœ λ³€ν™” μ•Œλ¦Ό ꡬ쑰
Strategy μ•Œκ³ λ¦¬μ¦˜μ„ ꡐ체 κ°€λŠ₯ν•˜κ²Œ 뢄리
Decorator κΈ°λŠ₯을 λ§λΆ™μ΄λŠ” ꡬ쑰

βœ… 정리

  • Design Pattern은 κ²½ν—˜μ΄ μΆ•μ λœ 섀계 해법
  • μ½”λ“œλ₯Ό β€œλŒμ•„κ°€κ²Œβ€ λ§Œλ“œλŠ” 기술이 μ•„λ‹˜
  • μ½”λ“œλ₯Ό 였래 μ‚΄κ²Œ λ§Œλ“œλŠ” 기술
  • νŒ¨ν„΄λ³΄λ‹€ μ€‘μš”ν•œ 건 문제 인식 λŠ₯λ ₯

νŒ¨ν„΄μ€ μ™Έμš°λŠ” 게 μ•„λ‹ˆλΌ,
β€œμ•„, 이 μƒν™©μ΄κ΅¬λ‚˜β€ ν•˜κ³  λ– μ˜¬λ¦¬λŠ” μˆœκ°„μ— μ˜λ―Έκ°€ μžˆλ‹€.

profile
Gongbuhaja

0개의 λŒ“κΈ€