TypeScript 주니어 배포·운영 기술면접

TypeScript 주니어 (1~3년) 배포 · 운영 5문항 조회수 22 · 2026-08-25 (화) 22:11:09
1 CI/CD 파이프라인
Easy

Q. TypeScript 프로젝트를 GitHub Actions를 사용해 자동으로 빌드하고 배포하려고 합니다. CI/CD 파이프라인의 기본 단계(빌드, 테스트, 배포)를 설명하고, TypeScript 프로젝트에서 각 단계에서 실행해야 하는 주요 명령어들을 설명해주세요.

npm run build, npm test 등의 스크립트가 어떤 순서로 실행되어야 하는지 생각해보세요.

A. 모범답안

CI/CD 파이프라인은 크게 빌드, 테스트, 배포 단계로 구성됩니다. 먼저 빌드 단계에서는 npm install로 의존성을 설치하고, npm run build로 TypeScript를 JavaScript로 컴파일합니다. 테스트 단계에서는 npm test로 유닛 테스트를 실행하고, npm run lint로 코드 품질을 검사합니다. 배포 단계에서는 빌드된 결과물을 서버나 클라우드 플랫폼에 업로드합니다. TypeScript 프로젝트에서는 타입 체크를 위해 tsc --noEmit 명령어를 추가로 실행하여 컴파일 오류를 사전에 확인하는 것이 중요합니다.

핵심 포인트
  • • 빌드-테스트-배포의 3단계 구성
  • • 의존성 설치 후 TypeScript 컴파일
  • • 타입 체크와 린트를 통한 코드 품질 검증
  • • 테스트 통과 후 배포 진행
답변에 넣으면 좋은 키워드
CI/CD GitHub Actions npm build tsc lint 자동화
실무에서는

실무에서는 코드를 main 브랜치에 머지할 때마다 자동으로 빌드와 테스트가 실행되어 배포 전에 오류를 사전에 발견합니다.

Follow-up 질문

빌드 단계에서 실패했을 때 배포가 진행되지 않도록 하려면 GitHub Actions 워크플로우를 어떻게 설정해야 하나요?

2 Docker 컨테이너
Medium

Q. TypeScript Node.js 애플리케이션을 Docker 컨테이너로 배포하려고 합니다. Dockerfile을 작성할 때 포함해야 하는 주요 단계들과, 이미지 크기를 최적화하기 위한 방법들을 설명해주세요. 특히 multi-stage build를 사용하는 이유와 node_modules 처리 방법을 중심으로 설명해주세요.

빌드 단계와 실행 단계를 분리하면 최종 이미지에 불필요한 파일을 포함하지 않을 수 있습니다.

A. 모범답안

Dockerfile은 기본 이미지 선택, 의존성 설치, 소스 복사, 빌드, 실행 단계로 구성됩니다. Multi-stage build를 사용하면 빌드 단계에서만 필요한 devDependencies와 TypeScript 컴파일러를 최종 이미지에서 제외할 수 있어 이미지 크기를 크게 줄일 수 있습니다. 첫 번째 스테이지에서 npm install과 npm run build를 실행하고, 두 번째 스테이지에서는 빌드된 JavaScript 파일과 production 의존성만 복사합니다. node_modules는 .dockerignore에 추가하여 로컬 파일이 복사되지 않도록 하고, 컨테이너 내부에서 npm ci --only=production으로 설치합니다. 또한 Alpine 기반 Node.js 이미지를 사용하면 기본 이미지 크기를 줄일 수 있습니다.

핵심 포인트
  • • Multi-stage build로 빌드 도구 제외
  • • devDependencies와 production dependencies 분리
  • • .dockerignore로 불필요한 파일 제외
  • • Alpine 이미지로 기본 크기 최적화
답변에 넣으면 좋은 키워드
Docker Dockerfile multi-stage build node_modules .dockerignore Alpine
실무에서는

실무에서는 Docker 이미지 크기가 배포 시간과 스토리지 비용에 직접적인 영향을 미치므로 최적화가 필수적입니다.

Follow-up 질문

Docker 이미지를 빌드할 때 레이어 캐싱을 활용하여 빌드 속도를 개선하려면 package.json과 소스 코드를 어떤 순서로 COPY 해야 하나요?

3 무중단 배포
Medium

Q. TypeScript로 작성된 REST API 서버를 운영 중인데, 새 버전을 배포할 때 서비스 중단 없이 배포하고 싶습니다. Blue-Green 배포와 Rolling 배포 방식의 차이점을 설명하고, 각 방식의 장단점과 어떤 상황에서 어떤 방식을 선택해야 하는지 설명해주세요.

두 버전을 동시에 실행하는 방식과 순차적으로 교체하는 방식의 차이를 생각해보세요.

A. 모범답안

Blue-Green 배포는 기존 버전(Blue)과 새 버전(Green)을 동시에 실행하고, 로드밸런서를 통해 트래픽을 한 번에 전환하는 방식입니다. 문제 발생 시 즉시 롤백이 가능하지만, 두 배의 리소스가 필요합니다. Rolling 배포는 여러 인스턴스 중 일부를 순차적으로 새 버전으로 교체하는 방식으로, 리소스 효율적이지만 배포 중 두 버전이 공존하므로 하위 호환성이 필요합니다. Blue-Green은 중요한 서비스나 데이터베이스 스키마 변경이 있을 때 적합하고, Rolling은 리소스가 제한적이거나 빈번한 배포가 필요한 경우에 적합합니다. TypeScript API 서버에서는 데이터베이스 마이그레이션 전략과 함께 배포 방식을 결정해야 합니다.

핵심 포인트
  • • Blue-Green은 트래픽 일괄 전환, Rolling은 순차 교체
  • • Blue-Green은 빠른 롤백 가능하지만 리소스 2배 필요
  • • Rolling은 리소스 효율적이지만 버전 공존 시 호환성 필요
  • • 데이터베이스 변경과 연계하여 배포 전략 수립
답변에 넣으면 좋은 키워드
무중단 배포 Blue-Green Rolling 로드밸런서 롤백 하위 호환성
실무에서는

실무에서는 사용자가 서비스 중단을 경험하지 않도록 배포 시간대와 방식을 신중하게 선택하여 비즈니스 영향을 최소화합니다.

Follow-up 질문

Rolling 배포 중에 새 버전에서 버그가 발견되었을 때, 일부 인스턴스만 새 버전으로 업데이트된 상태에서 어떻게 대응해야 하나요?

4 애플리케이션 모니터링
Medium

Q. 운영 중인 TypeScript Node.js API 서버의 상태를 모니터링하기 위해 헬스체크 엔드포인트를 구현하려고 합니다. 헬스체크 엔드포인트가 확인해야 하는 주요 항목들과, Liveness Probe와 Readiness Probe의 차이점을 설명해주세요. 또한 데이터베이스 연결 상태를 헬스체크에 포함할 때 주의해야 할 점은 무엇인가요?

서버가 살아있는지 확인하는 것과 요청을 받을 준비가 되었는지 확인하는 것은 다른 목적입니다.

A. 모범답안

헬스체크 엔드포인트는 서버의 기본 동작 여부, 데이터베이스 연결 상태, 외부 의존성 연결 상태 등을 확인합니다. Liveness Probe는 애플리케이션이 살아있는지 확인하여 실패 시 컨테이너를 재시작하고, Readiness Probe는 트래픽을 받을 준비가 되었는지 확인하여 실패 시 로드밸런서에서 제외합니다. Liveness는 간단한 응답만 확인하고, Readiness는 데이터베이스 등 의존성까지 확인하는 것이 일반적입니다. 데이터베이스 연결 확인 시 타임아웃을 짧게 설정하여 헬스체크 자체가 병목이 되지 않도록 해야 하며, 연결 풀의 일부만 사용하여 실제 트래픽에 영향을 주지 않아야 합니다. TypeScript에서는 각 의존성의 상태를 타입 안전하게 반환하도록 구현합니다.

핵심 포인트
  • • Liveness는 생존 여부, Readiness는 트래픽 수신 가능 여부 확인
  • • Liveness는 단순하게, Readiness는 의존성 포함하여 확인
  • • 데이터베이스 체크 시 타임아웃과 연결 풀 관리 필수
  • • 각 의존성의 상태를 구조화하여 반환
답변에 넣으면 좋은 키워드
헬스체크 Liveness Probe Readiness Probe 데이터베이스 연결 타임아웃 모니터링
실무에서는

실무에서는 Kubernetes 같은 오케스트레이션 도구가 헬스체크를 통해 문제가 있는 인스턴스를 자동으로 교체하여 서비스 안정성을 유지합니다.

Follow-up 질문

헬스체크 엔드포인트가 자주 실패하여 컨테이너가 반복적으로 재시작되는 상황을 방지하려면 어떤 설정을 조정해야 하나요?

5 배포 롤백
Hard

Q. TypeScript API 서버의 새 버전을 배포한 후 사용자들이 특정 기능에서 에러를 경험하고 있다는 보고가 들어왔습니다. 이전 버전으로 롤백을 결정했을 때, 안전하게 롤백하기 위해 확인해야 하는 사항들과 롤백 절차를 설명해주세요. 특히 데이터베이스 마이그레이션이 포함된 배포였다면 어떤 추가 고려사항이 있나요?

코드만 되돌리면 되는지, 데이터베이스 스키마 변경도 함께 고려해야 하는지 생각해보세요.

A. 모범답안

롤백 시 먼저 현재 발생하는 에러의 범위와 영향도를 파악하고, 로그와 모니터링 도구로 근본 원인을 확인해야 합니다. 코드 롤백은 이전 버전의 Docker 이미지를 재배포하거나 Git 태그를 이용해 이전 커밋으로 되돌립니다. 데이터베이스 마이그레이션이 포함된 경우, 새 버전에서 추가된 컬럼이나 테이블이 있다면 이전 코드가 정상 동작하는지 확인해야 합니다. 마이그레이션을 롤백하면 새 버전 배포 중 생성된 데이터가 손실될 수 있으므로, 가능하면 스키마 변경은 하위 호환성을 유지하도록 설계하고, 데이터 마이그레이션과 코드 배포를 분리하는 것이 안전합니다. 롤백 후에는 반드시 헬스체크와 주요 기능 테스트를 수행하여 정상 동작을 확인해야 합니다.

핵심 포인트
  • • 에러 범위 파악 후 롤백 결정
  • • Docker 이미지 또는 Git 태그로 코드 롤백
  • • 데이터베이스 마이그레이션 롤백 시 데이터 손실 위험 고려
  • • 하위 호환성 유지하는 스키마 변경 전략 필요
  • • 롤백 후 헬스체크와 기능 테스트 필수
답변에 넣으면 좋은 키워드
롤백 데이터베이스 마이그레이션 하위 호환성 Docker 이미지 Git 태그 모니터링
실무에서는

실무에서는 롤백 가능성을 항상 염두에 두고 배포하며, 특히 금융이나 커머스 서비스에서는 데이터 정합성이 중요하므로 마이그레이션 전략을 신중하게 수립합니다.

Follow-up 질문

배포와 롤백을 더 안전하게 만들기 위해 데이터베이스 스키마 변경을 어떤 단계로 나누어 진행하는 것이 좋을까요?

댓글 0

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

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