답변에 포함해야 할 키워드

  • 마이크로서비스(MSA): 서비스를 작은 단위로 나누어 독립적으로 배포 및 운영
  • 오토스케일링(Auto-scaling): 클라우드에서 트래픽 증가에 따라 서버를 자동으로 확장
  • 로드 밸런싱: 여러 서버에 트래픽을 분산하여 성능 최적화
  • CAP 이론: 일관성(Consistency), 가용성(Availability), 파티션 허용성(Partition tolerance) 간의 트레이드오프
  • Kubernetes: 분산 환경에서 컨테이너 관리
  1. 로드밸런싱이 무엇이며, 이를 통해 얻을 수 있는 이점은 무엇인가요?
  2. 마이크로서비스 아키텍처에서 서비스 간 통신을 위한 메시지 브로커를 사용하는 이유를 설명해주세요
  3. 분산 트랜잭션이란 무엇이며 이를 관리하는 방법을 설명해주세요
  4. 클라우드에서의 오토스케일링이 무엇이며 ,이를 구현할 대 고려해야 할 요소는 무엇인가요?
  5. 쿠버네티스의 역할과 사용 이유에 대해 설명해주세요

1. 로드밸런싱

로드밸런싱이 무엇이며, 이를 통해 얻을 수 있는 이점은 무엇인가요?

로드밸런싱이란?

  • 여러 서버에 트래픽을 분산하여 부하를 고르게 나누는 기술
  • 특정 서버에 과부하가 걸리는 것을 방지하고 전체적인 서비스 성능과 안정성 향상

주요 이점

  • 성능 향상 : 요청을 여러 서버에 분산하여 응답 시간 단축, 처리 속도 향상
  • 가용성 및 안정성 확보 : 특정 서버에 장애가 발생해도 다른 서버가 트래픽을 처리할 수 있음
  • 확장성 : 더 많은 요청 처리 가능
  • 보안 강화 : 악의적인 트래픽을 특정 서버가 집중적으로 받는 것을 방지할 수 있음
  • 유지보수 용이 : 특정 서버 유지보수중에도 다른 서버가 트래픽 처리 가능 무중단 운영

구현 방식

  1. 소프트웨어 기반
    1. 리버스 프록시 기반 : NginX
    2. 애플리케이션 레벨 로드밸런싱 : Spring Cloud
    3. 클라우드 기반 : ELB
  2. 하드웨어 기반
    1. 네트워크 레벨에서 부하 분산
    2. 가격이 비쌈, 고성능, 높은 안정성

2. 메시지 브로커

마이크로서비스 아키텍처에서 서비스 간 통신을 위한 메시지 브로커를 사용하는 이유를 설명해주세요

마이크로서비스 아키텍처에서 메시지 브로커를 사용하는 이유

  • 서비스 간 통신이 필수적
  • 비동기 통신, 성능 향상, 장애 격리, 확장성 등의 장점

메시지 브로커

  • 서비스 간 데이터를 전달하는 중간 역할을 하는 시스템
  • Kafka, RabibitMQ, Redis Pub/Sub

동작방식

  • producer 메시지를 브로커에 전송
  • Message broker 메시지를 저장하고 전달
  • Consumer : 메시지를 구독하고 처리

MSA에서 메시지 브로커를 사용하는 이유

  1. 서비스 간 결합도 낮추기 : 비동기 방식으로 통신하여 서비스 간 독립성 유지
  2. 성능 및 확장성 : 서비스 요청이 많을 때 큐를 사용해 부하 분산, 병렬 처리 가능(Kafka consumer gruop)
  3. 장애 격리 : 다운된 서비스가 나중에 복구되면 이전 메시지를 받아 다시 처리 가능
  4. 이벤트 기반 아키텍처 : 특정 이벤트 발생 시 관련 서비스들이 자동으로 반응
  5. 데이터 유실 방지 : 메시지를 저장하고 소비자가 읽을 때까지 유지

rabbit Mq - 메시지 순서 보장 x, 스케일아웃 제한적, 단일 메시지에 최적화 kafka - 고성능, 수평 확장 가능, 메시지 순서 보장 o

3. 분산 트랜잭션

분산 트랜잭션이란 무엇이며 이를 관리하는 방법을 설명해주세요

분산 트랜잭션

  • 여러 개의 서로 다른 시스템에서 실행되는 트랜잭션을 하나의 논리적 단위로 관리하는 개념

2 phase commit

  • 트랜잭션을 2단계로 나누어 커밋하는 기법
  • 분산시스템에서 모든 참여 노드가 커밋 가능 여부를 확인한 후 최종적으로 커밋 실행
  • 장점 : 트랜잭션 원자성 보장
  • 단점 : 네트워크 장애 발생 시 데드락 위험
  • 금융권처럼 강력한 일관성이 필요한 경우 사용

보상 트랜잭션(saga pattern)

  • 트랜잭션을 여러개의 작은 로컬 트랜잭션으로 나누고 실패 시 보상 작업을 수행하는 방식
  • INSERT DELETE, CREATE DROP, UPDATE 재 UPDATE
  • 순차실행
    • 각 서비스가 다음 서비스에게 이벤트를 전달하며 트랜잭션 실행
    • 실패시 보상 이벤트 실행
  • 오케스트레이션
    • 중앙 조정자가 트랜잭션 관리
    • 실패 시 보상 트랜잭션 실행

4. 오토 스케일링

클라우드에서의 오토스케일링이 무엇이며 ,이를 구현할 대 고려해야 할 요소는 무엇인가요?

오토 스케일링

  • 클라우드 환경에서 트래픽 변화에 따라 자동으로 인프라 리소스를 조정하는 기능
  • 부하가 증가하면 인스턴스를 자동으로 추가하여 성능 유지
  • 부하가 감소하면 불필요한 인스턴스를 제거하여 비용 절감

오토스케일링 방식

  1. 수평 확장
    1. 인스턴스 개수 동적 조정
    2. 부하 증가 시 새로운 서버 추가
    3. 부하 감소 시 서버 감소
    4. AWS Auto Scaling group
  2. 수직 확장 (스케일 업)
    1. 서버 자체 성능 조정
    2. 단일 인스턴스 리소스 증가

고려해야 할 요소

  1. 모니터링 지표 설정 cpu, network, disk I/o
  2. 부하 예측 및 최대/최소 인스턴스 설정
  3. 스케일링 정책 선택

5. 쿠버네티스

쿠버네티스의 역할과 사용 이유에 대해 설명해주세요

쿠버네티스란?

  • 컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장하는 컨테이너 오케스트레이션 플랫폼

주요 역할

  1. 컨테이너 오케스트레이션 : 여러개의 컨테이너를 자동으로 배포, 실행 모니터링
  2. Auto Scaling : 트래픽 변화에 따라 컨테이너 개수 자동 조절
  3. 서비스 디스커버리 & 로드밸런싱
  4. 장애 발생 시 컨테이너 자동 재시작 & 다른 컨테이너로 교체
  5. 무중단 배포 지원

사용 이유

  • 기존 서버 운영 방식 VM 기반으로 무겁고, 확장이 어려움 컨테이너 기반으로 가볍고 유연함
  • 수동 배포, 업데이트 자동 배포, 롤백, 업데이트 지원
  • 트래픽 증가 시 서버 직접 추가 오토 스케일링 지원
  • 장애 발생 시 사람이 직접 조치 자동 복구 지원

도입해야 하는 경우

  • 마이크로서비스 아키텍처를 사용중인 경우
  • 컨테이너 기반 배포를 운영하는 경우
  • 자동확장이 필요한 경우
  • 무중단 배포를 적용하려는 경우