스프링 부트와 AWS로 혼자 구현하는 웹 서비스(7)
📌 AWS에 데이터베이스 환경을 만들기 - AWS RDS
- 웹 서비스 백엔드에서는 코드 작성만큼 중요한 것이 데이터베이스를 다루는 일임
- 직접 데이터베이스를 설치하지 않고 AWS에서 제공하는 관리형 서비스인 RDS 사용
- RDS(Relational Database Service) : AWS에서 지원하는 클라우드 기반 관계형 데이터베이스
- 하드웨어 프로비저닝, 데이터ㅔ이스 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스
- 조정 가능한 용량을 지원하여 예상치 못한 양의 데이터가 쌓여도 비용만 추가로 내면 정상적으로 서비스 사용 가능
⚡ RDS 인스턴스 생성하기
- AWS 검색창에 rds 검색
- RDS 대시보드에서 데이터베이스 생성 버튼 클릭
- DB 엔진 선택 화면에서 MariaDB를 선택
- RDS에는 오라클, MSSQL, PostgreSQL 등 있음(본인이 가장 잘 사용하는 데이터베이스 선택하면 됨)
- MySQL, MariaDB 가장 추천 !
- MariaDB
- 가격 합리적
- RDS의 가격은 라이센스 비용 영향을 받음
- 상용 데이터베이스인 오라클, MSSQL이 오픈소스인 MariaDB, PostgreSQL보다 동일한 사양 대비 가격이 더 높음
- Amazon Aurora 교체 용이성
- Amazon Aurora는 AWS에서 MySQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스임
- AWS에서 직접 엔지니어링하고 있기 때문에 계쏙 발전하고 있음
- MySQL의 창시자인 몬티와이드니어가 만든 프로젝트가 MariaDB
- MySQL을 기반으로 만들어졌기 때문에 쿼리를 비롯한 전반적인 사용법은 MySQL과 유사함
- MySQL은 단순 쿼리 처리 성능이 좋고 이미 오래 사용되어 왔기 때문에 가장 유명함
- MySQL을 기반으로 만들어졌기 때문에 쿼리를 비롯한 전반적인 사용법은 MySQL과 유사함
- MySQL보다 장점
- 동일 하드웨어 사양으로 MySQL보다 향상된 성능
- 좀 더 활성화된 커뮤니티
- 다양한 기능
- 다양한 스토리지 엔진
- 가격 합리적
- 프리티어 선택
- 스토리지 설정
- 할당된 스토리지 : 20
- DB 인스턴스와 마스터 사용자 정보 등록
- 본인만의 DB 인스턴스 이름과 사용자 정보 등록
- 여기서 사용된 사용자 정보로 실제 데이터베이스에 접근하게 되니 메모!!
- 네트워크에선 퍼블릭 액세스를 예로 변경
- 보안그룹에서 지정된 IP만 접근하도록 막을 예정
- 모든 설정이 끝나서 완료버튼을 클릭하면 생성과정 진행됨
- DB인스턴스 세부 정보 보기를 클릭하면 생성 중인 데이터 베이스의 상세 페이지로 이동함
⚡ RDS 운영환경에 맞는 파라미터 설정하기
RDS를 처음 생성할 때 필수로 설정해야 하는 것
- 타임존
- Character Set
- Max Connection
✔ 왼쪽에서 파라미터 그룹 클릭
✔ 파라미터 그룹 생성 클릭
- 세부 정보 위쪽에 DB 엔진을 선택하는 항목
- 방금 생성한 MariaDB와 같은 버전을 맞춰야 함
✔ 그룹이름, 설명 적어주고 완료 클릭
✔ 해당 파라미터 그룹 클릭
- 이동한 상세 페이지의 오른쪽 위에 파라미터 편집 클릭해서 편집모드 전환
변경
- time_zone 검색 -> Asia/Seoul 선택
- Character Set
- character 항목들은 모두 utf8mb4로
- collation 항목들은 utf8mb4_general_ci로 변경
- utf8과 utf8mb4의 차이는 이모지저장 가능 여부임
- Max Connection 수정
- RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해짐
- 현재 프리티어 사양으로는 약 60개의 커넥션만 가능해서 넉넉한 값으로 지정(150정도)
- 이후 RDS 사양을 높이게 된다면 기본값으로 다시 돌려놓으면 됨
파라미터 그룹 데이터베이스에 연결
- 데이터베이스에서 선택 후 수정
- DB 파라미터 그룹에 우리가 만든 파라미터그룹 설정
- 제대로 반영되지 않았을 수도 있기에 작업 -> 재부팅 해줌
⚡ 내 PC에서 RDS에 접속해보기
✔ 로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 본인 PC IP추가
- RDS 세부정보 페이지에서 보안그룹항목 클릭
- 새 창에서 EC2->인스턴스->보안그룹ID를 복사한 후 다시 돌아옴
- 복사된 보안 그룹 ID와 본인의 IP를 RDS 보안 그룹의 인바운드로 추가
- MySQL/Aurora 선택 -> 자동으로 3306포트 설정
- 보안 그룹 첫 번째 줄 : 현재 내 PC의 IP 등록
- 보안 그룹 두 번째 줄 : EC2의 보안 그룹을 추가
- EC2와 RDS 간에 접근이 가능해짐
- EC2의 경우 이후에 2대 3대가 될 수도 있는데, 매번 IP를 등록할 수는 없으니 보편적으로 이렇게 보안 그룹 간에 연동을 진행
⚡ Database 플러그인 설치
✔ 로컬에서 원격 데이터베이스로 붙을 때 GUI 클라이언트를 많이 사용
- MySQL의 대표적인 클라이언트 : Workbench, SQLyog(유료), Sequel Pro(맥 전용), DataGrip(유료) 등
- 큰 차이는 없으니 본인이 가장 좋아하는 틀 사용
- 우리는 IntelliJ에 Database 플러그인 설치해서 진행(인텔리제이의 공식 플러그인은 아님)
✔ RDS 정보 페이지에서 엔드포인트확인
- 엔드포인트가 접근 가능한 URL이므로 메모장 같은 곳에 복사해둠
🔶 IntelliJ에서 database 플러그인 검색
- Database Helper -> install (원래 Navigator이었는데 이름이 바꼈나보당..)
- intellij 재시작
🔶 Action 검색으로 Database Browser 실행
- Action 검색(맥 : Command + shift + a)
🔶 DBBrowser 클릭 후 '+' 버튼 눌러서 MySQL로 들어감
- User/Password에 마스터 계정명과 비밀번호 등록
- Host에 복사해둔 RDS의 엔드포인트 등록
🔶 Test Connection 누르면 Success 메시지가 보일 것
- [ Apply -> OK ] 누르고 최종 저장!
- 인텔리제이에 RDS의 스키마 노출됨
🔶 [ Open SQL Console ] 버튼 클릭 -> [ New SQL Console... ] 항목 선택
- 새로 생성될 콘솔창의 이름 정함
🔶 쿼리가 수행될 database 선택
- 만약 본인이 RDS 생성 시 지정한 database명을 잊었다면 Schema항목을 보면 MySQL에서 기본으로 생성하는 스키마 외에 다른 스키마가 1개 추가되었으니 확인하면 됨
use springboot_webservice
- 쿼리 문을 드래그하고 Execute Statement 버튼을 클릭
- SQL statement executed successfully 메시지가 떴다면 성공
🔶 현재의 character_set
, collation
설정을 확인
show variables like 'c%';
- 다른 필드들은 모두 utf8mb4가 잘 적용됐는데
character_set_database
,collation_connection
2가지만latin1
로 되어있음
ALTER DATABASE 데이터베이스명
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';
- 입력 후 다시
show variables like 'c%';
- 확인하면 모두 변경된 것을 볼 수 있음
select @@time_zone, now();
- Asia/Seoul로 잘 적용된 것을 확인 가능
🔶 한글명이 잘 들어가는지 간단한 테이블 생성과 insert쿼리 실행
CREATE TABLE test(
id bigint(20) NOT NULL AUTO_INCREMENT,
content varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
insert into test(connect) values ('테스트');
select * from test;
⚡ EC2에서 RDS에서 접근 확인
✔ 맥에선 ssh 서비스명
으로 접속
sudo yum install mysql
설치 진행하라고 교재에 나와있는데 난 설치가 안됐다ㅜ
-> Amazon Linux 2023은 EL9 버전의 레파지토리와 mysql-community-sever를 설치해야한다고 한다..
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo dnf install mysql-community-server
✔ 설치가 다 되었으면 로컬에서 접근하듯 계정, 비밀번호, 호스트주소를 사용해 RDS에 접속
mysql -u 계정 -p -h Host 주소
-> 패스워드 입력 -> 접속 확인
show databases;
-> 데이터베이스 목록이 뜨면 성공
스프링 부트와 AWS로 혼자 구현하는 웹 서비스_이동욱 지음 책을 읽고 정리하는 글입니다
PREV
NEXT
'프로젝트 > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
스프링 부트와 AWS로 혼자 구현하는 웹 서비스(9) (1) | 2024.01.22 |
---|---|
스프링 부트와 AWS로 혼자 구현하는 웹 서비스(8) (1) | 2024.01.22 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스(6) (0) | 2024.01.22 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스(5) (1) | 2024.01.22 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스(4) (0) | 2024.01.22 |