사이드카, 언제 쓰고 언제 피해야 하나?

결론부터 쓰면, 사이드카는 애플리케이션 코드를 건드리지 않고 mTLS·재시도·로그 수집·관측을 주입하는 강력한 도구지만, Pod 하나에 프록시 하나가 더 붙는 순간 네트워크 홉, 리소스, 장애 반경이 함께 늘어난다. 판단 기준은 "쿠버네티스를 쓸 수 있느냐"가 아니라 "사이드카가 더하는 비용을 지금 서비스 규모와 팀 인원이 감당할 수 있느냐"다. Kubernetes 1.33에서 네이티브 사이드카가 GA 됐지만, 이건 시작·종료 순서를 런타임이 대신 처리해준다는 뜻이지 Pod마다 보조 프로세스를 하나씩 운영하는 비용 자체가 사라졌다는 뜻은 아니다. 출처

  • Istio 사이드카는 mTLS 적용 시 3,200 RPS에서 p99 지연시간이 166% 증가했고, 12,800 RPS에서는 목표 처리량을 달성하지 못했다
  • 같은 조건에서 Linkerd는 33% 증가, Istio Ambient는 8% 증가에 그쳤다 — Pod당 프록시 구조와 공유 계층 구조의 차이가 드러난다
  • 서버리스 환경에서는 메시 정책 적용 시 p50이 7배, p99가 254배까지 늘어난 사례가 보고됐다
  • 복제본 100개에 프록시 메모리 150MiB씩이면 이론상 15,000MiB가 추가로 필요하다 — "서비스당 1개"가 아니라 "복제본×사이드카"로 계산해야 한다
  • 서비스 수가 적고 트래픽 변동성이 낮다면 단순 컨테이너 런타임 쪽 운영 경로가 더 짧다

이 선택은 크게 세 축에서 갈린다. 하나, 사이드카가 실제로 얼마나 지연시간과 리소스를 먹는가. 둘, 트래픽이 몰리는 구간에서도 그 비용이 유지되는가, 아니면 특정 지점에서 급격히 무너지는가. 셋, 서비스 수와 팀의 운영 여력이 그 비용을 감당할 만큼 되는가. 아래에서 하나씩 짚는다.

지연시간과 메모리, 실제로 얼마나 늘어나나?

사이드카 하나를 추가하면 평균적으로도 체감되는 비용이 붙는다. 2025년 공개된 서비스 메시 비교 실험에서 Istio 사이드카는 기준 구성 대비 p99 지연시간이 약 0.38초 늘었고, Linkerd 사이드카는 약 0.09초 늘었다. 같은 실험에서 Istio 사이드카는 클라이언트 쪽 CPU가 0.81코어, 메모리가 255MiB 늘었고 서버 쪽은 CPU 0.87코어, 메모리 169MiB가 늘었다. 출처

mTLS를 켜면 격차는 더 벌어진다. Istio 사이드카는 mTLS 적용 시 지연시간 증가율이 166%, Linkerd는 33%였고, Pod마다 프록시를 두는 대신 노드·공유 계층에서 트래픽을 처리하는 Istio Ambient는 8% 증가에 그쳤다. 이 숫자는 이 실험의 부하 모델과 버전에 종속된 값이라 모든 환경의 고정 오버헤드로 읽으면 안 되지만, 구조 차이가 숫자 차이로 이어진다는 신호로는 유효하다. 다른 연구에서는 애플리케이션·프록시 조합에 따라 지연시간이 1.5~2.5배, 처리량 변동성이 2.4배까지 벌어질 수 있고, 필터 처리만으로 CPU 사이클의 1~10%가 추가된다고 보고했다. TCP에서 HTTP로 바꾸면 처리량이 약 2.4배 저하됐다는 결과도 있어, 네트워크 호출 횟수만으로 비용을 추정하면 안 되고 실제 프로토콜 조합으로 측정해야 한다. 출처

트래픽이 몰리면 사이드카는 버텨주나?

평균 지연시간만 보면 사이드카 비용이 작아 보이지만, 특정 부하 구간을 넘으면 양상이 달라진다. 같은 실험에서 Istio 사이드카는 3,200 RPS에서 mTLS 지연시간 증가가 166%였고, 12,800 RPS에서는 목표 처리량 자체를 달성하지 못했다. 반면 Istio Ambient는 3,200 RPS에서 8% 증가였고 12,800 RPS에서도 상대적으로 낮은 지연시간을 유지했다. 출처 "사이드카를 붙이면 평균이 조금 나빠진다"가 아니라, 특정 RPS 구간을 넘으면 tail latency와 처리 가능량이 함께 무너질 수 있다는 뜻이다.

짧게 실행되고 자주 생성·삭제되는 작업일수록 이 문제가 두드러진다. 2025년 서버리스 대상 연구에서는 메시 정책을 적용했을 때 p50이 7배, p99가 254배까지 늘어난 사례가 보고됐고, 사이드카를 포함한 cold start는 무메시 환경의 약 1.2초에서 약 4초로 늘었다. 출처 배치 작업이나 짧은 Job, 오토스케일링으로 Pod가 자주 뜨고 사라지는 워크로드라면 사이드카 초기화 비용이 전체 처리시간에서 차지하는 비중을 먼저 재는 게 순서다.

서비스 수와 팀 역량으로는 어떻게 갈리나?

서비스 수가 적고 공통 기능이 로그 수집·헬스체크·간단한 TLS 종료 정도이며 복제본 수와 트래픽 변동성이 낮다면, Docker Compose나 단순 컨테이너 런타임에 에이전트 하나를 두는 편이 운영 경로가 짧다. 이 경우 Kubernetes의 스케줄러, 컨트롤러, Admission webhook, sidecar injection 정책을 따로 관리하지 않아도 된다.

서비스는 여러 개인데 클러스터 업그레이드, CNI, Ingress, 인증서, 노드 장애, 오토스케일러를 직접 운영할 여력이 부족하다면 Cloud Run, AWS ECS/Fargate, Azure Container Apps 같은 매니지드 플랫폼을 먼저 비교하는 게 합리적이다. 다만 플랫폼마다 사이드카 지원 방식과 네트워크 모델이 달라서, 선택 전에 cold start·동시성·로그·서비스 간 인증을 같은 부하로 검증해야 한다.

Kubernetes와 사이드카 조합이 설득력을 얻는 쪽은 서비스 수가 많고 배포·스케일링 정책이 다양하며, 팀이 클러스터 운영과 관측·보안 자동화를 감당할 수 있고, mTLS·트래픽 정책·재시도·분산 추적을 여러 서비스에 일관되게 적용해야 할 때다. 그래도 모든 Pod에 프록시를 자동 주입하기보다, 호출량과 지연시간 목표, 보안 요구가 높은 네임스페이스부터 단계적으로 넣는 쪽이 장애 반경을 줄인다.

이 수치는 어떤 조건에서 재현해야 믿을 만한가?

위에서 인용한 숫자들은 전부 특정 버전·특정 부하 모델에서 나온 값이라 그대로 복사해서 자기 서비스에 적용하면 안 된다. 실사용 비교라면 Kubernetes 버전, Istio·Linkerd·Envoy 버전, 노드 인스턴스 타입, CNI, CPU 아키텍처, 애플리케이션 이미지, 요청 크기, 동시 연결 수, RPS, TLS·mTLS 여부, 프록시 필터, replica 수, 측정 도구와 측정 시간을 같이 적어야 한다.

평균 지연시간 하나만 들고 오는 리포트는 비교 가치가 낮다. p50·p95·p99·p999, 성공률, 재시작 수, CPU throttling, working-set 메모리, 노드당 Pod 밀도까지 같이 제시해야 재현 가능한 비교가 된다. 리소스 산정도 마찬가지다. 사이드카는 Pod 단위로 붙기 때문에 "서비스당 한 개"가 아니라 "복제본 수 × 사이드카 수"로 계산해야 한다. 애플리케이션 복제본 100개에 프록시 메모리 150MiB가 추가되면 이론상 약 15,000MiB의 요청 메모리가 더 필요하다는 식인데, 이건 설계 예시일 뿐 실측값이 아니다. 실제 사용량은 프록시 버전, 연결 수, 필터, TLS, 트래픽 패턴에 따라 달라진다.

사이드카 붙이고 나서 뭘 자주 놓치나?

가장 흔한 함정은 "애플리케이션 로그가 깨끗하니 문제없다"는 착각이다. 애플리케이션 컨테이너가 정상이어도 사이드카가 과부하되거나 인증서 갱신에 실패하면 요청 경로 전체가 영향을 받는다. 반대로 사이드카 리소스 제한을 너무 낮게 잡으면 프록시가 OOMKilled 되거나 재시작을 반복하면서, 원인은 프록시인데 증상은 애플리케이션의 네트워크 오류·지연시간으로 나타난다. 그래서 장애 회고를 쓸 때는 애플리케이션 로그만 보지 말고 프록시 재시작 횟수, 연결 수, 인증서 상태, CPU throttling, 메모리 working set, p99/p999를 같이 남겨야 원인을 구분할 수 있다.

또 하나는 "사이드카를 붙이면 시작·종료 순서는 자동으로 해결된다"는 과신이다. Kubernetes 1.33의 네이티브 사이드카는 initContainers에 restartPolicy: Always를 지정하면 애플리케이션보다 먼저 뜨고 나중에 종료되는 순서를 런타임이 맡아주지만, startup·readiness·liveness probe를 애플리케이션의 실제 생명주기와 맞추는 책임은 여전히 운영팀에 남는다. 출처 순서 문제가 해결됐다고 운영 설계까지 끝났다고 보면 안 된다.

그래서 어떤 상황에 무엇을 고르나?

2026년 기준으로 정리하면, 선택은 트래픽 특성과 팀 역량의 조합으로 좁혀진다.

  • 서비스 수가 적고 복제본·트래픽 변동이 낮다면: 단순 컨테이너 런타임 + 에이전트 하나가 운영 경로가 짧다
  • 서비스는 여럿인데 클러스터 운영 인력이 부족하다면: 매니지드 컨테이너 플랫폼을 먼저 비교하고 cold start·인증을 같은 부하로 검증한다
  • 서비스 수가 많고 mTLS·트래픽 정책·분산 추적을 여러 서비스에 일관되게 적용해야 한다면: Kubernetes와 사이드카를 쓰되, 전체 Pod가 아니라 보안·지연 요구가 높은 네임스페이스부터 단계적으로 적용한다
  • 배치·짧은 Job·오토스케일링이 잦은 워크로드라면: 사이드카 cold start 비용을 전체 처리시간 대비로 먼저 측정한 뒤 결정한다

핵심 정리

  • 사이드카는 코드 변경 없이 보안·관측·트래픽 제어를 주입하지만, Pod마다 프록시가 붙는 순간 지연시간·리소스·장애 반경이 함께 늘어난다
  • Istio 사이드카는 mTLS 적용 시 p99 지연시간이 166%까지 늘고 12,800 RPS에서 목표 처리량을 달성하지 못한 사례가 있다 — 평균이 아니라 특정 부하 구간의 급격한 악화를 봐야 한다
  • 서버리스·짧은 Job에는 사이드카 초기화 비용이 전체 처리시간에서 차지하는 비중이 커서, cold start가 1.2초에서 4초로 늘어난 사례가 보고됐다
  • 리소스는 "서비스당 1개"가 아니라 "복제본 수 × 사이드카 수"로 계산해야 한다
  • 선택은 서비스 수·트래픽 변동성·팀의 클러스터 운영 여력이라는 세 축으로 갈린다 — 쿠버네티스를 쓸 수 있는지보다 사이드카 비용을 지금 감당할 수 있는지를 먼저 측정한다