Skip to content

๐Ÿ›๏ธ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„ (Architecture) โ€‹

ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด, ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ฐ€์ด๋“œ, ํ•ต์‹ฌ ๊ฐœ๋… ์ž๋ฃŒ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

NOTE

๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„(System Design), ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(MSA), ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์•„ํ‚คํ…์ฒ˜, ๋””์ž์ธ ํŒจํ„ด ๋“ฑ ์ธํ”„๋ผ์™€ ์ฝ”๋“œ๋ฅผ ์•„์šฐ๋ฅด๋Š” ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


๐Ÿ“š ํ•„์ˆ˜ ํ•™์Šต ์ž๋ฃŒ (๋ ˆํผ๋Ÿฐ์Šค) โ€‹

์ด๋ฆ„ (Name)๋งํฌ (URL)ํ•œ์ค„ ์†Œ๊ฐœ ๋ฐ ์ถ”์ฒœ ์ด์œ 
System Design Primerhttps://github.com/donnemartin/system-design-primer๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฉด์ ‘ ์ค€๋น„ ๋ฐ ์‹ค๋ฌด ์ ์šฉ์„ ์œ„ํ•œ GitHub ์ตœ๋‹ค ์Šคํƒ€ ์ €์žฅ์†Œ
ByteByteGohttps://bytebytego.com์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ฐœ๋…์„ ์‹œ๊ฐ์  ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ์œ ๋ฃŒ/๋ฌด๋ฃŒ ํ˜ผํ•ฉ ํ”Œ๋žซํผ
Refactoring Guru - ๋””์ž์ธ ํŒจํ„ดhttps://refactoring.guru/ko/design-patternsGoF ๋””์ž์ธ ํŒจํ„ด 23๊ฐ€์ง€๋ฅผ ํ•œ๊ตญ์–ด๋กœ ์‹œ๊ฐ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ์ตœ๊ณ ์˜ ์ž๋ฃŒ
Microsoft Azure Architecture Centerhttps://learn.microsoft.com/ko-kr/azure/architecture๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ ํด๋ผ์šฐ๋“œ ์•„ํ‚คํ…์ฒ˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ๋ฐ ๋ ˆํผ๋Ÿฐ์Šค ์•„ํ‚คํ…์ฒ˜
AWS Architecture Centerhttps://aws.amazon.com/ko/architectureAWS์˜ ๊ณต์‹ ์•„ํ‚คํ…์ฒ˜ ๋ ˆํผ๋Ÿฐ์Šค์™€ Well-Architected Framework ๊ฐ€์ด๋“œ

๐ŸŽฏ ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด โ€‹

MSA (Microservices Architecture) โ€‹

mermaid
graph TD
    Client --> APIGateway[API Gateway]
    APIGateway --> AuthService[์ธ์ฆ ์„œ๋น„์Šค]
    APIGateway --> UserService[์‚ฌ์šฉ์ž ์„œ๋น„์Šค]
    APIGateway --> OrderService[์ฃผ๋ฌธ ์„œ๋น„์Šค]
    UserService --> UserDB[(User DB)]
    OrderService --> OrderDB[(Order DB)]
    OrderService --> MessageQueue[Message Queue]
    MessageQueue --> NotificationService[์•Œ๋ฆผ ์„œ๋น„์Šค]
ํŒจํ„ด ์ด๋ฆ„์„ค๋ช…๊ด€๋ จ ๊ธฐ์ˆ 
API Gateway๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์˜ ๋‹จ์ผ ์ง„์ž…์ . ์ธ์ฆ, ๋ผ์šฐํŒ…, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋‹ด๋‹นKong, AWS API Gateway, Nginx
Circuit Breaker์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์—ฐ์‡„ ์žฅ์• ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํŒจํ„ดResilience4j, Hystrix
Saga PatternMSA์—์„œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ดChoreography, Orchestration
Event Sourcing์ƒํƒœ๋ฅผ ์ด๋ฒคํŠธ์˜ ์‹œํ€€์Šค๋กœ ์ €์žฅํ•˜์—ฌ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํŒจํ„ดKafka, EventStore

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ์›์น™ โ€‹

์›์น™์„ค๋ช…
CQRS์ฝ๊ธฐ(Query)์™€ ์“ฐ๊ธฐ(Command) ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ ๊ฐœ์„ 
Database per ServiceMSA์—์„œ ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์ธ DB๋ฅผ ์†Œ์œ ํ•˜๋Š” ์›์น™
Sharding๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ์ˆ˜ํ‰ ๋ถ„ํ• ํ•˜์—ฌ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•
Read Replica์ฝ๊ธฐ ์ „์šฉ ๋ณต์ œ๋ณธ์„ ๋‘์–ด ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋Š” ํŒจํ„ด

โ˜๏ธ ํด๋ผ์šฐ๋“œ ์•„ํ‚คํ…์ฒ˜ ์ฃผ์š” ๊ฐœ๋… โ€‹

๊ฐœ๋…์„ค๋ช…ํ•™์Šต ๋งํฌ
์„œ๋ฒ„๋ฆฌ์Šค (Serverless)์ธํ”„๋ผ ๊ด€๋ฆฌ ์—†์ด ์ฝ”๋“œ๋งŒ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹คํ–‰AWS Lambda ๋ฌธ์„œ
์ปจํ…Œ์ด๋„ˆํ™” (Docker)์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์˜์กด์„ฑ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ํ™•๋ณดDocker ๊ณต์‹ ๋ฌธ์„œ
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค (K8s)์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ‘œ์ค€. ์ž๋™ ๋ฐฐํฌ, ์Šค์ผ€์ผ๋ง, ์ž๊ธฐ ์น˜์œ Kubernetes ๊ณต์‹ ๋ฌธ์„œ
Service Mesh๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ธํ”„๋ผ ๋ ˆ์ด์–ดIstio, Linkerd
CDN์ •์  ์ž์‚ฐ์„ ์ „ ์„ธ๊ณ„ ์—ฃ์ง€ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜์—ฌ ์ง€์—ฐ ์‹œ๊ฐ„ ์ตœ์†Œํ™”Cloudflare, AWS CloudFront

๐Ÿ” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์›์น™ (SOLID + ๋” ๋‚˜์•„๊ฐ€๊ธฐ) โ€‹

์›์น™์•ฝ์–ดํ•ต์‹ฌ ๋‚ด์šฉ
๋‹จ์ผ ์ฑ…์ž„ ์›์น™SRPํด๋ž˜์Šค/๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค
๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™OCPํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ , ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค
๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™LSP์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ISP์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค
์˜์กด ์—ญ์ „ ์›์น™DIP๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค
๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌSoC๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ด€์‹ฌ์‚ฌ๋งŒ ๋‹ค๋ฃจ์–ด์•ผ ํ•œ๋‹ค
DRYDRYDon't Repeat Yourself. ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ผ
YAGNIYAGNIYou Aren't Gonna Need It. ํ•„์š”ํ•  ๋•Œ ๋งŒ๋“ค์–ด๋ผ

๐Ÿ›  ์ถ”์ฒœ ์•„ํ‚คํ…์ฒ˜ ๋„๊ตฌ โ€‹

์ด๋ฆ„ (Name)๋งํฌ (URL)์ถ”์ฒœ ์ด์œ 
Excalidrawhttps://excalidraw.com์†๊ทธ๋ฆผ ๋А๋‚Œ์˜ ์ง๊ด€์ ์ธ ํ™”์ดํŠธ๋ณด๋“œ. ๋น ๋ฅธ ์•„์ด๋””์–ด ์Šค์ผ€์น˜์— ์ตœ์ 
Mermaid Livehttps://mermaid.live๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ๋กœ ์‹ค์‹œ๊ฐ„ ๋‹ค์ด์–ด๊ทธ๋žจ ์ƒ์„ฑ. GitHub์—์„œ ๋ฐ”๋กœ ๋ Œ๋”๋ง
Lucidcharthttps://www.lucidchart.comํŒ€ ํ˜‘์—…์ด ๊ฐ€๋Šฅํ•œ ์ „๋ฌธ์ ์ธ ๋‹ค์ด์–ด๊ทธ๋žจ ์ž‘์„ฑ ๋„๊ตฌ
C4 Modelhttps://c4model.com์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋ฅผ 4๊ฐ€์ง€ ๋ ˆ๋ฒจ(Contextโ†’Containerโ†’Componentโ†’Code)๋กœ ํ‘œํ˜„

๐Ÿ“˜ ์•„ํ‚คํ…์ฒ˜ ๊ด€๋ จ ํ•„๋… ์„œ์  โ€‹

  • ๐Ÿ“– ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด) - ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ์›์น™๊ณผ ์ฒ ํ•™
  • ๐Ÿ“– ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (์•Œ๋ ‰์Šค ์‰ฌ) - ์‹ค์ „ ์‹œ์Šคํ…œ ์„ค๊ณ„
  • ๐Ÿ“– ๋””์ž์ธ ํŒจํ„ด (GoF) - ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ํŒจํ„ด์˜ ๋ฐ”์ด๋ธ”
  • ๐Ÿ“– ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํŒจํ„ด (ํฌ๋ฆฌ์Šค ๋ฆฌ์ฒ˜๋“œ์Šจ) - MSA ์‹ค๋ฌด ์ ์šฉ ๊ฐ€์ด๋“œ

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง€์‹DB โ€” ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์œ„ํ•ด