EC2로 24시간 서버 운영 - RDS (2/3)
1. 데이터베이스 운용
EC2서버와 데이터베이스를 연동하는 데 크게 두 가지 방법이 있습니다.
1) 직접 DB 설치
EC2에서 직접 데이터베이스를 설치해 다루게 되면 모니터링, 백업 ,HA 구성 등을 모두 직접 해야 합니다. 처음 구축할 때 며칠이나 걸릴 수 있습니다.
2) RDS
RDS는 AWS에서 지원하는 클라우드 기반 RDBMS입니다.
데이터베이스를 설치, 운영 및 확장할 수 있습니다. 모니터링, 백업 등의 운영 작업을 자동화하여 개발자는 개발에만 집중할 수 있습니다. MySQL, Auora 등 원하는 DB 엔진을 선택할 수 있고, Amazon RDS on AWS Outposts를 통해 온프레미스에 배포할 수 있습니다.
RDS 가격은 라이센스 비용에 영향을 받습니다. MySQL, PostgresSQL 보다 MSSQL이 동일 사양 대비 더 가격이 높습니다. 참고로 프리티어는 1년 동안 RDS를 무료로 제공하고 있습니다.
DB를 직접 설정하는 설치 방식보다는 RDS가 개발하기 편하고 프리티어는 1년 동안 무료이니 저는 RDS를 선택하겠습니다.
2. RDS 인스턴스 생성하기
AWS 서비스 사이트에서 검색 창에 RDS를 쳐서 들어갑시다.
데이터베이스 생성 버튼을 눌러줍니다.
원하는 엔진 옵션을 선택하시면 됩니다.
자신이 사용할 버전을 선택하시고, 프리 티어를 선택해 줍니다.
인스턴스 이름을 입력해 주시고, RDS에 접근할 이름과 암호를 입력하시면 됩니다. 이름과 암호를 알아야 RDS에 접속할 수 있으니, 꼭! 기록해 두거나, 절대 잊어버리시지 말아야 합니다. 그리고 RDS 생성 버튼을 누르면
정상적으로 생성이 된 것을 볼 수 있습니다. 생성 시간이 은근히 길어서 기다리셔야 합니다.
RDS 생성이 완료됐으면 VPC 보안 그룹에 들어가고 인바운드 편집 버튼을 누릅니다.
이전 EC2에 적용한 보안 그룹을 선택해서 적용하시면 됩니다.
이제 RDS 서버의 charcter_set과 collation을 한글이 인식가능하게끔 설정해줘야 합니다!
왼쪽에 파라미터 그룹 항목을 클릭합니다.
파라미터 그룹을 생성합니다.
파라미터 편집을 누릅니다.
검색창에 character_set을 입력합니다.
- character_set_client
- character_set_connection
- character_set_database
- character_set_filesystem
- character_set_results
- character_set_server
- character_set_system
위의 파라미터 값을 utf8mb4로 모두 변경 후, 우측 상단의 [변경 사항 저장] 을 선택해 저장해야 합니다.
여기서 utf8mb4는 uf8은 이모지를 저장할 수 없지만, utf8mb4는 이모지를 저장할 수 있습니다. 따라서 보편적으로 utf8mb4를 많이 사용합니다.
위와 동일한 방법으로, 파라미터 검색창에 collation을 입력 후, collation_connection와 collation_server의 파라미터 값을 utf8mb4_general_ci 로 모두 변경해 줍니다.
max_connections도 프리티어는 약 60개의 커넥션만 가능해서 좀 더 넉넉하게 150으로 설정해 줍시다. 이후 RDS 사양을 높이게 된다면 기본값으로 다시 돌려놓으면 됩니다.
time_zone 항목도 한국 시간과 맞추기 위해 Asia/Seoul로 설정해 줍니다.
다 완료가 됐으면 변경 사항 저장 버튼을 클릭합니다.
그리고 이 파라미터 그룹을 RDS에 적용해야 합니다. 왼쪽 데이터베이스 항목을 누르고, 이전에 만든 RDS 인스턴스를 선택해서 수정 버튼을 눌러줍니다.
데이터베이스 옵션에서 DB 파라미터 그룹을 이전에 만든 파라미터 그룹을 선택해 줍니다. 그리고 수정을 하시면...
이렇게 수정 중이라는 상태가 뜹니다.
파라미터 그룹 수정 설정이 정상적으로 반영되려면 재부팅을 해줘야 합니다.
이렇게 RDS 인스턴스 생성이 완료되었습니다.
3. RDS 연결하기
RDS 인스턴스를 선택해 엔드포인트를 복사해 줍니다.
만약 자신이 IntelliJ ultimate를 사용하지 않는 상태이면 Database Navigator 플러그인 설치해야 합니다. 이에 관한 정보는 구글링을 하시길 바랍니다.
저는 IntlliJ ultimate를 사용하기에 ultimate로 진행하겠습니다.
오른쪽의 database 탭을 클릭 후 + 버튼을 눌러 원하는 타입의 DB를 선택해 줍니다.
Host에는 엔드 포인트를 붙여 넣기 하고, 이전에 만든 RDS의 ID와 PW를 입력해 줍니다.
오른쪽 클릭을 한 뒤에 new에서 schema 이름을 적고 생성해 줍니다.
오른쪽의 QL 아이콘을 클릭 후 console 명령어에 use chema이름 을 입력해 줍니다.
이전 파라미터 그룹에 설정한 항목들이 정상적으로 반영된 것을 보기 위해 show variables like 'c%'를 입력해 줍니다.
- character_set_client
- character_set_connection
- character_set_database
- character_set_filesystem
- character_set_results
- character_set_server
- character_set_system
- collation_connectioncol
- collation_server
항목들이 정상적으로 utf8mb4로 적용된 것을 볼 수 있습니다. 만약 반영이 안 됐다면 꼭 RDS를 재부팅하시길 바랍니다.
콘솔 창에서 select@@time_zone,now(); 명령어를 쳐서 위의 사진처럼 됐다면 시간 설정이 정상적으로 된 것입니다.
4. RDS 조작하기
이제 스키마를 만들었으니 테이블을 만들어야겠죠?
오른쪽 클릭을 하고 new에 table을 입력해 줍니다.
위의 사진처럼 갓텔리제이는 항목들의 데이터만 입력해 준다면 아래 preview처럼 알아서 테이블을 만들어주는 엄청난 편의성을 제공해 줍니다. 이외에도 IntelliJ에는 RDS를 조작하는 다양한 기능들이 있으니 더 알아보려면 구글링을 추천드립니다.
JPA를 사용하는 경우 table을 생성할 때 h2 DB로 테스트를 할 텐데, 그때 생성된 table 생성 쿼리를 복사하시고 붙여넣기 하시면 됩니다. (스프링을 실행할 때 쿼리를 보는 방법은 구글링 추천)
단, JPA가 생성한 쿼리를 무조건 신뢰하지 마시고 MySQL의 형식에 맞게 테이블을 생성해줘야 합니다.
5. RDS 적용하기
먼저 스프링 프로젝트의 application.yml 파일에 들어가서 위의 형식으로 입력해 줍니다.
url 형태는 jdbc:mysql://엔드 포인트:3306/스키마 이름 형식입니다.
username, password에는 RDS의 아이디와 비밀번호를 입력해 줍니다.
이 설정이 끝나고 저장하여 프로젝트를 빌드해주시고, 빌드된 파일을 EC2 서버에 올려줍니다. (방법은 이전 1편 글 참고)
이제 EC2에서도 MySQL 접근 테스트를 위해 MySQL CLI를 설치하겠습니다.
sudo apt install mysql로 mysql을 설치해 줍니다.
Mysql -u 계정 -p -h Host 주소 명령어로 RDS에 접속합니다. PW를 입력하고
show databases;를 입력하면 정상적으로 출력되면
정상적으로 RDS가 작동되는 것을 볼 수 있습니다.
그리고 빌드된 java 파일이 실행된 상태에서 브라우저 주소창에 EC2주소:port번호/URL 입력하면
1편의 글과 달리 DB에 정상적으로 접근하는 것을 볼 수 있습니다.
다음 3편에서는 Vue와 Spring Boot가 EC2에서 어떻게 연동하는지 글을 올리겠습니다.
번외) 로컬 DB => RDS DB 데이터 옮기기.
대용량 DB를 옮기기 위해 MySQL WorkBench를 활용할 것입니다. 만약 MySQL이 아닌 다른 DB 종류를 사용하신다면 DB를 옮기는데 어떤 프로그램을 사용하는지 구글링 하시는 걸 추천드립니다.
먼저 기존 DB의 데이터들을 export 하기 위해 왼쪽 Management 항목에서 Data Export를 클릭합니다. 이후 원하는 스키마를 클릭해 내가 지정한 폴더 위치를 선택하고 Start Export 하시면 됩니다.
RDS에 접근하시려면 엔드포인트를 확인해야 합니다. 복사를 하시고.
+ 버튼을 눌러줍니다.
Hostname에 엔드 포인트를 붙여놓기 합니다. username에는 RDS의 ID를 입력해 줍시다.
RDS의 비밀번호를 입력해 줍니다.
Management의 Data Import 항목을 클릭해 줍니다.
Import from Dump에 이전에 export한 백업 DB 데이터들이 있는 폴더를 선택. Start Import 하면은 정상적으로 데이터들이 RDS로 옮겨졌습니다.
IntelliJ에서 Edit Data를 해보시면
정상적으로 데이터들이 옮겨진 것을 볼 수 있습니다.