영운's 블로그

AWS RDS 구축하기(+ 타임존, utf-8인코딩 설정) 본문

서버 & 데이터베이스

AWS RDS 구축하기(+ 타임존, utf-8인코딩 설정)

오영운(you88) 2022. 4. 27. 15:04

 

 

1. 웹 서버와 DB 서버 분리하기

서버 구축은 두 가지 방식으로 나눌 수 있다.

1. 웹 서버 안에 DB를 구축하는 방식

2. 웹 서버와 DB서버를 분리하는 방식

 

앞서 AWS EC2에 mysql을 설치한 방식은 1.방식에 해당한다.

하지만 웹 서버와 DB서버를 분리하는 방식은 웹 서버 안에 DB를 구축하는 방식에 비해

여러 이점을 갖는다.

 

1) 성능 개선

당연하게도 하나의 하드웨어 서버에 웹서버와 DB를 운영하는 것보다는

서로 다른 하드웨어 서버에서 웹 서버와 DB서버를 별도로 운영하는 것이 

성능적인 측면에서 유리하다.

단, 웹서버와 DB서버를 분리하면 별도로 이 둘을 연결하는 네트워크가

필요하며 이 과정에서의 통신 부하가 일어나지 않도록 하여야 한다.

특히 클라우드 환경인 경우 웹 서버와 DB서버의 리전을 동일하게 설정해야 한다.

 

2) 보안

웹 서버 안에 DB를 구축하는 경우 웹 서버에 문제가 생기는 경우 이는 DB의 문제로 직결된다.

이전 실습에서 실수로 방화벽을 설정하며 ssh를 허용하지 않아 웹 서버에 

접속하지 못하는 상황이 발생했다. 웹 서버 안에 DB가 있었기에 웹 서버뿐만 아니라

DB에도 접속하지 못하였다.

반면 웹 서버와 DB서버를 분리하는 겨우 이러한 문제를 방지할 수 있다.

 

2. DB 서버 구축하기 (Amazon RDS 생성)

Amazon RDS 생성 링크

https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#GettingStarted:

 

 

오른쪽 상단의 지역을 서울로 설정하고 데이터베이스 생성을 누른다.

 

데이터베이스 생성 방식으로는 표준생성

엔진 옵션 선택은 자유이다. 

나는 MySQL 기반으로 만들어진 무료 DB인 MariDB를 선택하였다.

 

템플릿으로는 일 년에 750시간 무료로 사용 가능한 프리 티어를 사용하였다.

 

 

DB 인스턴스 식별자 이름과 DB의 마스터 사용자 계정을 만든다.

 

인스턴스 구성은 기존의 설정을 그대로 사용한다.

프리 티어는 버스터블 클래스만 사용 가능하기 때문이다.

 

스토리지는 범용 ssd를 선택하고 DB에 할당할 용량을 선택한다.

프리 티어는 전체 인스턴스를 합쳐 20GB까지 무료이다.

나는 10GB를 설정하였다.

 

주의할 설정은 스토리지 자동 조정이다.

스토리지 자동 조정은 용량이 부족한 경우 자동으로 스토리지를 늘려주는 기능이다.

프리 티어는 20GB 이내만 무료이기에 스토리지 자동 조정 기능으로 20GB를 초과하는 경우

요금이 부과될 수 있다.

이 기능을 꼭 꺼야 자신도 모르게 요금이 부과되는 것을 방지할 수 있다. 

 

 

여기서 중요한 설정은 퍼블릭 엑세스이다.

퍼블릭 엑세스에 '예'로 설정하여 외부에서도 접속이 가능하게 DB 인스턴스에 퍼블릭 ip를 부여해 준다.

 

암호 인증을 선택한다.

 

추가 구성에 들어가 자신의 데이터베이스 이름을 설정한다.

 

백업은 선택하지 않는다.

백업 용량 또한 프리 티어의 무료 스토리지 제한 20GB에 포함되기에 

이를 선택할 경우 백업 파일의 크기가 커지면 요금이 부과될 수 있다.

 

이외 설정들은 자신이 원하는 대로 자유롭게 선택한다.

 

마지막으로 데이터베이스 생성을 누른다.

 

 

이후 5분 정도의 시간이 흐르면 다음과 같이 AWS RDS가 만들어져 사용가능 상태가 된다.

 

 

3. AWS EC2와 AWS RDS 연결

 

 

먼저 연동할 AWS EC2의 보안 그룹 이름을 확인한다.

 

 

AWS RDS로 돌아와 보안 그룹을 클릭하고 인바운드 규칙 편집으로 들어온다.

 

규칙 추가를 누르고

유형은 'MYSQL/Aurora' 소스는 '사용자 지정'을 선택한다.

돋보기를 클릭하여 앞서 확인한 EC2의 보안 그룹을 선택한다.

 

이후 규칙 저장을 누르면 AWS EC2로 AWS RDS에 접근이 가능해진다.

 

 

4. Datagrip 이용한 RDS 연결

 

RDS에서 대시보드 => 연결 & 보안에서

엔드포인트를 복사한다.

 

Datagrip에서 FIle => new => Data Source => 자신의 RDS db 종류를 클릭한다.

나의 RDS의 데이터베이스 MariaDB 였기에 MariaDB를 선택했다.

 

이후 다음과 같은 창이 나오는데 Host에는 아까 복사한 RDS의 엔드포인트를 입력한다.

Host와 Password에는 RDS를 만들 때 함께 생성한 마스터 계정의 이름과 비밀번호를 입력한다.

모든 것을 입력한 후 Test connection을 눌러 Succeeded라는 표시가 나오면

Datagrip으로 RDS에 정상적으로 접속한 것이다.

 

주의할 점은 Host에 엔드포인트를 입력할 때 맨 뒤에 공백이 있으면 제대로 접속이 되지 않는다.

접속이 제대로 되지 않는다면 이를 확인해보자.

 

 

 

 

 

 

 

 

4. 타임존 설정

 

select now()로 DB상의 시간을 확인해 보니 한국 시간대가 아님을 알 수 있다.

DB를 관리하며 시간 로그는 굉장히 중요하기에 타임존을 우리나라 시간대에 맞게 바꿔줄 필요가 있다.

 

 

 

default 파라미터 그룹은 수정이 불가능하기에 별도로 파라미터 그룹을 생성해줘야 한다.

RDS => 파라미터 그룹 => 파라미터 그룹 생성에 들어가 파라미터 그룹을 생성한다.

 

이후 time_zone을 겁색해서 Asia/Seoul로 설정한 뒤 이를 저장한다.

 

 

5. 인코딩 설정

 

show variables like 'c';

명령어를 통해 DB의 문자 관련 설정을 확인할 수 있다. utf8mb 4가 대부분이지만 아닌 것도 있다.

 

DB에 한글 데이터가 들어와도 제대로 표시하기 위해 인코딩 설정을 utf8mb4로 바꿔주어야 한다.

utf8도 한글데이터를 제대로 표시하는데 3byte만을 표시할 수 있기에 4byte인 이모지를 표현할 수 없다고 한다.

 

주의할 것은 utf8mb4 자체는 표준 인코딩은 아니다.

단지 mysql/mariadb의 utf8방식이 이모지를 표현하지 못해 이를 보완하여 만들어진 인코딩이다.

따라서 postgreSQL이나 MS-SQL을 RDS로 선택한 경우 utf8 인코딩을 선택해도 이모지 표현이 가능하다.

 

다시 파라미터 그룹에 들어가 편집을 눌러 character_set으로 검색하고 나온 것들을

'utf8mb4'로 변경하고 저장한다.

 

다시 collation을 검색하고 

이 값들을 'utf8mb4_general_ci'로 바꿔준다.

 

6. 인코딩 및 타임존 적용 확인

인코딩과 타임존을 바꾼 파라미터 그룹을 RDS에 적용하기 위해

데이터베이스 => 수정 => 추가 구성에서 DB 파라미터 그룹을 방금 수정한 그룹으로 변경한다.

 

이후 데이터베이스를 재부팅한다.

 

재부팅이 완료되고 Datagrip으로 RDS에 다시 접속하여 타임존과 인코딩이 제대로 변경됐는지 확인한다.

 

먼저 타임존은 Asia/seoul로 설정되어 운영체제의 시간과 동일한 것을 확인할 수 있다.

 

 

인코딩도 제대로 적용되었음을 확인할 수 있다.

 

 

 

참고: 

https://webisfree.com/2020-05-07/[%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95]-%EB%8B%A8%EC%9D%BC-%EC%84%9C%EB%B2%84%EC%99%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%B6%84%EB%A6%AC%EA%B0%80-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C 

 

[서버구축] 단일 서버와 데이터베이스 서버의 분리가 왜 필요할까

일반적으로 단일 서버로 운영하거나 아니면 데이터베이스 서버를 분리하여 사용하는 경우가 많습니다. 그렇다면 이 둘의 차이점은 무엇이고 언제 그리고 왜 이렇게 사용하는지 알아보려고 하

webisfree.com

https://luminitworld.tistory.com/94

 

https://brtech.tistory.com/95

Comments