AWS의 애플리케이션 아키텍처 패턴
AWS에서 애플리케이션 배포하기
Dunieski Otano
Amazon Web Services Solutions Architect
강사 소개
올바른 아키텍처가 중요한 이유
아키텍처는 정답이 하나가 아니라
트레이드오프
의 집합입니다
모든 선택은 세 가지 질문으로 결정됩니다:
구성 요소가 얼마나 긴밀하게
결합
되어 있나요?
상태
는 어디에 저장되나요?
통신은
동기식인가요, 비동기식인가요
?
유행이 아니라
워크로드
에 맞는 패턴을 선택하세요
금요일 밤의 연쇄 장애
느린 결제 API 하나가 전체 결제 과정을 멈추게 합니다
모든 서비스가 이 API를 동기적으로 기다렸습니다
해결책은 더 빠른 API가 아니라 아키텍처입니다
아키텍처 선택이 배포를 결정하는 이유
선택한 패턴이 애플리케이션의
확장성과 장애 방식
을 결정합니다
긴밀 결합 설계는 부하가 걸리면 무너집니다
올바른 패턴은 배포를 예측 가능하게 만듭니다
같은 코드라도 운영 환경에서의 동작은 완전히 다릅니다
핵심 아키텍처 패턴
모놀리식(Monolithic)
: 배포 단위가 하나이며 시작하기 간단합니다
마이크로서비스(Microservices)
: 독립적인 서비스로 각각 배포됩니다
이벤트 기반(Event-driven)
: 직접 호출이 아니라 이벤트에 반응하는 구성 요소입니다
팬아웃(Fanout)
은 이벤트 기반의 하위 패턴으로, 하나의 이벤트가 여러 소비자에게 전달됩니다
스테이트풀 vs 스테이트리스
스테이트리스(Stateless)
: 요청 간에 클라이언트 데이터를 유지하지 않습니다
어떤 인스턴스든 모든 요청을 처리할 수 있습니다
스테이트풀(Stateful)
: 인스턴스가 이전 상호작용을 기억합니다
스테이트리스 특성 덕분에
수평 확장
이 가능합니다
공유 상태는
DynamoDB
또는
ElastiCache
로 옮기세요
긴밀 결합 vs 느슨한 결합
긴밀 결합(Tight coupling)
: 호출자가 호출 대상의 응답을 기다립니다
느린 서비스 하나가 전체 체인을 멈추게 합니다
느슨한 결합(Loose coupling)
: 서비스 사이에
Amazon SQS
큐가 위치합니다
소비자가 다운되어도 생산자는 계속 작동합니다
동기 vs 비동기
동기(Synchronous)
: 호출자가 차단된 채 결과를 기다립니다
호출자가 즉시 답을 필요로 할 때 사용합니다
비동기(Asynchronous)
: 호출자가 작업을 넘기고 바로 돌아옵니다
느리거나 몰리거나 긴급하지 않은 작업에 사용합니다
외부 호출을 위한 복원력 패턴
지수 백오프 재시도(Exponential backoff retry)
: 시도 간격을 점점 늘립니다
서킷 브레이커(Circuit breaker)
: 장애가 발생한 서비스 호출을 일정 시간 중단합니다
데드레터 큐(Dead-letter queue)
: 계속 실패하는 메시지를 따로 보관합니다
이 패턴들을 함께 사용하세요. 무분별한 재시도는 장애를 악화시킵니다
연습해 봅시다!
AWS에서 애플리케이션 배포하기
Preparing Video For Download...