Skip to Content
Dev Environment & ToolsIntelliJ 기반 K8s 로컬 CD 환경 구축
🛠️ Dev Environment & Tools2019년 9월 6일

IntelliJ 기반 K8s 로컬 CD 환경 구축

#skaffold#kubernetes#dev-environment-tools#intellij#cicd#dx

1. K8s 체제 전환 후 닥친 개발자 경험(DX)의 위기

과거 R&D 센터에서 모놀리식(Monolithic) 아키텍처를 버리고 수십 개의 스프링 부트(Spring Boot) 기반 마이크로서비스(MSA)를 쿠버네티스(K8s) 위에 일괄 전환하던 시기였습니다.

인프라의 안정성을 얻었지만, 백엔드 개발자들의 불만은 극에 달했습니다. 기존 로컬 개발 환경에서는 IDE에서 Run 버튼 하나면 톰캣 서버가 바로 올라가고 브레이크포인트(Breakpoint)를 걸어 디버깅이 가능했습니다. 하지만 K8s 환경에서는 로컬 테스트 루프가 다음과 같이 변형되었습니다.

  1. 수정한 소스코드 빌드 (Maven/Gradle)
  2. 도커 이미지 빌드 (docker build)
  3. 사내 레지스트리에 이미지 푸시 (docker push)
  4. K8s Deployment의 파드 롤아웃 (kubectl rollout restart)
  5. 파드가 뜰 때까지 대기 후 kubectl logs -f 확인

오타 하나를 고치고 결과를 보기 위해 **“빌드 -> 푸시 -> 배포 -> 확인”**의 지루한 과정을 수십 번 반복해야 했고, “이래서야 K8s 환경에서 Spring Boot 로컬 디버깅은 도대체 어떻게 하냐”는 원성이 자자했습니다.


2. 구원 투수: Skaffold와 Cloud Code 플러그인

이 끔찍한 파이프라인 병목을 해결하기 위해 구글에서 내놓은 오프소스 도구가 바로 Skaffold입니다.

  • Skaffold: 로컬 소스 코드의 변경을 실시간으로 감지(Watch)하여, 백그라운드에서 알아서 도커 이미지를 빌드 및 푸시하고 연동된 K8s 클러스터(사내망 K8s 인스턴스 또는 Minikube)에 배포해 주는 파이프라인 자동화 CLI 도구입니다.

여기에 Google Cloud Code 플러그인을 IntelliJ IDEA에 연동하면 금상첨화입니다. 개발자는 IDE 환경을 벗어나지 않고 웹서버의 **Hot Deploy(실시간 반영)**와 디버깅(Step Debugging) 모드까지 쿠버네티스 상의 파드(Pod) 프로세스에 직접 연결(Port-forwarding)할 수 있게 됩니다.


3. 도입 전 리서치 레퍼런스 및 구현 방식

초기 셋업을 위해 팀 내부에 공유되었던 주요 공식 문서와 블로그 레퍼런스 리스트입니다. 당시 저희 플랫폼 본부는 이 문서들을 바이블 삼아 표준 로컬 개발 템플릿 프로젝트를 구축했습니다.

  1. Skaffold 공식 Getting Started 가이드 
    • 기존 K8s YAML 매니페스트와 Dockerfile을 skaffold.yaml 하나로 묶어 동작시키는 핵심 철학을 이해할 수 있습니다.
  2. IntelliJ IDEA 용 Cloud Code 퀵스타트 
    • IntelliJ 플러그인을 설치하고 Run/Debug Configuration 세팅하는 방법입니다. 이제 이 셋팅 하나로 K8s 원격 디버깅이 뚫립니다.
  3. 조대협의 블로그: Skaffold 튜토리얼 기초/심화 
    • 구글 클라우드 조대협 님의 실무 베스트 프랙티스 한국어 가이드로서 사내 전파용으로 훌륭했습니다.

실제 사내 프로젝트의 skaffold.yaml 뼈대 (예시)

yaml
apiVersion: skaffold/v1 kind: Config build: artifacts: - image: registry.exem.local/dev/metrics-api context: . # Jib을 사용하여 Docker 데몬 없이도 빠짐없이 자바 이미지를 빠른 속도로 빌드 jib: {} deploy: kubectl: manifests: - k8s-deployment.yaml - k8s-service.yaml

저희는 백엔드가 자바/스프링이었기 때문에, Dockerfile을 일일이 유지보수하는 대신 Google Jib 플러그인을 결합하여 압도적인 빌드 속도 개선을 끌어냈습니다.


4. 로컬 CD 환경의 생산성 향상 체감

Skaffold 도입 초반에는 파일 싱크(File Sync) 기능의 타이밍 이슈로 불필요한 이미지 덤프가 발생해 오히려 로컬 리소스를 엄청나게 깎아먹는 등 시행착오도 있었습니다.

하지만 Jib과의 결합 등 .skaffold.yaml 셋업 룰이 정교해지고 Cloud Code 플러그인이 버전업을 거듭하며 안정화된 결과, 백엔드 개발자들이 **“이제 도커나 K8s 명령어를 1도 모르고도 예전처럼 로컬 개발 뷰스트랩에 100% 집중”**할 수 있는 진정한 의미의 클라우드 네이티브(Cloud-Native) 로컬 디버깅 환경이 완성되었습니다.

MSA 전환에 따른 개발 생산성 저하로 고민하는 데브옵스/인프라 팀이라면, 로컬 개발자 편의성을 극대화하는 Skaffold + Cloud Code 조합의 사내 표준화를 최우선 과제로 검토하시길 권장합니다.

Last updated on