본 가이드는 UserService
와 OrderService
라는 두 개의 Rails 애플리케이션을 중심으로 마이크로서비스 연동을 시연합니다.
1. 개발 환경 설정
- LocalStack 활용: Docker Compose를 사용하여 LocalStack을 실행하고, SNS 및 SQS 서비스를 로컬에 구축합니다. 이는 실제 AWS 환경 없이도 개발 및 테스트를 가능하게 합니다.
- AWS CLI 설정:
setup.sh
스크립트를 통해user-events
SNS 토픽과order-service-queue
SQS 큐를 생성하고, SQS 큐를 SNS 토픽에 구독시켜 이벤트 흐름을 준비합니다.
2. UserService 구현
- 이벤트 발행:
user_service
Rails 앱에aws-sdk-sns
Gem을 추가하고,User
모델의after_create
콜백에서user.created
이벤트를 JSON 형식으로 직렬화하여 SNS 토픽으로 발행합니다. - AWS 설정:
dotenv-rails
를 사용하여 AWS 엔드포인트와 SNS 토픽 ARN을 환경 변수로 관리하며,config/initializers/aws.rb
에서 AWS SDK를 초기화합니다.
3. OrderService 구현
- 이벤트 소비:
order_service
Rails 앱에aws-sdk-sqs
Gem을 추가하고,SqsConsumerJob
을 생성하여 SQS 큐에서 메시지를 주기적으로 폴링합니다. - 데이터 동기화: 수신된
user.created
이벤트 메시지를 파싱하여OrderService
의 로컬User
모델에 사용자 정보를 생성하거나 업데이트합니다. 메시지 처리 후에는 SQS 큐에서 해당 메시지를 삭제합니다. - 스케줄링:
whenever
Gem을 사용하여SqsConsumerJob
이 매분 실행되도록 Cron 작업을 설정하여 자동화된 이벤트 처리를 구현합니다.
4. SNS와 SQS의 역할
- SNS (Simple Notification Service): 발행/구독(pub/sub) 모델의 메시징 서비스로, 메시지를 토픽에 발행하면 모든 구독자에게 전달됩니다.
user.created
와 같은 이벤트를 여러 서비스에 동시에 알리는 데 적합합니다. - SQS (Simple Queue Service): 메시지 큐잉 서비스로, 메시지를 저장하고 단일 소비자에게 전달합니다. 메시지는 처리 및 삭제될 때까지 큐에 유지되며,
OrderService
와 같이 특정 작업을 처리하는 데 사용됩니다.