[AWS] RDS PostgreSQL와 스프링 부트 3 게시판 연동

목차

앞선 글에서 배포하고 HTTPS로 전환한 스프링 부트 3 게시판은 DB로 H2를 사용했다. 이 글에서는 운영 환경에 적합한 PostgreSQL을 AWS RDS로 생성하고, 스프링 부트 3 게시판과 연동해 H2에서 운영용 DBMS로 전환하는 과정을 단계별로 정리한다.



H2 데이터베이스는 웹 프로그램이나 서비스의 개발 단계에서는 유용하지만, 실제 운영 환경에서 사용하기에는 부족한 DBMS다. 따라서 서비스를 본격적으로 운영하기로 했다면 H2보다 성능이 좋은 DBMS를 고려해야 한다.

오라클 같은 상용 DBMS도 있지만, 규모가 작은 웹 서비스는 대체로 PostgreSQL이나 MySQL을 주로 사용한다. 이번에는 점유율이 점점 높아지는 PostgreSQL을 AWS RDS로 사용하고, 스프링 부트 게시판에 연동해 보자.

RDS(Amazon RDS)는 관리형 데이터베이스 서비스로, 여러 데이터베이스 엔진(MySQL, PostgreSQL, Oracle, SQL Server 등)을 지원하며 자동 백업, 패치 관리, 모니터링, 스케일링 기능을 제공한다. AWS가 하드웨어 계층과 대부분의 관리 작업을 담당하므로, 온프레미스 데이터베이스 서버를 직접 관리하는 부담을 덜고 애플리케이션과 사용자에게 집중할 수 있다. 자세한 내용은 Amazon RDS 공식 문서를 참고하자.

RDS 데이터베이스 생성

AWS RDS 데이터베이스 생성 화면
AWS RDS 콘솔

데이터베이스를 생성한다.

AWS RDS 데이터베이스 생성 버튼
AWS RDS 생성 방식 선택

데이터베이스 생성 방식을 선택하고 엔진으로 PostgreSQL을 선택한다. 필자는 표준 생성을 선택한다.

AWS RDS PostgreSQL 엔진 선택

버전을 15.4로 선택하고 템플릿을 프리티어로 선택한다.

AWS RDS PostgreSQL 버전과 프리티어 템플릿 선택

DB 자격 증명은 비밀번호 기반으로 할 것이기 때문에 자체 관리를 선택하고, 다른 값은 기본으로 둔 후 마스터 암호를 설정한다. 이렇게 하면 postgres라는 DB 사용자 이름과 마스터 암호로 DB에 접속하게 된다.

AWS RDS 자격 증명과 마스터 암호 설정

EC2 컴퓨팅 리소스에 연결을 선택하고 기존에 생성한 EC2 인스턴스를 선택한다.

AWS RDS를 EC2 인스턴스에 연결
AWS RDS 추가 설정

나머지 값들은 모두 기본값으로 두고 맨 아래의 [데이터베이스 생성] 버튼을 클릭한다.

생성한 DB를 보면 엔드포인트라고 하는 데이터베이스의 도메인 주소가 적혀 있다. 이 엔드포인트가 이후 접속과 연동에 사용된다.

AWS RDS PostgreSQL 엔드포인트 확인

sbb 데이터베이스 생성 및 스프링 부트 연동

PostgreSQL 클라이언트로 sbb 데이터베이스 생성

이제 생성된 PostgreSQL 인스턴스에 SBB 서비스에 사용할 sbb 데이터베이스를 생성한다. PostgreSQL에 접속하려면 PostgreSQL 클라이언트를 먼저 설치해야 한다. 클라이언트는 PostgreSQL 데이터베이스 서버와 상호 작용하는 소프트웨어 또는 도구라고 생각하면 된다.

sudo apt install postgresql-client

createdb 명령으로 sbb 데이터베이스를 생성한다. -h 옵션에는 앞서 확인한 RDS 엔드포인트를 입력한다.

createdb sbb --username=postgres -h database-1.clyge22cyikw.us-east-2.rds.amazonaws.com

스프링 부트에 PostgreSQL 연동 설정

스프링 부트 프로젝트가 PostgreSQL 서버에 접속하려면 PostgreSQL 라이브러리가 필요하다. build.gradle 파일을 수정해 라이브러리를 추가한다.

(... 생략 ...)
dependencies {
    (... 생략 ...)
    runtimeOnly 'org.postgresql:postgresql'
}
(... 생략 ...)

이어서 운영 프로파일 설정 파일인 application-prod.properties를 수정해 데이터소스를 RDS PostgreSQL로 바꾼다.

# DATABASE
spring.datasource.url=jdbc:postgresql://database-1.clyge22cyikw.us-east-2.rds.amazonaws.com:5432/sbb
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=postgres
spring.datasource.password=s3021502!

# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true

과정을 모두 마쳤다면 새로운 배포 파일(.jar)을 빌드해 서버에 적용하고, stop.sh·start.sh를 실행해 SBB 서비스를 재시작한다. 데이터베이스가 변경되었으므로 기존 H2의 데이터는 보이지 않을 것이다.

RDS PostgreSQL과 스프링 부트 3 게시판 연동 성공 화면

정리

AWS RDS로 PostgreSQL 인스턴스를 생성하고, sbb 데이터베이스를 만든 뒤 스프링 부트 3 게시판의 데이터소스를 H2에서 PostgreSQL로 전환했다. 이로써 EC2 배포 → HTTPS 적용 → 운영용 DBMS 연동까지, 스프링 부트 3 게시판을 운영 가능한 형태로 올리는 전 과정을 마쳤다.

참고: Amazon RDS PostgreSQL 사용 설명서

💬 댓글 1

💬 댓글을 남기려면?
여겸 김
김여겸 멘토 2024.11.07
커뮤니티를 위해서 꾸준히 포스팅을 작성해주셔서 고맙습니다.
글작성 채점 기준은 75점인데요. 좀 더 올리는 법을 알려드리자면 (현재 글 기준)
1. "기본 SEO > 콘텐츠 길이가 334단어입니다. 최소 600개의 단어를 사용하는 것을 고려해보세요"
>> 말그대로 글자 수를 늘리면 됩니다. 현재 334단어라고 하니, 조금더 상세하게 설명을 작성해주면 자연스럽게 글자수가 늘게 되겠죠?
2. "콘텐츠 가독성 > Table of Contents plugin을 사용하지 않는 것 같습니다."
>> 가장 상단에서 새로운 블록을 만들 때, "목차"라고 검색하면 "Rank Math"에 따른 목차라는 부분이 나올겁니다. 그걸 클릭만 해주면 목차가 나올거예요. 소제목에 맞게 자동으로 목차가 만들어 질겁니다. 이건 내가 만들어 놓겠습니다. 참고하세요. (만들고 보니 H2 소제목 두개만 있네요. ㅎㅎ )

위의 첨삭에 궁금한 점이 있으면 말씀해주세요. 화이팅!

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요