본문 바로가기
개발/스프링

[혼자 구현하는 웹서비스] 7. AWS에 데이터베이스 환경을 만들어보자 - AWS RDS

by 카펀 2022. 1. 23.

* 이 글은 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' (프리렉, 이동욱 저) 를 공부하며 내용을 정리한 글입니다.

* 내용을 따라가며 쓴 글이라 책과 흐름이 겹칠 수 있으나, 최대한 내용을 이해한 후 저의 글로 옮겼습니다.

* 이 글은 6. AWS 서버 환경을 만들어보자 - AWS EC2에서 이어집니다.

 

0. 개요

1. RDS 인스턴스 생성하기

2. RDS 운영에 맞는 파라미터 설정하기

3. 내 PC에서 RDS에 접속해 보기

4. EC2에서 RDS 접근 확인

 

0. 개요

백엔드 개발에서 빼놓을 수 없는 부분이 데이터베이스 (DB)다. DB는 가입된 사용자 각각의 정보, 활동하며 쌓이는 내용, 심지어 로그까지 웹 서비스에 필요한 수많은 내용이 저장되는 곳이다. 그런 만큼 대학 컴퓨터공학 과정에서도 중요한 과목 중 하나로 짚고 넘어가는 내용이고, 현업에서도 끊임없이 마주하게 되는 분야다. 나 역시 회사에서 쿼리를 이용해 DB를 자주 조회하고 조작하고 있다.

보통 큰 조직 (회사 등)에서는 DB를 전문적으로 관리하는 DBA (database administrator)가 별도로 존재한다. 덕분에 프론트엔드, 백엔드 개발을 하는 개발자들은 상대적으로 DB를 직접 조작할 일이 많지 않다.

하지만 그렇다고 해서 DB를 몰라도 된다는 것은 아니다. 특히 백엔드 개발자는 DB에 대해 자세히 알고 있어야 한다. 우리가 매번 stack이나 queue를 직접 구현해서 쓰지는 않지만, 그 원리를 이해하고 있어야 하는 것처럼 말이다. 심지어 스타트업이나 규모가 작은 팀에서는 백엔드 개발자가 직접 DB를 다루어야 한다.

 

직접 DB를 설치하여 구축하는 것은 복잡한 일이다. 모니터링, 알람, 백업, HA 구성 등을 직접 해야 한다.

다행히 AWS에서는 이러한 작업을 모두 지원하는 RDS (Relational Database Service)를 제공한다. RDS는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스 서비스이며, 앞서 언급한 하드웨어 프로비저닝, DB 설정, 백업 등 DB 운영에 관련된 작업을 자동화하여, 우리와 같은 개발자는 DB를 이용한 개발에 집중할 수 있도록 해 준다

추가로 '조정 가능한 용량'을 지원한다. 따라서 예상치 못한 다량의 데이터가 발생해도, 비용만 추가로 내면 추가 증설 작업 없이 쉽게 이요할 수 있다.

이렇듯 RDS는 1인 혹은 소규모 개발에 큰 강점을 가진다. RDS를 활용하여 나만의 DB 환경을 구축해 보자.

 

1. RDS 인스턴스 생성하기

먼저 RDS 인스턴스를 생성하자. AWS 콘솔에 로그인 한 후, 검색창에 rds를 입력하고, RDS 대시보드에서 '데이터베이스 생성' 버튼을 누르면 된다.

 

RDS 검색 및 데이터베이스 생성

 

DB 선택

여러 가지 DB를 고를 수 있다.

개인적으로 Oracle, MSSQL 같은 상용 DB보다는 오픈소스 DB를 선호하는 편이다. 거기에 현재 회사에서 PostgreSQL을 쓰고 있기 때문에 나는 PostgreSQL로 진행하기로 했다.

버전은 12.9를 골랐다. PostgreSQL은 버전이 올라갈수록 성능 향상 폭이 크다고 들었고, 현재 버전 14까지 나와 있다. 하지만 너무 최신 버전을 쓰면 데이터를 찾아보기 어려울 것 같은 걱정에 살짝 낮은 12.9를 골랐다.

PostgreSQL의 쿼리는 MySQL이나 Oracle과 크게 다르지 않다. 각종 DB 종류에 관한 글은 다음에 써서 정리하기로 하고...

 

프리 티어 선택

템플릿은 프리 티어를 선택했다.

 

스크롤을 내리면 상세 설정을 입력하게 된다.

 

설정

DB 인스턴스 식별자와 사용자 이름, 비밀번호를 정해 주면 된다. 여기서 설정된 사용저 정보를 이용해 실제 DB에 접근하게 된다.

DB 인스턴스 식별자는 DB에 붙여주는 식별 가능한 이름이다. 만들고 있는 서비스와 유사한 이름으로 적당히 지었다.

 

연결, 데이터베이스 옵션

 이 외에 '연결' 에서 '퍼블릭 액세스' 를 '예'로 설정하고, 추가 구성 -> 데이터베이스 옵션에서 초기 데이터베이스 이름을 적당히 지어 주고 넘어갔다.

 

모든 설정이 끝나면 완료 버튼을 누르도록 하자.

 

데이터베이스 목록

완료 버튼을 누르면 위처럼 정보를 확인할 수 있다. DB가 생성되는 데에는 몇 분 정도 걸린다.

생성이 완료되면, DB를 본격적으로 설정하면 된다.

 

2. RDS 운영환경에 맞는 파라미터 설정하기

RDS를 처음 생성하면 해야 하는 몇 가지 필수 설정이 있다.

 

  • 타임 존 설정
  • Character Set
  • Max Connection

왼쪽 탭에서 '파라미터 그룹' 을 선택하고, 파라미터 그룹 선택을 클릭하자.

 

파라미터 그룹

 

'파라미터 그룹 패밀리'에서 앞서 설정한 DB의 버전을 맞춰 주어야 한다.

나는 PostgreSQL 12.9를 골랐기 때문에 여기서는 PostgreSQL 12를 선택했다.

 

파라미터 그룹 패밀리

설정을 잘 마쳤다면 생성을 클릭하면 된다.

 

파라미터 그룹

생성이 잘 되었다면 위처럼 파라미터 그룹 목록에 방금 생성한 그룹이 나타난다.

생성한 그룹을 클릭하고, 오른쪽 위의 '파라미터 편집'을 클릭하여 편집 모드로 진입하자.

 

timezone

하나씩 설정해 보자. 파라미터 내부의 이름은 DB 종류마다 다를 수 있다.

우선 위처럼 timezone을 검색하여 값을 알맞게 입력해 주면 된다.

MariaDB 등은 선택할 수 있는 콤보박스가 나오지만, PostgreSQL은 직접 입력해 주어야 하며, 형식은 UTC+X 혹은 UTC-X의 형태를 취한다.

서울 표준시는 UTC+9다.

 

다음으로 max_connections를 검색한다.

 

max_connections

max_connections는 한 번에 이루어질 수 있는 DB연결의 수이다. 적당히 150으로 해 주었다.

 

마지막으로 character set을 변경해 주자. PostgreSQL에서는 client_encoding을 검색해 주면 된다.

 

client_encoding

UTF8 또는 UTF8mb4를 지정해 주면 된다. utf8mb4는 이모지까지 저장할 수 있는 인코딩이다.

 

위 사항을 모두 수정하였다면 오른쪽 위의 '변경 사항 저장' 을 클릭해 주면 된다.

이렇게 생성한 파라미터 그룹을 데이터베이스에 연결해 주자. 좌측 메뉴에서 데이터베이스를 선택해 주면 된다.

 

데이터베이스에 연결

죄측에서 '데이터베이스' 를 선택하고, DB 식별자의 가장 좌측에 있는 원을 선택한 후, 우측 상단의 '수정' 버튼을 누르자.

 

DB 파라미터 그룹 설정

스크롤을 쭉 내리면 추가 구성 -> 데이터베이스 옵션 아래에 'DB 파라미터 그룹'을 선택할 수 있는 체크박스가 있다.

방금 생성한 파라미터 그룹의 이름이 보인다. 그걸 선택해 주면 된다.

이후 '계속' 을 누르자.

 

수정 요약

수정 요약을 보여주는 화면이 나온다. 현재 값에서 새 값으로 바뀔 것이라는 요약 정보를 확인할 수 있다.

아래에서 수정 사항을 적용할 시간을 '즉시 적용' 으로 선택해 주자. 예약 시간의 경우, 운영 중인 서비스의 사항을 수정할 때 새벽 시간에 하도록 설정할 수 있는 옵션이다.

 

결과 화면

파라미터 그룹이 잘 적용되었다면 완료된 것이다.

만약 잘 적용되지 않았다면 위 화면에서 작업 -> 재부팅을 선택해 보자.

 

3. 내 PC에서 RDS 접속해 보기

내 로컬 PC에서 RDS로 접근하려면, RDS의 보안 그룹에 내 PC의 IP를 추가해야 한다.

RDS의 세부정보 페이지에서 '보안 그룹' 을 선택하자.

 

 보안 그룹

VPC 보안 그룹을 클릭하면, 보안 그룹 목록을 보여주는 화면이 나온다.

여기서 EC2의 보안 그룹 ID를 복사한다.

 

EC2 보안 그룹 ID

이를 위의 RDS 보안 그룹의 인바운드로 추가해 주면 된다.

 

인바운드 추가

 

포트 번호는 PostgreSQL을 선택하면, 앞에서 확인했던 포트 번호가 그대로 뜬다.

이렇게 하면 RDS - 개인 PC - EC2 간의 연동 설정이 완료되었다.

 

로컬에서 DB로의 접속

로컬 (개인 PC)에서 원격 DB로 붙을 때 사용하는 방법은 여러 가지가 있다.

여기서는 IntelliJ 플러그인을 사용해 보려고 한다. (IntelliJ Ultimate는 강력한 기능의 공식 Database 기능이 있다).

 

IntelliJ에서 database navigator 플러그인을 검색 및 설치한다.

 

Database Navigator

설치 후 IntelliJ 재시작을 진행하게 된다.

다음으로 IntelliJ 액션 검색을 이용해 database browser를 실행하자.

윈도우는 ctrl + shift + a, 맥은 cmd + shift + a 단축키를 이용한다.

 

actions 검색으로 database browser 실행

왼쪽 사이드바에 큼직한 빈 공간이 나타난다.

차례로 아까 생성한 RDS의 정보를 입력하자.

 

DB 정보 입력

Host는 RDS 정보 페이지에서 연결 & 보안 -> 엔드포인트 에 있는 값을 입력하면 된다.

 

test connection

성공적으로 연결되는 것을 확인할 수 있다.

 

아래와 같이 콘솔창을 새로 생성한다.

 

새 콘솔창 생성

생성된 콘솔창에서 SQL을 실행해 보자. 앞에서 설정한 timezone이 잘 되었나 확인해 본다.

 

select now()

 

DB의 timezone 확인

현재 시간이 잘 나타나는 것을 확인할 수 있다.

 

PostgreSQL은 MSSQL이나 MySQL와 같은 use 명령어가 없다. PostgreSQL에서는 연결 시 반드시 DB를 특정한다. (출처)

 

마지막으로 한글이 잘 기록되는지 확인해 보자.

한글 저장이 잘 되는지 테스트

PostgreSQL 기준으로 다음을 실행하면 된다.

CREATE TABLE test (
	USER_ID SERIAL PRIMARY KEY,
	CONTENT VARCHAR(255) DEFAULT NULL
)

INSERT INTO test(CONTENT) values ('테스트')

SELECT * FROM test

 

serial은 auto_increment와 같은 역할을 한다.

잘 실행되면 위의 두 번째 사진처럼 내용이 잘 저장된 것을 확인할 수 있다.

 

4. EC2에서 RDS 접근 확인

이렇게 잘 설정된 RDS가 EC2에서 잘 연동되는지 확인해 보자.

 

앞서 설정한 방법대로 터미널에서 'ssh 서비스명' 을 입력한다.

 

Terminal에서 EC2 접속

먼저 EC2 Linux에 PostgreSQL을 설치해야 한다.

다음 명령어를 입력하자.

 

sudo yum install postgresql12

 

PostgreSQL이 설치된다. (server버전은 필요없다!)

이어서 우리의 정보를 이용하여 EC2 Linux에서 RDS PostgreSQL로 접속한다.

 

psql -U kchung1995 -h springboot-webservice.cf3n2liujxie.ap-northeast-2.rds.amazonaws.com -d kchung_spring2_webservice

 

기본적으로 아래와 같은 구조를 가진다.

psql -U {사용자명} -h {호스트명} -d {데이터베이스명} 

더 자세한 정보는 여기로: https://browndwarf.tistory.com/51

 

이후 비밀번호를 입력하면 우리의 RDS에 접속할 수 있다.

 

명령어를 통해 RDS에 접속

잘 접속이 되었는지 확인해 보자.

\l 을 입력하면 접속한 데이터베이스 목록을 볼 수 있다. 앞서 생성한 kchung_spring2_webservice가 보인다.

더 자세한 정보는 여기로.

 

이렇게 RDS를 이용해 PostgreSQL DB를 생성하고, Local PC와 EC2 Linux에서 접속해 보았다.

PostgreSQL 관련 정보 찾는데 좀 많이 헤맸다. 특히 처음이라 더 헤맨 것 같은데 다음에 설정할 때는 더 잘 할 수 있을 것이라 믿는다.

댓글