본문 바로가기
스프링부트와 AWS로 혼자 구현하는 웹서비스

AWS에 데이터베이스 환경 구축 - AWS RDS(MariaDB) 인스턴스 생성 및 파라미터 설정

by 초이사 2023. 3. 15.

이 글은 '스프링부트와 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보다 향상된 성능
    • 좀 더 활성화된 커뮤니티
    • 다양한 기능과 스토리지 엔진

MariaDB 선택

 

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 인스턴스를 사용할 수 있다고 한다.

AWS 공지 (https://aws.amazon.com/ko/about-aws/whats-new/2022/03/amazon-rds-free-tier-dbt3micro-graviton2-based-instances/)

-> 기본 설정 db.t3.micro 그대로 사용해도 된다.

 

RDS 인스턴스 유형별 특징은 아래 페이지에 나와있다.

https://aws.amazon.com/ko/rds/instance-types/

 

Amazon RDS 인스턴스 유형 | 클라우드 관계형 데이터베이스 | Amazon Web Services

 

aws.amazon.com

 

 

7. 연결 - 퍼블릭 액세스 예로 변경

이후 보안 그룹에서 지정된 IP만 접근하도록 수정할 예

포트번호 3306
퍼블릭액세스 예로 선택

 

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으로 수정한다.

Max Connection 설정

 

3. 방금 만든 파라미터그룹을 데이터베이스에 연결하기

  3-1. 데이터베이스 -> 만든 데이터베이스 선택하고 수정 클릭 -> DB 파라미터 그룹에 방금 만든 파라미터 그룹 선택 -> 계속 클릭

DB 파라미터 그룹 선택

  3-2. 즉시적용 -> DB인스턴스 수정

예약된 다음 유지 시간으로 하면 지금 하지 않고, 새벽 시간대에 진행하게 된다. 수정사항이 반영되는 동안 데이터베이스가 작동하지 않을 수 있기 때문에 예약 시간을 설정하라는 의미

지금 서비스가 오픈되지 않았기 때문에 즉시 적용을 선택한다.

DB 인스턴스 수정

파라미터 그룹이 제대로 반영되지 않는 경우가 간혹 있으므로 정상 적용을 위해 재부팅도 진행한다.

댓글