Kubernetes 는 구성의 특성 상 여러 작은 서비스들로 나뉘어 개발이 진행되기 때문에 디버깅이 어렵습니다.
기존 모놀리틱 애플리케이션이 단순히 코드 수정 후 재시작 혹은 Auto-reload 되던 것과는 다르게, 매번 소스 수정 후 빌드하여 반영하는 귀찮은 절차가 필요합니다.
이를 해결하기 위해 여러 커뮤니티 또는 회사들은 각자의 툴을 내놓았습니다.
사실 Skaffold 는 이미지 빌드, 저장소 푸시, 클러스터 배포 단계를 자동화 해주는 CD 툴 입니다.
위 이미지에서 보이듯 소스코드의 변동 사항을 감지해 빌드하고, 이미지에 태깅 한 후 저장소에 푸시 하며 자동으로 클러스터 내 배포 반영 해 줍니다.
이러한 동작으로 어느정도 개발이 편해지긴 했지만 결국 테스트 마다 시간이 걸리고 디버깅 자체가 어려운 문제점은 해결되지 않았습니다.
squash 는 지원되는 IDE (VS Code, IntelliJ, Eclipse) 의 디버그 기능을 컨테이너 내 소프트웨어와 연결하여 원격 디버깅을 할 수 있게 해주는 툴 입니다. Go, Java, Python, Node.js, GDB (C/C++ 등) 의 디버깅을 지원합니다.
다만 이는 Breakpoint 설정 및 Step-over, 변수 내용 조회 및 변경 정도의 기능이 가능한 정도이며 여전히 소스 코드를 수정하고 반영하는 작업은 수동으로 처리해야 하기 때문에 개발에 사용하기 어렵습니다.
Telepresense 는 지정된 서비스를 Proxy 로 대체하여 서비스에 유입되던 요청들을 로컬 PC 로 Proxing 해 줍니다. 로컬 PC 에서는 원하는 툴로 디버깅만 하면 되며 실시간으로 변경된 기능을 테스트 할 수 있어 개발이 편리합니다.
다만 동작 특성 상 운영 클러스터에서는 사용이 어려우며, 한 개발자가 클러스터 내에서 Telepresense 를 사용하면 같은 클러스터를 통해 개발하고 있던 개발자 또한 영향을 받을 수 있습니다.
이를 회피하기 위해 Istio 등의 별도의 서비스 메쉬를 이용해 특정 Header 가 박힌 요청이 들어왔을 때만 Telepresense Proxy 로 트래픽을 흘려주는 등의 추가 작업이 필요할 수도 있습니다.
\