λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Project ESG+AI/Tech Basics

32일차. IT κ°œλ… 정리

by GreenJin_S2 2025. 11. 21.

 

SOLID μ›μΉ™μ΄λž€?

SOLIDλŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ—μ„œ μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성을 높이기 μœ„ν•΄ μ œμ•ˆλœ 5κ°€μ§€ 섀계 원칙을 λ§ν•©λ‹ˆλ‹€.
λ‘œλ²„νŠΈ C. λ§ˆν‹΄(Robert C. Martin, ν”νžˆ '클린 μ½”λ“œ'의 μ €μž)이 μ •λ¦¬ν•œ κ°œλ…μž…λ‹ˆλ‹€.

μ•„λž˜μ—μ„œλŠ” μš”μ•½ → 상세 μ„€λͺ… → μ˜ˆμ‹œ ꡬ쑰둜 κΉ”λ”ν•˜κ²Œ 정리해 λ“œλ¦΄κ²Œμš”.


πŸ”Ž SOLID 5λŒ€ 원칙 μš”μ•½

약어원칙 이름핡심 의미
S 단일 μ±…μž„ 원칙 (Single Responsibility Principle) ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€
O 개방-폐쇄 원칙 (Open/Closed Principle) κΈ°λŠ₯은 ν™•μž₯μ—λŠ” μ—΄λ € 있고, λ³€κ²½μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€
L λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 (Liskov Substitution Principle) μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ νƒ€μž…μ„ λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€
I μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 (Interface Segregation Principle) λΆˆν•„μš”ν•œ κΈ°λŠ₯이 ν¬ν•¨λœ 크고 λš±λš±ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‚˜λˆ λΌ
D 의쑴 μ—­μ „ 원칙 (Dependency Inversion Principle) μƒμœ„ λͺ¨λ“ˆμ€ ν•˜μœ„ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜λ©΄ μ•ˆ 되고, 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€

 

S: 단일 μ±…μž„ 원칙 (SRP - Single Responsibility Principle)

이 원칙은 "ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜, 였직 ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€"κ³  μ΄μ•ΌκΈ°ν•΄μš”. 즉, 클래슀λ₯Ό λ³€κ²½ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” 단 ν•˜λ‚˜λΏμ΄μ–΄μ•Ό ν•œλ‹€λŠ” λœ»μž…λ‹ˆλ‹€.  λ§Œμ•½ ν•œ ν΄λž˜μŠ€κ°€ λ„ˆλ¬΄ λ§Žμ€ μ±…μž„μ„ μ§€κ²Œ 되면, ν•œ κΈ°λŠ₯을 μˆ˜μ •ν–ˆμ„ λ•Œ μ˜λ„μΉ˜ μ•Šκ²Œ λ‹€λ₯Έ κΈ°λŠ₯μ—κΉŒμ§€ 영ν–₯을 쀄 수 μžˆμ–΄μ„œ μœ μ§€λ³΄μˆ˜κ°€ 맀우 μ–΄λ €μ›Œμ§ˆ 수 μžˆμ–΄μš”. λ”°λΌμ„œ μ±…μž„λ“€μ„ 잘게 μͺΌκ°œμ–΄ λΆ„λ¦¬ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹΅λ‹ˆλ‹€.  μ˜ˆλ₯Ό λ“€μ–΄, μ€ν–‰μ˜ 금리 계산 ν΄λž˜μŠ€κ°€ μˆ˜μ‹ (예금) 금리 계산과 μ—¬μ‹ (λŒ€μΆœ) 금리 계산을 λ™μ‹œμ— λ‹΄λ‹Ήν•˜λŠ” λŒ€μ‹ , 각각의 μ±…μž„μ„ λΆ„λ¦¬ν•˜μ—¬ κ°œλ³„ 클래슀둜 λ§Œλ“œλŠ” 것이 SRPλ₯Ό 잘 λ”°λ₯΄λŠ” 방법이 될 수 μžˆμ–΄μš”. 

O: 개방-폐쇄 원칙 (OCP - Open-Closed Principle)

"ν™•μž₯μ—λŠ” μ—΄λ € μžˆμ–΄μ•Ό ν•˜κ³ , λ³€κ²½μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€"λŠ” μ›μΉ™μž…λ‹ˆλ‹€.  μ΄ 말은 κΈ°μ‘΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ λ³€κ²½ν•  수 μžˆλ„λ‘ 섀계해야 ν•œλ‹€λŠ” μ˜λ―Έμ˜ˆμš”. μƒˆλ‘œμš΄ μš”κ΅¬μ‚¬ν•­μ΄ λ°œμƒν–ˆμ„ λ•Œ κΈ°μ‘΄ μ½”λ“œλ₯Ό κ±΄λ“œλ¦¬μ§€ μ•Šκ³  μƒˆλ‘œμš΄ μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆλ„λ‘ μ„€κ³„ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.

L: λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 (LSP - Liskov Substitution Principle)

"μžμ‹ ν΄λž˜μŠ€λŠ” μ–Έμ œλ‚˜ λΆ€λͺ¨ 클래슀λ₯Ό λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€"λŠ” μ›μΉ™μ΄μ—μš”. 즉, λΆ€λͺ¨ 클래슀의 객체가 λ“€μ–΄κ°ˆ μžλ¦¬μ— μ–΄λ–€ μžμ‹ 클래슀의 객체λ₯Ό 넣어도 ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ΄ μ›λž˜ μ˜λ„λŒ€λ‘œ λ¬Έμ œμ—†μ΄ μž‘λ™ν•΄μ•Ό ν•œλ‹€λŠ” λœ»μ΄λžλ‹ˆλ‹€. λ‹€ν˜•μ„±μ„ μ˜¬λ°”λ₯΄κ²Œ ν™œμš©ν•˜κΈ° μœ„ν•œ μ€‘μš”ν•œ 지침이죠.

I: μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 (ISP - Interface Segregation Principle)

"ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ λœλ‹€"λŠ” μ›μΉ™μž…λ‹ˆλ‹€. λ‹€μ‹œ 말해, μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ„ˆλ¬΄ 크고 λ²”μš©μ μΈ κ²ƒμœΌλ‘œ λ§Œλ“€κΈ°λ³΄λ‹€λŠ”, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš©λ„μ— 맞게 μž‘κ³  ꡬ체적인 μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ λΆˆν•„μš”ν•œ κΈ°λŠ₯κΉŒμ§€ ν•œκΊΌλ²ˆμ— ν¬ν•¨λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•˜μ§€ μ•ŠκΈ° μœ„ν•¨μ΄μ—μš”.

D: μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙 (DIP - Dependency Inversion Principle)

이 원칙은 "κ³ μˆ˜μ€€ λͺ¨λ“ˆμ€ μ €μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ 되며, 이듀 λͺ¨λ‘ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€. λ˜ν•œ μΆ”μƒν™”λŠ” μ„ΈλΆ€ 사항에 μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ 되며, μ„ΈλΆ€ 사항은 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€"κ³  μ„€λͺ…ν•©λ‹ˆλ‹€.  μ‰½κ²Œ 말해, ꡬ체적인 κ΅¬ν˜„μ²΄(μ €μˆ˜μ€€ λͺ¨λ“ˆ)λ³΄λ‹€λŠ” 좔상적인 κ°œλ…(μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 클래슀)에 μ˜μ‘΄ν•˜μ—¬ 섀계해야 ν•œλ‹€λŠ” λœ»μ΄μ—μš”. 예λ₯Ό λ“€μ–΄, 컀피λ₯Ό μ œμ‘°ν•˜λŠ” κ³ μˆ˜μ€€ ν΄λž˜μŠ€κ°€ νŠΉμ • λΈŒλžœλ“œμ˜ 컀피 λ¨Έμ‹ μ΄λΌλŠ” μ €μˆ˜μ€€ κ΅¬ν˜„μ²΄μ— 직접 μ˜μ‘΄ν•˜κΈ°λ³΄λ‹€λŠ”, '컀피 μΆ”μΆœ μΈν„°νŽ˜μ΄μŠ€'와 같은 μΆ”μƒν™”λœ κ°œλ…μ— μ˜μ‘΄ν•˜λ©΄ λ‚˜μ€‘μ— λ‹€λ₯Έ μ’…λ₯˜μ˜ 컀피 λ¨Έμ‹ μœΌλ‘œ ꡐ체해도 κ³ μˆ˜μ€€ ν΄λž˜μŠ€λŠ” λ³€κ²½ 없이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

이 SOLID 원칙듀은 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 기반이 λ˜λŠ” μ€‘μš”ν•œ κ°œλ…λ“€

 


πŸ“˜ 원칙별 μžμ„Έν•œ μ„€λͺ…

1) 단일 μ±…μž„ 원칙 (SRP)

ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 일을 ν•˜λ©΄ 결합도가 λ†’μ•„μ§€κ³  μˆ˜μ • μ‹œ λ‹€λ₯Έ κΈ°λŠ₯κΉŒμ§€ 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€.
ν•œ ν΄λž˜μŠ€λŠ” ν•œ κ°€μ§€ μ—­ν• λ§Œ!

μ˜ˆμ‹œ:
Order ν΄λž˜μŠ€κ°€ μ£Όλ¬Έ 생성 + 결제 처리 + 영수증 좜λ ₯κΉŒμ§€ λ‹΄λ‹Ήν•˜λ©΄ X
→ Order, PaymentService, ReceiptPrinter λ“±μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 λ°”λžŒμ§


2) 개방-폐쇄 원칙 (OCP)

κΈ°λŠ₯을 ν™•μž₯ν•΄μ•Ό ν•˜λ©΄ κΈ°μ‘΄ μ½”λ“œλ₯Ό λœ―μ–΄κ³ μΉ˜λŠ” λŒ€μ‹ , μƒˆ 클래슀λ₯Ό μΆ”κ°€ν•΄μ„œ ν™•μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ 섀계해야 ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

μ˜ˆμ‹œ:
μƒˆλ‘œμš΄ 할인 μ •μ±… μΆ”κ°€ μ‹œ κΈ°μ‘΄ DiscountServiceλ₯Ό μˆ˜μ •ν•˜λŠ” λŒ€μ‹ 
DiscountPolicy μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€κ³  NewYearDiscount, VIPDiscount 등을 μΆ”κ°€


3) λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 (LSP)

λΆ€λͺ¨ 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œκ°€ μžμ‹ 클래슀둜 바꿔도 정상 μž‘λ™ν•΄μ•Ό ν•œλ‹€λŠ” μ›μΉ™μž…λ‹ˆλ‹€.

μ˜ˆμ‹œ:
Bird ν΄λž˜μŠ€μ— fly()κ°€ μžˆλŠ”λ°, λ‚ μ§€ λͺ»ν•˜λŠ” Penguin이 Birdλ₯Ό μƒμ†ν•˜λ©΄? → LSP μœ„λ°˜
→ μΈν„°νŽ˜μ΄μŠ€ 뢄리 ν•„μš”


4) μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 (ISP)

"ν•„μš” μ—†λŠ” κΈ°λŠ₯κΉŒμ§€ μ–΅μ§€λ‘œ κ΅¬ν˜„ν•˜κ²Œ ν•˜μ§€ 마라."
즉, 큰 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ—¬λŸ¬ 개의 μž‘μ€ μΈν„°νŽ˜μ΄μŠ€λ‘œ λ‚˜λˆ„λΌλŠ” μ›μΉ™μž…λ‹ˆλ‹€.

μ˜ˆμ‹œ:
Animal μΈν„°νŽ˜μ΄μŠ€ μ•ˆμ— run(), fly(), swim()이 λͺ¨λ‘ 있으면
λŒ€λΆ€λΆ„μ˜ 동물은 λΆˆν•„μš”ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ²Œ λ©λ‹ˆλ‹€.
→ Runnable, Flyable, Swimmable둜 λΆ„λ¦¬ν•˜λŠ” 것이 이상적


5) 의쑴 μ—­μ „ 원칙 (DIP)

μƒμœ„ λͺ¨λ“ˆ(λΉ„μ¦ˆλ‹ˆμŠ€ 둜직)이 ν•˜μœ„ λͺ¨λ“ˆ(κ΅¬ν˜„ 세뢀사항)에 μ˜μ‘΄ν•˜λ©΄ 변경에 취약해짐.
κ³ μˆ˜μ€€μ€ μ €μˆ˜μ€€μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³  λ‘˜ λ‹€ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€λŠ” μ›μΉ™μž…λ‹ˆλ‹€.

μ˜ˆμ‹œ:
PaymentServiceκ°€ KakaoPay ν΄λž˜μŠ€μ— 직접 μ˜μ‘΄ν•˜λ©΄ λ‹€λ₯Έ 결제 μˆ˜λ‹¨ μΆ”κ°€κ°€ 어렀움
→ PaymentGateway μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€κ³ ,
KakaoPay, NaverPay, CreditCard 등이 이λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ 섀계


πŸ’¬ ν•œ μ€„λ‘œ μ •λ¦¬ν•˜λ©΄?

SOLIDλŠ” μ½”λ“œκ°€ 컀져도 μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½κ²Œ λ§Œλ“œλŠ” 객체지ν–₯ μ„€κ³„μ˜ κΈ°λ³Έ μ² ν•™μž…λ‹ˆλ‹€.

 

 


 

미듀웨어(Middleware)λž€?

λ―Έλ“€μ›¨μ–΄λŠ” μ΄λ¦„μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ '쀑간(Middle)'κ³Ό 'μ†Œν”„νŠΈμ›¨μ–΄(Software)'의 ν•©μ„±μ–΄μž…λ‹ˆλ‹€. 운영 μ²΄μ œμ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 사이에 μ‘΄μž¬ν•˜λ©°, λΆ„μ‚° μ»΄ν“¨νŒ… ν™˜κ²½μ—μ„œ μ—¬λŸ¬ μ»΄ν“¨ν„°λ‚˜ μ‹œμŠ€ν…œμ΄ μ„œλ‘œ μ›ν™œν•˜κ²Œ μ—°κ²°λ˜κ³  데이터λ₯Ό 주고받을 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 맀개체 역할을 ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ˆμš”. 

μ‰½κ²Œ λΉ„μœ ν•˜μžλ©΄, μ„œλ‘œ λ‹€λ₯Έ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 두 μ‚¬λžŒμ΄ λŒ€ν™”ν•  λ•Œ ν†΅μ—­μ‚¬λ‚˜ λ²ˆμ—­κΈ°κ°€ ν•„μš”ν•œ 것과 λΉ„μŠ·ν•΄μš”. 각기 λ‹€λ₯Έ κΈ°λŠ₯을 ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ»΄ν¬λ„ŒνŠΈλ‚˜ μ‹œμŠ€ν…œμ΄ λ³΅μž‘ν•œ κ³Όμ • 없이 μ†Œν†΅ν•  수 μžˆλ„λ‘ μ€‘κ°„μ—μ„œ λ²ˆμ—­, λ³€ν™˜, μ€‘κ°œ λ“±μ˜ 역할을 μˆ˜ν–‰ν•˜λŠ” 것이죠.

λ―Έλ“€μ›¨μ–΄μ˜ μ£Όμš” μ—­ν• 

λ―Έλ“€μ›¨μ–΄λŠ” 단지 μ—°κ²°λ§Œ ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±κ³Ό νš¨μœ¨μ„±μ„ λ†’μ΄λŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

  1. 데이터 κ΅ν™˜ 및 톡합: μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œμ΄λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 데이터λ₯Ό μ‰½κ²Œ μ£Όκ³ λ°›κ³  톡합할 수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€. 
  2. λΆ„μ‚° μ»΄ν“¨νŒ… 지원: λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ—°κ²°λœ μ—¬λŸ¬ 컴퓨터듀 κ°„μ˜ 톡신을 κ΄€λ¦¬ν•˜λ©°, λΆ„μ‚°λœ ν™˜κ²½μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ•ˆμ „ν•˜κ³  효율적으둜 μž‘λ™ν•˜λ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€. 
  3. λ³΄μ•ˆ 및 인증: λ°μ΄ν„°μ˜ λ³΄μ•ˆμ„ κ°•ν™”ν•˜κ³ , μ‚¬μš©μžλ‚˜ μ‹œμŠ€ν…œμ˜ μ ‘κ·Ό κΆŒν•œμ„ κ΄€λ¦¬ν•˜λŠ” 역할을 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  4. νŠΈλžœμž­μ…˜ 관리: μ—¬λŸ¬ μž‘μ—…μ΄ ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ μ²˜λ¦¬λ˜λ„λ‘ ν•˜μ—¬ λ°μ΄ν„°μ˜ 무결성을 μœ μ§€ν•˜λŠ” 데 κΈ°μ—¬ν•©λ‹ˆλ‹€.
  5. λ©”μ‹œμ§•: λΉ„λ™κΈ°μ μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ μ‹œμŠ€ν…œ κ°„μ˜ μœ μ—°ν•œ 연동을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.
  6. ν”Œλž«νΌ 지원: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ μ§€μ›ν•˜κΈ° μœ„ν•œ κ΄€λ¦¬ν˜• 도ꡬ 및 λ¦¬μ†ŒμŠ€ 체계λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. λŸ°νƒ€μž„ ν™˜κ²½, μ›Ή μ„œλ²„, μ½˜ν…μΈ  관리 μ‹œμŠ€ν…œ(CMS), μ»¨ν…Œμ΄λ„ˆ 등이 κ·Έ μ˜ˆμ‹œκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€. 

λ―Έλ“€μ›¨μ–΄μ˜ μ˜ˆμ‹œ

μΌμƒμ—μ„œ ν”νžˆ μ ‘ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€μ—λ„ 미듀웨어가 많이 ν™œμš©λ˜κ³  μžˆμ–΄μš”.

  • λ°μ΄ν„°λ² μ΄μŠ€ 미듀웨어: λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μ΄μ—μ„œ 데이터λ₯Ό μ£Όκ³ λ°›λŠ” 역할을 ν•©λ‹ˆλ‹€. (예: JDBC, ODBC)
  • μ›Ή 미듀웨어(WAS - Web Application Server): μ›Ή μ„œλ²„μ™€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μ΄μ—μ„œ 동적인 μ½˜ν…μΈ λ₯Ό μ²˜λ¦¬ν•˜κ³  λ°μ΄ν„°λ² μ΄μŠ€ 연동 등을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€. (예: Apache Tomcat, Nginx, Node.js의 Express.js 같은 ν”„λ ˆμž„μ›Œν¬λ„ 넓은 μ˜λ―Έμ—μ„œ 미듀웨어 역할을 ν•©λ‹ˆλ‹€.)
  • λ©”μ‹œμ§€ μ§€ν–₯ 미듀웨어 (MOM - Message-Oriented Middleware): μ‹œμŠ€ν…œ κ°„μ˜ 비동기 λ©”μ‹œμ§€ 톡신을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€. (예: Apache Kafka, RabbitMQ)

μŠ€ν† μ–΄μ—μ„œ κ²Œμ΄νŠΈμ›¨μ΄λ‘œ 연결할건데 μœ λ ˆμΉ΄λž‘ λ””μŠ€μ»€λ²„λ¦¬ 쀑에 μ–΄λ””λ‘œ μ—°κ²°ν•΄μ•Ό μ’‹μ•„?

 

βœ… κ²°λ‘ : μŠ€ν† μ–΄λŠ” λ””μŠ€μ»€λ²„λ¦¬ μ„œλ²„(Eureka Server) 에 λ“±λ‘ν•˜κ³ 

βœ… κ²Œμ΄νŠΈμ›¨μ΄λŠ” λ””μŠ€μ»€λ²„λ¦¬(Eureka) λ₯Ό 톡해 μŠ€ν† μ–΄λ₯Ό μ°ΎλŠ”λ‹€.

즉 μ—°κ²° λŒ€μƒμ€ 유레카(Eureka Server) μ•Ό.


πŸ”Ž μ™œ Eureka = Discovery Server 인가?

  • “유레카(Eureka)”λŠ” λ„·ν”Œλ¦­μŠ€μ—μ„œ λ§Œλ“  μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬ μ„œλ²„μ˜ 이름이야.
  • “λ””μŠ€μ»€λ²„λ¦¬”λŠ” κ°œλ…μ΄κ³ , EurekaλŠ” κ·Έκ²ƒμ˜ κ΅¬ν˜„μ²΄μ•Ό.

λ”°λΌμ„œ “μœ λ ˆμΉ΄μ™€ λ””μŠ€μ»€λ²„λ¦¬ 쀑에 어디에 μ—°κ²°ν•˜λƒ?”λŠ” μ§ˆλ¬Έμ€
사싀상 유레카 μ„œλ²„μ— λ“±λ‘ν•˜λŠ” 것이 λ§žλ‹€λŠ” μ˜λ―Έκ°€ 돼.

 

λŒ€μƒν•΄μ•Ό ν•˜λŠ” 일
Store μ„œλΉ„μŠ€ Eureka(=Discovery Server)에 “등둝”
Gateway Eurekaμ—μ„œ Store μ„œλΉ„μŠ€ μ£Όμ†Œ “쑰회” ν›„ λΌμš°νŒ…

πŸ‘‰ κ·Έλž˜μ„œ μŠ€ν† μ–΄λŠ” μœ λ ˆμΉ΄μ— μ—°κ²°ν•΄μ•Ό ν•œλ‹€.
πŸ‘‰ “λ””μŠ€μ»€λ²„λ¦¬”λŠ” κ°œλ…μ  이름이고, μ‹€μ œ κ΅¬ν˜„μ²΄κ°€ Eureka.

 

μŠ€ν† μ–΄(Store) μ„œλΉ„μŠ€μ—μ„œ κ²Œμ΄νŠΈμ›¨μ΄(Gateway)둜 직접 ν˜ΈμΆœν•  건지 κ³ λ―Ό 쀑이라면, κ²°λ‘ λΆ€ν„° λ§ν•˜λ©΄ 거의 λŒ€λΆ€λΆ„μ˜ 경우 Eureka(λ˜λŠ” λ‹€λ₯Έ μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬)둜 λ“±λ‘λœ μ„œλΉ„μŠ€ 이름을 톡해 Gateway둜 ν˜ΈμΆœν•˜λŠ” 게 훨씬 더 μ’‹μŠ΅λ‹ˆλ‹€. 직접 IPλ‚˜ 호슀트λͺ…μœΌλ‘œ Gatewayλ₯Ό ν•˜λ“œμ½”λ”©ν•˜λŠ” 건 μ ˆλŒ€ λΉ„μΆ”μ²œμ΄μ—μš”.

μ™œ Eureka(μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬)λ₯Ό 톡해 Gatewayλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν• κΉŒ?

 
ν•­λͺ©Gateway 직접 호좜 (직접 URL)Eureka + Ribbon/Feign (μ„œλΉ„μŠ€ μ΄λ¦„μœΌλ‘œ 호좜)

 

κ³ κ°€μš©μ„± (HA) Gatewayκ°€ μ—¬λŸ¬ λŒ€ λ„μ›Œμ Έλ„ ν•˜λ‚˜μ˜ μ£Όμ†Œλ§Œ μ•Œλ©΄ μž₯μ•  μ‹œ μˆ˜λ™ λ³€κ²½ ν•„μš” μžλ™μœΌλ‘œ μ‚΄μ•„μžˆλŠ” Gateway μΈμŠ€ν„΄μŠ€λ‘œ λΌμš°νŒ…
배포/μŠ€μΌ€μΌλ§ νŽΈμ˜μ„± Gateway 재배포 μ‹œ IP λ³€κ²½ → Store도 재배포 ν•„μš” Gatewayκ°€ 1λŒ€λ“  10λŒ€λ“  Store μ½”λ“œλŠ” κ·ΈλŒ€λ‘œ
MSA ν‘œμ€€ 방식 anti-pattern Spring Cloud ν‘œμ€€ 방식 (Service Discovery + Client-side LB)
Circuit Breaker 연계 μ–΄λ ΅κ±°λ‚˜ 별도 κ΅¬ν˜„ ν•„μš” Hystrix/Resilience4j와 μžμ—°μŠ€λŸ½κ²Œ 연계 κ°€λŠ₯
κ΄€μ œ/λͺ¨λ‹ˆν„°λ§ 각각의 ν˜ΈμΆœμ„ λ³„λ„λ‘œ 좔적해야 함 μ„œλΉ„μŠ€ 이름 λ‹¨μœ„λ‘œ 톡합 λͺ¨λ‹ˆν„°λ§ (Zipkin, Sleuth λ“±)