06 / 07
문제 해결
Spring Bean vs Registry 충돌, AWS 인증 보안 처리, SMS Sandbox 제한 우회
Troubleshooting
문제 해결 경험
AlertHub 구축 과정에서 발생한 주요 문제와 해결 과정을 정리했다.
Spring Bean vs 수동 Registry 충돌
문제 상황
기존 모니터링 시스템은 ServiceRegistry를 통해 수동으로 객체를 관리하는 구조였다. AWS Connect, SNS 등의 기능을 추가하면서 Spring Bean 컨테이너와 수동 Registry 간의 충돌이 발생했다.
// ServiceRegistry: 수동 객체 관리
ServiceRegistry.register("httpMonitor", new HttpMonitor());
// Spring: Bean 컨테이너 관리
@Autowired ConnectClient connectClient; // 주입 실패원인 분석
- - ServiceRegistry는 Spring 컨텍스트 외부에서 직접 인스턴스를 생성
- - 수동 생성된 객체에서는 @Autowired 등 Spring DI가 동작하지 않음
- - AWS SDK 클라이언트를 Spring Bean으로 등록했으나 Registry 객체에서 접근 불가
해결 방법
ApplicationContext에서 Bean을 직접 조회하거나, 필요한 경우 직접 인스턴스를 생성하는 방식으로 해결했다.
// 방법 1: ApplicationContext에서 직접 Bean 조회
ConnectClient client = applicationContext.getBean(ConnectClient.class);
// 방법 2: 직접 인스턴스 생성 (Spring 외부)
ConnectClient client = ConnectClient.builder()
.region(Region.AP_NORTHEAST_2)
.build();기존 ServiceRegistry 구조를 유지하면서 AWS 기능을 성공적으로 추가했다.
AWS 인증 보안 처리
문제 상황
초기 구현 시 AWS Access Key를 코드에 직접 포함하여 보안 문제가 발생했다.
해결 방법
YAML + 환경변수 분리
인증 정보를 설정 파일과 환경변수로 분리
Secret 파일 제외
.gitignore에 secret 파일 등록
# application-secret.yml (.gitignore에 등록)
aws:
access-key: ${AWS_ACCESS_KEY}
secret-key: ${AWS_SECRET_KEY}
region: ap-northeast-2AWS SMS Sandbox 제한
문제 상황
AWS SNS SMS는 Sandbox 모드에서 검증된 번호에만 발송 가능하며, 서울 리전에서는 SMS 서비스 자체가 지원되지 않았다.
해결 방법
리전 우회
서울(ap-northeast-2) 대신 도쿄(ap-northeast-1) 리전 사용
번호 사전 등록
수신 대상 번호를 AWS 콘솔에서 사전 검증
Sandbox 환경에서는 최대 10개 번호까지만 등록 가능하므로, 핵심 담당자 위주로 등록하여 운영한다.
CloudTrail + Athena 활용 — 장애 원인 소거법
장애 상황
ECS 서비스의 Task가 기동 직후 크래시하며 crash loop에 진입했다. ElastiCache(Valkey) 인증 실패(WRONGPASS)로 Spring Boot 기동이 실패하는 상황이었다.
CloudTrail + Athena 조사
누군가 비밀번호를 변경했거나 인프라 설정이 바뀌었을 가능성을 먼저 확인했다.
결론
모든 변경 이력이 "없음"으로 확인되어, 최근 변경이 아닌 과거 작업의 미완료(AUTH TOKEN 로테이션 중간 상태 방치)가 근본 원인임을 특정할 수 있었다.
감사 로그는 "변경이 있었는지"뿐 아니라 "변경이 없었는지"를 확인하는 소거법의 핵심 도구로 활용된다. 실시간 모니터링이 "지금"을 본다면, CloudTrail + Athena는 "과거"를 추적하는 역할을 한다.
Results
결과 및 효과
장애 대응 속도 향상
전화 알림으로 야간/주말에도 즉시 인지 가능
운영 가시성 향상
Slack + Email로 팀 전체가 장애 상황 공유
확장성 확보
YAML 기반 구조로 새로운 모니터/채널 추가 용이
안정성 향상
멀티채널 Fail-safe로 알림 누락 방지