2021-12-16-if-kakao-2021

Thing for Post Cloud Native

  • CMMI(Capability Maturity Model Integration)
  • Level 4
    • ์ •๋ง ๋งŽ์ด ์“ฐ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธก์ •์ด ํ•„์š”ํ•œ ๋‹จ๊ณ„
    • ์ •๋ง ๋งŽ์ด ์“ฐ๋Š”๋ฐ ํšจ์œจ์ ์œผ๋กœ ์“ฐ๊ณ  ์žˆ๋Š”๊ฑด๊ฐ€?
    • ์‚ฌ๋‚ด์—์„œ ๋ฆฌ์†Œ์Šค ํƒ์ง€ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ฌ
  • Level 5
    • ์ƒˆ๋กœ์šด ๊ณ ๋ฏผ๋“ค
    • ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ / ๋””๋ฐ”์ด์Šค / ์‹œ์Šคํ…œ
    • ์ปดํ“จํŒ… ์‹œ์Šคํ…œ / ์•„ํ‚คํ…์ณ
    • ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ
  • Cloud-Native?
    • ์ •๋ง ๋งŽ์€ ๋ฆฌ์†Œ์Šค / ๋ฐ์ดํ„ฐ / ์ด๋ฒคํŠธ / ์˜์กด์„ฑ์ด ๋ฐœ์ƒ
    • ์ ์  ํšจ์œจํ™” ๋ฐฉํ–ฅ์œผ๋กœ ์ƒ๊ฐํ•˜๊ฒŒ ๋จ
    • ๋ฆฌ์†Œ์Šค / ์˜์กด์„ฑ
      • ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ / ๋ฉ€ํ‹ฐ ์„œ๋น„์Šค ๋ชจ๋‹ˆํ„ฐ๋ง Sass ๊ฐœ๋ฐœ
    • ๋ฐ์ดํ„ฐ
      • RDB Service
      • K/V Service
      • Time Series DB Service
      • Log Stream DB Service
    • ์ด๋ฒคํŠธ
  • Sass๋กœ ๊ตฌ์„ฑ๋œ ์ƒˆ๋กœ์šด Cloud Native๊ฐ€ ์‹œ์ž‘์ด ๋˜๋Š”๊ฒŒ ์•„๋‹๊นŒ?
    • ์ƒˆ๋กœ์šด ํด๋ผ์šฐ๋“œ ๊ณ ๋ฏผ์˜ ์‹œ์ž‘

์นด์นด์˜คํ†ก ์„œ๋ฒ„์˜ ์Šคํ”„๋ง ๊ณตํ™”๊ตญ ํƒˆ์ถœ๊ธฐ

  • ์Šคํ”„๋ง ๊ณตํ™”๊ตญ์ด ์ข‹์€์ 

    • ๋งŽ์€ ๊ฒฝํ—˜์ž
    • ์ƒํƒœ๊ณ„
    • ์žฅ๊ธฐ๊ฐ„ ์ง€์›
    • ๋”ฐ๋ผ์„œ ๋งŒ๋“ค๊ธฐ ์‰ฝ๊ณ  ์˜ค๋žซ๋™์•ˆ ์“ฐ๊ธฐ ์ข‹์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„
  • ์Šคํ”„๋ง์˜ ๋‹จ์ ์€ ์—†์„๊นŒ?

    • ํ‘œ์ค€๋ณด๋‹ค ๊ด€์Šต
    • RFC7235 ๊ตฌํ˜„์˜ ๋‹ค๋ฆ„
      • Spring ์˜ˆ์™ธ๋ฅผ ๋˜์ง
      • Ktor ํ‘œ์ค€์„ ์ž˜ ์ง€ํ‚ด
    • ์ „์˜ ๋˜๋Š” ์˜์กด์„ฑ
      • ์—ฌ๋Ÿฌ๊ฐœ ๋ฒ„์ ผ์„ ๋™์‹œ์— ์‚ฌ์šฉ.
      • ๋ณ€๊ฒฝํ•˜๊ธฐ ๋งค์šฐ ๋ถˆํŽธํ•œ ์ƒํ™ฉ
  • ์Šคํ”„๋ง ๊ณตํ™”๊ตญ์˜ ํ˜œํƒ๋“ค?

    • Dependency Injection
    • Database Integration
    • Interceptor & Filter
  • ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ๋“ค

    • Kotiln?
      • ์ตœ์‹  ๊ธฐ๋Šฅ / ์ฝ”๋ฃจํ‹ด
    • Spring MVC
      • ๋ณต์žกํ•œ Servlet
    • Ktor
      • ๊ฐ„๋‹จํ•œ ์ฒ˜๋ฆฌ
      • ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์€ ์ง์ ‘ ์‚ฌ์šฉํ•ด ๊ตฌ์„ฑ
      • ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์ฝ”๋ฃจํ‹ด ์ œ๊ณต
  • Dependency Injection

    • Spring
      • ๋‹ค์–‘ํ•œ Callback ์ œ๊ณต
      • Annotation ๊ธฐ๋ฐ˜
    • Kotiln
      • Callback์€ ๋”ฐ๋กœ ์—†์Œ
      • DSL ํ˜•์‹
  • Database Integration

    • Spring
      • String์œผ๋กœ ๊ตฌ์„ฑ
      • ์ปดํŒŒ์ผ ์ฒดํ‚น์ด ์•ˆ๋จ
      • DSL ์‚ฌ์šฉํ•˜๋ ค๋ฉด QueryDSL ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
    • Kotlin
      • ์ž์ฒด DSL ์ง€์›
  • Interceptor & Filter

    • Spring
      • Filter - Interceptor ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ
    • Kotiln
      • ์ž์œ ๋กญ๊ฒŒ pipeline์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
      • ApplicationCallPipeline์œผ๋กœ ๊ตฌ์„ฑ
  • ํƒˆ์ถœ ํ›„๊ธฐ

    • ์Šคํ”„๋ง์€ ์™„์„ฑ๋œ ๊ธฐ๋Šฅ์ด ๋งŽ์•„ ํŽธํ•˜์ง€๋งŒ ํŠน์ • ํ”„๋ ˆ์ž„ ์›Œํฌ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์‹ถ์ง€ ์•Š๋‹ค.

๋‹ค์Œ์นดํŽ˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ด๊ด€๊ธฐ

  • Object manifest definition too
    • Helm
    • Kustomize
  • CI / CD
    • CI - Jenkins / Github action
    • CD - Spinnaker / ArgoCD
  • Stateless vs Stateful
    • ๊ธฐ์กด Statefulํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Stateless๋กœ ๋ณ€๊ฒฝ
  • Log System ๋ณ€๊ฒฝ
    • ๊ธฐ์กด์€ Filebeat๋กœ ์ฝ์–ด์„œ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ
    • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋กœ ์ „ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ์ถœ๋ ฅํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ - FluentD๋กœ ์ฝ์–ด ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉ
    • ๋ถˆํ•„์š”ํ•œ ๋กœ๊ทธ๋ฅผ ์ œ๊ฑฐ
  • ๋ฐฐํฌ๋ฐฉ์‹
    • ๊ธฐ์กด์€ Rolling Update
    • ์ „ํ™˜ ํ›„ Blue/Green, Canary ๋ฐฐํฌ ๋ฐฉ์‹
    • Warm up ์ด์Šˆ โ†’ Canary๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • 502 โ†’ 504 ์—๋Ÿฌ
      • EndPoint ์—…๋ฐ์ดํŠธ๊ฐ€ ๋Š๋ ค ๊ธฐ์กด Pod์— ํŠธ๋ž˜ํ”ฝ์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ
      • ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•
  • kubernetes ๋””๋ฒ„๊น… ๋„๊ตฌ Telepresence

์ด ๋ฉ‹์ง„ ์ฝ”๋“œ์— ์ปจ๋ฒค์…˜์„! : 2๋‹ฌ๊ฐ„์˜ ์ปจ๋ฒค์…˜ ๊ตฌ์ถ• ์—ฌ์ •

  • ์ปจ๋ฒค์…˜์„ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ
    • ์‚ฌ๊ณต์„ ์ค„์ด๊ธฐ
      • ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ์˜๊ฒฌ์„ ๋งž์ถ”๋Š”๊ฑด ์ข‹์ง€๋งŒ, ์ •๋‹ต์ด ์—†๋Š” ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ชจ์œผ๋Š” ๊ณผ์ •์€ ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.
    • ๋ฆฌ์„œ์น˜
      • ์œ ๋ช…ํ•œ ์ปจ๋ฒค์…˜์„ ์ฐพ์•„๋ณด๊ณ  ๋น„๊ต ๋ถ„์„
    • ์„ ํƒํ•˜๊ธฐ
      • ์ ์ ˆํ•˜๊ฒŒ ๋น„๊ตํ•˜๊ณ  ์„ ํƒํ•˜๊ธฐ
  • ์—ฌ์ •์ด ๋๋‚œ ํ›„ ์–ป์€ ๊ฒƒ๋“ค
    • PR Template
    • Commit Message Template
      • Change log
      • Release Note ์ž‘์„ฑ
    • EsLint
      • ์‚ฌ๋žŒ๋Œ€์‹  ํ•ด์ค„ ์ž๋™ํ™”
    • Provisioning Script
      • brew install script ์ž‘์„ฑ์œผ๋กœ ํŽธํ•œ๊ฒŒ ํ™˜๊ฒฝ์…‹ํŒ…์ด ๊ฐ€๋Šฅ

Kubernetes Cluster ํ™•์žฅ ์–ด๋””๊นŒ์ง€ ์•Œ์•„๋ณด๊ณ  ์˜ค์…จ์–ด์š”?

  • ๋ฆฌ์ ผ๋ณ„๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑ
    • ๊ณ ๋ฏผ ํฌ์ธํŠธ
      • ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๊ด€๋ฆฌ ํฌ์ธํŠธ ์ฆ๊ฐ€
      • ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์ƒ๋„ ์ฆ๊ฐ€
  • ํ•ด๊ฒฐ ๊ณผ์ •
    • ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ๊ด€๋ฆฌ
      • ๋…ธ๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ - Labeling๊ณผ taint ๊ด€๋ฆฌ
    • Service์˜ Resource ๊ด€๋ฆฌ
    • ์„œ๋น„์Šค ๋ฐฐํฌ

๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ์œ„ํ•œ Kubernetes Operator ํŒจํ„ด

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์›Œ์ปค ๋…ธ๋“œ์— ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ
    • ํด๋Ÿฌ์Šคํ„ฐ์™€ ์›Œ์ปค๋Š” 1๋Œ€1 ๊ด€๊ณ„๋กœ ์šด์˜๋˜์—ˆ์Œ
    • ๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์•ˆ๋˜์—ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ.
    • GitOps๊ฐ€ ๋ฌธ์ œํ•ด๊ฒฐ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ํ•ด๋‹ต์ด ์•„๋‹˜
  • ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ์œ„ํ•œ k8s ์ปจํŠธ๋กค๋Ÿฌ ๋””์ž์ธ ํŒจํ„ด ์ ์šฉ
    • ๋งค๋‹ˆ์ € ํด๋Ÿฌ์Šคํ„ฐ
      • ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์กด์žฌ
    • ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ
      • ํŒŒ๋“œ๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.
  • Resource, Management
    • ์ž์› ์ค‘๋ณต ์ œ๊ฑฐ
    • ๊ด€๋ฆฌ ํŽธ์˜์„ฑ ์ œ๊ณต
  • Kubernetes Operator

ํ‹ฐ์Šคํ† ๋ฆฌ์—์„œ airflowํ™œ์šฉ๊ธฐ

์•„๋ž‘๊ณ ์•ผ ํ”ผ๋“œ๋ฅผ ๋ถ€ํƒํ•ด! (RDB๋„ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž์˜ ์•„๋ž‘๊ณ DB ์‚ฝ์งˆ๊ธฐ)

Commerce Query data Rebuild Success ํ–ˆ์„๊นŒ