[SpringBoot] 웹서비스 출시하기 - 2. AWS RDS 설정
해당 글은 전'우아한 형제들' 현'인프런'의 개발자이신 jojoldu님의 블로그와 책(스프링 부트와 AWS로 혼자 구현하는 웹서비스)을 참고하여 작성하였습니다.
이전 글에서 서버를 생성하였고, 이번 글에서는 서비스에서 사용할 데이터베이스를 생성하겠습니다.
1. RDS 생성하기
- 아마존에서 제공하는 관계형 데이터베이스 서비스(RDS : Relational Database Service)를 생성합니다.
- AWS에서 RDS를 검색하여 대시보드 페이지로 이동합니다.
- "데이터베이스 생성"을 클릭합니다.
- 사용하고자 하는 DB를 선택합니다.(해당 글에서는 Maria DB를 선택하겠습니다.)
- 템플릿은 "프리티어"를 선택합니다.
- DB 설정을 입력합니다.
- 각, 마스터 사용자 이름, 비밀번호, 데이터베이스 이름은 외부에서 해당 DB에 접근하기 위해 사용되는 정보이므로, 별도로 입력한 정보를 기억해야 합니다.
- DB 인스턴스 크기는 t2.micro 를 선택합니다.(템플릿을 프리티어 선택하셨으면, 자동으로 선택됩니다.)
- 스토리지를 설정합니다. (프리티어 에서는 20G만 사용 가능합니다.)
- 연결 에서는 VPC 보안 그룹을 새로 생성 합니다.
- 추가 구성 에서는 데이터베이스의 버전과 사용할 이름, 포트번호를 설정합니다.
- 월별 추정 요금을 확인 후 "데이터베이스 생성"을 클릭 합니다.
(혹여, 월별 추정 요금에 요금이 적혀있으면, 실제 과금이 될 수 있기 때문에, 설정을 다시 확인하시기 바랍니다.)
- 조금 시간이 지나면, RDS 생성이 완료됩니다.
2. 보안 그룹 생성
- RDS가 사용 가능이 되었다면, 지정한 식별자를 클릭하여 상세화면으로 이동합니다.
- 보안 -> VPC 보안 그룹을 클릭하여, 보안그룹 페이지로 이동합니다.
- 검색을 통해 이전에 만들어놓은 EC2 인스턴스의 보안 그룹을 찾아서 그룹 ID를 복사합니다.
(해당 글에서는 springboot로 검색)
- "보안 그룹 생성"을 클릭합니다.
- 보안 그룹 이름과 설명을 작성합니다.
- 인바운드 규칙에서는 MYSQL/Aurora로 2개를 입력합니다.
- 사용자 지정으로 방금 복사한 EC2 인스턴스의 보안 그룹 ID를 입력합니다.(생성한 EC2 서버와 RDS간의 통신)
- 내 IP로 현재 접속한 IP를 등록합니다.(로컬 PC에서 RDS에 접속)
- "규칙 저장"을 클릭하여 보안 그룹을 생성합니다.
- 다시 RDS 대시보드로 이동하여, 상세보기에서 "수정"을 클릭합니다.
- "연결"에서 방금 생성한 보안 그룹을 선택하고, 이전에 있던 보안 그룹은 삭제합니다.
- "수정"을 진행합니다.
3. 로컬 PC에서 RDS 접근하기
- 생성한 RDS에 접속하여, DB가 잘 설정 되었는지 확인합니다.
- 맥 전용 DB접속 툴인 Sequel Pro를사용하겠습니다.(따로 사용하시는 툴을 사용하시면 됩니다.)
- 생성한 RDS 상세보기 시 엔드포인트 항목이 있습니다. 이것이 해당 DB의 호스트 주소입니다.(해당 값을 복사합니다.)
- Sequel Pro를 실행하여, 접속 정보를 입력합니다.
Host : RDS의 엔드포인트
Username : RDS 생성시 작성한 마스터 유저 이름
Password : RDS 생성시 작성한 비밀번호
Database : RDS 생성시 작성한 DB 이름
Port : RDS 생성시 작성한 포트번호
- 접속을 확인하고, 아래 명령을 통해 현재 DB의 character-set 상태를 살펴봅니다.
show variables like 'c%';
- 현재 기본 설정이 utf8이 아닌 latin1으로 되어 있습니다.
- utf8이 아니면 한글이 정상적으로 나오지 않기 때문에, 이를 수정합니다.
- RDS 설정 페이지에서 "파라미터 그룹"을 클릭하여 이동 후 , "파라미터 그룹 생성"을 클릭합니다.
(default 파라미터 그룹은 수정이 불가능합니다.)
- 간단하게 정보를 작성합니다.
- 생성한 파라미터를 클릭하여 상세화면으로 이동 후, "파라미터 편집"을 클릭합니다.
- 검색에 character set / collation_ 을 검색하여 charcter set 관련은 utf8 으로 collation 관련은 utf8_generic_ci 으로 변경합니다.
- 변경 사항이 저장되었으면, 이 파라미터 그룹을 RDS에 적용합니다.
- RDS 상세화면에서 수정을 클릭합니다.
- 생성한 파라미터 그룹을 선택 후 계속을 클릭합니다.
- "즉시 적용"을 클릭 후 DB 인스턴스 수정을 클릭하여 설정을 수정합니다.
- DB 인스턴스 수정이 완료가 되었다면, 완전한 설정이 되도록 해당 RDS를 재부팅합니다.
- RDS가 재부팅이 끝났으면, 설정한 값이 정상적으로 바뀌었는지 다시 확인합니다.
show variables like 'c%';
- 아직 변경 안된 부분이 있는데, 이 부분은 직접 변경을 합니다.
- 아래 명령어를 통해 직접 변경합니다.
ALTER DATABASE 본인database(ex : webservice)
CHARACTER SET = 'utf8'
COLLATE = 'utf8_general_ci';
- 설정이 끝났다면, 간단하게 확인합니다.
-- 테이블 생성
CREATE TABLE test (
id bigint(20) NOT NULL AUTO_INCREMENT, content varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB;
-- 테이블에 값 추가
insert into test(content) values ('테스트');
-- 테이블 조회
select * from test;
- 이제 외부(로컬)에서 RDS로 생성한 DB로 접근이 가능합니다.
4. EC2 에서 RDS로 접근하기
- 우리는 웹서비스를 만드는 것이기 때문에, 로컬에서 RDS 접근이 아니라 EC2에서 접근이 가능해야 합니다.
- 기존에 생성했던 ssh 명령을 통해 EC2에 접속합니다.
ssh config이름 (ex : ssh springboot-webserivce)
- EC2에 접속 후 MySQL을 설치합니다.
sudo yum install mysql
- 설치가 완료되면, MySQL에 접속을 합니다.
- 로컬에서 Sequel Pro를 사용하여 접속하는 것처럼 계정, 비밀번호, 호스트 주소를 사용해 RDS에 접속합니다.
mysql -u 계정 -p -h Host주소 (ex : mysql -u jaewon -p -h jaewonRDSHost)
- MySql(Maria DB)에 접속이 되었다면, 이전에 생성한 database(ex : webservice)가 있는지 확인합니다.
show databases;
- 이로써, 우리는 이제 서버가 구축되었고, DataBase도 사용이 가능하게 되었습니다.
출처