답변에 포함해야 할 키워드

  • 무중단 배포: 서비스가 중단되지 않도록 서버를 업데이트하는 방법
  • CI/CD: 지속적인 통합과 배포를 위한 자동화 파이프라인 구축
  • 도커(Docker): 애플리케이션을 컨테이너로 패키징하는 도구
  • Kubernetes: 컨테이너 오케스트레이션 도구로, 애플리케이션 확장 및 관리
  • 로깅 및 모니터링: 서버의 상태를 추적하고 문제 발생 시 대응
  1. 서버를 무중단 배포하는 방법에 대해 설명해주세요
  2. CI/CD 파이프라인을 구축한 경험이 있나요? 사용한 도구를 설명해 주세요
  3. 도커 컨테이너와 가상 머신의 차이점을 설명해주세요
  4. 마이크로서비스 아키텍처란 무엇이며, 이를 사용해야 하는 이유를 설명해주세요
  5. 모니터링 도구를 사용해 서버 성능을 추적한 경험을 설명해주세요

1. 서버 무중단 배포

  1. 서버를 무중단 배포하는 방법에 대해 설명해주세요

무중단 배포

  • 서비스 중단 없이 애플리케이션을 배포하는 방식
  • 사용자는 배포 과정에서 장애나 다운타임을 경험하지 않고 지속적으로 서비스 이용 가능

Rolling 배포

  • 사용중인 인스턴스들에 새 버전의 서비스를 점진적으로 배포하는 방법
  • 서비스중인 인스턴스 하나를 로드밸런서에서 라우팅하지 않도록 한 뒤 새로운 서비스를 적용하여 다시 라우팅
  • 이를 반복하여 모든 인스턴스에 새 버전의 서비스 배포
  • 장점
    • 인스턴스마다 차례로 배포를 진행하기 때문에 이슈 발생 시 쉽게 롤백 가능
    • 기존 인스턴스에 추가적인 인스턴스를 늘리지 않아도 됨
    • 관리 용이
  • 단점
    • 새 버전을 배포할 때 라우팅되어있는 인스턴스 수가 감소하기 때문에 동작중인 인스턴스에 트래픽이 몰릴 수 있음
    • 배포 진행 시 기존 버전과 새로운 버전이 함께 존재하여 호환성 문제 발생 가능

Blue Green 배포

  • Blue - 기존 버전, Green - 새로 배포될 버전
  • 신버전을 배포하고 일제히 전환하여 모든 연결이 신 버전을 바라보게 하는 전략
  • 배포시점에 로드밸런서를 통해 모든 트래픽이 일제히 전환
  • 장점
    • 구버전 인스턴스가 그대로 남아있어 빠른 롤백 가능
    • 운영 환경에 영향을 주지 않고 새 버전 테스트 가능
  • 단점
    • 시스템 자원이 두 배로 필요해 비용이 더 많이 발생함

Canary 배포

  • 지정 서버 or 특정 유저에게만 배포 후 정상적이면 전체 배포
  • 서버 트래픽을 일부 신 버전으로 분산시켜 오류 여부 확인
  • 장점
    • 문제 상황 빠르게 감지하여 성능 모니터링에 유용
    • 실사용자 환경에서 배포 검증 가능
  • 단점
    • 네트워크 트래픽 제어에 부담이 될 수 있음

무중단 배포를 위해 고려해야 할 사항

  • 로드밸런서 활용 : 트래픽을 새로운 버전으로 점진적 이동
  • 헬스 체크 : 배포 중 장애 감지
  • 배포 자동화
  • 모니터링 및 로그 관리

2. CI/CD 파이프라인

CI/CD 파이프라인을 구축한 경험이 있나요? 사용한 도구를 설명해 주세요

CI/CD

  • 개발부터 배포까지의 과정을 자동화하는 소프트웨어 개발 방법론

CI(Continuous Integration, 지속적 통합)

  • 개발자가 변경한 코드가 중앙 저장소에 푸시되면 자동으로 빌드 및 테스트 수행
  • 코드 품질을 유지하면서 여러 개발자의 작업 통합

CD(Continuous Deployment, 지속적 배포)

  • CI 이후 테스트를 통과한 코드가 자동으로 운영 환경 또는 스테이징 환경에 배포

3. 도커 컨테이너

도커 컨테이너와 가상 머신의 차이점을 설명해주세요

도커 컨테이너

  • 컨테이너 : 애플리케이션과 그 실행에 필요한 모든 파일을 패키징하여 독립된 환경에서 실행할 수 있도록 해주는 기술
  • 도커 : 컨테이너 기반의 가상화 기술을 제공하는 플랫폼
  • 이미지 기반 배포로 빠른 실행과 배포 가능
  • 특징
    • 경량 가상머신보다 적은 리소스 사용 : OS 커널을 공유하여 불필요한 OS 중복 제거
    • 빠른 시작 및 실행
    • 이식성 어디서나 동일한 환경 제공 가능

가상 머신

  • 하나의 물리적인 서버에서 여러 개의 운영체제를 실행할 수 있도록 하는 기술

  • 하이퍼바이저를 통해 하드웨어를 가상화하여 여러 개의 운영체제 실행

  • 각 VM은 자체 커널과 OS 완전한 독립성

  • 특징

    • 높은 격리성 보안성이 뛰어남
    • 하드웨어 자원 활용 효율정 증가
    • 운영체제마다 별도 리소스 필요
  • 빠른 배포 및 확장 도커

  • 마이크로서비스 도커

  • 다양한 운영체제 가상머신

  • 보안 중요 가상 머신

4. 마이크로 서비스 아키텍처

마이크로서비스 아키텍처란 무엇이며, 이를 사용해야 하는 이유를 설명해주세요

MSA

  • 애플리케이션을 작은 독립적인 서비스들의 집합으로 구성하는 아키텍처
  • 각 서비스는 특정 기능을 담당하며 독립적으로 배포, 운영, 확장 가능한 특징을 가짐
  • 하나의 거대한 애플리케이션을 여러개의 독립적인 서비스로 나누어 운영하는 방식

특징

  1. 각 서비스는 독립적으로 실행 & 배포 가능 장애 발생 시 다른 서비스에 영향 최소화
  2. 각 서비스는 개별 데이터 저장소 사용 가능 데이터베이스 스키마가 변경되어도 다른 서비스에 영향 X
  3. 서비스 간 통신은 API 활용 서비스 간 결합도를 낮춰 유연한 확장

사용해야 하는 이유

  1. 확장성 증가 : 특정 기능에 대한 트래픽이 증가해도 해당 서비스만 별도로 확장 가능
  2. 개발 속도 향상 & 빠른 배포 가능 : 팀별로 독립적인 서비스 개발 가능
  3. 장애 격리 가능 : 하나의 서비스가 다운되더라도 전체 시스템이 영향을 받지 않음
  4. 유지보수 및 코드 관리 용이 : 코드가 작은 단위로 분리되어 유지보수가 쉬움

단점

  • 복잡성 증가 서비스가 많아질수록 운영 & 관리가 어려움
  • 서비스 간 통신 부담 네트워크 지연 & API 호출 비용 발생
  • 데이터 일관성 유지 어려움 각 서비스 별 DB 관리해야 함

마이크로서비스는 규모가 큰 애플리케이션에 적합한 아키텍처