๐Ÿงถ Spring | Spring Boot/Spring Cloud & MSA

12 Factors + 3 Factors

  • -

12 Factors

  • Heroku ํ”Œ๋žซํผ์„ ํ†ตํ•ด ๋ฐฉ๋Œ€ํ•œ ์•ฑ์˜ ๊ฐœ๋ฐœ, ์šด์˜, ํ™•์žฅ ๋“ฑ์„ ๊ด€์ฐฐํ•œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ณ ์•ˆํ•ด๋‚ธ SaaS ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 
  • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ์•ฑ์ด ์œ ๊ธฐ์ ์œผ๋กœ ์„ฑ์žฅํ•˜๋Š” ๋ถ€๋ถ„, ์•ฑ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค ๊ฐ„์˜ ํ˜‘์—…, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ๋ง๊ฐ€์ง€๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์œ ์ง€๋น„์šฉ์„ ์ค„์ด๋Š” ๋ฒ•์— ์ง‘์ค‘

12 Factors์˜ ๋ชฉ์ 

์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง„ SaaS ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ

  • ์„ค์ • ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์ ˆ์ฐจ(declarative) ๋ฅผ ์ฒด๊ณ„ํ™” ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๋Š”๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์„ ์ตœ์†Œํ™”
  • OS์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„์„ ๋ช…ํ™•ํžˆํ•˜๊ณ , ์‹คํ–‰ ํ™˜๊ฒฝ ์‚ฌ์ด์˜ ์ด์‹์„ฑ์„ ๊ทน๋Œ€ํ™”
  • ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ ๋ฐฐํฌ์— ์ ํ•ฉํ•˜๊ณ , ์„œ๋ฒ„์™€ ์‹œ์Šคํ…œ์˜ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”์—†์Œ
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์šด์˜ ํ™˜๊ฒฝ์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฏผ์ฒฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์†์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅ
  • ํˆด, ์•„ํ‚คํ…์ฒ˜, ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ํฌ๊ฒŒ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ํ™•์žฅ(scale up) ๊ฐ€๋Šฅ

๊ตฌ์„ฑ์š”์†Œ

1. ์ฝ”๋“œ๋ฒ ์ด์Šค (Code Base)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ 1๊ฐœ์˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค(Git, SVN)๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ์šด์˜/๊ฐœ๋ฐœ์— ๋ฐฐํฌ๋˜์–ด์—ฌ ํ•จ
  • ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ, ์•ฑ์ด ์•„๋‹ˆ๋ผ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค ๋ณ„๋กœ Twelve-Factor๋ฅผ ์ ์šฉ
  • ์—ฌ๋Ÿฌ๊ฐœ ์•ฑ์ด ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋ฉด Twelve-Factor๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ณต์œ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํ™” ์‹œ์ผœ ๊ฐ ์•ฑ์— ์ข…์†์„ฑ์„ ์ฃผ์ž…ํ•˜์—ฌ ์‚ฌ์šฉ
  • ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ์•ฑ ๋ฐฐํฌ๋Š” ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•จ → Git Branch ์ด์šฉ

2. ์ข…์†์„ฑ ๊ฒฉ๋ฆฌ(Dependency Isolation)

  • ์ „์ฒด ์‹œ์Šคํ…œ์— ํŠน์ • ํŒจํ‚ค์ง€๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์— ์ ˆ๋Œ€ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ข…์†์„ฑ์€ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
  • ํ•„์š”๋กœ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ dependency manifest ํŒŒ์ผ์— (Gemfile, POM ๋“ฑ) ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‹คํ–‰ํ™˜๊ฒฝ๊ณผ ๋ถ„๋ฆฌ์‹œ์ผœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ๋„ SaaS๊ฐ€ ์ •์ƒ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Œ
  • Java ํ”„๋กœ์ ํŠธ๋“ค์€ Maven์ด๋‚˜ Gradle์„ ์ด์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

3. ์„ค์ • (Configurations)

  • ์„ค์ •์ด๋ž€, ๋ฐฐํฌ์˜ ์ข…๋ฅ˜๋งˆ๋‹ค ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ๊ด€๋ จ ํ•ญ๋ชฉ์„ ๋Œ€์ƒ์œผ๋กœ ํ•จ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ ์ •๋ณด, Amazon S3 ๋“ฑ์˜ ์™ธ๋ถ€ ์„œ๋น„์Šค ์ธ์ฆ ์ •๋ณด, ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋“ฑ
  • ๋ชจ๋“  ์„ค์ • ์ •๋ณด๋Š” ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋œ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด์•ผ ํ•˜๊ณ , ๋Ÿฐํƒ€์ž„์—์„œ ์ฝ”๋“œ์— ์˜ํ•ด ์ฝํ˜€์•ผ ํ•จ
    • ์„ค์ •์„ ์ƒ์ˆ˜๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ Tweleve-Factor๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฒƒ
  • ์„ค์ •์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•จ
    • ์ด๋ ‡๊ฒŒ ๊ด€๋ฆฌํ•˜๋ฉด ์ฝ”๋“œ ๋ณ€๊ฒฝ์—†์ด ๊ฐ ๋ฐฐํฌ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ด์ง
  • Java์—์„œ๋Š” Spring Cloud Config๋ฅผ ํ™œ์šฉ

4. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค (Linkable Backing Services)

  • ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ž€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์ƒ ๋™์ž‘ ์ค‘ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ด์šฉํ•˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์„œ๋“œํŒŒํ‹ฐ ์„œ๋น„์Šค๋„ ํฌํ•จ
  • ๋กœ์ปฌ ์„œ๋น„์Šค์™€ ์„œ๋“œํŒŒํ‹ฐ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ๊ตฌ๋ถ„ ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์—ฐ๊ฒฐ๋œ ๋™๋“ฑํ•œ ๋ฆฌ์†Œ์Šค๋กœ ์ทจ๊ธ‰ํ•ด์•ผํ•จ
  • ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ฐ๊ฒฐ ๋ฐ ๋ถ„๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผํ•˜๊ณ  ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•ด์•ผํ•จ
    • Config์— ์ด๋Ÿฌํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌ

5. ๋นŒ๋“œ, ๋ฆด๋ฆฌ์ฆˆ, ์‹คํ–‰ (Build, Release, Run)

  • ์ฝ”๋“œ ๋ฒ ์ด์Šค๋Š” build > release > run์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋ฐฐํฌ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ๋ถ„๋ฆฌ
    • ๋นŒ๋“œ ๋‹จ๊ณ„
      • ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ์ข…์†์„ฑ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฒˆ๋“ค๋กœ ๋ณ€ํ™˜
      • ์˜ค์ง ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ๋งŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅ
      • ์ƒˆ๋กœ์šด ์ฝ”๋“œ๊ฐ€ ๋ฐฐํฌ๋  ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด ์‹œ์ž‘๋œ๋‹ค
    • ๋ฆด๋ฆฌ์ฆˆ ๋‹จ๊ณ„
      • ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋นŒ๋“œ์™€ ๋ฐฐํฌ์˜ ํ™˜๊ฒฝ ์„ค์ •์„ ๊ฒฐํ•ฉ, ์™„์„ฑ๋œ ๋ฆด๋ฆฌ์ฆˆ๋Š” ๋นŒ๋“œ์™€ ์„ค์ •์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋ฉฐ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๋ฐ”๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„๋˜์–ด์•ผ ํ•จ
      • ๋ชจ๋“  ๋ฆด๋ฆฌ์ฆˆ๋Š” ๊ฐ๊ฐ ์œ ๋‹ˆํฌํ•œ ์•„์ด๋””๋ฅผ ๊ฐ€์ ธ์•ผํ•˜๋ฉฐ, ๋ฆด๋ฆฌ์ฆˆ๋Š” ์ถ”๊ฐ€๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Œ
      • ์ด์ „ ๋ฆด๋ฆฌ์ฆˆ๋กœ ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅ
    • ์‹คํ–‰ ๋‹จ๊ณ„(๋Ÿฐํƒ€์ž„)
      • ์„ ํƒ๋œ ๋ฆด๋ฆฌ์ฆˆ์— ๋Œ€ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ์„ ์‹œ์ž‘ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๋Œ์•„๊ฐ€๋„๋ก ํ•จ

6. ๋ฌด์ƒํƒœ ํ”„๋กœ์„ธ์Šค (Stateless Process)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•˜๋‚˜ ํ˜น์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฌด์ƒํƒœ(stateless) ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ ์•„๋ฌด๊ฒƒ๋„ ๊ณต์œ ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ
    • SaaS๋Š” Scale out์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ์ธ์Šคํ„ด์Šค ๊ฐ„์— ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋จ
    • ํ•˜๋‚˜์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์™€ ๋…๋ฆฝ๋˜์–ด์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ
  • ์œ ์ง€๋  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์บ์‹œ๋‚˜ DB ๊ฐ™์€ ์•ˆ์ •๋œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ์ €์žฅ๋˜์–ด์•ผ ํ•จ
    • ๋ฉ”๋ชจ๋ฆฌ/ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ฝ๊ณ , ์“ฐ๊ณ  ๋“ฑ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ฒ˜๋ฆฌ

7. Port Binding

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋Ÿฐํƒ€์ž… ์ธ์ ์…˜์ด ์•„๋‹Œ HTTP ์„œ๋น„์Šค๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌํŠธ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ๊ณต๊ฐœ
  • ํฌํŠธ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ์•ฑ์ด ๋‹ค๋ฅธ ์•ฑ์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ

8. ๋™์‹œ์„ฑ (Concurrency)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Scale-out์ด ๊ฐ€๋Šฅํ•ด์•ผํ•˜๋ฉฐ, ๋ฌด์ƒํƒœ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ๋™์‹œ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ
  • ๋ชจ๋“  ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋Œ€์‹  ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌ๋œ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰(micro service)
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ๋ชฌํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•จ
  • OS ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž/๋ถ„์‚ฐ ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €/Foreman ๊ฐ™์€ ํˆด์— ์˜์กดํ•ด์„œ output stream์„ ๊ด€๋ฆฌํ•˜๊ณ , ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€์‘, ์žฌ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ

9. ํ๊ธฐ ๊ฐ€๋Šฅ (Disposability)

  • ํ”„๋กœ์„ธ์Šค๋Š” shut down ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ graceful shut down ํ•ด์•ผํ•จ
    • ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
    • ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ๋ฐ›์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ฐ›์ง€์•Š๊ณ  ๊ธฐ์กด ์š”์ฒญ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•œ ์ดํ›„ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•จ (์ •์ƒ์  ์ข…๋ฃŒ)
      • Message Queue์˜ Worker์˜ ๊ฒฝ์šฐ, ํ˜„์žฌ ์ฒ˜๋ฆฌ์ค‘์ธ ์ž‘์—…์„ ํ๋ฅผ ๋˜๋Œ๋ฆฐ๋‹ค๋˜์ง€, Lock-based ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ, Lock์„ ํ’€๊ณ  ์ข…๋ฃŒ๋œ๋‹ค๋˜์ง€, ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•ด ์ „์ฒด ์ž‘์—…์ด ์ „๋ถ€ ์ทจ์†Œ๋œ๋‹ค๋˜์ง€
  • SaaS๋Š” ์š”์ฒญ์— ์˜ํ•ด Scale up/down์ด ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•˜๋Š”๋ฐ Disposability๋ฅผ ์ค€์ˆ˜ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์— ์•ˆ์ •์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ
  • ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ข…๋ฃŒ ์‹œ์—๋„ ๊ฒฌ๊ณ ํ•ด์•ผํ•˜๋ฉฐ, Java์—์„œ๋Š” Spring Cloud Circuit Breaker๋ฅผ ํ†ตํ•ด ์žฅ์• ๋ฅผ ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ์Œ
  • Docker์˜ Container๋ฅผ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ

10. ๊ฐœ๋ฐœ / ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ์ผ์น˜ (Dev/Prod parity)

  • development, staging, production ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•จ
    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ production ํ™˜๊ฒฝ์˜ ์ฐจ์ด๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ์ง€์†์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋””์ž์ธ
    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์—์„œ๋Š” ๋™์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธ์— ํ†ต๊ณผ๋œ ์ฝ”๋“œ๊ฐ€ production ํ™˜๊ฒฝ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
  • ์ค€์ˆ˜๋ฐฉ๋ฒ•
    • ์‹œ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ช‡ ์‹œ๊ฐ„ ๋˜๋Š” ๋ช‡ ๋ถ„ ํ›„์— ๋ฐฐํฌ๋˜์–ด์•ผ ํ•จ
    • ๋‹ด๋‹น์ž์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”: ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฐฐํฌ์™€ production์—์„œ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์— ๊นŠ๊ฒŒ ๊ด€์—ฌํ•จ
    • ํˆด์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”: ๊ฐœ๋ฐœ๊ณผ production ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ์œ ์ง€
      • ๊ฐœ๋ฐœ ์‹œ์—๋Š” H2, ๋ฐฐํฌ ์‹œ์—๋Š” MySQL ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋™์ผํ•˜๊ฒŒ MySQL์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ → Docker๋ฅผ ์ด์šฉํ•ด ์†์‰ฝ๊ฒŒ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

11. ๋กœ๊ทธ (Logs)

  • ๋กœ๊ทธ๋ฅผ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ทจ๊ธ‰
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€์€ ๋กœ๊ทธ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
    • SaaS๋Š” ์–ธ์ œ๋“ ์ง€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ/์‚ญ์ œ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ์— ๋กœ์ปฌ์— ์ €์žฅ๋œ ๋กœ๊ทธ๋Š” ์ดˆ๊ธฐํ™”๋˜์–ด ์‚ฌ๋ผ์ง
    • ๋กœ๊ทธ๋Š” ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๋ณ„๋„์˜ ์ €์žฅ์†Œ ๋ฐ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณด๊ด€

12. ๊ด€๋ฆฌ์ž ํ”„๋กœ์„ธ์Šค (Admin Process)

  • ์–ด๋“œ๋ฏผ ๋˜๋Š” ์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์„ ์ผํšŒ์„ฑ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•ด์•ผํ•จ
    • DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ์ผํšŒ์„ฑ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋“ฑ
  • ๊ด€๋ฆฌ/์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์€ release์™€ ํ•จ๊ป˜ ์‹คํ–‰
  • release์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๊ณ , ๊ฐ™์€ ์ฝ”๋“œ ๋ฒ ์ด์Šค์™€ config๋ฅผ ์‚ฌ์šฉ
  • admin ์ฝ”๋“œ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋ฐฐํฌ

 

3 Factors

  • Pivotal์—์„œ ๊ธฐ์กด 12 Factors ์— ์„ธ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€

1. API first

  • ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ ๋ฐ ์‘๋‹ต์ด ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ๋จผ์ € ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
    • ์ดํ•ด ๊ด€๊ณ„์ž์™€์˜ ํ˜‘์—…์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง
  • ํ˜‘์—…ํ•˜๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ API๋ฅผ ์ฒซ ๋ฒˆ์งธ ์šฐ์„  ์ˆœ์œ„๋กœ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ
  • ์ด์ 
    • ํ”Œ๋žซํผ ๊ฐ„ ํ˜ธํ™˜ ๊ฐ€๋Šฅ
    • ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
    • ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€

2. Telemetry

  • ์ธ์Šคํ„ด์Šค๋“ค์€ ์›๊ฒฉ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๋˜์–ด์•ผ ํ•จ
    • ๋ชจ๋“  ์ง€ํ‘œ๋Š” ์ˆ˜์น˜ํ™”, ์‹œ๊ฐํ™”๊ฐ€ ๋˜์–ด ๊ด€๋ฆฌ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง(APM) — ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ
    • ๋„๋ฉ”์ธ๋ณ„ ์›๊ฒฉ ์ธก์ • - ๋ถ„์„ ๋ฐ ๋ณด๊ณ ๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ ๋ฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ
    • ์ƒํƒœ ๋ฐ ์‹œ์Šคํ…œ ๋กœ๊ทธ - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘, ์ข…๋ฃŒ, ํ™•์žฅ, ์›น ์š”์ฒญ ์ถ”์  ๋ฐ ์ฃผ๊ธฐ์ ์ธ ์ƒํƒœ ํ™•์ธ ๊ฒฐ๊ณผ์™€ ๊ฐ™์€ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ

3. Authentication & Authorization

  • ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ด์•ผ ํ•จ
  • JWT ๋“ฑ์„ ์‚ฌ์šฉ

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ

https://12factor.net/ko/

https://medium.com/dtevangelist/12-factors-๋ž€-b39c7ef1ed30

https://logical-code.tistory.com/174

https://developer.ibm.com/articles/15-factor-applications/

https://happy-coding-day.tistory.com/entry/1-API-First-Design-์„ค๊ณ„์˜-์„ ์ˆœํ™˜

 

'๐Ÿงถ Spring | Spring Boot > Spring Cloud & MSA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

MSA Structures  (0) 2022.10.27
SOA vs MSA  (0) 2022.10.27
Cloud Native Application  (0) 2022.10.26
Cloud Native Architecture  (0) 2022.10.26
On-Premise์™€ Cloud  (0) 2022.10.26
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.