안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

AWS (Amazon Web Service)

[AWS] RDS 생성 (PostgreSQL) + EC2 연결

피그브라더 2020. 11. 26. 16:14

AWS RDS는 Relational Database Server의 약자로, 데이터베이스 서버로 사용할 수 있도록 AWS에서 제공해주는 하나의 물리적인 컴퓨터라고 생각하면 된다. EC2 인스턴스 생성과 관련한 직전 포스팅에서 다뤘듯이, 초보 개발자는 Elastic Beanstalk, Kubernetes 등의 배포 패키지를 바로 이용하는 것보다 AWS의 각 리소스를 직접 생성하고 설정까지 해보면서 배포를 해보는 경험을 가지는 것이 좋다. 이러한 목적으로, 직전 포스팅에서는 EC2 인스턴스를 직접 생성하고 이에 접속하는 방법까지 알아보았다면, 이번 포스팅에서는 데이터베이스 서버 운용을 위한 RDS 인스턴스를 직접 생성하고 이를 EC2 인스턴스에 연결하는 방법을 알아보도록 할 것이다. 참고로 RDS도 EC2와 마찬가지로 AWS 가입 후 1년 동안은 무료로 제공받을 수 있는 리소스 중 하나이다. 따라서 처음에 배포와 관련된 공부를 해보기에 매우 적합할 것이다.

 

설명을 진행하기에 앞서, 먼저 AWS 사이트(https://aws.amazon.com/ko/)에 접속하여 AWS 계정을 생성하고 로그인을 하도록 한다. 이 과정은 크게 어렵지 않기 때문에 굳이 이번 포스팅에서 다루지 않도록 할 것이다. 로그인을 한 뒤 상단의 [서비스] 탭을 클릭하면 [RDS]를 찾을 수 있다. 이것을 클릭하여 들어간 다음 [데이터베이스 생성]을 클릭하자. 이제 설명을 차근차근 따라가 보자.

 

1. 데이터베이스 생성 방식 선택

 

RDS 인스턴스의 생성 방식을 선택한다. [손쉬운 생성]을 선택하면 각종 설정을 생략하고 권장되는 모범 사례로 쉽게 RDS 인스턴스를 생성할 수 있다. 그러나 여기서는 각종 설정에 대해 간단히라도 알아보기 위해 [표준 생성]을 선택한다.

 

2. 엔진 옵션, 템플릿

 

데이터베이스 엔진 옵션을 선택한다. 이번 포스팅은 PostgreSQL 서버를 운용하는 RDS 인스턴스를 구축할 것이므로 [PostgreSQL]을 선택한다. 버전은 가장 최신 것으로 자동 선택된다. 그다음으로는 템플릿을 선택한다. AWS 계정이 가입된 지 1년이 되지 않았다면 [프리 티어]도 선택할 수 있다. 무료로 RDS 인스턴스를 구축할 수 있으므로 [프리 티어]를 선택한다.

 

3. 설정

 

RDS 인스턴스의 기본 설정과 관련된 부분이다. [DB 인스턴스 식별자]는 RDS 인스턴스의 이름을 의미한다. 다음으로, 데이터베이스 서버에 접근하기 위한 자격 증명 정보를 설정한다. [마스터 사용자 이름]은 루트 유저의 이름(선택한 엔진이 PostgreSQL이므로 기본값은 postgres)을 의미하고, [마스터 암호]는 해당 유저의 패스워드를 의미한다. [암호 자동 생성]을 체크한다면 암호가 자동 발급된다. 이러한 자격 증명 정보는 추후 해당 데이터베이스 서버에 접속하고자 할 때 필요하므로 꼭 기억해둬야 한다.

 

4. DB 인스턴스 크기, 스토리지, 가용성 및 내구성

 

앞서 [프리 티어]를 선택했기 때문에 RDS 인스턴스의 크기로는 자동으로 [db.t2.micro]가 선택된다. 이는 바꿀 수 없다. 더 좋은 인스턴스를 구축하고 싶다면 [프리 티어]를 사용하지 않고 돈을 좀 내야 한다. 스토리지 설정은 말 그대로 RDS 인스턴스의 저장 장치 용량과 관련된 것이다. 이는 그냥 기본값으로 두고 다음으로 넘어가자. 가용성 및 내구성 설정도 마찬가지로 그냥 넘어가자(어차피 설정도 못한다).

 

5. 연결

 

데이터베이스 서버와의 연결과 관련된 각종 설정을 하는 부분이다. [VPC]와 [서브넷 그룹]은 기본값을 그대로 사용해도 무방하다. [퍼블릭 액세스 가능]의 경우 동일한 VPC 내부에 있는 다른 기기만 접근이 가능하게 할 것인지, 아니면 VPC 외부의 다른 기기도 접근이 가능하게 할 것인지 결정하는 부분이다. 여기서는 해당 RDS 인스턴스와 연결될 EC2 인스턴스에서만 접속을 허용하기 위해 [아니오]를 선택한다. 다음으로, [VPC 보안 그룹]은 해당 RDS 인스턴스의 인바운드 및 아웃바운드 규칙을 설정하는 부분인데, [기존 항목 선택]을 선택해도 무방하지만 나중에 여러 개의 보안 그룹을 명시적으로 관리하기 위해서는 [새로 생성]을 선택하여 보안 그룹을 하나 생성하기를 권장한다. 마지막으로, [데이터베이스 포트]는 기본값으로 적힌 5432를 그대로 둔다. PostgreSQL 서버는 관습적으로 5432번 포트에서 열리기 때문이다.

 

6. 데이터베이스 인증

 

기본값 그대로 [암호 인증]을 선택한다. 앞서 설정한 자격 증명 정보(유저 이름, 패스워드)만으로 인증하게 해도 충분할 듯하다.

 

7. 추가 구성 설정

 

접혀 있는 [추가 구성] 탭을 펼치면 위와 같이 많은 설정들이 보이게 된다. 초보 개발자는 어차피 이해할 수 없으니 그냥 이런 것들이 있구나 하고 한 번 쓰윽 훑어보는 정도면 충분할 것 같다. 하나 봐야 할 부분이 있다면 처음에 있는 [초기 데이터베이스 이름]이다. 이를 지정하지 않으면 데이터베이스 서버 내에 데이터베이스가 생성되지 않는다. 반면에 이를 지정해준다면 해당 이름의 데이터베이스가 자동으로 생성된다. 여기서는 어차피 나중에 EC2 인스턴스에서 해당 RDS 인스턴스에 접속하여 데이터베이스를 생성해줄 것이므로 굳이 지정하지 않았다. 그게 귀찮다면 여기서 이름을 지정해주자.

 

8. 월별 추정 요금

 

앞서 [프리 티어]를 선택했기 때문에 1년(= 12개월) 동안은 무료이다. 정확히 어떤 조건을 만족할 때까지 무료인지는 위 사진의 설명을 참고하자. 만약 [프리 티어]를 선택하지 않았다면 어느 정도의 요금이 발생할지 여기서 띄워주게 된다. 이제 [데이터베이스 생성] 버튼을 클릭하여 RDS 인스턴스의 생성을 개시하자. 이후 몇 분 기다리면 RDS 인스턴스의 생성이 완료될 것이다.

 

9. EC2 인스턴스에 연결하기

이미 생성해둔 EC2 인스턴스가 존재한다고 가정할 때, 그 인스턴스를 우리가 방금 생성한 RDS 인스턴스와 연결하는 방법에 대해 알아보자. 여기서 말하는 '연결'이란 크게 두 가지이다. 첫 번째는 EC2 인스턴스에서 RDS 인스턴스에 접근할 수 있도록 설정하는 것이고, 두 번째는 EC2 인스턴스의 웹 어플리케이션이 RDS 인스턴스의 데이터베이스 서버에 접근할 수 있도록 설정하는 것이다.

 

9-1. EC2 인스턴스에서 RDS 인스턴스에 접근할 수 있도록 설정하기

상단의 [서비스] 탭을 클릭한 뒤 [인스턴스]를 클릭하여 들어가면 좌측 메뉴에서 [보안 그룹]을 찾을 수 있을 것이다. 이를 클릭하여 들어가면 현재 생성되어 있는 모든 보안 그룹들이 나열된다. 앞서 RDS 인스턴스 생성 시 새로 생성한 보안 그룹도 이곳에서 볼 수 있을 것이다. 이제 그것을 클릭하여 인바운드 규칙을 편집해보자. 이를 통해 해당 RDS 인스턴스로의 접근을 어떠한 조건에서만 허용할지 설정해줄 수 있다. 다음과 같이 설정을 수정하자. 빨간색 부분은 EC2 인스턴스에 연결되어 있는 보안 그룹에 해당한다. 즉, 연결할 EC2 인스턴스에 연결된 보안 그룹의 이름을 소스에 입력하여 EC2 인스턴스에서의 접근을 허용하도록 설정하자. 그 외에는 어떠한 접근 가능 경로도 두지 않을 것이다. 다 수정했다면 [규칙 저장] 버튼을 클릭하는 것도 잊지 말자.

 

 

9-2. EC2 웹 어플리케이션이 RDS 데이터베이스 서버에 접근할 수 있도록 설정하기

사실 이는 웹 어플리케이션의 종류와 EC2 인스턴스의 AMI에 따라 설정 방법이 각기 다르다. 모두에 공통되는 핵심 개념만 설명하면 다음과 같다. 먼저, 웹 어플리케이션이 데이터베이스 서버에 접근하기 위한 클라이언트를 EC2 인스턴스에 설치해줘야 한다. 그래야 웹 어플리케이션이 해당 클라이언트를 통해 RDS 인스턴스의 데이터베이스 서버에 접근할 수 있기 때문이다. 다음으로, 웹 어플리케이션이 접근하고자 하는 데이터베이스 서버에 대한 정보를 웹 어플리케이션에게 알려줘야 한다. 해당 데이터베이스 서버의 어떠한 데이터베이스에 접근할 것인지(데이터베이스 이름), 어떠한 유저로 접근할지(유저 이름), 그 유저로 접근하기 위한 암호는 무엇인지(유저 패스워드), 해당 데이터베이스 서버가 어떠한 포트에서 열려 있는지(포트 번호), 마지막으로 그 데이터베이스 서버의 위치가 어디인지(호스트명, 엔드 포인트) 등이 바로 그것이다. 이러한 두 가지 설정을 정확히 해주면 웹 어플리케이션이 데이터베이스 서버와 원만하게 통신할 수 있게 된다. 환경 및 웹 어플리케이션별 설정 방법은 직접 한 번 찾아보기 바란다.

 

※ 참고 : Django 어플리케이션과 PostgreSQL 서버 연결하기