프로젝트/기업 일정 관리 웹

CICD 2 - 가비아 도메인 + Route 53 + EC2 + RDS

yoon4360 2025. 4. 5. 00:01

 

프로젝트를 운영 환경에 배포할 때는 단순히 코드를 EC2에 올리는 걸로 끝나지 않는다.
도메인 연결, 데이터베이스 구성, 서버 확장성, 보안 설정 등 다양한 고려사항이 있다.

이번 포스팅에서는 다음 구성으로 배포 환경을 구축한 경험을 공유한다.

도메인: 가비아
DNS 관리: AWS Route 53
서버: AWS EC2 (Ubuntu)
DB: AWS RDS (MySQL)

 


 

1.  도메인 연결 - 가비아 + Route 53

가비아에서 도메인을 구매했지만, DNS 관리는 AWS Route 53으로 위임했다. 이유는 다음과 같다.

  • AWS 서비스 (EC2, RDS 등)와 쉽게 연결 가능하다.
  • 글로벌 DNS 서비스로 지연 시간 기반 라우팅, 헬스 체크 기능을 제공한다.
  • 비용이 저렴하고, 자동화 도구와의 연동이 용이하다.

🛠 연결 과정

  1. 가비아에서 도메인 구매
    • gasdg.store 도메인을 구매했다.
  2. Route 53에서 호스팅 영역 생성
    • gasdg.store 에 대한 Public 호스팅 영역을 생성한다.
    • 생성 시 제공되는 네임서버(NS) 값을 복사한다.
  3. 가비아 도메인 설정에서 네임서버 변경
    • Route 53의 NS 레코드 값으로 변경하여 DNS에 위임한다.
  4. 서브도메인 설정
    • 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만 접근하도록 제한해야 한다.