πŸƒ 12 Factors

@GrinΒ· January 13, 2025 Β· 2 min read

Cloud Native Application κ°œλ°œμ„ μœ„ν•œ 12κ°€μ§€ 원칙

1. CODEBASE

  • μ½”λ“œλ² μ΄μŠ€λŠ” Git μ €μž₯μ†Œ ν•˜λ‚˜λ‘œ 관리
  • μ—¬λŸ¬ ν™˜κ²½(개발/ν…ŒμŠ€νŠΈ/운영)은 λ™μΌν•œ μ½”λ“œμ—μ„œ λΆ„κΈ°(branch)ν•˜μ—¬ 관리
  • ν•œ μ½”λ“œλ² μ΄μŠ€ = ν•˜λ‚˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜

2. DEPENDENCY

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄μ—μ„œ 쒅속성을 ν•΄κ²°
  • μ»¨ν…Œμ΄λ„ˆν™”λœ ν™˜κ²½μ—μ„œλŠ” μ˜μ‘΄μ„±μ΄ ν¬ν•¨λœ Docker 이미지 μ‚¬μš©

3. CONFIGURATIONS

  • μ‹œμŠ€ν…œ μ½”λ“œ μ™ΈλΆ€μ—μ„œ ꡬ성 관리 도ꡬλ₯Ό 톡해 마이크둜 μ„œλΉ„μŠ€μ— ν•„μš”ν•œ μž‘μ—…λ“€μ„ μ œμ–΄
  • ν™˜κ²½ λ³€μˆ˜(ENV)둜 μ„€μ • 관리

4. LINKABLE BACKING SERVICES

  • DB, Redis, S3 λ“±μ˜ λ°±μ—”λ“œ μ„œλΉ„μŠ€λŠ” 독립적인 λ¦¬μ†ŒμŠ€λ‘œ μ·¨κΈ‰( μ˜μ‘΄μ„± 제거 )
  • μ–Έμ œλ“ μ§€ ꡐ체 κ°€λŠ₯ν•˜λ„λ‘ ν™˜κ²½ λ³€μˆ˜ 기반 μ—°κ²°

5. STAGES OF CREATION

  • λΉŒλ“œ, 릴리즈, μ‹€ν–‰ 단계λ₯Ό λΆ„λ¦¬ν•˜μ—¬ 배포
  • 각각 κ³ μœ ν•œ 아이디λ₯Ό νƒœκ·Έλ‘œ 가져야함
  • λ‘€λ°± κΈ°λŠ₯ 제곡
  • CI / CD λ₯Ό ν†΅ν•œ μžλ™ν™” ꡬ좕 ν•„μš”

6. STATELESS PROCESSES

  • 각각의 마이크둜 μ„œλΉ„μŠ€λŠ” λΆ„λ¦¬λœ 채 λ…λ¦½μ μœΌλ‘œ 운영
  • ν•„μš”ν•œ μžμ›μ΄ μžˆλ‹€λ©΄ μΊμ‹œ, 데이터 μ €μž₯μ†Œλ₯Ό 톡해 외뢀와 κ΅ν™˜

7. PORT BINDING

  • 각 μ„œλΉ„μŠ€κ°€ HTTP μš”μ²­μ„ 직접 μ²˜λ¦¬ν•˜λ©°, ν•„μš”μ— 따라 Nginxλ‚˜ API Gatewayλ₯Ό 톡해 λΌμš°νŒ…λ§Œ 처리
  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 독립적인 ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹€ν–‰λ˜λ©°, 각 μ„œλΉ„μŠ€κ°€ κ³ μœ ν•œ 포트λ₯Ό 바인딩

8. CONCURRENCY

  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ + μ»¨ν…Œμ΄λ„ˆ μ‘°ν•©
  • Kubernetes, Docker Swarm을 μ‚¬μš©ν•œ μžλ™ ν™•μž₯ 지원
  • 단일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μΈμŠ€ν„΄μŠ€ λŒ€μ‹  μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰.

9. DISPOSABILITY

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λͺ‡ 초 λ‚΄λ‘œ μ‹œμž‘ κ°€λŠ₯ν•΄μ•Ό ν•˜λ©°, SIGTERM μ‹ ν˜Έλ₯Ό λ°›μ•„ 정상 μ’…λ£Œ κ°€λŠ₯ν•΄μ•Ό 함
  • μ„œλΉ„μŠ€ μΈμŠ€ν„΄μŠ€ μ‚­μ œκ°€ κ°€λŠ₯해야함

10. DEVELOPMENT & PRODUCTION PARITY

  • 개발 단계와 ν”„λ‘œλ•μ…˜ 단계λ₯Ό ꡬ뢄
  • 개발, μŠ€ν…Œμ΄μ§•, 운영 ν™˜κ²½ κ°„μ˜ 격차λ₯Ό 쀄이고, μ΅œλŒ€ν•œ μœ μ‚¬ν•œ ν™˜κ²½μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 개발, ν…ŒμŠ€νŠΈ 및 배포

11. LOGS

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 둜그λ₯Ό 파일둜 κ΄€λ¦¬ν•˜μ§€ μ•Šκ³ , ν‘œμ€€ 좜λ ₯으둜 전달
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직과 λΆ„λ¦¬λ˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” μƒνƒœμ—¬λ„ λ‘œκ·ΈλŠ” 정상 μž‘λ™ 해야함
  • λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œμ„ 톡해 μž₯기적으둜 λ³΄κ΄€λœ 둜그λ₯Ό 뢄석

12. ADMIN PROCESSES FOR EVENTUAL PROCESSES

  • 관리 ν”„λ‘œμ„ΈμŠ€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λ™μΌν•œ ν™˜κ²½μ—μ„œ μ‹€ν–‰
  • 관리 μž‘μ—…μ€ 운영 쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λΆ„λ¦¬λœ μž„μ‹œ μž‘μ—…μœΌλ‘œ, 데이터 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μΌνšŒμ„± 슀크립트 μ‹€ν–‰, λŒ€λŸ‰ 데이터 처리 등이 포함
  • Eventual ProcessesλŠ” νŠΉμ • μ‹œμ μ— μ‹€ν–‰λ˜λ©°, 이벀트 기반의 비동기 λ˜λŠ” μΌνšŒμ„± ν”„λ‘œμ„ΈμŠ€

    • λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜
    • λ°±κ·ΈλΌμš΄λ“œ 데이터 처리
    • 비동기 이메일 전솑
    • λŒ€λŸ‰ 파일 처리 (예: AWS S3와 μ—°λ™λœ μž‘μ—…)
@Grin
λ°±μ—”λ“œ 개발 λΈ”λ‘œκ·Έ