
안정적인 클라우드 인프라 운영의 핵심은 '관찰 가능성(Observability)'을 확보하는 것이다. 단순히 애플리케이션을 실행하는 것을 넘어, 시스템의 상태를 실시간으로 파악하고 이상 징후를 조기에 감지하여 대응할 수 있어야 한다. AWS는 이를 위해 강력한 모니터링 및 알림 서비스를 제공한다. Amazon CloudWatch는 우리 인프라의 '눈'이 되어 시스템 지표를 감시하고, Amazon SNS는 '입'이 되어 문제가 발생했을 때 즉시 알려주는 역할을 수행한다. 이 두 서비스를 연동하여 자동화된 모니터링 및 알림 시스템을 구축하는 방법을 알아본다.
1. 핵심 서비스 개념
1.1. Amazon CloudWatch: AWS의 중앙 관제탑
CloudWatch는 AWS 리소스와 애플리케이션의 성능 데이터를 지표(Metrics), 로그(Logs), 이벤트(Events) 형태로 수집하여 중앙에서 모니터링하는 서비스이다. EC2 인스턴스의 CPU 사용률, 네트워크 트래픽, 디스크 I/O 등 다양한 기본 지표를 자동으로 수집하며, 사용자가 정의한 지표도 수집할 수 있다. CloudWatch의 핵심 기능은 경보(Alarm)로, 특정 지표가 설정된 임계값을 넘어서면 사전에 정의된 작업을 자동으로 수행하도록 트리거하는 역할을 한다.
1.2. Amazon SNS: 다목적 메시징 허브
SNS(Simple Notification Service)는 게시/구독(Pub/Sub) 모델을 사용하는 완전관리형 메시징 서비스이다. '게시자(Publisher)'가 특정 '주제(Topic)'에 메시지를 보내면, 해당 주제를 '구독(Subscriber)'하는 모든 엔드포인트에 메시지가 동시에 전달(fan-out)된다. 구독자는 이메일, SMS, SQS 대기열, Lambda 함수 등 다양한 형태로 메시지를 수신할 수 있다. CloudWatch 경보는 SNS 주제의 게시자 역할을 수행하여, 경보 발생 시 여러 대상에게 동시에 알림을 보낼 수 있다.
2단계: 알림 시스템 구축 실습
EC2 인스턴스의 CPU 사용률이 30%를 초과하면 지정된 이메일로 알림을 보내는 시스템을 구축한다.
2.1. SNS 주제(Topic) 및 구독 생성
- AWS 콘솔에서 SNS 서비스로 이동 후, 좌측 메뉴에서 '주제'를 선택하고 '주제 생성' 버튼을 클릭한다.
- '유형'은 표준(Standard)을 선택하고, '이름'에
admin-topic
을 입력한 후 '주제 생성'을 클릭한다. - 생성된 주제의 상세 페이지에서 '구독 생성' 버튼을 클릭한다.
- '프로토콜'은 이메일(Email)을 선택하고, '엔드포인트'에 알림을 수신할 본인의 이메일 주소를 정확히 입력한다.
- '구독 생성'을 클릭한다.
구독을 생성하면 입력한 이메일 주소로 AWS로부터 확인 메일이 발송된다. 메일 본문의 'Confirm subscription' 링크를 클릭해야만 구독 상태가 'Confirmed'로 변경되어 정상적으로 알림을 수신할 수 있다. 이 절차는 원치 않는 스팸 메일 수신을 방지하기 위한 것이다.
2.2. CloudWatch 경보 생성 및 연동
- EC2 콘솔의 '인스턴스' 메뉴에서 모니터링할 인스턴스(
webserver 1
)를 선택한다. - '작업' > '모니터링 및 문제 해결' > 'CloudWatch 경보 관리'를 클릭한다.
- '경보 알림' 섹션에서 '알림 보내기' 대상을 방금 생성한 SNS 주제인
admin-topic
으로 선택한다. - '경보 임계값' 섹션에서 아래와 같이 경보 발생 조건을 설정한다.
- 경보 조건 유형: 임계값
- 지표 이름: CPUUtilization
- 통계: 평균
- 기간: 1분 (테스트를 위해 짧게 설정)
- 조건: 보다 큼 (>)
- 임계값: 30
위 설정은 '1분 동안의 평균 CPU 사용률이 30%를 초과하면' 경보를 발생시키라는 의미이다. 모든 설정을 완료한 후 '경보 생성' 버튼을 클릭한다.
3단계: 부하 테스트 및 알림 확인
이제 생성된 경보가 정상적으로 동작하는지 테스트할 차례이다.
- ALB의 DNS 주소로 접속하여 샘플 웹 애플리케이션의 'LOAD TEST' 버튼을 여러 번 클릭하여 인스턴스에 인위적인 부하를 발생시킨다.
- CloudWatch 콘솔의 '경보 > 모든 경보' 메뉴로 이동하면, 생성한 경보의 상태가 '확인(OK)'에서 '경보(In alarm)'로 변경되는 것을 확인할 수 있다.
- 잠시 후, SNS 구독 시 입력했던 이메일 주소로 "ALARM: ..." 형태의 제목을 가진 알림 메일이 도착하는지 확인한다.

CloudWatch 경보 발생 시 SNS를 통해 수신되는 이메일 알림 예시
결론
Amazon CloudWatch와 SNS를 연동함으로써, 우리는 더 이상 수동으로 서버 상태를 확인하지 않아도 되는 자동화된 모니터링 및 알림 시스템을 구축하였다. 이 시스템은 CPU 사용률뿐만 아니라 네트워크, 디스크, 메모리 등 다양한 지표에 대해 확장이 가능하며, 알림 대상 또한 이메일 외에 SMS, 슬랙(Slack) 연동 등 다양한 형태로 구성할 수 있다.
이러한 사전 경고 시스템은 잠재적인 문제를 조기에 발견하고 신속하게 대응할 수 있는 기반을 제공하여, 전체 서비스의 안정성과 신뢰도를 높이는 데 결정적인 역할을 한다. 이는 모든 프로덕션 환경에서 반드시 갖추어야 할 필수적인 운영 요소이다.
'기술' 카테고리의 다른 글
서버 비용 절약의 핵심, S3를 활용한 서버리스 웹 호스팅 (0) | 2025.06.24 |
---|---|
시작 템플릿과 조정 정책: EC2 Auto Scaling 핵심 개념 정복하기 (0) | 2025.06.24 |
내 웹서버, 이중화는 했는데 왜 불안할까? (ALB 구성 가이드) (0) | 2025.06.24 |
AMI로 EC2 인스턴스 복제하기: Multi-AZ 고가용성 아키텍처 완성 (0) | 2025.06.24 |
'골든 이미지'로 EC2 서버 관리 자동화하기 (AMI 생성 가이드) (0) | 2025.06.24 |