Peony의 기록 창고 🌼
article thumbnail
반응형

이 글은 이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책 내용을 정리한 것입니다.

http://www.yes24.com/Product/Goods/83849117

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - YES24

가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링

www.yes24.com

 

AWS에 데이터 베이스 환경을 만들어보자 : AWS RDS

 웹 서비스의 백엔드를 다룬다고 했을 때 애플리케이션 코드를 작성하는 것 만큼 중요한 것이 데이터 베이스를 다루는 일이다. 규모 있는 회사에서는 데이터베이스를 전문적으로 처리하는 DBA라는 직군 담장자들이 있다. 해당 전문분야의 담당자가 있기에 상대적으로 개발자가 데이터베이스를 전문적으로 다룰 일이 적다.

하지만, 그건 대량의 데이터를 다루기 때문에 전문성이 필요한 것이지, 백엔드 개발자가 데이터베이스를 몰라도 된다를 의미하지는 않는다. 스타트업이나 개발 인원수가 적은 서비스에선 개발자가 데이터베이스를 다뤄야만 한다.

 

이번 장에서는 데이터베이스를 구축하고 앞 장에서 만든 EC2 서버와 연동을 해보자. 다만, 직접 데이터베이스를 설치하지 않는다. 직접 데이터베이스를 설치하면 모니터링, 알람, 백업, HA구성 등을 모두 직접 해야만 한다. 이는 시간이 너무 오래 걸린다.

AWS에서는 앞에서 언급한 작업을 모두 지원하는 관리형 서비스인 RDS를 제공한다. RDS는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스이다. 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스이다. 추가로 조정 가능한 용량을 지원하여 예상치 못한 양이 데이터가 쌓여도 비용만 추가로 내면 정상적으로 서비스가 가능한 장점도 있다.

이러한 RDS를 이용하여 본인만의 데이터베이스 환경을 구축해보자.

 

RDS 인스턴스 생성하기

먼저 RDS 인스턴스를 생성하자. 다음과 같이 검색창에 rds를 입력해서 선택하고, RDS 대시보드에서 [데이터베이스 생성] 버튼을 클릭한다.

 

 

RDS 생성 과정이 진행된다. DB 엔진 선택화면에서 MariaDB를 선택하도록 하자. 왜 MariaDB를 골라야할까? RDS에는 오라클, PostgreSQL 등이 있으며 당연히 본인이 가장 잘 사용하는 데이터베이스를 고르면 되지만, 꼭 다른 데이터베이스를 선택해야 할 이유가 있는 것이 아니라면 MySQL, MariaDB, PoastgreSQL 중에 고르길 추천한다. 필자는 그 중에서도 MariaDB를 추천하며 이유를 소개하겠다.

  1. 가격
    RDS의 가격은 라이센스 비용 영향을 받는다. 상용 데이터베이스인 오라클, MSSQL 이 오픈소스인 MySQL, MariaDB, PostgreSQL보단 동일한 사양 대비 더 가격이 높다. 결국 프리티어 기간인 1년이 지나면 비용을 지불하면서 RDS를 써야한다. 비용문제를 생각해 볼 필요가 있다.
  2. Amazoin Aurora(오로라) 교체 용이성
    Amazonn Auroa는 AWS에서 MYSQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스이다. 공식 자료에 의하면 RDS MySQL 대비 5배, RDS PostgreSQL 보다 3배의 성능을 제공한다. 더군다나 AWS에서 직접 엔지니어링 하고 있기 때문에 계속해서 발전하고 있다. 현재도 다른 데이터베이스와 비교해 다양한 기능을 제공하고 있다.

 

클라우드 서비스에 가장 적합한 데이터베이스이기 때문에 많은 회사가 Amazon Aurora를 선택한다. 그러다 보니 호환 대상이 아닌 오라클, MSSQL을 곧이 선택할 필요가 없다. 이렇게 보면 Aurora를 선택하면 가장 좋을 것 같지만 시작하는 단계에서 Auroa를 선택하기 어렵다.

프리티어 대상이 아니며, 최저 비용이 월 10만원 이상이기 때문에 부담스럽다. 그렇기 때문에 일단은 MariaDB로 시작해보자.

 

MariaDB란?
MariaDB는 MySQL을 기반으로 만들어졌기 때문에 쿼리를 비롯한 전반적인 사용방법이 MySQL과 유사하다.
MariaDB는 MySQL 대비 다음과 같은 장점이 있다.

  • 동일 하드웨어 사양으로 MySQL보다 향상된 성능
  • 좀 더 활성화된 커뮤니티
  • 다양한 기능
  • 다양한 스토리지 엔진

 

엔진 옵션

: Maria DB 선택

DB 선택

 

템플릿 & 설정

템플릿 : 프리티어 선택

설정 : DB 인스턴스 식별자와 마스터 자용자 정보 등록

템플릿 설정

 

연결

  • 퍼블릭 액세스 가능 체크하기
  • 보안 그룹에서 지정된 IP만 접근하도록 막을 예정이다.
  • VPC 보안 그룹 새로 생성한다.

DB 연결

 

추가 구성

데이터베이스 이름 설정

DB 옵션

 

성공화면

DB 생성 성공 화면

 

RDS 운영환경에 맞는 파라미터 설정하기

RDS를 처음 생성하면 몇 가지 설정을 필수로 해야 한다.

  1. 타임존
  2. Character Set
  3. Max Connection

 

파라미터 그룹 생성

:RDS 대시보드 왼쪽 카테고리에서 파라미터 그룹 선택

파라미터 그룹 생성 시작

 

생성한 데이터베이스와 같은 버전으로 DB 엔진 선택 후 생성 클릭하기

 

생성 완료 후 해당 파라미터 그룹 클릭 -> 편집모드 클릭

 

  • 타임존 : time_zone 검색 후 Asia/Seoul 선택하기

 

character Set 설정 변경하기

  • character 항목들은 utf8mb4로, collation 항목들은 utf8mb4_general_ci로 변경한다.
  • utf8과 utf8mb4의 차이 : 이모지 저장 가능 여부
    • utf8 : 이모지를 저장할 수 O
    • utf8mb4 : 이모지를 저장할 수 X

변경할 요소들

  • character_set_client
  • character_set_connection
  • character_set_database
  • character_set_filesystem
  • character_set_results
  • character_set_server
  • collation_connection
  • collation_server
  • default_collation_for_utf8mb4

 

RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해진다.

현재는 Max Connection을 150으로 설정하자.

 

이렇게 생성된 파라미터 그룹을 데이터베이스에 연결한다.

 

DB 파라미터 그룹을 조금 전 생성한 신규 파라미터 그룹으로 변경한다.

 

반영 시점을 즉시 적용으로 한다.

 

간혹 파라미터 그룹이 제대로 반영되지 않을 때가 있다. 정상 적용을 위해 한 번 더 재부팅을 진행해보자.

 

내 PC에서 RDS에 접속해 보기

로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 본인 PC의 IP를 추가한다. 보안 그룹에 들어가서 인바운드 규칙 편집을 클릭한다.

EC2에 사용된 보안 그룹의 ID를 RDS 보안 그룹의 인바운드로 추가한다.

  • 유형 : MySQL/Aurora
  • 소스 : 사용자 지정
  • 주소 : EC2에 사용된 보안 그룹의 ID

 

인바운드 규칙 유형에서는 MYSQL/Aurora를 선택하면 자동으로 3306 포트가 선택된다.

  • 보안 그룹 첫 번째 줄 : 현재 내 PC의 IP를 등록한다.
  • 보안 그룹 두 번째 줄 : EC2의 보안 그룹을 추가한다.
    • 이와 같이 하면 EC2와 RDS 간에 접근이 가능하다.
    • EC2의 경우 이후에 2대 3대가 될 수도 있는데, 매번 IP를 등록할 수는 없으니 보편적으로 이렇게 보안 그룹 간에 연동을 진행한다.

 

Database 플러그인 설치

RDS 정보 페이지에서 엔드 포인트를 확인한다.

접근 가능한 URL이므로 메모장 같은 곳에 복사해둔다.

 

Intellij로 이동하여 database 플러그인을 검색한다.

설치가 다 되었다면 Intellij 재시작을 한 뒤 Action 검색으로 Database Browser를 실행한다.
(mac 단축 키 : cmd + shift + a)

DB Browser가 노출된다. MySQL 접속 정보를 열어 보자.

생성한 RDS의 정보를 차례로 등록한다.

  • Host : RDS의 엔드 포인트 (복사한 것 붙여넣기)
  • User, Password : RDS 데이터베이스의 설정한 마스터 계정 id와 password

등록 후, Test Connection을 클릭해 연결 테스트를 해본다. Connection successful 할 경우, 최종 저장을 한다. Name, Description은 각자 하고 이름을 지정한다.

하지만, 자꾸 연결이 안된다고 떠서 다른 방법을 찾아보았다.

오른쪽에 데이터베이스를 누르고 + 버튼을 눌러서 MariaDB를 선택한다.

이제 콘솔창을 열어보자.

use AWS RDS 웹 콘솔에서 지정한 데이터베이스명

Execute Console에서 SQL statement executed successfully 메시지가 떴다면 쿼리가 정상적으로 수행된 것이다.

 

데이터베이스가 선택된 상태에서 현재의 character_set, collation 설정을 확인한다.

show variables like 'c%';

쿼리 결과를 보면 다른 필드들은 모두 utf8mb4가 잘 작용되었는데 character_set_database, collation_connection 2가지 항목은 설정되어 있지 않다.

직접 변경해주자.

alter database springboot_webservice_study
character set ='utf8mb4'
collate = 'utf8mb4_general_ci';

 

쿼리를 다시 실행해서 확인해보자.

show variables like 'c%';

 

타임존을 확인해보자.

select @@time_zone, now();

RDS 파라미터 그룹이 잘 적용되어 한국 시간으로 된 것을 확인할 수 있다.

 

한글명이 잘 들어가는지 간단한 테이블 생성과 insert 쿼리를 실행해보자.

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;

 

 

EC2에서 RDS에서 접근 확인

맥에서는 ssh 서비스명, 윈도우에선 putty

접속되었다면, MySQL 접근 테스트를 위해, MySQL CLI를 설치하자.

$ sudo yum install mysql

 

설치가 다 되었으며 로컬에서 접근하듯이 계정, 비밀번호, 호스트 주소를 사용해 RDS에 접속한다.

$ mysql -u 계정 -p -h Host주소

 

 

RDS에 접속되었으면 실제로 생성한 RDS가 맞는지 간단한 쿼리를 실행해보자!

 

 

반응형
profile

Peony의 기록 창고 🌼

@myeongju