프로젝트를 운영 환경에 배포할 때는 단순히 코드를 EC2에 올리는 걸로 끝나지 않는다.
도메인 연결, 데이터베이스 구성, 서버 확장성, 보안 설정 등 다양한 고려사항이 있다.
이번 포스팅에서는 다음 구성으로 배포 환경을 구축한 경험을 공유한다.
도메인: 가비아
DNS 관리: AWS Route 53
서버: AWS EC2 (Ubuntu)
DB: AWS RDS (MySQL)
1. 도메인 연결 - 가비아 + Route 53
가비아에서 도메인을 구매했지만, DNS 관리는 AWS Route 53으로 위임했다. 이유는 다음과 같다.
- AWS 서비스 (EC2, RDS 등)와 쉽게 연결 가능하다.
- 글로벌 DNS 서비스로 지연 시간 기반 라우팅, 헬스 체크 기능을 제공한다.
- 비용이 저렴하고, 자동화 도구와의 연동이 용이하다.
🛠 연결 과정
- 가비아에서 도메인 구매
- gasdg.store 도메인을 구매했다.
- Route 53에서 호스팅 영역 생성
- gasdg.store 에 대한 Public 호스팅 영역을 생성한다.
- 생성 시 제공되는 네임서버(NS) 값을 복사한다.
- 가비아 도메인 설정에서 네임서버 변경
- Route 53의 NS 레코드 값으로 변경하여 DNS에 위임한다.
- 서브도메인 설정
- A 레코드: api.gasdg.store → EC2 퍼블릭 IP
- CNAME 레코드: www.gasdg.store → api.gasdg.store
이후 사용자가 https://api.gasdg.store로 접속하면 → Route 53 → EC2 인스턴스로 트래픽이 전달된다.
2. EC2 – 애플리케이션 서버 구축
Spring Boot & React 앱을 실행할 수 있는 자유로운 서버 환경이 필요해서
여러 서버환경을 모색중 서버를 직접 컨트롤해야 하므로 서버리스(Lambda)보다는 EC2가 적합하다고 판단했다.
그리고 Nginx를 통한 정적 리소스 서빙, 포트 포워딩, 보안 제어도 필요했기에 EC2를 선택하게 되었다.
🛠 설정 과정
- Ubuntu 22.04 LTS 기준
- 인스턴스 타입: t3.micro (테스트), t3.medium 이상을 권장하지만 토이프로젝트라 prettier model 타입으로 설정했다.
- Elastic IP 할당하여 고정 IP를 유지하는것이 좋다.
- 보안 그룹 포트 오픈:
- 22 (SSH)
- 80 (HTTP)
- 443 (HTTPS)
- 8080 (Spring Boot)
- 3306 (MySQL, EC2 내부만 허용)
RDS – 데이터베이스 구성
EC2에 직접 MySQL을 설치하면 보안, 백업, 모니터링을 모두 수동으로 관리해야 한다는 단점이 존재했고
RDS는 다음과 같은 부분을 자동화 해주었기에 선택하게 되었다.
- 자동 백업
- 스냅샷 복원
- 성능 최적화
- 보안 그룹으로 접근 제어
🛠 구성 과정
- 엔진: MySQL 8.0.40
- 인스턴스 타입: db.t3.micro (테스트), db.t3.medium 이상 권장
- 퍼블릭 액세스: 비활성화하면 EC2에서만 DB에 접속할 수 있어 보안성이 강화된다.
- VPC: EC2와 동일한 VPC 선택한다.
- 보안 그룹: EC2 인스턴스만 접근 허용하게 했다. (3306 포트)
서비스 연결 흐름
[사용자]
↓
Route 53 (DNS)
↓
EC2 (Ubuntu + Nginx)
↙ ↘
Spring Boot React 정적 리소스
↕ ↕
RDS HTML/JS/CSS
- https://api.gasdg.store → EC2 → Nginx → React 앱
- /api/** → Nginx → Spring Boot → JWT 인증 및 RDS 연동
마무리
도메인 연결을 위한 DNS 위임은 처음이라 어려웠지만 Route 53의 UI가 간결해서 쉽게 설정할 수 있었다.
EC2와 RDS를 동일한 VPC, 보안 그룹으로 묶는 것이 중요하다. 이를 묶지 않으면 에러를 마주하게 된다..
퍼블릭 DB는 보안상 매우 위험하기에 반드시 EC2만 접근하도록 제한해야 한다.
'프로젝트 > 기업 일정 관리 웹' 카테고리의 다른 글
GitHub Actions EC2 배포 실패: SSH 키 인증 실패 문제 해결 (0) | 2025.04.09 |
---|---|
CICD 3 - Nginx & EC2 (0) | 2025.04.06 |
CI/CD 1 : GithubActions (0) | 2025.04.03 |
REST API 에서 Enum 직렬화 문제 (0) | 2025.04.02 |
Redis 적용하기 (0) | 2025.04.02 |