About Microservice
Coding Style
๋ถ€์ œ: ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ž
1๋…„์ฐจ
์žฌ๋ฏธ
์ฆ๊ฑฐ์›€
2๋…„์ฐจ
์ด๋™์„ฑ
3๋…„์ฐจ
์žฌ์‚ฌ์šฉ์„ฑ
5๋…„์ฐจ
๊ฐ์ฒด์ง€ํ–ฅ
์Šคํ”„๋ง
ํŒจํ„ด
โ€ฆ
์–ด๋ ค์šด๊ฑธ ์ž˜์•„๋Š”๊ฒŒ ์ข‹์€๊ฑฐ?
์œ ์—”์ง„์†”๋ฃจ์…˜์ฆˆ
โ€ข 2013๋…„ ๋ถ€ํ„ฐ ๊ธฐ์—…์šฉ ํŒจํ‚ค์ง€ ์†”๋ฃจ์…˜ ๊ฐœ๋ฐœ
โ€ข BPM, SNS, ALM ๋“ฑ BPM์„ ๊ธฐ๋ฐ˜ํ•œ ๋‹ค์–‘ํ•œ ํŒŒ์ƒ์ƒํ’ˆ ๊ฐœ๋ฐœ
โ€ข (๊ตญ๋‚ด) ๊ณ ๊ฐ์ž…์žฅ์˜ ๋ฐธ๋ฅ˜: ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์ž˜๋˜๋Š” ์ œํ’ˆ
โ€ข ์ˆ˜์ต๋ชจ๋ธ: ์˜จ-ํ”„๋ ˆ๋ฏธ์Šค ๊ธฐ๋ฐ˜ ํ”„๋กœ๋•ํŠธ ์ œ๊ณต
์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์กฐ
Metaworks Framework
(๋‚˜์ด: 15๋…„)
BPM Process
Modeler
BPM Process Engine
(๋‚˜์ด: 12๋…„)
BPM Process Portal
(๋‚˜์ด: 10๋…„)
ALM Pipeline
Modeler
Business Rule
Modeler
Business Rule
Engine
Enterprise Social
Network Portal
๊ณ ๊ฐ์‚ฌ1 ๊ณ ๊ฐ์‚ฌ2 ๊ณ ๊ฐ์‚ฌ3 ๊ณ ๊ฐ์‚ฌ4 ๊ณ ๊ฐ์‚ฌ5
Key Strategies:
- DRY (Donโ€™t Repeat Yourself) Rule : ๊ฐ€๋Šฅํ•œ ๊ณตํ†ต๊ตฌํ˜„ ์ฝ”๋“œ๋Š” ์ค‘๋ณต์ด ์—†์–ด์•ผ
- White-box Inheritance : ํ•œ๋ฒˆ ๊ตฌํ˜„๋œ ๊ฒƒ์€ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ƒ์œ„ ํด๋ž˜์Šค์— ์ •์˜
โ€ข ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ UI์ƒ์„ฑ
โ€ข DB์ ‘๊ทผ
โ€ข ์ปจํŠธ๋กค ์—ญ์ „์ฒ˜๋ฆฌ
โ€ข ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ๋ง
โ€ข ํ”„๋กœ์„ธ์Šค ์‹คํ–‰
โ€ข ํ”„๋กœ์„ธ์Šค ๋ถ„์„/ํ†ต๊ณ„
โ€ข ํŠนํ™”๋œ ์ œ
ํ’ˆ์˜ ์š”๊ตฌ
์‚ฌํ•ญ ๋ฐ˜์˜
โ€ข ํŠนํ™”๋œ ๊ณ 
๊ฐ์˜ ์š”๊ตฌ
์‚ฌํ•ญ ๋ฐ˜์˜
์ƒ์†
์ƒ์† ์ƒ์† ์ƒ์†
์ƒ์† ์ƒ์† ์ƒ์†
10๋…„์˜ ๊ฒฝ๊ณผ๋ณด๊ณ 
โ€ข ๊ฐœ๋ฐœ์ž ์ˆ˜๊ธ‰:
โ€ข ์ž์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐœ๋ฐœํ‘œ์ค€์— ์ต์ˆ™ํ•ด์ง€๋Š”๋ฐ ์ตœ์†Œ 3๋…„ ์†Œ์š”
โ€ข ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ AOP ๊ฐœ๋…, ๋นŒ๋“œ ๋“ฑ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ์ดํ•ด์— ๊ทธ์ค‘ 1.5 ๋…„ ์ด์ƒ ์†Œ์š”
โ€ข ๋นŒ๋“œ/ํ†ตํ•ฉ:
โ€ข 1ํšŒ Integration, End-to-End Test ๋ฅผ ์œ„ํ•œ Maven Dependency ๋ฒ„์ „ ์ผ์น˜์— ์ ์–ด๋„ 4์‹œ๊ฐ„(๋ฐ˜
๋‚˜์ ˆ) ์ด์ƒ ์†Œ์š”
โ€ข Maven Dependency Hell
โ€ข ๊ธฐ์ˆ ์ ์šฉ:
โ€ข ๋งŽ์€ ์˜คํ”ˆ์†Œ์Šค๋“ค์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ†ตํ•ฉํ•จ์— ์žˆ์–ด ์ƒ์ดํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””ํŽœ๋˜์‹œ ์ถฉ๋Œ๋กœ ์ธํ•œ ํ†ตํ•ฉ์˜
์–ด๋ ค์›€
โ€ข OSGi ์‹œ๋„
โ€ข OSGi ์˜ ๋ณต์žกํ•œ ๋ฒ„์ „๊ด€๋ฆฌ, ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ๋Ÿฌ๋‹์ปค๋ธŒ๋กœ ํฌ๊ธฐ
ํ†ตํ•ฉ ๋นŒ๋“œ ์ฃผ๊ธฐ: 1๊ฐœ์›” ๏ƒ  ๋งํ•œ๋‹ค
๏ƒจ ๊ฒฐ๋ก : ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ์ €ํ•˜
๊ธฐํšŒ: MSA ์˜ ๋ฐœ๊ฒฌ
MSA architecture ์˜ ๋‘๊ฐ€์ง€ ๊ด€์ 
Outer:
๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณตํžˆ ๊ฒช๊ฒŒ ๋˜๋Š” ๋ณต
์žก์„ฑ๋“ค
(e.g. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ, ํƒ„๋ ฅ์„ฑ, ์žฅ
์• ๋‚ด์„ฑ, ๊ณตํ†ต์ฒ˜๋ฆฌ) ์„ ๋„คํŠธ์›Œ
ํฌ๋‹จ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ 
Inner:
์ฝ”๋“œ๋‚ด๋ถ€๋Š” ๊ฐ€๋Šฅํ•œ ๋ฌด์‹, ๊ฐ„๊ฒฐ,
๋ช…ํ™•ํ•˜๊ฒŒ ๋‹จ์ˆœํ™”
MSA Design Principles
โ€ข SoCโ€”Separation of concerns.
: ๊ณ ์ƒํ•ด์„œ ๋ถ„๋ฆฌ๋ฅผ ์™œ ํ–ˆ๋А๋ƒ? ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
โ€ข DDDโ€”Domain Driven Design.
: ๋„๋ฉ”์ธ์„ ์•Œ๋ฉด, ๊ด€์‹ฌ์‚ฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ• ์ง€ ์ž‘์ „์ด ๋‚˜์˜จ๋‹ค.
โ€ข KISS โ€” Keep it simple, stupid.
: ์ž‘์€ ์‚ฌ์ด์ฆˆ์˜ ๋งค๋ ฅ์ด ๋ญ๋ƒ? ๋ฌด์‹ํ•˜๊ฒŒ ๋‘๋ผ. ๋•Œ๋ก  ํ•˜๋“œ์ฝ”๋“œ๋„ ๊ดœ์ฐฎ์•„. ์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ๋ณด
๋ผ, Bean ์„ค์ •์„ ๋ฉ”์„œ๋“œ๋กœ-ํ•˜๋“œ์ฝ”๋“œ๋กœ ํ•œ๋‹ค
โ€ข YAGNIโ€”You arenโ€™t gonna need it.
: ๋จธ๋ฆฌ๋ฅผ ์–ด์ง€๋Ÿฝํžˆ๋Š” ๋ณต์žกํ•œ ๊ธฐ์ˆ ? ์ง€๊ธˆ ๋‹น์žฅ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์จ๋ผ. ๋„ˆ๋ฌด ๋ฏธ๋ž˜๋ฅผ ๋ณด์ง€๋งˆ๋ผ. ๋ณด
ํ†ต ๋ณต์žกํ•œ ์„ค๊ณ„์™€ ๊ธฐ์ˆ ์€ ํ•˜๋‚˜์˜ ์–ธ์–ด์™€ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ๋‹ค. ๋‹น์žฅ ๋Œ์•„๊ฐ€๋Š”
์ฝ”๋“œ์™€ ์–ธ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฑธ ์‚ฌ์šฉํ•˜์ž Polyglot ์ด ์ข‹์€๊ฒŒ ๊ทธ๊ฑฐ๋‹ค. ํ•„์š”ํ• ๋•Œ ๋ณต์žกํ•ด์ ธ๋ผ.
์• ์ž์ผ์ด ๊ทธ๊ฑฐ๋‹ค.
Write Simple
โ€ข ๋‹จ์œ„ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋Š” ์˜๋„์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ํ•œ๋‹ค
โ€ข ์ด๋ฏธ ๋ชจ๋“ˆํ™” ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๋‚ด๋ถ€๋Š” ์ฝ๊ธฐ ์ข‹๊ฒŒ (๋‹จ์ˆœํ•˜๊ฒŒ) ์ž‘์„ฑํ•œ๋‹ค
โ€ข ์ž‘์€ ํฌ๊ธฐ๋‚ด์— ๋ณต์žกํ•œ ์ถ”์ƒํ™”, ์ผ๋ฐ˜ํ™”, ๋ชจ๋“ˆํ™”๋Š” ์‚ฌ์กฑ์ด๋‹ค
โ€ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜ํ•œ ๋‹จ์ˆœํ™”ํ•œ๋‹ค (Denormalization, Materialized)
โ€ข ์ ๋‹นํ•œ ํ•˜๋“œ์ฝ”๋“œ๋Š” ์ฝ๊ธฐ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์ข‹๋‹ค (property ํ™”์˜ ์ตœ์†Œ
ํ™”) โ€“ ์œ„ํ—˜ํ•œ๊ฐ€?
โ€ข ์„ค์ •์„ ํ†ตํ•œ ๋ถ„๊ธฐ ๋ณด๋‹ค ํ•˜๋“œ์ฝ”๋“œ๋กœ ๋œ ํŽ‘์…˜์ด ์ฝ๊ธฐ๊ฐ€ ์ข‹๋‹ค
๋ฐ›์•„๋“ค์ด๊ธฐ ํž˜๋“ค์—ˆ๋˜ ์ด์•ผ๊ธฐ๋“ค
โ€ข ๊ณตํ†ตํ™” ํ•˜์ง€ ๋ง๋ผ?
โ€ข DRY X ๏ƒ  KISS O
โ€ข Shared Kernel X ๏ƒ  Polyglot
โ€ข ๋„ค์ด๋ฐ(ํŒจํ‚ค์ง€๋ช…) ๋ฉ‹์ง€๊ฒŒ ์ง“์ง€๋ง๋ผ?
โ€ข Ubiquitous Language
โ€ข Bounded Context
โ€ข ํ•˜๋“œ์ฝ”๋”ฉ ํ•˜๋ผ?
โ€ข Inline Bean Definition
โ€ข ๋ฐฑ์—”๋“œ๊ฐ€ ๊ผญ ํ•„์š”ํ•œ๊ฐ€?
โ€ข MVC X ๏ƒ  Front + Gateway + DB
?
๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์ด ์ฃฝ์€๊ฒƒ์ธ๊ฐ€? ์•„๋‹ˆ
๋ฉด ์–ด๋””๋กœ ๊ฐ”๋Š”๊ฐ€?
๋„คํŠธ์›Œํฌ๋‹จ์œผ๋กœ ๊ฐ”๋‹ค.
Proxy Pattern ๏ƒ  API Gateway
Polymorphism ๏ƒ  Traffic Routing
Multi-threading ๏ƒ  Container Orchestrator
Aspect Cross-cutting ๏ƒ  PubSub, Event-driven
Spring ๏ƒ  Istio
Multi-threading ๏ƒ  Kubernetes
Aspect Cross-cutting ๏ƒ  Kafka
๋ˆ„๊ฐ€ ํ•ด์ฃผ๋А๋ƒ?
๋ฐ›์•„๋“ค์ด๋‹ˆ ๊นจ๋‹ซ๊ฒŒ ๋œ ๊ฒƒ๋“ค
โ€ข ๋‚ด ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์–ด๋ ค์šด ๊ฒƒ์ด ์•„๋‹ˆ์—ˆ๋‹ค
โ€ข ๊ทธ๋ƒฅ ๋ณต์žกํ•˜๊ฒŒ ์—‰์ผœ์žˆ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
โ€ข ๋„ˆ๋ฌด ๊นŠ์€ ์ถ”์ƒํ™”, ๊ณตํ†ตํ™”๋Š” ์˜คํžˆ๋ ค ๋‚ด ๋ฐœ๋ชฉ์„ ์žก์•˜๋˜ ๊ฒƒ์ด๋‹ค.
โ€ข ํ•˜์ง€๋งŒ, Inner Architecture ๋‚ด์—์„œ๋„
โ€ข ์—ฌ์ „ํžˆ ์ฃผ์„, ์™„์ „ํ•œ ์ฝ”๋“œ, ํ…Œ์ŠคํŒ…์€ โ€์–ด๋А์ •๋„โ€ ์ค‘์š”ํ•˜๋‹ค.
โ€ข ๊ทธ ์ •๋„๋Š” โ€œํ•„์š”ํ•œ ๋งŒํผโ€ ์ด๋ผ๊ณ  ์ •์˜ํ•˜๊ณ  ์‹ถ๋‹ค.
Agile Principle:
ํŒ”๋ฆฌ์ง€ ์•Š์„๊ฒƒ์€ ๋งŒ๋“ค์ง€๋„ ๋งˆ๋ผ
๊ฒฐ๋ก 
โ€ข ์„œ๋น„์Šค ์‚ฌ์—… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์†”๋ฃจ์…˜ ๊ฐœ๋ฐœ ๋ฐ Product-Line
Management ์—์„œ๋„ MSA ๋ฅผ ์ ์šฉํ–ˆ์„๋•Œ ํšจ์œจ์ด ๋ฐœ์ƒ
โ€ข ๋‹จ์œ„๊ฐœ๋ฐœ (Inner Architecture) ์˜ ๋‹จ์ˆœ์„ฑ ์ถ”๊ตฌ
โ€ข ๊ฒฐ๋ก ์ ์œผ๋กœ ์ž‘์ „์˜ ๋ณ€๊ฒฝ:
ํ˜•์ƒ์— ๋Œ€ํ•œ ๊ณผ๋„ํ•œ ํ‘œ์ค€ํ™”, ๊ณตํ†ตํ™”, ๊ธฐ์ˆ  ๊ฒ€์ฆ์˜ ๋…ธ๋ ฅ๊ณผ ์—๋„ˆ์ง€
๏ƒจ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐํšŒ์˜ ๋น ๋ฅธ ์‹œ์žฅ ๊ฒ€์ฆ์˜ ๋…ธ๋ ฅ๊ณผ ์—๋„ˆ์ง€
10๋…„์ฐจ: ๋‹ค์‹œ ์ฆ๊ฑฐ์›€์„ ๋˜์ฐพ๋‹ค

Microservice coding guide

  • 1.
    About Microservice Coding Style ๋ถ€์ œ:ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ž
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
    ์œ ์—”์ง„์†”๋ฃจ์…˜์ฆˆ โ€ข 2013๋…„ ๋ถ€ํ„ฐ๊ธฐ์—…์šฉ ํŒจํ‚ค์ง€ ์†”๋ฃจ์…˜ ๊ฐœ๋ฐœ โ€ข BPM, SNS, ALM ๋“ฑ BPM์„ ๊ธฐ๋ฐ˜ํ•œ ๋‹ค์–‘ํ•œ ํŒŒ์ƒ์ƒํ’ˆ ๊ฐœ๋ฐœ โ€ข (๊ตญ๋‚ด) ๊ณ ๊ฐ์ž…์žฅ์˜ ๋ฐธ๋ฅ˜: ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์ž˜๋˜๋Š” ์ œํ’ˆ โ€ข ์ˆ˜์ต๋ชจ๋ธ: ์˜จ-ํ”„๋ ˆ๋ฏธ์Šค ๊ธฐ๋ฐ˜ ํ”„๋กœ๋•ํŠธ ์ œ๊ณต
  • 7.
    ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์กฐ Metaworks Framework (๋‚˜์ด:15๋…„) BPM Process Modeler BPM Process Engine (๋‚˜์ด: 12๋…„) BPM Process Portal (๋‚˜์ด: 10๋…„) ALM Pipeline Modeler Business Rule Modeler Business Rule Engine Enterprise Social Network Portal ๊ณ ๊ฐ์‚ฌ1 ๊ณ ๊ฐ์‚ฌ2 ๊ณ ๊ฐ์‚ฌ3 ๊ณ ๊ฐ์‚ฌ4 ๊ณ ๊ฐ์‚ฌ5 Key Strategies: - DRY (Donโ€™t Repeat Yourself) Rule : ๊ฐ€๋Šฅํ•œ ๊ณตํ†ต๊ตฌํ˜„ ์ฝ”๋“œ๋Š” ์ค‘๋ณต์ด ์—†์–ด์•ผ - White-box Inheritance : ํ•œ๋ฒˆ ๊ตฌํ˜„๋œ ๊ฒƒ์€ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ƒ์œ„ ํด๋ž˜์Šค์— ์ •์˜ โ€ข ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ UI์ƒ์„ฑ โ€ข DB์ ‘๊ทผ โ€ข ์ปจํŠธ๋กค ์—ญ์ „์ฒ˜๋ฆฌ โ€ข ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ๋ง โ€ข ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ โ€ข ํ”„๋กœ์„ธ์Šค ๋ถ„์„/ํ†ต๊ณ„ โ€ข ํŠนํ™”๋œ ์ œ ํ’ˆ์˜ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ˜์˜ โ€ข ํŠนํ™”๋œ ๊ณ  ๊ฐ์˜ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ˜์˜ ์ƒ์† ์ƒ์† ์ƒ์† ์ƒ์† ์ƒ์† ์ƒ์† ์ƒ์†
  • 8.
    10๋…„์˜ ๊ฒฝ๊ณผ๋ณด๊ณ  โ€ข ๊ฐœ๋ฐœ์ž์ˆ˜๊ธ‰: โ€ข ์ž์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐœ๋ฐœํ‘œ์ค€์— ์ต์ˆ™ํ•ด์ง€๋Š”๋ฐ ์ตœ์†Œ 3๋…„ ์†Œ์š” โ€ข ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ AOP ๊ฐœ๋…, ๋นŒ๋“œ ๋“ฑ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ์ดํ•ด์— ๊ทธ์ค‘ 1.5 ๋…„ ์ด์ƒ ์†Œ์š” โ€ข ๋นŒ๋“œ/ํ†ตํ•ฉ: โ€ข 1ํšŒ Integration, End-to-End Test ๋ฅผ ์œ„ํ•œ Maven Dependency ๋ฒ„์ „ ์ผ์น˜์— ์ ์–ด๋„ 4์‹œ๊ฐ„(๋ฐ˜ ๋‚˜์ ˆ) ์ด์ƒ ์†Œ์š” โ€ข Maven Dependency Hell โ€ข ๊ธฐ์ˆ ์ ์šฉ: โ€ข ๋งŽ์€ ์˜คํ”ˆ์†Œ์Šค๋“ค์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ†ตํ•ฉํ•จ์— ์žˆ์–ด ์ƒ์ดํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””ํŽœ๋˜์‹œ ์ถฉ๋Œ๋กœ ์ธํ•œ ํ†ตํ•ฉ์˜ ์–ด๋ ค์›€ โ€ข OSGi ์‹œ๋„ โ€ข OSGi ์˜ ๋ณต์žกํ•œ ๋ฒ„์ „๊ด€๋ฆฌ, ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ๋Ÿฌ๋‹์ปค๋ธŒ๋กœ ํฌ๊ธฐ
  • 9.
    ํ†ตํ•ฉ ๋นŒ๋“œ ์ฃผ๊ธฐ:1๊ฐœ์›” ๏ƒ  ๋งํ•œ๋‹ค ๏ƒจ ๊ฒฐ๋ก : ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ ์ €ํ•˜
  • 10.
  • 11.
    MSA architecture ์˜๋‘๊ฐ€์ง€ ๊ด€์  Outer: ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณตํžˆ ๊ฒช๊ฒŒ ๋˜๋Š” ๋ณต ์žก์„ฑ๋“ค (e.g. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ, ํƒ„๋ ฅ์„ฑ, ์žฅ ์• ๋‚ด์„ฑ, ๊ณตํ†ต์ฒ˜๋ฆฌ) ์„ ๋„คํŠธ์›Œ ํฌ๋‹จ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  Inner: ์ฝ”๋“œ๋‚ด๋ถ€๋Š” ๊ฐ€๋Šฅํ•œ ๋ฌด์‹, ๊ฐ„๊ฒฐ, ๋ช…ํ™•ํ•˜๊ฒŒ ๋‹จ์ˆœํ™”
  • 12.
    MSA Design Principles โ€ขSoCโ€”Separation of concerns. : ๊ณ ์ƒํ•ด์„œ ๋ถ„๋ฆฌ๋ฅผ ์™œ ํ–ˆ๋А๋ƒ? ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค โ€ข DDDโ€”Domain Driven Design. : ๋„๋ฉ”์ธ์„ ์•Œ๋ฉด, ๊ด€์‹ฌ์‚ฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ• ์ง€ ์ž‘์ „์ด ๋‚˜์˜จ๋‹ค. โ€ข KISS โ€” Keep it simple, stupid. : ์ž‘์€ ์‚ฌ์ด์ฆˆ์˜ ๋งค๋ ฅ์ด ๋ญ๋ƒ? ๋ฌด์‹ํ•˜๊ฒŒ ๋‘๋ผ. ๋•Œ๋ก  ํ•˜๋“œ์ฝ”๋“œ๋„ ๊ดœ์ฐฎ์•„. ์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ๋ณด ๋ผ, Bean ์„ค์ •์„ ๋ฉ”์„œ๋“œ๋กœ-ํ•˜๋“œ์ฝ”๋“œ๋กœ ํ•œ๋‹ค โ€ข YAGNIโ€”You arenโ€™t gonna need it. : ๋จธ๋ฆฌ๋ฅผ ์–ด์ง€๋Ÿฝํžˆ๋Š” ๋ณต์žกํ•œ ๊ธฐ์ˆ ? ์ง€๊ธˆ ๋‹น์žฅ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์จ๋ผ. ๋„ˆ๋ฌด ๋ฏธ๋ž˜๋ฅผ ๋ณด์ง€๋งˆ๋ผ. ๋ณด ํ†ต ๋ณต์žกํ•œ ์„ค๊ณ„์™€ ๊ธฐ์ˆ ์€ ํ•˜๋‚˜์˜ ์–ธ์–ด์™€ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ๋‹ค. ๋‹น์žฅ ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ์™€ ์–ธ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฑธ ์‚ฌ์šฉํ•˜์ž Polyglot ์ด ์ข‹์€๊ฒŒ ๊ทธ๊ฑฐ๋‹ค. ํ•„์š”ํ• ๋•Œ ๋ณต์žกํ•ด์ ธ๋ผ. ์• ์ž์ผ์ด ๊ทธ๊ฑฐ๋‹ค.
  • 13.
    Write Simple โ€ข ๋‹จ์œ„๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋Š” ์˜๋„์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ํ•œ๋‹ค โ€ข ์ด๋ฏธ ๋ชจ๋“ˆํ™” ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๋‚ด๋ถ€๋Š” ์ฝ๊ธฐ ์ข‹๊ฒŒ (๋‹จ์ˆœํ•˜๊ฒŒ) ์ž‘์„ฑํ•œ๋‹ค โ€ข ์ž‘์€ ํฌ๊ธฐ๋‚ด์— ๋ณต์žกํ•œ ์ถ”์ƒํ™”, ์ผ๋ฐ˜ํ™”, ๋ชจ๋“ˆํ™”๋Š” ์‚ฌ์กฑ์ด๋‹ค โ€ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜ํ•œ ๋‹จ์ˆœํ™”ํ•œ๋‹ค (Denormalization, Materialized) โ€ข ์ ๋‹นํ•œ ํ•˜๋“œ์ฝ”๋“œ๋Š” ์ฝ๊ธฐ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์ข‹๋‹ค (property ํ™”์˜ ์ตœ์†Œ ํ™”) โ€“ ์œ„ํ—˜ํ•œ๊ฐ€? โ€ข ์„ค์ •์„ ํ†ตํ•œ ๋ถ„๊ธฐ ๋ณด๋‹ค ํ•˜๋“œ์ฝ”๋“œ๋กœ ๋œ ํŽ‘์…˜์ด ์ฝ๊ธฐ๊ฐ€ ์ข‹๋‹ค
  • 14.
    ๋ฐ›์•„๋“ค์ด๊ธฐ ํž˜๋“ค์—ˆ๋˜ ์ด์•ผ๊ธฐ๋“ค โ€ข๊ณตํ†ตํ™” ํ•˜์ง€ ๋ง๋ผ? โ€ข DRY X ๏ƒ  KISS O โ€ข Shared Kernel X ๏ƒ  Polyglot โ€ข ๋„ค์ด๋ฐ(ํŒจํ‚ค์ง€๋ช…) ๋ฉ‹์ง€๊ฒŒ ์ง“์ง€๋ง๋ผ? โ€ข Ubiquitous Language โ€ข Bounded Context โ€ข ํ•˜๋“œ์ฝ”๋”ฉ ํ•˜๋ผ? โ€ข Inline Bean Definition โ€ข ๋ฐฑ์—”๋“œ๊ฐ€ ๊ผญ ํ•„์š”ํ•œ๊ฐ€? โ€ข MVC X ๏ƒ  Front + Gateway + DB ?
  • 15.
    ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์ด ์ฃฝ์€๊ฒƒ์ธ๊ฐ€?์•„๋‹ˆ ๋ฉด ์–ด๋””๋กœ ๊ฐ”๋Š”๊ฐ€? ๋„คํŠธ์›Œํฌ๋‹จ์œผ๋กœ ๊ฐ”๋‹ค. Proxy Pattern ๏ƒ  API Gateway Polymorphism ๏ƒ  Traffic Routing Multi-threading ๏ƒ  Container Orchestrator Aspect Cross-cutting ๏ƒ  PubSub, Event-driven Spring ๏ƒ  Istio Multi-threading ๏ƒ  Kubernetes Aspect Cross-cutting ๏ƒ  Kafka ๋ˆ„๊ฐ€ ํ•ด์ฃผ๋А๋ƒ?
  • 16.
    ๋ฐ›์•„๋“ค์ด๋‹ˆ ๊นจ๋‹ซ๊ฒŒ ๋œ๊ฒƒ๋“ค โ€ข ๋‚ด ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์–ด๋ ค์šด ๊ฒƒ์ด ์•„๋‹ˆ์—ˆ๋‹ค โ€ข ๊ทธ๋ƒฅ ๋ณต์žกํ•˜๊ฒŒ ์—‰์ผœ์žˆ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. โ€ข ๋„ˆ๋ฌด ๊นŠ์€ ์ถ”์ƒํ™”, ๊ณตํ†ตํ™”๋Š” ์˜คํžˆ๋ ค ๋‚ด ๋ฐœ๋ชฉ์„ ์žก์•˜๋˜ ๊ฒƒ์ด๋‹ค. โ€ข ํ•˜์ง€๋งŒ, Inner Architecture ๋‚ด์—์„œ๋„ โ€ข ์—ฌ์ „ํžˆ ์ฃผ์„, ์™„์ „ํ•œ ์ฝ”๋“œ, ํ…Œ์ŠคํŒ…์€ โ€์–ด๋А์ •๋„โ€ ์ค‘์š”ํ•˜๋‹ค. โ€ข ๊ทธ ์ •๋„๋Š” โ€œํ•„์š”ํ•œ ๋งŒํผโ€ ์ด๋ผ๊ณ  ์ •์˜ํ•˜๊ณ  ์‹ถ๋‹ค.
  • 17.
    Agile Principle: ํŒ”๋ฆฌ์ง€ ์•Š์„๊ฒƒ์€๋งŒ๋“ค์ง€๋„ ๋งˆ๋ผ
  • 18.
    ๊ฒฐ๋ก  โ€ข ์„œ๋น„์Šค ์‚ฌ์—…๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์†”๋ฃจ์…˜ ๊ฐœ๋ฐœ ๋ฐ Product-Line Management ์—์„œ๋„ MSA ๋ฅผ ์ ์šฉํ–ˆ์„๋•Œ ํšจ์œจ์ด ๋ฐœ์ƒ โ€ข ๋‹จ์œ„๊ฐœ๋ฐœ (Inner Architecture) ์˜ ๋‹จ์ˆœ์„ฑ ์ถ”๊ตฌ โ€ข ๊ฒฐ๋ก ์ ์œผ๋กœ ์ž‘์ „์˜ ๋ณ€๊ฒฝ: ํ˜•์ƒ์— ๋Œ€ํ•œ ๊ณผ๋„ํ•œ ํ‘œ์ค€ํ™”, ๊ณตํ†ตํ™”, ๊ธฐ์ˆ  ๊ฒ€์ฆ์˜ ๋…ธ๋ ฅ๊ณผ ์—๋„ˆ์ง€ ๏ƒจ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐํšŒ์˜ ๋น ๋ฅธ ์‹œ์žฅ ๊ฒ€์ฆ์˜ ๋…ธ๋ ฅ๊ณผ ์—๋„ˆ์ง€
  • 19.