Chap 07_AWS에 데이터 베이스 환경을 만들어보자(AWS RDS)
웹 서비스의 백엔드를 다룬다고 했을 때 애플리케이션 코드를 작성하는 것 만큼 중요한 것이 데이터베이스를 다루는 것이다. 규모가 있는 회사의 경우 데이터베이스를 전문적으로 처리하는 직군 담당자들이 존재하지만 스타트업이나 개발 인원수가 적은 서비스에서는 개발자가 데이터베이스를 다뤄야만 하므로 백엔드 개발자는 데이터베이스를 다룰 줄 알야야 한다.
AWS에서 제공하는 관리형 서비스인 RDS를 이용하여 데이터베이스를 구축하고 앞 장에서 만든 EC2 서버와 연동해볼 수 있다.
- RDS란?
- AWS에서 지원하는 클라우드 기반 관계형 데이터베이스
- 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스
- 장점: 예상치 못한 양의 데이터가 쌓여도 비용만 추가하면 정상적으로 서비스가 가능함 (조정 가능한 용량 지원)
7.1 RDS 인스턴스 생성하기
1. DBMS 선택
RDS 대시보드에서 [데이터베이스 생성]버튼 클릭하면 RDS 생성과정이 진행된다. DB 엔진 선택화면에서 MariaDB를 선택하는데 저자가 RDS에서 제공하는 많은 데이터베이스 중에서 MariaDB를 추천하는 이유는 다음과 같다.
- 가격
- 상용 데이터베이스인 오라클, MSSQL이 오픈소스인 MySQL, MariaDB, PostgreSQL보다는 동일한 사양 대비 더 가격이 높다.
- Amazon Aurora(오로라) 교체 용이성
- 많은 회사들이 클라우드 서비스에 가장 적합한 데이터베이스인 Amazon Aurora를 선택한다. 그러다보니 굳이 Amazon Aurorad와 호환 대상이 아닌 오라클, MSSQL을 선택할 필요가 없어진다.
- 하지만 시작하는 단계에서는 비용적인 문제로 인해 Aurora를 선택하기 부담스럽기 때문에 MariaDB를 사용하는 것이다.
MariaDB란?
MySQL의 창시자인 몬티 와이드니어가 만든 프로젝트
MySQL을 기반으로 만들어졌기 때문에 전반적인 사용법이 유사함
MySQL 대비 장점
- 동일 하드웨어 사양으로 MySQL보다 향상된 성능
- 좀 더 활성화된 커뮤니티
- 다양한 기능
- 다양한 스토리지 엔진
2. 사용 사례 선택
- [프리티어] 선택

3. 상세 설정

- DB 인스턴스와 마스터 사용자 정보 등록

- 퍼블릭 액세스 변경
- 보안 그룹에서 지정된 IP만 접근하도록 막을 예정

- 데이터베이스 이름 설정

7.2 RDS 운영환경에 맞는 파라미터 설정하기
RDS를 처음 생성하면 몇 가지 설정을 필수로 해야 한다.
- 타임존
- Character Set
- Max Connection
1. 파라미터 그룹 생성
- [파라미터 그룹 생성] 버튼 클릭

- 생성한 MariaDB와 같은 버전 선택

- 생성된 파라미터 그룹 클릭

- [편집] 버튼 클릭

2. 파라미터 그룹 편집
- 타임존 수정
- Asia/Seoul 입력

- Character Set 변경
- character 항목 → utf8mb4로 변경
- collation 항목 → utf8mb4_general_ci로 변경
- utf8과 utf8mb4의 차이 : 이모지 저장 가능 여부
- utf8 : 이모지 저장 가능
- utf8mb4 : 이모지 저장 불가능


- Max Connection 수정
- RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 결정
- Max Connection을 150으로 설정

3. 데이터베이스에 파라미터 그룹 연결
- DB 파라미터 그룹을 신규 파라미터 그룹으로 변경


- 반영 시점: [즉시 적용]

- 정상 적용을 위한 재부팅

7.3 내 PC에서 RDS에 접속해 보기
1. RDS 보안 그룹에 본인 PC의 IP 추가
- RDS 보안 그룹 정보 선택

- EC2의 보안 그룹 ID 복사

- 복사된 보안 그룹 ID와 본인의 IP를 RDS 보안 그룹의 인바운드로 추가
- 인바운드 규칙 유형: MYSQL/Aurora 선택 시 자동으로 3306 포트 선택
- 보안 그룹 첫 번째 줄 : 현재 내 PC의 IP를 등록
- 보안 그룹 두 번째 줄 : EC2의 보안 그룹을 추가
- 이와 같이 하면 EC2와 RDS 간에 접근이 가능
- EC2의 경우 이후에 2대 3대가 될 수도 있는데, 매번 IP를 등록할 수는 없으니 보편적으로 이렇게 보안 그룹 간에 연동을 진행
- 인바운드 규칙 유형: MYSQL/Aurora 선택 시 자동으로 3306 포트 선택

2. Database 플러그인 설치
- IntelliJ에서 Database Navigator 설치

- Database 플러그인 실행

- RDS 접속 정보 등록
- Host : RDS의 엔드 포인트 붙여넣기
- User, Password : RDS 데이터베이스의 마스터 계정 id와 password 입력

- Test Connection 성공 시 최종 저장

- RDS 스키마 노출 후 콘솔창 생성


- 신규 콘솔창 이름 등록

- 쿼리 실행
- 쿼리가 수행될 database를 선택하는 쿼리

- 쿼리 실행 성공 메시지

- character_set, collation 설정 확인

- 두 번째 쿼리 실행
ALTER DATABASE freelec_springboot2_webservice
CHARACTER SET ='utf8mb4'
COLLATE = 'utf8mb4_general_ci';
- 변경 성공 확인

- 타임존 확인
select @@time_zone, now();

- 한글 데이터 등록 확인
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;

7.4 EC2에서 RDS에서 접근 확인
- Mac: ssh 서비스명
- Window: putty
- EC2에 MySQL CLI 설치

- EC2에서 RDS에 접속

- 데이터 베이스 목록 확인

'Group Study (2023-2024) > Spring 입문' 카테고리의 다른 글
[스프링 입문] 5주차 chap 06 - AWS 서버 환경을 만들어보자 - AWS EC2 (0) | 2023.12.25 |
---|---|
[스프링 입문] 4주차 chap 05 - 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (1) | 2023.11.27 |
[스프링 입문] 3주차 chap 04 - 머스테치로 화면 구성하기 (1) | 2023.11.16 |
[Spring 입문] 1주차 chap 03 - 스프링 부트에서 JPA로 데이터베이스 다뤄보자 (0) | 2023.11.10 |
[스프링 입문] 1주차 chap 01 - 인텔리제이로 스프링 부트 시작하기 (0) | 2023.11.05 |