이 글은 '스프링부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱(jojoldu)'을 공부하며 작성한 글로 생략된 내용은 책을 구매해서 확인하는 것을 권장합니다.
참고 소스코드 깃허브 https://github.com/jojoldu/freelec-springboot2-webservice
http://www.yes24.com/Product/Goods/83849117
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - YES24
가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링
www.yes24.com
책의 7장 AWS에 데이터베이스 환경 구축에 대해 정리하고자 한다.
웹 서비스의 백엔드를 다룬다면 애플리케이션 코드를 작성하는 것 만큼 데이터베이스를 다루는 일도 중요하다.
규모있는 회사에서는 DBA라는 담당자분들이 따로 계시기도 하지만 이는 대용량/대량의 데이터를 다루기에 전문성이 필요하기 때문으로, 백엔드 개발자가 데이터베이스를 몰라도 된다는 의미는 아니다.
특히 개발인원이 적은 서비스라면 개발자가 데이터베이스를 다뤄야만 한다.
이 프로젝트에서는 직접 데이터베이스를 설치하지는 않는다. (직접 설치시, 모니터링, 알람, 백업, HA 구성을 모두 직접 해야 해서 처음할경우 며칠 걸릴 수 있기 때문)
AWS RDS
AWS에서는 앞에서 언급한 작업을 모두 지원하는 관리형 서비스 RDS(Relational Database Service)를 제공
- AWS에서 지원하는 클라우스기반 관계형 데이터베이스
- 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같은 잦은 운영 작업 자동화
- 조정 가능한 용량을 지원 -> 예상치 못한 양의 데이터가 쌓여도 추가 비용만 낸다면 정상적으로 서비스 가능
RDS 인스턴스 생성
1. AWS 검색창에 rds 검색 후 선택
2. 데이터베이스 생성 클릭
3. DB 엔진에서 MariaDB 선택
RDS에는 오라클, MSSQL, PostgreSQL 등이 있으며, 이 중 본인이 가장 잘 사용하는 데이터베이스를 선택하면 된다. 하지만 꼭 다른 데이버테이스를 선택해야하는 이유가 있지 않다면 MySQL, MariaDB, PostgreSQL 중에 고르는 것을 추천
MariaDB 선택 이유
- 가격
- RDS의 가격은 라이센스 비용의 영향을 받아서, 상용 데이터베이스(오라클, MSSQL)이 오픈소스인 MySQL, MariaDB, PostgreSQL보다 동일한 사양 대비 가격이 높다. (프리티어 기간 1년이 끝나면 비용을 지불해야하기 때문에 고려해볼 필요가 있다.)
- Amazon Aurora(오로라) 교체 용이성
- Amazon Aurora: AWS에서 MySQL, PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스로 AWS에서 직접 엔지니어링 하고 있어 계속해서 발전 중이며 클라우드 서비스에 가장 적합한 데이터베이스
- MSSQL, 오라클은 호환 대상이 아니기 때문에 이후에 교체하기 어렵다.
* Aurora는 좋은 데이터베이스이지만 프리티어 대상이 아니고, 최저 비용이 월 10만원이기 때문에 시작하는 단계에서는 부담스러워 이 프로젝트에서는 사용하지 않는다.
- MariaDB는 MySQL의 창시자인 몬티 와이드니어가 만든 프로젝트로 MySQL 기반으로 만들어졌기 때문에 전반적인 사용법이 유사하면서, MySQL 대비 장점이 있다.
- 동일 하드웨어 사양으로 MySQL보다 향상된 성능
- 좀 더 활성화된 커뮤니티
- 다양한 기능과 스토리지 엔진
4. 템플릿 프리티어 선택
5. 상세설정 - DB인스턴스 식별자, 마스터 사용자 이름, 마스터 암호 작성
여기서 작성된 사용자 정보로 실제 데이터베이스에 접근하게 된다. -> 메모해두는 것을 추천
6. 인스턴스구성 - db.t2.micro 선택, 할당된 스토리지 20으로 설정 및 스토리지 자동 조정 활성화 끄기
프리티어 이용 중 비용 발생을 방지하기 위해 db.t2.micro로 변경하고 RDS의 스토리지 무료 제공량인 20GiB으로 설정한 뒤, 자동 조정 활성화는 꺼둔다.
* 2023.04.16 추가
2022년 3월 25일 이전에는 프리티어에서는 db.t2.micro만 가능했는데, 2022년 3월 25일 이후로 프리티어에서 db.t2.micro, db.t3.micro 또는 db.t4g.micro 인스턴스를 사용할 수 있다고 한다.
-> 기본 설정 db.t3.micro 그대로 사용해도 된다.
RDS 인스턴스 유형별 특징은 아래 페이지에 나와있다.
https://aws.amazon.com/ko/rds/instance-types/
Amazon RDS 인스턴스 유형 | 클라우드 관계형 데이터베이스 | Amazon Web Services
aws.amazon.com
7. 연결 - 퍼블릭 액세스 예로 변경
이후 보안 그룹에서 지정된 IP만 접근하도록 수정할 예
8. 데이터베이스 옵션 - 데이터베이스 이름 작성
위 설정을 모두 마친 후 데이터베이스를 생성하면 된다.
생성하게 되면 처음에 상태가 생성중이라고 되어 있는데, 잠시 후 사용 가능으로 바뀌면 그때부터 사용이 가능하다.
RDS 운영환경에 맞게 파라미터 설정
RDS를 처음 생성하면 필수로 해야하는 설정들이 있다.
타임존, Character Set, Max Connection 설정하기
1. 왼쪽 카테고리에서 파라미터그룹 -> 파라미터그룹 생성 -> 아래와 같이 작성 -> 생성
여기서 파라미터 그룹 패밀리는 DB엔진을 선택하는 항목으로 방금 생성한 MariaDB와 같은 버전으로 맞춰줘야 한다.
생성하면 원래 있던 파라미터그룹 밑에 방금 만든 파라미터 그룹이 생성된 것을 확인할 수 있다.
2. 방금 만든 파라미터그룹 이름 클릭 -> 파라미터 편집(편집모드로 전환)
2-1. 검색창에 time_zone 검색 -> Asia/Seoul 선택
2-2. 검색해서 character 항목 모두 utf8mb4로 변경 및 collation 항목 utf8mb4_general_ci로 변경
- utf8과 utf8mb4의 차이 : 이모지 저장 가능 여부 (utf8 : 가능, utf8mb4 : 불가능)
- 변경할 항목
- character_set_client
- character_set_connection
- character_set_database
- character_set_filesystem
- character_set_results
- character_set_server
- collation_connection
- collation_server
2-3. 검색해서 Max Connection 150으로 변경
RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해진다.
현재 프리티어 사양으로는 약 60개의 커넥션만 가능해서 좀 더 넉넉하게 150으로 수정한다.
3. 방금 만든 파라미터그룹을 데이터베이스에 연결하기
3-1. 데이터베이스 -> 만든 데이터베이스 선택하고 수정 클릭 -> DB 파라미터 그룹에 방금 만든 파라미터 그룹 선택 -> 계속 클릭
3-2. 즉시적용 -> DB인스턴스 수정
예약된 다음 유지 시간으로 하면 지금 하지 않고, 새벽 시간대에 진행하게 된다. 수정사항이 반영되는 동안 데이터베이스가 작동하지 않을 수 있기 때문에 예약 시간을 설정하라는 의미
지금 서비스가 오픈되지 않았기 때문에 즉시 적용을 선택한다.
파라미터 그룹이 제대로 반영되지 않는 경우가 간혹 있으므로 정상 적용을 위해 재부팅도 진행한다.
'스프링부트와 AWS로 혼자 구현하는 웹서비스' 카테고리의 다른 글
EC2 서버에 프로젝트 배포하기 - EC2에 프로젝트 Clone 및 배포 스크립트 작성(외부 Security 파일 등록) (0) | 2023.03.27 |
---|---|
AWS에 데이터베이스 환경 구축 - 내 PC에서 RDS 접속과 RDS와 EC2의 연동 확인 (0) | 2023.03.15 |
AWS 서버 환경 구축하기 - AWS EC2 (window EC2 접속) (0) | 2023.03.13 |
스프링 부트 기존 테스트에 시큐리티 적용하기 (feat. 책과 달리 테스트 4개 실패하는 이유) (0) | 2023.03.08 |
스프링 시큐리티와 OAuth2.0으로 로그인 구현하기 - 네이버 로그인 (0) | 2023.03.07 |
댓글