백엔드를 다룰때 데이터베이스를 관리하는 것은 코드를 작성하는 것만큼 중요한 일이다.
ㄱㅐ발자의 능력중 하나는 데이터베이스를 다룰 줄 알아야한다는 것이다.
이 챕터에서는 DB를 구축하고, EC2와 연동을 할 계획이다.
데이터베이스를 설치해 다루려면 모니터링, 알람, 백업, HA구성등을 모두 직접해야하지만, 이를 모두 지원하는 AWS의 RDS를 이용할 계획이다.
RDS는 클라우드 기반 관계형 데이터 베이스로, 하드웨어 프로비저닝, 데이터베이스 설정, 패치, 백업을 자동화하고 추가용량을 지원해 비용을 지불하면 문제 없이 서비스를 지속할 수 있게 해준다.
7.1 RDS 인스턴스 생성하기
대시보드에 RDS를 검색하고 데이터베이스를 생성하자. 여기선 MariaDB를 추천하는데 나는 사실 PostgreSQL 경험이 있어 이용해볼까 했지만 일단 마리아DB를 따르기로 했다.
책에서 MariaDB를 추천하는 이유는 다음과 같다.
- 가격 : 다른 상용 데이터베이스인 오라클, MSSQL이 오픈소스인 MySQL, MariaDB, PostgreSQL보단 동일한 사양대비 가격이 높음.
- Amazon Aurora(오로라) 교체 용이성 : Aurora는 AWS에서 MySQL, PostgreSQL을 클라우드 기반에 맞게 재구성한 DB로 보다 높은 성능을 제공한다. AWS에서 직접 엔지니어링 하고 있다는 장점도 있다. 클라우드 서비스에 가장 적합하다는 점도 있다. 이는 프리티어 대상이 아니기에 교체가 용이한 mariaDB로 시작할 계획이다.
MariaDB : Mysql 개발자들이 기존 시스템을 기반으로 만들었기에 쿼리가 전반적으로 유사함. 또한, 성능, 커뮤니티, 기능등에서 MysQl보다 장점있다.
마스터 번호를 생성하고 스토리지 20, 퍼블릭액세스 가능, 포트 3306으로 DB를 생성한다.
7.2 RDS 운영에 맞는 파라미터 설정하기.
3가지 필수 설정을 진행하자
- 타임존 설정
왼쪽 사이드바에서 파라미터 그룹을 클릭하고 파라미터를 생성한다. 이 때 처음 설정한 DB버전과 맞는지 유의해야한다. 나는 MariaDB 10.6이므로 이것으로 맞췄다. 이후 파라미터 편집 -> [time_zone 검색] -> Asia/Seoul로 변경한다.
- Character Set
Character를 검색하면 나오는 6개의 항목은 'utf8mb4로 변경'
Collation_connection과 Collation_server는 'utf8mb4_general_ci'로 변경하자.
UTF8 vs UTF8mb4 : 후자가 이모지 저장 기능이 가능해 utf8mb4를 더 많이 사용한다고 한다.
- Max Connection : 인스턴스의 사양에 따라 자동으로 결정되는데 이를 넉넉하게 150정도로 수정하자. 이후, RDS의 사양이 높아지면 기본값으로 다시 돌려놓으면 된다.
이후 생성한 파라미터 그룹을 DB와 연결해준다.
7.3 내 PC에서 RDS에 접속하기
우선, RDS 보안 그룹의 인바운드로 2가지를 추가해야한다.
EC2의 보안그룹 ID, 내 IP 를 등록해주자. 인바운드 규칙추가로 진행하자.
1. EC2 브라우저를 열어서 내 보안그룹의 ID를 복사, 붙여넣기해준다.
2. 내 IP로 등록한다. (DB에 접근할 수 있는 IP, EC2에 접근하는 IP와는 별개이다.)
여기서 의문, RDS 보안 그룹을 클릭했는데 왜 Default로 되어있을까
저 링크를 클릭하니 EC2 보안그룹으로 이동이 되었다.
흠. .일단 진행하면서 장애가 나는걸로 확인해봐야겠다. (추후에 수정했음).
이후, Database 플러그인 설치를 위해 GUI 클라이언트를 사용해야하는데 우리는 인텔리제이에서 사용할 계획이다.
인텔리제이 - > 플러그인 -> Database Navigator 설치를 진행하자.
인텔리제이에서 [Ctrl + Shift + a]를 눌러 Database Browser를 클릭하고 Mysql DB를 생성해주자.
이때 Host에 아까 복사한 엔드포인트를 입력하고, master id/pw를 입력해주고 Test Connection을 진행해보자. OK
이제, 인텔리제이에 콘솔창을 새로 생성하고 use + 생성한 DB명으로 쿼리를 진행한다.
use freelec_springboot2_webservice
이후, show variables like 'c%';를 실행해 character_set_database와 collation_connection을 확인하면 둘은 utf8mb4가 아닌 latin1이 등록 되어있다. 이는 MariaDB에서만 RDS파라미터 그룹으로 변경이 안되기에 직접 변경한다.
ALTER DATABASE freelec_springboot2_webservice
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';
목표로 노렸던, Character set database와 collation_connection은 정상적으로 바뀌었는데 문제가 생겼다.
Character set server와, collation server가 제대로 반영되지 않았다. 계속 latin이라고 뜨네...
혹시 파라미터 설정을 잘못했나 싶어 RDS 파라미터 그룹을 확인해봤으나 결과는 utf~~로 설정이 되어있었다.
뭐가 문제지!
파라미터 그룹을 추가하고 재부팅을 제대로 안해줘서 파라미터 그룹이 반영이 안되었다. 재부팅을 하고 다시 연결 설정을 하니 잘 진행되었다.
use freelec_springboot2_webservice;
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;
해당 sql문을 동시에 실행하니, 없는 테이블에 값을 넣는 오류가 발생했다. 따라서, create, insert select 모두 차례로 진행했 고 그 결과 성공했다.
또한, 이후에 보안 그룹에 관련해서 고민을 많이 해봤다. EC2의 보안 그룹을 사용하는게 맞을까? 그렇다면 Ec2의 보안 그룹을 굳이 ID를 붙여넣지는 않았을것 같다.
책에서 따로 보안그룹을 생성해주는 것과 관련된 이야기가 없어서 결국 RDS전용 보안 그룹을 따로 생성해주고 설정을 다시했다.
7.4 EC2에서 RDS에서 접근확인
putty에서 로그인을 한 후 sudo yum install mysql로 mysql 관련 명령어 라인을 설치한다.
ㅇㅣ후 mysqul -u 사용자이름 -p -h 아까 그 endpoint를 입력한다.
성공!
추가
putty에서 복붙 사용하기
ctrl + v 대신 shift + insert를 활용하자.
'BE > 6기 코테이토 - Spring Study' 카테고리의 다른 글
4.5회. Ch8. 다시도전 (그래도 실패를 곁들인) (0) | 2023.02.17 |
---|---|
4회(1). Ch8 - EC2서버에 프로젝트를 배포해보자 (0) | 2023.02.15 |
4회. ch6 AWS 서버 환경을 만들어보자 - AWS EC2 (0) | 2023.02.11 |
3회 - Ch.5(2) 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.02.08 |
3회 - Ch.5 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.02.07 |