Spring Boot 백엔드 프로젝트를 만들면서 PostgreSQL, Redis, AWS RDS, EC2, S3까지 연결하는 과정을 정리했다.
1. Spring Initializr 설정
`https://start.spring.io/`에서 프로젝트를 생성했다.
추천 설정은 다음과 같다.
- Project: Gradle - Groovy
- Language: Java
- Spring Boot: Stable 버전
- Packaging: Jar
- Java: 21
추가한 Dependencies는 다음과 같다.
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Spring Data Redis
- Lombok
- Validation
- DevTools
일반적인 Spring Boot API 서버는 `War`보다 `Jar`가 편하다.
2. IntelliJ에 프로젝트 적용
다운로드한 zip 파일의 압축을 풀고 IntelliJ에서 열었다.
File → Open → build.gradle이 있는 프로젝트 폴더 선택
프로젝트를 열면 Gradle 의존성이 자동으로 다운로드된다.
3. application.yml 구성
기본 설정 파일은 다음 위치에 만든다.
src/main/resources/application.yml
yaml파일에 프로필을 나누기 위해 다음처럼 설정했다.
spring:
profiles:
active: local
그리고 환경별로 파일을 분리했다.
application-local.yml
application-prod.yml
`application-prod.yml`은 AWS 배포를 고려해서 환경변수 기반으로 작성했다.
spring:
datasource:
url: jdbc:postgresql://${DB_HOST}:5432/${DB_NAME}?sslmode=require
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
jpa:
hibernate:
ddl-auto: update
show-sql: false
server:
port: 8080
cloud:
aws:
region:
static: ${AWS_REGION}
s3:
bucket: ${S3_BUCKET}
비밀번호나 AWS 정보는 코드에 직접 넣지 않고 환경변수로 관리하는 것이 좋다.
4. AWS 구성 순서
AWS는 다음 순서로 설정했다.
- VPC 생성
- Security Group 생성
- RDS PostgreSQL 생성
- S3 Bucket 생성
- EC2 생성
- EC2에서 RDS 연결 테스트
기본 구조는 다음과 같다.
사용자 → EC2 → RDS PostgreSQL
사용자 → EC2 → S3
RDS는 외부에 직접 공개하지 않고 EC2에서만 접근하도록 구성했다.
5. VPC와 Security Group
EC2와 RDS는 같은 VPC를 사용해야 한다.
EC2 Security Group: doody-app-ec2-sg
RDS Security Group: doody-app-rds-sg
EC2 Security Group inbound 예시:
SSH 22 내 IP
HTTP 80 0.0.0.0/0
HTTPS 443 0.0.0.0/0
8080 테스트 중에만 허용
RDS Security Group inbound:
PostgreSQL 5432
Source: doody-app-ec2-sg
RDS에 `0.0.0.0/0`를 열지 않는 것이 중요하다.
6. RDS PostgreSQL 생성
RDS에서는 PostgreSQL을 선택했다.
주의할 점은 Aurora가 아니라 일반 PostgreSQL을 선택하는 것이다.
추천 설정:
Engine: PostgreSQL
Template: Free tier
DB instance class: db.t4g.micro
Storage: 20GiB
Public access: No
VPC: 직접 만든 VPC
Security Group: doody-app-rds-sg
처음에 스토리지를 200GiB로 잡으면 비용이 커질 수 있으므로 개발용은 20GiB면 충분하다.
RDS의 `DB 식별자`와 실제 `DB 이름`은 다르다.
DB 식별자: doody-app-db
실제 DB 이름: doodyappdb
접속 테스트는 EC2에서 진행했다.
psql "host=$DB_HOST port=5432 dbname=postgres user=doodyuser sslmode=require"
접속 후 앱용 DB를 생성했다.
7. S3 Bucket 생성
S3는 일반적인 파일 업로드 용도로 사용할 것이므로 General purpose bucket을 선택했다.
추천 설정:
Bucket type: General purpose
Region: ap-northeast-2
Block all public access: On
Object Ownership: ACLs disabled
Encryption: SSE-S3
Spring Boot에서 S3를 사용할 때는 Access Key를 코드에 넣기보다 EC2 IAM Role을 사용하는 것이 좋다.
8. EC2 생성과 SSH 접속
EC2는 public subnet에 생성하고 public IP를 받아야 SSH 접속이 가능하다.
접속 명령어는 WSL 기준으로 다음과 같다.
ssh -i ~/.ssh/{키} ubuntu@EC2_PUBLIC_IP
Windows Downloads에 있는 pem 파일은 권한 문제가 날 수 있어서 WSL 홈으로 복사했다.
그 후 접속에 성공했다.
9. EC2 환경변수 설정
EC2에는 환경변수를 설정했다.
임시 설정은 SSH 세션이 끝나면 사라지므로 `~/.bashrc`에 추가하면 유지된다.
nano ~/.bashrc
source ~/.bashrc
10. 로컬 JDK 21 설치
Spring Boot 프로젝트는 Java 21 기준으로 생성했기 때문에 로컬에도 JDK 21이 필요했다.
Windows에서는 winget으로 설치했다.
설치 후 IntelliJ에서 다음 설정을 맞춘다.
File → Project Structure → Project SDK → JDK 21
Settings → Build Tools → Gradle → Gradle JVM → JDK 21
11. ERD 기반 Spring JPA 코드 작성
DB 설계 이미지를 기준으로 JPA Entity와 Repository를 생성했다.
Repository도 각 엔티티별로 만들었다.
복합키가 필요한 테이블은 `@EmbeddedId`를 사용했다.
JSON 컬럼은 PostgreSQL 기준으로 `jsonb`로 매핑했다.
빌드는 JDK 21 설정 후 정상적으로 통과했다.
마무리
이번 설정에서 가장 중요했던 점은 다음 세 가지였다.
- RDS는 Public access를 No로 설정한다.
- RDS Security Group은 EC2 Security Group만 허용한다.
- DB 비밀번호와 AWS 정보는 코드에 직접 넣지 않고 환경변수로 관리한다.
'전공 > Spring Boot' 카테고리의 다른 글
| Spring Boot 프로젝트에 AI 테스트·문서화 에이전트 적용하기 (0) | 2026.10.18 |
|---|
