About

Cloud Platform Engineering

Abstract.

ํด๋ผ์šฐ๋“œ ์„ธ์ƒ์—์„œ ์“ธ๋ชจ์žˆ๋Š” ์ธ์žฌ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” 4๋…„์ฐจ ํด๋ผ์šฐ๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. Kubernetes ๊ธฐ๋ฐ˜ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ ๊ตฌ์ถ•, ์šด์˜ ๋ฐ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, API Gateway ๊ฐœ๋ฐœ, ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ Oauth2 ์ธ์ฆ ๊ฐœ๋ฐœ, hypercloud ์›น์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๋ฐ CI&CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์„ ์ฃผ๋œ ์—ญํ• ์„ ๋งก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • Golang๊ธฐ๋ฐ˜ hypercloud backend ์›น์„œ๋ฒ„ ๊ฐœ๋ฐœ๊ณผ kubernetes-operator ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, kubespray(ansible-playbook)์œผ๋กœ HA kubernetes cluster๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ•, trouble shooting ๋Šฅ๋ ฅ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. CNCF ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ(ArgoCD Helm, Cert-manager)์™€ keycloak, oauth2-proxy, dex ๋“ฑ์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • kubernetes ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์™ธ๋ถ€ ์ธ์ฆ์„œ๋ฒ„(keycloak, google ๋“ฑ)๋ฅผ ํ†ตํ•œ ์ธ์ฆ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด OPA๋ฅผ ์—ฐ๊ตฌ ์ค‘์— ์žˆ์Šต๋‹ˆ๋‹ค.

  • API Gateway ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ API ์š”์ฒญ๊ณผ ๋ณด์•ˆ, tracing์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ backend ์„œ๋ฒ„ ๊ฐ„ service mesh (isio, linkderd)๋ฅผ ์—ฐ๊ตฌํ•˜์—ฌ ์ œํ’ˆ์— ๋„์ž…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„ ๊ฐ™์€ ์ง๋ฌด ์—ญ๋Ÿ‰๊ณผ ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— kubernetes๋ฅผ ์ ์šฉํ•˜๊ณ  ๋ฐฐํฌ๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ ๋ณด์•ˆ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์„ ๋งˆ๋ จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ํ•œ ๋Œ€ํ•™์› ๊ณต๋ถ€ํ•œ ์„ ํ˜•๋Œ€์ˆ˜, ํ™•๋ฅ , ๋จธ์‹ ๋Ÿฌ๋‹ ๊ฐœ์š” ๋“ฑ์˜ ์ง€์‹๊ณผ ์‹ค๋ฌด์—์„œ ์Œ“์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™œ์šฉ์„ ์œตํ•ฉํ•˜์—ฌ MLOps ๊ฐœ๋ฐœ์—์„œ๋„ ๋งŽ์€ ๊ธฐ์—ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Introduction.

์ œ ์ž์‹ ์„ ํ•œ ๋‹จ์–ด๋กœ โ€œ์™œ?โ€ ์ž…๋‹ˆ๋‹ค.
์˜๋ฏธ์™€ ์ง„์‹ค์„ ์ถ”๊ตฌํ•˜๊ธฐ์— ํƒ๊ตฌ์„ฑํ–ฅ์ด ๊ฐ•ํ•˜๋ฉฐ, ์ดํ•ด๊ฐ€ ๋๋‚˜๊ธฐ ์ „์—” ํ–‰๋™์— ์‹ ์ค‘ํ•œ ํŽธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ €์˜ ํŠน์ง•์„ ์†Œ๊ฐœ ํ•ฉ๋‹ˆ๋‹ค.

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

์œ„์™€ ๊ฐ™์€ ํŠน์ง•์„ ํ†ตํ•ด ์ œ๊ฐ€ ํ˜„ ํšŒ์‚ฌ์— ์—…๋ฌด ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ์ค‘์š”ํ•œ์ง€ ์Šค์Šค๋กœ ํƒ๊ตฌํ•˜๊ธฐ์— ํšŒ์‚ฌ์—์„œ ์ฃผ์–ด์ง„ ์—…๋ฌด์™€ ๋ณ„๊ฐœ๋กœ Kubernetes๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋œ CNCF ๋‹จ์ฒด์˜ ์ œํ’ˆ์„ ๊ณต๋ถ€ํ–ˆ์œผ๋ฉฐ, Cloud ํ™˜๊ฒฝ์˜ devops์˜ ํ•„์š”์„ฑ์„ ์ž๊ฐํ•˜๊ณ  ์ œํ’ˆ์— helm, argocd๋“ฑ์„ ์ ๊ทน ๋„์ž…ํ–ˆ์œผ๋ฉฐ ํšŒ์‚ฌ์—์„œ ์—…๋ฌด๋ฅผ ๋‚ด๋ ค์ฃผ๊ธฐ๋ณด๋‹ค ์Šค์Šค๋กœ ์—…๋ฌด๋ฅผ ๋งŒ๋“ค์–ด ์ผ์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋”์šฑ ๋” cncf ์ œํ’ˆ ์ค‘์‹ฌ์œผ๋กœ devops ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ์ง€์†์ ์œผ๋กœ ํ•˜๋ฉฐ ์„ฑ์žฅ์— ํž˜์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€์กฑํ•จ์„ ์•Œ๊ณ  ๋Š์ž„์—†์ด ์„ฑ์žฅํ•˜๋ ค ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์Šค์Šค๋กœ ์ฐพ์•„ ๊ณต๋ถ€ํ•˜๋ฉฐ, ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์‹ค๋ฌด์— ์ ์šฉํ•˜์—ฌ ํ™œ์šฉํ•ด ๋ณด๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ DevOps ๊ด€๋ จํ•ด ์ฑ…์„ ์ฐพ์•„ ์ฝ๊ณ , ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ๋” ์•Œ๊ณ  ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ํšŒ์‚ฌ์— ์ž…์‚ฌํ•˜์—ฌ ์„œ๋กœ ๋ฐœ์ „์„ ๋„๋ชจํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜์—ฌ ๋” ๋‚˜์€ ๊ฐ€์น˜๋ฅผ ์‹คํ˜„์‹œํ‚ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.


Work Experience.

ํ‹ฐ๋งฅ์Šค ํด๋ผ์šฐ๋“œ (๏ธ2019.02 ~ ํ˜„์žฌ)

API Gateway ๊ฐœ๋ฐœ (Ingress-Contoller)

๐Ÿ“‹ Description.

ํŒ€๋‚ด์—์„œ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€ ๋ณธ์ธ ์Šค์Šค๋กœ ๊ตฌ์ถ•ํ•˜๊ณ  ๋งŒ๋“  ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ API-Gateway ๊ฐœ๋…์„ ๋„์ž…ํ•˜๊ณ  ํ•ด๋‹น opensource ์ œํ’ˆ ๋ถ„์„๊ณผ troubleshooting์œ„ํ•œ ์†Œ์Šค์ฝ”๋“œ ๋ถ„์„, ingress-controller ์ค‘ ํ•˜๋‚˜์ธ traefik์„ ํ†ตํ•œ hypercloud ์ œํ’ˆ์„ ์œ„ํ•œ api-gateway ๊ตฌ์ถ•, ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ฑ์„ golang์œผ๋กœ ์ถ”๊ฐ€ ๊ฐœ๋ฐœํ•˜์˜€์œผ๋ฉฐ, keycloak ์—ฐ๋™์„ ํ†ตํ•œ ์ธ์ฆ,์ธ๊ฐ€ ๋กœ์ง๋„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€ secureํ†ต์‹ ์„ ์œ„ํ•œ tls ์ธ์ฆ์„œํ†ตํ•ฉ๊ณผ ์‚ฌ๋‚ด์— ๊ณต์ธ ๋„๋ฉ”์ธ ํ™˜๊ฒฝ์„ ์œ„ํ•ด AWS route53์„ ํ†ตํ•œ domain ๊ตฌ์ถ•๋„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ œํ’ˆ์„ CI&CD๋ฅผ ์œ„ํ•ด helm chart๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, gitops ํŒจํ„ด์„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด devops์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—“๏ธ What did I do.

  • traefik(Ingress-controller)๋ฅผ ์‚ฌ์šฉํ•œ api-gateway ๊ตฌ์ถ•
  • ์ธ์ฆ, ์ธ๊ฐ€ ๊ด€๋ จ ๋กœ์ง ๊ตฌ์ถ•
  • helm chart ๊ฐœ๋ฐœ
  • tls ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐ ํ†ตํ•ฉ ๊ด€๋ฆฌ
  • hypercloud ์ œํ’ˆ๋“ค์˜ reverse-proxy ๊ตฌ์ถ•
  • AWS router53์„ ํ†ตํ•œ ์ž์‚ฌ ๋„๋ฉ”์ธ ํ™˜๊ฒฝ ๊ตฌ์ถ•

๐Ÿ–ฅ๏ธ Tech Stack.

  • Traefik, Cert-manager
  • Golang, knowledge of L7 networking

OAUTH2 ์ธ์ฆ ํŒŒ์ดํ”„๋ผ์ธ ๊ฐœ๋ฐœ ๋ฐ ๊ตฌ์ถ• (Kubernetes Authentication)

๐Ÿ“‹ Description.

hypercloud ์ œํ’ˆ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ฒด๊ณ„๋ฅผ oidc(oauth2) ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ ์†Œ์Šค๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ๊ฐœ๋ฐœ๋œ id provider(keycloak) ์—์„œ oauth client ์˜คํ”ˆ ์†Œ์Šค ์ค‘ ํ•˜๋‚˜์ธ oauth2-proxy์— ํ•„์š”ํ•œ REST API ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. front ๊ฐœ๋ฐœ์ž์™€ ํ˜‘๋ ฅ์œผ๋กœ ๋กœ๊ทธ์ธ๋ถ€ํ„ฐ ๋กœ๊ทธ์•„์›ƒ๊นŒ์ง€ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์น˜๊ณ , ์ธ์ฆ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์— ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์†์‰ฌ์šด ๋ฐฐํฌ์™€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด helm chart๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ—“๏ธ What did I do.

  • oauth2(oidc), jwt, cookie ๊ฐœ๋… ์ •๋ฆฌ ๋ฐ ์‚ฌ๋‚ด๊ณต์œ 
  • oauth2proxy๋ฅผ ํ†ตํ•œ ์ธ์ฆ ์—ฐ๋™
  • helm chart ๊ฐœ๋ฐœ

๐Ÿ–ฅ๏ธ Tech Stack.

  • oauth2์˜ ๊ฐœ๋…์ดํ•ด, jwt ์ดํ•ด
  • Golang, helmchart, kubernetes

Hypercloud ์ธ์Šคํ†จ๋Ÿฌ ๊ฐœ๋ฐœ (Kubespray-Ansible, argoCD)

๐Ÿ“‹ Description.

ansible ๊ธฐ๋ฐ˜์˜ HA ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์›๊ฒฉ์„ค์น˜ ์œ„ํ•œ kubespray๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ hypercloud ์ธ์Šคํ†จ๋Ÿฌ ๊ฐœ๋ฐœ์„ ์ง€์›ํ–ˆ์œผ๋ฉฐ ๊ตฌ์ถ•๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ argoCD๋ฅผ ํ†ตํ•œ ์•ฑ ๋ฐฐํฌ๋ฅผ ๋‹ด๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ—“๏ธ What did I do.

  • kubespray๋ฅผ ํ†ตํ•œ ์ธ์Šคํ†จ๋Ÿฌ ๊ฐœ๋ฐœ
  • argoCD๋ฅผ ํ†ตํ•œ ์•ฑ ๋ฐฐํฌ ์ง€์›
  • ์—ฌ๋Ÿฌ ์•ฑ๋“ค์˜ ์„ค์น˜๋ฅผ ์œ„ํ•œ app of apps ํŒจํ„ด ์ง€์› (helm chart)

๐Ÿ–ฅ๏ธ Tech Stack.

  • ansible-playbook, kubespray
  • argoCD
  • helm chart

HyperCloud (Web Cloud Console)

๐Ÿ“‹ Description.

Kubernets ๊ธฐ๋ฐ˜์˜ ํด๋ผ์šฐ๋“œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ข€ ๋” ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ์›น ์„œ๋น„์Šค ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ œํ’ˆ์˜ ์•ˆ์ •์  ์šด์˜์„ ์œ„ํ•ด golang์œผ๋กœ ๊ตฌ์„ฑ๋œ backend ์„œ๋ฒ„ ๊ฐœ๋ฐœ๊ณผ ์•ˆ์ •์  ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ CI/CD ํŒŒ์ดํ”„ ๋ผ์ธ ๊ตฌ์ถ• ๋ฐ ์šด์˜์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Jenkins๋ฅผ ํ†ตํ•œ ์ด๋ฏธ์ง€ ๋นŒ๋“œ, argoCD๋ฅผ ํ†ตํ•ด ์šด์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ console์„ kubernetes ๋ฆฌ์†Œ์Šค๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” console-operator๋„ ๊ฐœ๋ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ—“๏ธ What did I do.

  • Backend ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๋ฐ ๊ด€๋ฆฌ
  • kubernetes ์ƒ์—์„œ์˜ CI&CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•
  • ์„ค์น˜๋ฅผ ์œ„ํ•œ installer ๊ฐœ๋ฐœ

๐Ÿ–ฅ๏ธ Tech Stack.

  • Golang. web programming
  • Jenkins, ArgoCD
  • Docker, kubernetes

Prozone (Event Management)

๐Ÿ“‹ Description.

ํด๋ผ์šฐ๋“œ ์ œํ’ˆ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ•˜๊ธฐ ์ „์— ์‚ฌ๋‚ด ํด๋ผ์šฐ๋“œ ์ œํ’ˆ์„ ๋งŒ๋“ค๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ œํ’ˆ ์ค‘ ์ค‘์•™์—์„œ ์ œํ’ˆ์˜ Event์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๊ธฐ๋Šฅ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—“๏ธ What did I do.

  • ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์š”๊ฑด์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ๊ณผ ์ œํ’ˆ ์œ ์ง€๋ณด์ˆ˜

๐Ÿ–ฅ๏ธ Tech Stack.

  • Java
  • ProObject (์ž์‚ฌ ๊ฐœ๋ฐœํˆด, spring๊ณผ ๋น„์Šท)

Problem-Solving Skill.

  • API Gateway ๋„์ž…๊ณผ์ •๊ณผ ๋ฐฐํฌ๊นŒ์ง€(devops)
    • ๋ฌธ์ œ ์ •์˜: ์ดˆ๊ธฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์šฐ๋“œ ์ œํ’ˆ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ L4 ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์˜คํ”ˆ์‹œํ”„ํŠธ ์ฝ˜์†” ๊ธฐ๋ฐ˜์œผ๋กœ webserver๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ํ•ด๋‹น websever์—์„œ backend ์„œ๋น„์Šค์˜ reverse proxy ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค.
    • ๋Œ€์•ˆ ๋„์ถœ: ์„œ๋น„์Šค ๋…ธ์ถœ์„ L4 ๊ธฐ๋ฐ˜์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ ๋” ์ƒ์œ„ ๋ ˆ์ด์–ด์ธ L7 ๊ธฐ๋ฐ˜์˜ ingress ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ์ถœ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด ๋” ์œ ์šฉํ•จ์„ ํ™•์ธํ•˜์˜€๊ณ , ingress-controller ํ›„๋ณด ์ค‘ traefik์ด๋ผ๋Š” opensource๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ๋‚ด ์ œํ’ˆ์— ๋Œ€ํ•œ API Gateway๋ฅผ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๋น„๊ต ๊ฒ€์ฆ: ingress-controller ํ›„๋ณด ์ค‘ kong, istio, nginx, traefik, haproxy ๋“ฑ๋“ฑ ๋งŽ์€ ์ œํ’ˆ๋“ค์ด ์žˆ์—ˆ์œผ๋‚˜ traefik์„ API-Gateway๋กœ ์„ ์ •ํ•˜์˜€์œผ๋ฉฐ, ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
      • golang์œผ๋กœ ๊ฐœ๋ฐœ๋˜์–ด ์†Œ์Šค์ฝ”๋“œ ๋‹จ๊นŒ์ง€ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” ์–ด๋–ค ์›์ธ์ด ์ƒ๊ฒผ์„ ๋•Œ ๋‚ด๋ถ€ ๋กœ์ง๊นŒ์ง€ ๋“ค์–ด๊ฐ€ ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ–ˆ๊ธฐ์— ์ถ”ํ›„ ๋‹ค๋ฅธ ingress-controller๋ฅผ ์‚ฌ์šฉํ•  ์‹œ์—๋„ ํ•ด๋‹น ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดํ•ด๋ฅผ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • API Gateway๋กœ์จ์˜ ๋‹ค์–‘ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑ์‹œ์ผฐ์œผ๋ฉฐ, CRD๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์š”๊ตฌ ๊ธฐ๋Šฅ๋“ฑ์„ ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€, ์‚ญ์ œ, ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ ์ง„ ์ ์šฉ: API Gateway๋ฅผ ํ†ตํ•ด ์‚ฌ๋‚ด ํด๋ผ์šฐ๋“œ ์ œํ’ˆ์ธ hypercloud๋ฅผ ingress ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ตํ•ฉํ•˜์˜€์œผ๋ฉฐ, backendํ†ตํ•ฉ ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด cert-manager๋ฅผ ๋„์ž…ํ•˜์˜€๊ณ , ๊ณต์ธ๋œ TLS์ธ์ฆ์„œ ๋ฐœ๊ธ‰์„ ์œ„ํ•ด aws route53์„ ํ†ตํ•œ ๋„๋ฉ”์ธ ๋ฐœ๊ธ‰, letโ€™s encrypt๋ฅผ ํ†ตํ•œ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ์œ ์ง€ ๋ณด์ˆ˜: ๊ฐœ๋ฐœ๋œ API Gateway๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ƒ์—์„œ ์›ํ• ํ•œ ์„ค์น˜๋ฅผ ์œ„ํ•ด helm chart๋กœ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด argoCD๋ฅผ ์ ๊ทน ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ, app of apps ํŒจํ„ด์„ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ๊ฐœ์˜ app์„ ํ•˜๋‚˜์˜ app์œผ๋กœ ๋ฌถ์–ด์„œ ์„ค์น˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๊ฒŒ๋” ์ž‘์—…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Skill.

Kubernete

  • kubernetes ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋ฒ•์„ ์ถฉ๋ถ„ํžˆ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ App์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CNCF์˜ ์ƒํƒœ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ kubernetes ๊ธฐ๋ฐ˜ ์œ„์˜ ๋‹ค์–‘ํ•œ opensource ํ”„๋กœ์ ํŠธ๋ฅผ ํ™œ์šฉํ•œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • Helm์„ ํ†ตํ•œ App ๋ฐฐํฌ ๋ฐ helm chart๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Jenkins์—์„œ kubernetes pod๋ฅผ ํ†ตํ•œ CI ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ArgoCD๋ฅผ ํ†ตํ•œ ์•ˆ์ •์ ์ธ CD ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Cert-Manager๋ฅผ ํ†ตํ•ด ์•ˆ์ •์ ์ธ TLS ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • API-GATEWAY ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ ์žˆ์œผ๋ฉฐ, traefik์„ ํ†ตํ•œ reverse-porxy ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • keycloak์„ ํ†ตํ•œ ์œ ์ €๋ณ„ ์ธ์ฆ, ์ธ๊ฐ€ ๊ด€๋ฆฌ์— ๋ฐฉ์•ˆ ๋ฐ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • helm ์„ ์‚ฌ์šฉํ•˜์—ฌ app์„ ๋ฐฐํฌํ•˜๊ณ  helm chart๋ฅผ production ๋ ˆ๋ฒจ๊นŒ์ง€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/tmax-cloud/gateway-helm-chart
    • ArgoCD๋ฅผ ์‚ฌ๋‚ด์— ์ ๊ทน ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ argocd๋ฅผ ํ†ตํ•œ helm chart ๋ฐฐํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ ํ•œ, GitOps ํŒจํ„ด์„ ์ด์šฉํ•ด git์„ ํ†ตํ•œ ์•ˆ์ •์ ์ธ ํ˜•์ƒ๊ด€๋ฆฌ ๊ฐœ๋…์„ ์‚ฌ๋‚ด์— ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • Cert-Manager๋ฅผ ํ†ตํ•œ TLS ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Golang

  • http ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  image๋กœ ํŒจํ‚ค์ง• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜คํ”ˆ์†Œ์Šค traefik์— http handler๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • net/http ํŒจํ‚ค์ง€๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, web framework ์ค‘ gorilla/mux ์™€ go-chi๋ฅผ ํ†ตํ•œ http ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • golang ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์ œํ’ˆ์„ ์ด๋ฏธ์ง€ ์ƒ์„ฑ๊ณผ ๋ฐฐํฌ๊นŒ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • kubebuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ kubernetes operator๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Linux ๊ธฐ๋ณธ ์ง€์‹ ๋ฐ Shell Script ์ž‘์„ฑ

  • ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•œ trouble shooting์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ) systemctl, journalctl๋ฅผ ํ†ตํ•œ ํ”„๋กœ์„ธ์Šค ๋™์ž‘
  • ๊ธฐ๋ณธ shell script์™€ makefile์„ ํ†ตํ•ด ์ œํ’ˆ ์„ค์น˜ shell script๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Education.

2009.03-2014.02 ์ˆญ์‹ค๋Œ€ํ•™๊ต ์ •๋ณดํ†ต์‹ ์ „์ž๊ณตํ•™๋ถ€ (ํ•™์ : 4.11/4.5, ์กธ์—…)

2014.03-2018.08 ์—ฐ์„ธ๋Œ€ํ•™๊ต ์ „๊ธฐ์ „์ž๊ณตํ•™๊ณผ ๋ฌด์„ ํ†ต์‹ ์ „๊ณต (ํ•™์  4.12/4.5, ์„๋ฐ•์‚ฌ ์ˆ˜๋ฃŒ)

Certification.

Certificate Kubernates Administrator, CKA ์ž๊ฒฉ์ฆ (2021.03.03 ์ทจ๋“)

Certified Kubernetes Security Specialist, CKS ์ž๊ฒฉ์ฆ (2024.10.23 ์ทจ๋“)

Language.

TEPS 741์  ์ทจ๋“์ผ์ž 2017.11.11