Levit People Interview

2달 만에 쿠버네티스로 마이그레이션 한 이야기

DevOps Engineer 김용현님

용현님 안녕하세요! 간단한 자기소개 부탁드립니다.

안녕하세요, 레브잇에서 DevOps 업무를 맡고 있는 7년차 DevOps 엔지니어 김용현입니다.

첫 커리어를 설치형 지도 서비스를 제공하는 회사에서 시작했어요. 프론트엔드 개발자로 입사하였지만 유지보수 팀으로 이동을 하며 백엔드, SQL Developer, 서버, 인프라를 담당하게 되었고 비용 효율화, 인프라 아키텍처에 대해 많은 것을 배울 수 있었습니다.

이후에는 쿠버네티스, ArgoCD, 관측시스템을 구축하고 운영해보고 싶어서 카사코리아로 이직해 DevOps 스킬을 고도화했고, 대규모 트래픽을 경험해보고 싶다는 열망이 생겨 야놀자의 플랫폼 엔지니어로 새로운 도전을 하게 되었어요.

야놀자에서 1년 6개월을 보내는 동안에도 많이 성장하였지만 이전처럼 더 큰 동기부여를 갖고 일했던 시절이 그리워졌고 그러한 스타트업을 찾던 중에 레브잇에 합류하게 되었어요.

레브잇에는 어떻게 합류하게 되셨나요?

사실 다른 회사의 채용 프로세스를 진행하고 이미 오퍼까지 받은 상태였고 레브잇과 올웨이즈에 대해 전혀 모르고 있었어요. 

그때 우연히 레브잇을 추천받았고, 면접을 준비하면서 올웨이즈 앱도 설치해보고 아직 다듬어지지 않은 서비스를 보면서 제 경험들로 도움을 줄 수 있겠다고 생각했어요.

입사 전에 당시 엔지니어링 스쿼드의 Problem Solver였던 지헌님과 커피챗을 하며 전반적인 회사 상황과 내부 인프라 현황에 대해서 이야기를 나누었는데 그때 ‘내가 합류하면 임팩트를 바로 보여줄 수 있겠다.’ 라는 확신이 들었어요.

현재는 레브잇을 이야기하면 아는 분들이 꽤나 있더라고요. (특히 올팜을요 ㅎㅎ) 제가 합류했을 때보다 더 많은 분들이 알고 있고 관심을 받는 것 같아서 뿌듯함을 느끼고 있어요.

현재 레브잇에서 어떤 업무를 담당하고 계신가요?

DevOps의 직군으로 일하고 있지만 저희 엔지니어링 팀은 독립적인 영역(개발 생산성, 서비스 안정화, 비용 최적화)으로 구분지어서 일하고 있지는 않아요. 본인이 하고 싶거나 잘할 수 있는 부분은 협업을 통해서도 진행할 수 있고 오너십을 가지고 일할 수 있어요.

다만, 그 와중에 제가 가장 중점적으로 맡고 있는 역할은 서비스 및 인프라의 가용성 확보와 비용 최적화와 관련한 부분이에요.

2달 만에 쿠버네티스로 마이그레이션을 끝냈다고 하던데, 사실인가요?

네, 맞습니다ㅎㅎ 이전에 새로 구축하거나 마이그레이션하는 작업을 진행해 봤기에 큰 어려움은 없었어요. 다만, 단발성의 서스 업무를 어떻게 방어할 지가 고민이었는데, 지헌님의 도움으로 DevOps 업무에만 몰입할 수 있었어요.

구체적으로 말씀드리면,

2달 소요된 쿠버네티스 마이그레이션 과정 (펼쳐보기)

제가 입사했을 때, 레브잇의 상황은 다음과 같았어요.


  • CI&CD가 제대로 구축되어 있지 않음. 되어 있어도 Github action을 self-hosted로 운영하여 특정 맥북에 문제가 생기면 배포를 할 수 없는 이슈가 존재하였음
  • 운영 환경에서 모두 접근하여 개발 및 분석을 진행하는 위험한 상황이었음.
  • 모든 인프라의 통제를 콘솔로 진행해서 이력 및 설정 변경에 대한 어려움과 동시 배포에 대한 리스크가 존재했음
  • 서비스의 90% 이상이 Node.JS 기반으로 운영되고 있었으며, 추천 및 검색 서버는 Python 기반으로 운영되고 있었음
  • EC2 + AutoScalingGroup의 구성으로 운영되고 있었으나 스케일 아웃의 속도 이슈로 이벤트 및 고정적으로 대규모 트래픽이 인입되는 오전에 빈번하게 장애가 발생했음
  • CloudWatch에서 ALB 단이나 Sentry로 로그를 볼 정도로 가시성 확보가 되어 있지 않았음


위의 상황에서 제가 목표로 삼은 것은 다음 3가지였어요.


  • IaC를 통한 인프라 코드화 및 완전 자동화하기
  • 쿠버네티스 이관으로 파드와 노드의 스케일 아웃 속도를 증가시켜 가용성을 확보하기
  • 쿠버네티스 환경에서 빠르게 고품질의 가시성을 확보하기 위해서 Datadog을 적용하기

당시 같이 일을 하셨던 엔지니어 팀원인 영재님과 업무를 분배했고, 저는 영재님께 CI(도커라이징)까지의 일을 전적으로 위임하고 트래픽 전환을 함께 진행 하였어요. 영재님은 CI를 처음 경험해 보셨지만 퍼포먼스가 워낙 좋아 제가 크게 신경쓸 부분이 없었어요.


일정은 팀원들과 회의 후 3개월에서 2개월로 조정하였고 제가 1달 동안 작업한 내용은 다음과 같았어요. (3개월도 충분히 도전적인 목표였지만..더 높은 목표인 2개월로 목표로 설정했어요.)


  • 네트워크 아키텍쳐 재설계 및 운영 정책 수립
  • 테라폼 클라우드와 Github Action으로 베타 환경 인프라 프로비저닝

나머지 1달 동안은 다음 업무를 진행했습니다.

  • MongoDB와 VPC 피어링을 통한 내부 통신으로 전환
  • 올웨이즈 서비스를 관리할 베이스 역할을 하는 helm chart 구성
  • GitOps Bridge 패턴을 이용하여 베타 환경에 쿠버네티스 애드온 및 올웨이즈 서비스 배포/운영
  • Github action + keel(Pulling 기반의 container image 업데이트를 진행) + ArgoCD을 이용하여 배포 전략 및 프로세스 수립
  • 테라폼으로 운영환경 프로비저닝 및 올웨이즈 서비스 배포
  • Route53의 Weigthed Routing을 통해서 트래픽을 점진적으로 기존 환경에서 EKS환경으로 옮김


위의 작업을 진행하면서 도커라이징 단계에서 빌드 시간 최적화 및 이미지 경량화를 하였고, 배포 단계에서 Graceful Shutdown을 사전에 미리 적용하여 다운타임 없이 안정적으로 마이그레이션을 진행하였어요. 물론 MongoDB와의 DNS리졸빙 이슈(차후 기술 블로그에 업데이트 할 예정)가 약간 있었으나 크게 영향을 미치지는 않았습니다.


결론적으로 쿠버네티스로 이관하는 프로젝트를 진행하면서 낸 결과물(자세한 수치는 기술블로그에 업데이트 할 예정)은 다음과 같아요.


  • 개발자들은 Github Action만 돌리고 슬랙에 수신되는 배포완료 알람만으로 기존보다 개발생산성이 매우 높아졌음
  • 운영자는 IaC 도입으로 누가, 언제, 왜, 인프라를 변경했는지 commit 기록으로 확인할 수 있음
  • 컨테이너화 및 배포 환경의 통일성으로 운영 환경 안정성 확보
  • 환경 구성이 획일화 되면서 beta, stage 등 다양한 환경을 Github Action 한 번으로 빠르게 인프라를 프로비저닝 할 수 있음
  • 쿠버네티스 이관으로 인해 애플리케이션의 로드(Node, Pod 생성 시간 + ALB TargetGroup의 등록되어 Health check가 완료되는 시간) 시간을 비약적으로 감소시켜 서비스 가용성 확보
  • Karpenter를 사용함으로써 EC2 프로비저닝 속도가 증가했고 그로 인해 가용성을 확보하고 스펙 범위 조정(Spot, Graviton)으로 비용 최적화를 하였음
  • kube-scheduler 및 overprovisioning으로 사전에 대규모 트래픽 대응
  • EC2 SSH 접근 제한 및 외부 인입을 위한 ALB를 제외한 모든 통신은 프라이빗 네트워크 통신을 진행함으로써 보안 강화

이러한 과정을 거쳐서, 빠르게 데이터독까지 도입하여 현재 DB를 제외한 인프라 단에서 거의 이슈가 생기지 않고 있어요. 이런 결과를 혼자 낸 것은 아니고 같이 일했던 훌륭한 두 동료가 있었기에 성공적으로 완수할 수 있었습니다.

레브잇에서 엔지니어로서 일하면서 만족스러운 부분이 있다면 소개해주세요!

처음에는 정말 똑똑한 사람들이 많이 모여 있는게 오히려 독이 되지 않을까 걱정이 됐어요.

하지만 입사하고 나서 제가 본 레브잇 팀원들은 모두가 각자의 부족함을 잘 인지하고 그것에 대한 해결책을 찾기 위해서 유연한 자세로 임하는 모습이었어요. 상호 간에 좋은 피드백을 주려고 노력하고 모두가 어떤 업무를 남의 일이라고 생각하지 않는 환경이 좋아요.

또, 자율성이 주어지지만 그에 걸맞도록 프로페셔널하게 임무를 완수하는 책임감 있는 분들이 많아서 동기 부여도 많이 되고, 종합적으로는 더 큰 임팩트를 낼 수 있는 환경입니다.

“시간이 돈보다 귀하다”라는 방향성이 정말 잘 녹아 있는 팀이라고 생각해요.

레브잇에 엔지니어로 합류한다면 어떠한 성장을 경험할 수 있나요?

레브잇에서는 연차에 상관없이 주도적으로 문제를 인지하고 우선순위를 조정하며 문제 해결까지 오너십을 가지고 일을 할 수 있어요.

혼자서 하는 것도 좋지만 혼자 해결하기 어려운 경우에도 최고의 동료들이 많은 도움을 주기 때문에 엔지니어인 동시에 Problem Solver로서 많은 성장을 할 수 있었어요.

그럼 지금 레브잇이 원하는 엔지니어는 어떤 분일까요? 

어떤 분들께 레브잇을 추천하고 싶으신지 궁금합니다.

레브잇에 수동적인 프로세스를 지향하는 엔지니어분이 오셨을 때는 적응하기 힘드실 수 있어요. 

하나부터 열까지 리딩 받거나 체계를 원하시는 분 보다는 본인이 문제를 파악하고, 우선순위를 조정하며, 문제를 해결하고자 하는 환경을 선호하시는 분이 오시면 좋을 것 같아요. 

동시에 훌륭한 동료들이 함께 협업할 준비가 되어 있습니다.

엔지니어로서 레브잇에서 이루고 싶은 목표가 있으신가요?

최고의 데브옵스 환경을 구축하고 싶고, 진심으로 그럴 수 있다고 믿고 있어요. 다만, 이것이 혼자서 해낼 수는 없는 일이기에 더 좋은 엔지니어 분들이 오시기를 간절히 바라고 있어요.

기본적으로 행복하게 일을 하려면 본인이 하는 업무에 집중할 수 있는 환경 조성이 중요하다고 봐요. 그러기 위해서는 장애 발생 최소화 및 최대한 자동화하여 개발 생산성을 높이고, 궁극적으로는 AI를 통해 사전에 장애를 예방하며 조치까지 할 수 있어야 한다고 생각해요.

‘이렇게 전부 자동화를 해놓으면 노는 것 아니야?’라고 생각하실 수 있지만, 데브옵스 업무는 계속해서 쌓이고 있습니다 ㅎㅎ

레브잇에 합류를 고민하시는 엔지니어 분들에게 한마디 해주세요!

현재 레브잇은 많은 부분이 변화하고 있어요.

조직 구성부터 체계나 조직의 방향성까지 모든 것이 달라지고 있다 보니 완전히 새로운 회사라고 생각하셔도 될 것 같고, 아마 기존에 일하시던 환경과 이질감이 크게 없다고 생각하셔도 될 것 같아요.

회사와 함께 본인도 폭발적으로 성장하는 경험을 원하시는 엔지니어 분이라면 망설이지 말고 적극적으로 합류를 권하고 싶어요!