답변에 포함해야 할 키워드
- 무중단 배포: 서비스가 중단되지 않도록 서버를 업데이트하는 방법
- CI/CD: 지속적인 통합과 배포를 위한 자동화 파이프라인 구축
- 도커(Docker): 애플리케이션을 컨테이너로 패키징하는 도구
- Kubernetes: 컨테이너 오케스트레이션 도구로, 애플리케이션 확장 및 관리
- 로깅 및 모니터링: 서버의 상태를 추적하고 문제 발생 시 대응
- 서버를 무중단 배포하는 방법에 대해 설명해주세요
- CI/CD 파이프라인을 구축한 경험이 있나요? 사용한 도구를 설명해 주세요
- 도커 컨테이너와 가상 머신의 차이점을 설명해주세요
- 마이크로서비스 아키텍처란 무엇이며, 이를 사용해야 하는 이유를 설명해주세요
- 모니터링 도구를 사용해 서버 성능을 추적한 경험을 설명해주세요
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
- 애플리케이션을 작은 독립적인 서비스들의 집합으로 구성하는 아키텍처
- 각 서비스는 특정 기능을 담당하며 독립적으로 배포, 운영, 확장 가능한 특징을 가짐
- 하나의 거대한 애플리케이션을 여러개의 독립적인 서비스로 나누어 운영하는 방식
특징
- 각 서비스는 독립적으로 실행 & 배포 가능 → 장애 발생 시 다른 서비스에 영향 최소화
- 각 서비스는 개별 데이터 저장소 사용 가능 → 데이터베이스 스키마가 변경되어도 다른 서비스에 영향 X
- 서비스 간 통신은 API 활용 → 서비스 간 결합도를 낮춰 유연한 확장
사용해야 하는 이유
- 확장성 증가 : 특정 기능에 대한 트래픽이 증가해도 해당 서비스만 별도로 확장 가능
- 개발 속도 향상 & 빠른 배포 가능 : 팀별로 독립적인 서비스 개발 가능
- 장애 격리 가능 : 하나의 서비스가 다운되더라도 전체 시스템이 영향을 받지 않음
- 유지보수 및 코드 관리 용이 : 코드가 작은 단위로 분리되어 유지보수가 쉬움
단점
- 복잡성 증가 → 서비스가 많아질수록 운영 & 관리가 어려움
- 서비스 간 통신 부담 → 네트워크 지연 & API 호출 비용 발생
- 데이터 일관성 유지 어려움 → 각 서비스 별 DB 관리해야 함
마이크로서비스는 규모가 큰 애플리케이션에 적합한 아키텍처