TypeScript 미드레벨 배포·운영 기술면접

TypeScript 미드레벨 (3~7년) 배포 · 운영 3문항 조회수 68 · 2026-09-09 (수) 07:40:46
1 CI/CD 파이프라인
Medium

Q. TypeScript 프로젝트의 CI/CD 파이프라인에서 빌드 단계와 배포 단계를 분리하는 이유를 설명하고, GitHub Actions나 GitLab CI에서 빌드 아티팩트를 여러 환경(dev, staging, production)에 재사용하는 전략을 설명해주세요. 특히 TypeScript 컴파일과 환경변수 주입 시점을 어떻게 설계해야 하는지 포함해주세요.

동일한 빌드 산출물을 여러 환경에 배포할 때 환경별 설정을 어떻게 분리할지 생각해보세요.

A. 모범답안

빌드와 배포를 분리하면 동일한 아티팩트를 여러 환경에 배포하여 일관성을 보장할 수 있습니다. TypeScript 컴파일은 빌드 단계에서 한 번만 수행하고, 환경변수는 런타임에 주입하거나 배포 단계에서 환경별 설정 파일을 교체합니다. 이를 위해 process.env 대신 설정 서비스를 사용하거나, Docker 이미지에 빌드 결과만 포함하고 환경변수를 컨테이너 실행 시 주입합니다. GitHub Actions에서는 build job에서 dist 폴더를 아티팩트로 업로드하고, deploy job에서 다운로드하여 환경별로 배포합니다. 이 방식은 빌드 시간을 절약하고, 프로덕션에 배포되는 코드가 스테이징에서 검증된 것과 동일함을 보장합니다.

핵심 포인트
  • • 빌드 아티팩트 재사용으로 일관성 보장
  • • 환경변수는 런타임 주입 또는 배포 단계 교체
  • • TypeScript 컴파일은 빌드 단계에서 한 번만 수행
  • • CI/CD 도구의 아티팩트 저장소 활용
답변에 넣으면 좋은 키워드
빌드 아티팩트 환경변수 주입 불변 배포 Docker 이미지 CI/CD 파이프라인 런타임 설정
실무에서는

마이크로서비스 환경에서 동일한 Docker 이미지를 dev, staging, production 환경에 순차적으로 배포할 때 사용됩니다.

Follow-up 질문

TypeScript 프로젝트에서 빌드 시점에 환경변수를 번들에 포함시키는 방식(예: Webpack DefinePlugin)과 런타임에 주입하는 방식의 보안 및 유연성 측면의 트레이드오프를 설명해주세요.

2 무중단 배포
Hard

Q. Node.js TypeScript 애플리케이션을 Kubernetes 환경에서 무중단 배포할 때 발생할 수 있는 문제점들(요청 유실, 연결 끊김, 헬스체크 타이밍)을 설명하고, readinessProbe, livenessProbe, graceful shutdown, preStop hook을 어떻게 조합하여 안전한 배포를 구현하는지 설명해주세요. 특히 Express 서버에서 SIGTERM 시그널 처리 로직을 어떻게 작성해야 하는지 포함해주세요.

Pod가 종료될 때 새로운 요청을 받지 않으면서 기존 요청은 완료하도록 처리하는 방법을 생각해보세요.

A. 모범답안

무중단 배포 시 Pod 종료 과정에서 로드밸런서가 아직 트래픽을 보내거나 진행 중인 요청이 중단될 수 있습니다. readinessProbe는 서버가 트래픽을 받을 준비가 되었는지 확인하고, livenessProbe는 서버가 정상 동작하는지 확인합니다. graceful shutdown은 SIGTERM 시그널을 받으면 새로운 연결을 거부하고 기존 요청이 완료될 때까지 대기한 후 종료합니다. Express에서는 server.close()로 새 연결을 차단하고 setTimeout으로 강제 종료 타임아웃을 설정합니다. preStop hook에서 sleep을 추가하여 로드밸런서가 엔드포인트를 제거할 시간을 확보합니다. readinessProbe 엔드포인트에서는 종료 신호를 받으면 unhealthy를 반환하여 트래픽을 먼저 차단합니다.

핵심 포인트
  • • readinessProbe로 트래픽 라우팅 제어
  • • SIGTERM 처리로 graceful shutdown 구현
  • • preStop hook으로 로드밸런서 동기화 시간 확보
  • • 진행 중인 요청 완료 대기 및 타임아웃 설정
답변에 넣으면 좋은 키워드
graceful shutdown SIGTERM readinessProbe livenessProbe preStop hook 연결 드레이닝
실무에서는

실시간 API 서비스에서 배포 중에도 사용자 요청이 실패하지 않도록 보장할 때 필수적입니다.

Follow-up 질문

WebSocket 연결이 있는 Node.js 애플리케이션을 무중단 배포할 때 기존 연결을 유지하면서 새 버전으로 전환하는 전략을 설명해주세요.

3 모니터링 및 로깅
Medium

Q. TypeScript Node.js 애플리케이션에서 구조화된 로깅(Structured Logging)을 구현하는 이유와 방법을 설명하고, 프로덕션 환경에서 요청 추적을 위한 Correlation ID(또는 Trace ID) 패턴을 미들웨어 수준에서 어떻게 구현하는지 설명해주세요. 또한 ELK 스택이나 CloudWatch 같은 로그 수집 시스템에서 이러한 구조화된 로그를 활용하는 방법도 포함해주세요.

여러 마이크로서비스를 거치는 요청을 추적하려면 로그에 어떤 정보가 일관되게 포함되어야 할지 생각해보세요.

A. 모범답안

구조화된 로깅은 로그를 JSON 형태로 출력하여 검색, 필터링, 집계가 용이하도록 합니다. Winston이나 Pino 같은 라이브러리를 사용하여 timestamp, level, message, context를 포함한 구조화된 로그를 생성합니다. Correlation ID는 요청 진입점에서 생성하거나 헤더에서 추출하여 AsyncLocalStorage나 cls-hooked를 사용해 요청 생명주기 동안 전파합니다. Express 미들웨어에서 요청마다 고유 ID를 생성하고, 모든 로그와 외부 API 호출 헤더에 포함시킵니다. ELK 스택에서는 Correlation ID를 키로 사용하여 분산 시스템의 여러 서비스 로그를 하나의 요청 플로우로 연결하여 추적할 수 있습니다. 이를 통해 에러 발생 시 전체 요청 경로를 빠르게 파악할 수 있습니다.

핵심 포인트
  • • JSON 형태의 구조화된 로그로 검색 및 분석 용이
  • • Correlation ID로 분산 시스템의 요청 추적
  • • AsyncLocalStorage로 ID 전파
  • • 로그 수집 시스템에서 ID 기반 필터링
답변에 넣으면 좋은 키워드
구조화된 로깅 Correlation ID AsyncLocalStorage Winston Pino 분산 추적
실무에서는

마이크로서비스 아키텍처에서 여러 서비스를 거치는 사용자 요청의 전체 흐름을 추적하고 병목 지점을 찾을 때 사용됩니다.

Follow-up 질문

OpenTelemetry를 사용하여 TypeScript 애플리케이션에서 로그, 메트릭, 트레이스를 통합 관리하는 방법과 기존 로깅 라이브러리와의 차이점을 설명해주세요.

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!