
지난 1편(Network)와 2편(Compute)에서는 외부 트래픽을 받아 처리하는 웹서버 환경을 완성했다. 이번 3편에서는 서비스의 심장부인 데이터를 관리할 Database Tier를 구축하겠다.
1. 데이터베이스 계층 설계
가장 중요하게 고려한 점은 데이터의 가용성과 접근 제어이다.
- RDS Multi-AZ: 하나의 AZ에 장애가 발생해도 예비 복제본으로 자동 전환 (Failover)되어 서비스 중단을 방지한다
- Private DB Subnet: 외부 인터넷은 물론, ALB에서도 직접 접근할 수 없는 가장 깊은 계층에 데이터베이스를 배치했다
2. 보안 그룹 설계
2편에서 적용했던 Chaining 기법을 DB 계층에도 동일하게 적용하여 보안을 극대화했다.
- DB SG(database-sg):
Inbound: MySQL/Aurora(3306)
Source: web-app-sg(ID 지정)
- 핵심로직: IP 대역이 아닌 App 서버의 보안 그룹 ID만을 허용함으로써, 오직 인증된 애플리케이션 서버를 통해서만 DB 접속이 가능하도록 설계했다
3. RDS 인스턴스 생성 및 Subnet Group
데이터베이스가 위치할 물리적 공간을 정의한다
- DB 서브넷 그룹: 1편에서 미리 만들어둔 2개의 가용 영역(2a,2c)에 걸친 Private DB Subnet들을 하나로 묶어 설정했다

- 엔진 선택: MySQL을 선택하고, 다중 AZ 배포 옵션을 활성화했다


4. 결론 및 프로젝트 회고
드디어 3-Tier Architecture의 모든 구성 요소가 완성되었다.
- 계층 분리: 각 계층(Web-App-DB)이 서브넷과 보안 그룹으로 완벽히 격리됐다
- 고가용성: 모든 계층에서 다중AZ를 적용하여 안정적인 인프라를 구축했다
- 향후 과제: 이번 프로젝트를 통해 클라우드 인프라의 기본기를 다졌으며, 향후 Docker로 웹서비스 컨테이너화와 IaC(Terraform)를 통한 자동화를 다뤄보도록 하겠다