아키텍처 스타일과 통신 패턴
AWS에서 애플리케이션 개발하기
Ricardo Sueiras
Principal Technologist
아키텍처 패턴이란?
- 공통 문제에 대한 반복 가능한 해결책입니다.
- 패턴을 알면 AWS 서비스를 어떻게 조합할지 이해할 수 있습니다.
- 아키텍처는 부하 상황에서의 애플리케이션 성능을 좌우합니다
- 반드시 알아야 할 여러 아키텍처 패턴이 있습니다.
모놀리스
- 단일하고 긴밀하게 결합된 단위입니다.
- 하나의 코드베이스, 하나의 배포.
- 처음에는 개발이 간단합니다.
- 확장이 어렵습니다: 모든 것을 함께 확장해야 합니다.
마이크로서비스
- 작고 독립적인 서비스: 각각 하나의 비즈니스 기능을 담당합니다.
- 각 서비스를 독립적으로 배포, 확장, 업데이트할 수 있습니다.
- 단점: 운영 복잡성과 서비스 간 통신 관리가 늘어납니다.
서버리스
- 관리할 인프라 없이 코드와 설정만 있으면 됩니다.
- 관리형 AWS 서비스를 조합해 구축합니다.
- AWS가 프로비저닝, 확장, 유지 보수를 처리합니다.
- 단점: 실행 시간 제한, 콜드 스타트, 벤더 종속.
- 운영 부담이 거의 없고 자동으로 확장됩니다.
이벤트 기반 아키텍처(EDA)
- 구성 요소는 직접 호출이 아닌 이벤트의 생성과 소비로 통신합니다.
- 이벤트는 발생한 일을 기록합니다(주문 접수, 결제 완료, 상품 발송 등).
- 생산자가 이벤트를 발생시킵니다.
- 소비자는 관심 있는 이벤트를 구독합니다.
긴밀하게 결합된 시스템과 느슨하게 결합된 시스템
- 현대의 클라우드 애플리케이션은 여러 서비스로 구성됩니다.
- 서비스는 작업을 완료하기 위해 통신하고 조율해야 합니다.
- 동기식 통신은 긴밀하게 결합되어 있습니다.
- 비동기식 통신은 느슨하게 결합되어 있습니다.
동기식 통신
- 한 서비스가 요청을 보내고 응답을 기다립니다.
- 호출자는 응답을 받거나 시간이 초과될 때까지 대기 상태가 됩니다.
- 구현과 이해가 간단합니다.
- 긴밀한 결합: 다운스트림 지연이나 장애가 연쇄적으로 번질 수 있습니다.
- 타임아웃, 재시도, 서킷 브레이커로 완화할 수 있습니다.
패턴: 요청/응답
- 대부분의 애플리케이션 인터페이스의 근간입니다.
- 예측 가능한 동작.
- 사용자에게 즉각적인 피드백을 제공합니다.
비동기식 통신
- 발신자는 응답을 기다리지 않습니다.
- 메시지나 이벤트를 보낸 뒤 바로 다음 작업을 처리합니다.
- 수신자는 메시지를 독립적으로 처리합니다.
- 느슨한 결합: 확장성과 장애 허용성이 더 뛰어납니다.
- 트래픽 급증과 부분 장애에도 안정적으로 대응합니다.
- 과제: 메시지 중복, 순서, 최종 일관성.
패턴: 큐 기반 분리
- 생산자가 큐로 메시지를 보냅니다.
- 소비자는 메시지를 가져와 독립적으로 처리합니다.
- 장애가 연쇄적으로 번지는 것을 막습니다.
- 생산자와 소비자가 각각 독립적으로 확장됩니다.
패턴: 워커 큐
- 여러 워커가 하나의 큐에서 메시지를 가져옵니다.
- 메시지가 병렬로 처리됩니다.
- 수평 확장과 더 높은 처리량을 가능하게 합니다.
- 메시지 순서는 보장되지 않습니다
패턴: 발행/구독
- 게시자가 SNS 토픽으로 메시지를 보냅니다.
- 여러 구독자가 동일한 메시지를 받습니다.
- 다수의 소비자에게 실시간으로 전달됩니다.
패턴: 팬아웃
- 하나의 메시지가 여러 소비자에게 동시에 전달됩니다.
- 이벤트 기반 아키텍처에서 널리 사용됩니다.
- 여러 서비스가 동일한 이벤트에 반응해야 할 때 유용합니다.
메시지 순서 지정
- 일부 워크로드는 메시지를 정확한 순서대로 처리해야 합니다.
- Amazon SQS FIFO와 Kinesis는 순서가 지정된 처리를 지원합니다.
- 엄격한 순서 보장은 처리량을 낮춥니다.
- 정확성과 확장성 사이에서 균형을 맞춰야 합니다.
연습해 봅시다!
AWS에서 애플리케이션 개발하기
Preparing Video For Download...