데이터베이스 운영의 번거로운 작업을 AWS가 대신 관리해주는 서비스
즉, DB 설치, 백업, 보안, 복구 등 서버 관리 부담을 줄여주고,
✅ 개발자는 비즈니스 로직에만 집중할 수 있게 해줌
😓 정말 시간도 오래 걸리고 귀찮...
👉 그래서 실무에서 "서비스를 빨리 만들고 안정적으로 유지하고 싶다"면
✅ RDS가 훨씬 편하고 안전
1. 퍼블릭 액세스 가능: 예
2. 보안 그룹 설정 (반드시 설정 필요!)
- 인바운드 규칙:
- 포트: 3306
- 타입: MySQL/Aurora
- 소스: 내 IP만 허용 (My IP)
AWS에서 제공하는 가상 서버
즉, 내가 직접 운영체제를 설치하고, Spring 서버나 배포용 백엔드를 돌릴 수 있는 컴퓨터를
AWS 상에서 임대해서 쓰는 것
EC2를 쉽게 말하면?
< 주의사항 >
EC2는 키고만 있어도 시간당 요금이 차감됩니다.
상태 | 과금 여부 |
---|---|
인스턴스 실행 중 | ✅ 요금 발생 (프리티어 시간 내면 OK) |
중지 상태 | ❌ 인스턴스는 요금 없음, ❗스토리지(EBS)는 요금 발생 가능 |
삭제 | ✅ 완전 요금 제거 |
✅ 퍼블릭 액세스가 "아니요"일 때 무슨 일이 일어나냐면?
상황 흐름:
- 당신의 RDS는 VPC 내부 전용 DB가 됨 (인터넷에서는 접근 불가)
- Spring Boot 서버가 로컬에서 실행 중 (→ 인터넷이 아닌 RDS 내부 네트워크와 분리됨)
- Postman은 로컬 백엔드 API에 요청을 보냄 →
- 백엔드는 RDS에 접속을 시도함 →
- ❌ 접속 실패: "RDS가 퍼블릭 액세스 안 됨"
→ 결국 Postman은 백엔드를 호출하지만, 백엔드는 DB와 통신하지 못해서 에러가 남 (ex. 커넥션 실패)
항목 | 퍼블릭 액세스: 예 | 퍼블릭 액세스: 아니요 |
---|---|---|
내 노트북에서 접속 가능? | ✅ 예 (보안 그룹 허용 시) | ❌ 불가능 |
EC2에서 접속 가능? | ✅ 가능 | ✅ 가능 (같은 VPC 내일 경우) |
Postman → Spring → RDS 가능? | ✅ 가능 | ❌ RDS 접근 실패 |
DBeaver, IntelliJ로 DB 접속 | ✅ 가능 | ❌ 불가 |
퍼블릭 액세스를 예
로 하고, EC2 컴퓨팅 리소스 연결을 비활성화
해도 전혀 문제 없음 !
설정 | 필수인가요? | 설명 |
---|---|---|
퍼블릭 액세스: 예 | ✅ 필수 (개발용 외부 접속 시) | RDS를 로컬 환경에서 접속하려면 반드시 필요 |
EC2 연결 | ❌ 비활성화해도 됨 | 그냥 편의 기능, 실제 접속과는 무관 |
[내 노트북] (Spring Boot, Postman)
|
| 인터넷(IP로 접근)
|
[RDS (퍼블릭 액세스: 예)]
항목 | 설정 여부 | 설명 |
---|---|---|
퍼블릭 액세스 | ✅ "예" | 외부 접속 가능하게 |
보안 그룹 설정 | ✅ 내 IP + 포트 3306 열기 | 방화벽 역할 |
EC2 사용 여부 | ❌ 사용 안 해도 됨 | 개발/테스트엔 필요 없음 |
보안 그룹(Security Group)**은 AWS에서 말하는 방화벽
✔ 어떤 컴퓨터(IP)가,
✔ 어떤 포트로,
✔ 내 RDS에 접속할 수 있는지를 설정하는 장치
❗설정하지 않으면?
항목 | 값 |
---|---|
유형(Type) | MySQL/Aurora |
프로토콜 | TCP |
포트 범위 | 3306 |
소스 | 팀원들 IP |
IP는 반드시
/32
붙여야 단일 IP로 허용됨
유형을
MySQL/Aurora
로 하여 TCP 3306 포트를 자동 설정
# DB 연결 정보
spring.datasource.url=jdbc:mysql://song-db-dev.c4bmm8yaax1b.us-east-1.rds.amazonaws.com:3306/데이터베이스이름
spring.datasource.username=admin
spring.datasource.password=여기에비밀번호입력
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA 설정 (선택사항이지만 대부분 함께 씀)
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect