Back

About me

๐Ÿ˜„ ์†Œ๊ฐœ

  • ์ด๋ฆ„: ๋ฐ•์ง„์ˆ˜
  • ํ•™๋ ฅ: ๊ฒฝํฌ๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์กธ์—…

๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ณ  ์‹ถ์€ ๋ฐ๋ธŒ์˜ต์Šค ์—”์ง€๋‹ˆ์–ด ๋ฐ•์ง„์ˆ˜์ž…๋‹ˆ๋‹ค.

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

์—ฌ๋Ÿฌ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์ œํ’ˆ ์ค‘์—์„œ๋Š” ์ฃผ๋กœ Istio์™€ ArgoCD, Argo Rollout์„ ์ฃผ๋กœ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๊ธฐ์ˆ  ์Šคํƒ ๋ฐ ๊ด€์‹ฌ์‚ฌ

  • Kubernetes
  • Istio
  • ArgoCD
  • Argo Rollout
  • Helm3
  • Terraform
  • Backend
    • Golang
    • Java Spring Boot, JPA
    • MSA, DDD, CQRS, ๋ฉ”์‹œ์ง€ ํ, ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ์•„ํ‚คํ…์ณ
    • TDD

๐Ÿ’ผ ๊ฒฝ๋ ฅ ์‚ฌํ•ญ

๋ฐ๋ธŒ์‹œ์Šคํ„ฐ์ฆˆ ์ธํ”„๋ผ ํŒ€ ๋ฐ๋ธŒ์˜ต์Šค ์—”์ง€๋‹ˆ์–ด (2022.05~)

  • Istio, ArgoRollout, ArgoCD, Github Action, Helm์„ ์ด์šฉํ•ด Kubernetes์—์„œ ์†์‰ฝ๊ฒŒ Canary ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ”„๋ผ, CI/CD๋ฅผ ๊ตฌ์ถ•
  • ์„œ๋น„์Šค๋ฉ”์‰ฌ(Istio) ๊ด€๋ จ ์—…๋ฌด ์ˆ˜ํ–‰
    • Istio ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ง„ํ–‰
    • ์„ฑ๋Šฅ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐœ์„ 
    • Istio๋ฅผ ์šด์˜ํ•˜๋ฉด์„œ ์ˆ˜์‹œ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ArgoCD ๊ด€๋ จ ์—…๋ฌด ์ˆ˜ํ–‰
    • ArgoCD ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ ์ง„ํ–‰, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋„์ž…

๋‹น๊ทผ๋งˆ์ผ“ ํ”Œ๋žซํผ ํŒ€ ์„œ๋ฒ„ ์—”์ง€๋‹ˆ์–ด ์ธํ„ด [2021.12~2022.02]

  • ๋ฌธ์ž ๋ฐœ์†ก ํ”Œ๋žซํผ์˜ Golang ์„œ๋ฒ„๋ฅผ ๋‹ด๋‹น
    • ํŠนํžˆ ๊ธฐ์กด์— ๋ฐœ์ƒํ•˜๋˜ ์—๋Ÿฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์—…๋ฌด๋ฅผ ์ง„ํ–‰
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋ฃจ 400๊ฑด ์ •๋„ ๋ฐœ์ƒํ•˜๋˜ ๋ฌธ์ž ๋ฐœ์†ก ์—๋Ÿฌ๋ฅผ 95% ์ด์ƒ ํ•ด๊ฒฐ ๋ฐ ๊ฐ์†Œ
  • ๋ฌธ์ž ๋ฐœ์†ก ์—…์ฒด์˜ ์žฅ์•  ๋ฐ ๊ธฐํƒ€ ์žฅ์• ๋“ค์ด ์ „ํŒŒ๋˜์ง€ ์•Š๋„๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์—์„œ์˜ Circuit breaker ํŒจํ„ด์„ ์ ์šฉ
  • ํ•˜๋ฃจ ์ˆ˜ ๋ฐฑ๊ฑด์”ฉ ๋ฐœ์ƒํ•˜๋˜ ๋ฌธ์ž ๋ฐœ์†ก ์—…์ฒด์™€์˜ keep-alive ๊ด€๋ จ ์ด์Šˆ ํ•ด๊ฒฐ
    • Wireshark๋กœ TCP ํŒจํ‚ท ๋ถ„์„ ํ›„ ๋ฌธ์ž ์—…์ฒด ์ธก MaxIdleConnectionTimeout์„ ๋ฐํ˜€๋ƒ„
  • ๋ฌธ์ž ๋ฐœ์†ก์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์ง€ ๋ชปํ•œ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ์žฌ์‹œ๋„ ๋กœ์ง ๊ฐœ์„ 

๋ฐฐํ‹€ํŒก ๊ฐœ๋ฐœ ๋ฆฌ๋“œ [2021.03~2021.12]

battlepang.drawio.png battlepang-preview.png

์งง์€ ์˜์ƒ์„ ๋ฐ”ํƒ•์œผ๋กœํ•œ ๋Œ€๊ฒฐ ์„œ๋น„์Šค ๋ฐฐํ‹€ํŒก์—์„œ AWS ์ธํ”„๋ผ ๊ด€๋ฆฌ ๋ฐ Spring boot ์œ„์ฃผ๋กœ ์ „์ฒด ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • TDD๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Spring Boot RESTful API ์„œ๋ฒ„ ๊ฐœ๋ฐœ
  • JPA๋ฅผ ์ด์šฉํ•˜๋ฉฐ ๋ณต์žกํ•œ ์ฐธ์กฐ ๊ด€๊ณ„๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ
    • ์กฐํšŒ ์‹œ ๋งค๋ฒˆ ํŠน์ • ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ๋ฐฐ์น˜ ๋ฐฉ์‹๋กœ ํŠน์ • ๊ฐ’์˜ ์Šค๋ƒ…์ƒท์„ ์ €์žฅ
    • ๋ฐฐ์น˜ ๋ฐฉ์‹์˜ In-Query ๋˜๋Š” ํŽ˜์น˜ ์กฐ์ธ ์ด์šฉ
    • ๋ถˆํ•„์š”ํ•œ Eager Loading ์ œ๊ฑฐ
  • AWS๋ฅผ ์ด์šฉํ•œ ํด๋ผ์šฐ๋“œ ์•„ํ‚คํ…์ณ ์„ค๊ณ„ ๋ฐ ๊ด€๋ฆฌ
    • ํ‰์†Œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์— ์ต์ˆ™ํ–ˆ์ง€๋งŒ ์ดˆ๊ธฐ ์Šคํƒ€ํŠธ์—…์˜ ์ƒํ™ฉ์— ๋งž์ถฐ Elastic Beanstalk ๋ฐ”ํƒ•์˜ ์•„ํ‚คํ…์ณ ์„ค๊ณ„.
  • Jenkins์™€ Github Action์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ/๋นŒ๋“œ/๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”

Megazone Cloud์—์„œ DevOps ์ธํ„ด [2020.04~2020.08]

megazone.drawio.png

  • terraform์„ ์ด์šฉํ•ด AWS ๊ฐœ๋ฐœ ์ธํ”„๋ผ๋ฅผ IaC๋กœ ๊ตฌ์ถ• ๋ฐ ๊ด€๋ฆฌ
    • terraform์„ ํ†ตํ•ด IaC๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์„ ์–ธ์ ์ธ ์„ค์ •๊ณผ ๋ฉฑ๋“ฑ์„ฑ์ด ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ์•ˆ์ •์„ฑ, ์ค‘์š”์„ฑ์„ ๋Š๋ผ๊ฒŒ ๋จ.
    • ๋‹จ์ˆœํžˆ ์งœ์—ฌ์ง„ ์•„ํ‚คํ…์ณ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ข€ ๋” ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ๋“ค์ด๋‚˜ ์„ค๊ณ„ํ•˜๋Š” ๋ฒ•๋„ ๋ฐฐ์›Œ๊ฐˆ ์ˆ˜ ์žˆ์—ˆ์Œ.
  • Kubernetes(AWS EKS) ์œ„์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋“ค์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ด€๋ฆฌ
  • Spinnaker, Github Action, Jenkins๋ฅผ ํ†ตํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™”
    • ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์ ‘ํ•ด๋ณด๋ฉด์„œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ž์‹ ๊ฐ์ด ์ƒ๊ฒผ๋‹ค.
  • ํŒ€์—์„œ ๊ฐœ๋ฐœ ์ค‘์ธ ์„œ๋น„์Šค๋ฅผ Helm chart๋กœ ํŒจํ‚ค์ง•
    • SaaS ํ˜•ํƒœ๋กœ๋งŒ ์ด์šฉ ๊ฐ€๋Šฅํ–ˆ๋˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ˜•์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
    • Helm chart๊ฐ€ ๊พธ์ค€ํžˆ ๊ฐœ๋ฐœ๋˜์–ด ํ›„์—๋Š” ์‚ฌ๋‚ด์˜ SaaS๋„ Helm์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ๋“ฏํ•จ.

๐Ÿ’ป ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ

์ฟ ๋ฎค ํ”„๋กœ์ ํŠธ ๋ฆฌ๋“œ, ๋ฐ๋ธŒ์˜ต์Šค ์—”์ง€๋‹ˆ์–ด, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ [2020.10~xxxx.xx]

khumu-argo.png

๊ฒฝํฌ๋Œ€ํ•™๊ต ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค ์ฟ ๋ฎค ๊ฐœ๋ฐœ ์ค‘

  • ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ•
    • ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ Golang, Java Spring boot, Python Django ๋“ฑ์˜ ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋„์ž…ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ๊ฒฝํ—˜์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ์Œ
  • ๋Œ€ํ•™์ƒ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ๋น„์šฉ ์ตœ์ ํ™”
  • ArgoCD์™€ Github Action์„ ์ด์šฉํ•œ CI/CD
    • ๋ฐ๋ธŒ์˜ต์Šค ์ธํ„ด ๋•Œ ๊ฒฝํ—˜ํ–ˆ๋˜ ArgoCD์™€ Spinnaker ์ค‘ ArgoCD ArgoCD๋ฅผ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์— ๋„์ž…ํ•˜๊ธฐ๋กœ ์„ ํƒ
      • ArgoCD๊ฐ€ ์ข€ ๋” IaC๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์› ๊ณ , ๊ตฌ์ถ•ํ•˜๊ธฐ๋„ ํŽธํ–ˆ๋‹ค. GitOps๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์•„์ฃผ ํŽธํ–ˆ์Œ.
      • Spinnaker์—๋Š” CI์™€์˜ ์—ฐ๋™์ด๋‚˜ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ๋“ค๋„ ๋งŽ์•˜์ง€๋งŒ ๊ฐ€๋ณ๊ฒŒ Github Action์œผ๋กœ CI๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ์šฐ๋ฆฌ์—๊ฒ ํ•„์š” ์—†๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์•˜๋‹ค.
  • ๋ถ€๋ถ„์ ์œผ๋กœ TDD๋ฅผ ๋„์ž…
    • Golang์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋Œ“๊ธ€ ์„œ๋น„์Šค, Spring Boot๋กœ ๊ตฌํ˜„ํ•œ ์•Œ๋ฆผ ์„œ๋น„์Šค์—์„œ TDD๋ฅผ ๋„์ž….
    • ๋น„๊ต์  Django๋กœ ๊ตฌํ˜„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฉ”์ธ ์„œ๋น„์Šค๋Š” ๋‹จ์ˆœ CRUD ์œ„์ฃผ์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์—†์ด ์ง„ํ–‰ํ• ๋งŒ ํ–ˆ์Œ.

๋ˆˆ๋ฐ”๋””์—์„œ ๋ฐฑ์—”๋“œ, ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ ๋‹ด๋‹น [2021.08~xxxx.xx]

depromeet-backend.png depromeet_store.png

๊ฐœ๋ฐœ ๋™์•„๋ฆฌ ๋””ํ”„๋งŒ์—์„œ 10๊ธฐ ๋ฐฑ์—”๋“œ ํฌ์ง€์…˜์œผ๋กœ ํ™œ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Golang ์œ„์ฃผ์˜ MSA
    • ์ธ์ฆ, ์ธ๊ฐ€, ์š”์ฒญ ์ „๋‹ฌ ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” API Gateway ์„œ๋ฒ„
    • RESTful API ์ž‘์—…์„ ์œ„ํ•œ API ์„œ๋ฒ„
    • ๋™์˜์ƒ ๋ฐ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” Python ์„œ๋ฒ„
  • ElasticBeanstalk๊ณผ Lambda ์œ„์ฃผ์˜ ์„œ๋ฒ„ ์„ค๊ณ„
  • TDD, ์œ ๋‹›ํ…Œ์ŠคํŠธ, Mocking์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ

๊ธฐํƒ€ ํ™œ๋™๋“ค

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Hugo๋กœ ๋งŒ๋“ฆ
Jimmy์˜ Stack ํ…Œ๋งˆ ์‚ฌ์šฉ ์ค‘