2025년 9월 4일
AWS
카테고리 : 회고록
조회 : 230|4분 읽기

AWS 레거시 인프라 개선

AWS 레거시 인프라 개선: 해외 신규 프로젝트의 인프라 리팩토링 사례

들어가며

새로운 해외 프로젝트 런칭을 준비하던 초기에 빠른 개발에 집중하느라 인프라 설계가 후순위로 밀렸고, 결과물을 확인했을 때 보안·확장성·가용성 측면에서 심각한 문제들이 드러났습니다.
게다가 대규모 프로모션 행사로 사용량 급증이 예상되어, 기존 구조로는 안정적인 서비스 제공이 불가능하다고 판단했습니다. 이에 따라 인프라를 클라우드 네이티브 아키텍처로 전면 개편하는 프로젝트를 주도했습니다.

문제 상황 (Before)

  1. 퍼블릭 서브넷에 모든 EC2 존재 → 애플리케이션 서버조차 외부에서 직접 노출된 상태, 보안 리스크 큼
  2. 단일 AZ·단일 서버 구조 → 장애 발생 시 서비스 전체가 중단되는 SPOF(단일 장애점)
  3. Nginx 업스트림 라우팅 → 프론트 서버에서 API 라우팅까지 담당, API 도메인이 인스턴스에 직접 바인딩
  4. 서버별 EIP 바인딩 → 운영 복잡도 증가, 외부 직접 노출 위험
  5. 온프라미스 VPN 연결 범위가 전체 서브넷 → 불필요한 트래픽 경로가 열려 있고, 관리 복잡
  6. 백엔드 서버에 로컬 Redis 공존 → 애플리케이션과 Redis가 같은 EC2에 설치되어, 가용성·확장성 전혀 고려되지 않음
  7. WAR 기반 배포 → WAS 의존성 존재, 배포 시 다운타임 발생

Before / After 비교

구분개선 전 (Before)개선 후 (After)
네트워크퍼블릭 서브넷에 모든 EC2퍼블릭/프라이빗 분리, NAT 전환
라우팅Nginx 업스트림, EC2 DNS 바인딩ALB + T.G, Route53 Alias
배포WAR, WAS 의존성, 다운타임JAR 실행형, ASG 자동화
캐시로컬 Redis (서버 공존)ElastiCache (Valkey) 멀티 AZ
보안서버별 EIP 직접 노출, VPN 전체 서브넷 연결NAT 단일화, ALB SSL 종단, VPN 프라이빗 전용

목표 (Task)

  1. 모든 애플리케이션 서버를 프라이빗 서브넷으로 이전, 보안성 강화
  2. 단일 서버 기반 구조를 고가용성 아키텍처로 개편
  3. 프로모션 시 트래픽 급증에도 무중단 확장 가능한 Auto Scaling 환경 구축
  4. 로컬 Redis > ElastiCache (Valkey) 전환, 장애 시 자동 Failover 및 확장 고려
  5. 배포 자동화: Auto Scaling 환경에서도 최신 버전이 항상 적용되도록 CI/CD 정비
  6. 운영·보안 관리 체계 단순화 (SSL, DNS, 라우팅)

개선 과정 (Action)

🔐 네트워크 재설계

  1. 퍼블릭 서브넷에 있던 애플리케이션 EC2를 모두 프라이빗 서브넷으로 이전, 외부 직접 접근 불가
  2. NAT Gateway 도입 및 라우팅 테이블 재구성 → 외부 접근은 ALB > T.G > Private Subnet 경로만 허용
  3. EIP 직접 바인딩 제거 > NAT 아키텍처 전환
  4. ALB 헬스체크 구성 > 비정상 인스턴스 자동 제외로 복원력 강화
  5. 온프라미스 VPN 연결을 전체 서브넷에서 프라이빗 전용으로 제한 → 불필요한 트래픽 제거

🌐 트래픽 관리 개선

  1. Nginx 업스트림 라우팅 제거 → 라우팅 책임을 ALB + T.G로 이관
  2. API 도메인을 인스턴스 직접 바인딩에서 ALB(A/AAAA) 레코드 연결로 변경
  3. Route53 Alias 적용 → 서비스별 DNS 관리 단순화

⚡ 배포 & 확장 자동화

  1. WAR > JAR 전환: WAS 의존성 제거, Spring Boot 실행형 JAR로 단순화
  2. Jenkins 파이프라인 구축:
    • 빌드 > 최신 JAR S3 업로드
    • Launch Template에서 S3 최신 JAR 자동 다운로드
    • Auto Scaling Group 신규 인스턴스도 항상 최신 버전 기동 보장

🗄 데이터 & 캐시 구조 개선

  1. 기존: 백엔드 서버에 로컬 Redis를 같이 올려 사용 (이중화·가용성 고려 없음)
  2. 개선: ElastiCache(Valkey) 멀티 AZ 전환
    • Primary 단일 노드지만 AZ 장애 시 자동 Failover 지원
    • Redis와 애플리케이션을 분리해 확장성 확보
    • 개발용 Redis 별도 구축

🚀 성능 & 비용 최적화

  1. CloudFront 캐싱 적용 (이벤트 이미지 등 정적 리소스) → 응답 속도 30~40% 개선, 트래픽 비용 절감
  2. ALB SSL 종단으로 인증서 관리 포인트 단순화
  3. NAT Gateway 단일화로 관리 효율성 및 비용 최적화
  4. HikariCP idle/max connection 파라미터 최적화 → DB 연결 풀 활용률 개선 및 불필요한 커넥션 비용 절감

아키텍처 다이어그램


성과 (Result)

  1. 모든 애플리케이션 서버를 프라이빗으로 이전해 보안성 대폭 강화
  2. 단일 서버·Nginx 라우팅 구조 제거 > 표준화된 ALB + T.G 아키텍처 확립
  3. Auto Scaling + JAR 파이프라인으로 확장 시에도 최신 버전 자동 적용
  4. 로컬 Redis를 ElastiCache로 전환 > 장애 전파 위험 제거, 스케일 아웃 대비 가능
  5. 프로모션 트래픽 급증에도 안정적으로 대응 가능
  6. 운영·보안 관리 체계 단순화 > 운영 개입 시간 단축

마치며

이 프로젝트는 단순한 인프라 변경이 아니라, 해외 신규 서비스 런칭을 안정적으로 뒷받침하기 위한 근본적인 아키텍처 리팩토링이었습니다.
“처음부터 인프라를 설계하지 않고 빠른 개발에 집중했던 선택”이 결국 큰 위험 요인이 되었고, 이를 개선하는 과정에서 왜 클라우드 네이티브 아키텍처가 필요한지를 뼈저리게 느꼈습니다.
무엇보다 이미 운영 중인 서비스였기 때문에, 인프라를 손대는 것 자체가 큰 부담이었습니다. 작은 실수 하나가 곧바로 장애로 이어질 수 있는 상황이었지만, 프로모션 급증을 감당해야 한다는 책임감으로 결국 개선을 완수했습니다.
이 경험은 단순한 기술 적용을 넘어, 리스크를 인식하고 실행으로 옮겨 안정화까지 이끈 경험으로 남았습니다.