AWS RDS 생성과 기본 설정

RDS 생성하기


RDS 데이터베이스 인스턴스 생성

RDS 데이터베이스 인스턴스 생성

  • AWS 콘솔에서 RDS 서비스 접속
  • 데이터베이스 생성 버튼 클릭

MariaDB 엔진 선택

프리티어/MariaDB 엔진 선택

  • MariaDB 엔진과 프리티어 템플릿을 선택한다.

MariaDB 엔진을 사용하는 이유는 다음과 같다.

  • MySQL과 PostgreSQL과 호환되는 완전 관리형 DB 엔진인 Amazon Aurora와 호환이 된다.
  • MariaDB는 MySQL 기반이기 때문이다. 그러나 MySQL는 오라클로 인수되면서 비용이 더 비싸졌으니 MariaDB가 더 좋은 선택이다.
  • (상용에서 오라클 라이선스로 MySQL 지원을 받는다면 MySQL을 사용해도 된다!)
  • MariaDB는 MySQL보다 더 향상된 성능, 기능을 가지고 있고 오픈소스이므로 커뮤니티가 더 활성화 되었다.

상세 설정

DB 상세설정-1

  • 어떤 용도의 DB 인스턴스인지 알아볼 수 있게 식별자를 입력한다.
  • DB 마스터 사용자 이름과 비밀번호를 입력한다.

 

DB 상세설정-2

  • 템플릿 그대로 따라간다

 

DB 상세설정-3

  • 퍼블릭 엑세스 기능 를 선택한다.

 

DB 상세설정-4

  • 초기 데이터베이스 이름을 입력한다. ( - 사용 불가)
  • 마지막으로 데이터베이스 생성한다.

 

RDS 인스턴스 생성된 화면

 

RDS 운영환경에 맞는 설정

  • RDS 생성시 타임존, Character Set, Max Connection 설정을 해줘야 한다.

파라미터 그룹

파라미터 그룹 선택

  • 파라미터 그룹 선택

 

파라미터 그룹 생성

  • 파라미터 그룹 생성 버튼 클릭

 

파라미터 그룹 정보 설정

  • 파라미터 그룹 정보를 입력하고 생성 버튼을 클릭한다.

 

파라미터 그룹 확인

  • 파라미터 그룹 목록 방금 생성한 파라미터 그룹 클릭

 

파라미터 편집

  • 기본 설정된 파라미터 목록들이 보이는데, 우측 상단 파라미터 편집 버튼 클릭

 

타임존 설정

타임존 설정

  • time_zone 검색 후 time_zone 항목 드롭다운 선택하여 Asia/Seoul 선택

 

문자열 셋 설정

다음의 문자열 셋 설정 항목들을 검색하여 설정한다

  • utf8mb4 로 설정할 것들 (utf8과의 차이는 이모지 저장 가능 여부로, utf8mb4는 이모지 저장 가능하다)
    • character_set_client
    • character_set_connection
    • character_set_database
    • character_set_filesystem
    • character_set_results
  • utf8mb4_general_ci 로 설정할 것들
    • collation_connection
    • collation_server

collation은 어떤 방식으로 정렬할 것인가로 utf8mb4_general_ci는 사람이 인식하는 대로 정렬한다.

Max Connection 설정

  • RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해진다.
  • 현재 프리티어 사양은 약 60개의 커넥션만 가능하므로 늘려준다.

기본 max_connections 값
변경 max_connections 값

모든 설정이 완료되면 변경사항을 적용하자.

 

파라미터 그룹과 DB 인스턴스 연결

  • 대시보드에서 인스턴스 선택후 수정 버튼 클릭

 

DB파라미터 그룹 설정

  • DB파라미터 그룹을 선택한다.

 

즉시 적용

  • 수정사항을 반영하며 즉시 적용하여 수정한다.

 

RDS 보안 설정

  • 본인 집과 웹 서비스 EC2에서 RDS에 접근할 수 있게 설정하자.
  • 먼저 웹서비스용 EC2 인스턴스에서의 접근을 허용하자

RDS 인스턴스 보안 그룹

  • 클릭 하면 EC2 > 보안그룹 메뉴로 이동하며 선택한 RDS VPC 기본 보안 그룹이 필터링 되어있다.

 

RDS 보안 그룹으로 필터링된 EC2 보안 그룹 목록

  • 해당 보안 그룹 ID를 클릭하여 상세 페이지로 이동한다.

 

RDS 인스턴스 보안그룹 상세 페이지

  • 인바운드 규칙 편집을 클릭한다.

 

webservice EC2 보안그룹 선택

  • 규칙 추가버튼을 클릭하여 생성된 라인에서 MYSQL/Auora를 선택한다.
  • 사용자 지정 목록에서 웹서비스용 EC2의 보안 그룹을 선택한다.
  • 다음으로 본인 집 IP를 허용하도록 설정을 추가한다.

 

본인 집 IP 3306 포트 허용

  • 마찬가지로 규칙 추가버튼을 클릭하여 생성된 라인에서 사용자 지정 TCP를 선택한다.
  • 3306 포트를 입력한다.
  • 사용자 지정 유형으로 본인 IP를 입력한다. 드롭다운에서 본인IP/32 보여지고 선택하면 그림처럼 세팅된다.
  • 마지막으로 규칙 저장을 하면 적용된다.

 

DB에 접속해보기

엔드포인트 정보

  • RDS > DB 인스턴스 목록에서 DB를 선택 후 상세페이지의 연결 & 보안을 확인한다.
  • 엔드포인트를 복사한다.
  • 사용하는 Database 툴에서 MariaDB 연결 설정의 Host 정보로 등록한다
  • 여기서는 DataGrip(JetBrain 사의 DB 툴)을 예제로 사용하겠다.

Datagrip으로 연결

DataSource 설정

  • Data Source > MariaDB를 선택하여 설정 창을 연다.
    • 이름: 표시할 이름 입력
    • Host: AWS RDS 엔드포인트 입력
    • User: RDS 생성시 입력한 마스터 사용자명
    • Password: 마스터 사용자 비밀번호
    • Database: 접속시 연결할 기본 Database 이름 (입력 안해도 무방, 연결 후 Schma 선택 가능)
    • URL: 위의 입력 정보를 바탕으로 자동으로 세팅 된다. 반대로 URL을 입력하면 위의 정보가 세팅된다.
  • Test Connection을 클릭하여 커넥션 테스트

Test Connection 결과

 

설정 확인

use springboot_aws_study_webservice;

show variables like 'c%';

latin1 로 설정되어 안 바뀌는 모습
c 관련 설정 확인

ALTER DATABASE springboot_aws_study_webservice
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';

변경된 모습 확인

  • 최종적으로 옵션들이 변경된 것을 확인할 수 있다.

 

  • 타임존 확인하자

select @@time_zone, now();

타임존 확인 결과

 

  • 한글 데이터 입력 되는지 확인하자
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에서 접속하기

$ ssh springboot-aws-study-webservice

EC2 접속

  • 접속이 완료되면 mysql을 설치하자
$ sudo yum -y install mysql
# ... 설치완료
  • 설치가 완료되면 mysql 접속하자
# mysql -u [계정] -p -h [호스트명]
$ mysql -u hoonmaro -p -h springboot-aws-study-webservice.cbdudkejudka.ap-northeast-2.rds.amazonaws.com
Enter password: [패스워드 입력]

# -p 옵션으로 패스워드 입력 단계 표시
# 접속 완료

# Database 확인
> show tables;

# 이전에 추가한 springboot_aws_study_webservice 목록에 존재하는 것 확인

최종 완료

 

지금까지 배운 것

  • AWS RDS 생성
  • 기본 파라미터 그룹 설정
  • 보안 그룹 설정
  • Datagrip DB툴을 이용하여 연결
  • 기본 파라미터 확인 및 수동 파라미터 설정
  • EC2에서 mysql 설치
  • EC2에서 RDS 연결

 

참고

  • 이동욱. 2019. 스프링 부트와 AWS로 혼자 구현하는 웹 서비스. 프리렉

'프로그래밍 > AWS' 카테고리의 다른 글

AWS EC2(아마존 리눅스2) 생성과 Java 13 설치  (0) 2020.06.28

AWS EC2(아마존 리눅스2) 생성과 Java 13 설치

스프링 부트와 AWS로 혼자 구현하는 웹 서비스의 나온 내용을 정리 해봤다. EC2는 자주 사용하지만 세세한 설정 등은 처음 본 것들도 있어서 공부한 보람이 있다.

책은 아마존 리눅스 1 이미지, JDK 8로 진행했으나 최근에 진행 중인 프로젝트가 아마존 리눅스 2, JDK 13이어서 책과는 다른 부분이 있으니 참고 바란다.

AWS EC2 인스턴스 생성

EC2 대시보드 → 인스턴스 시작


EC2 인스턴스 시작

이미지 선택


인스턴스 이미지 선택

Amazon Linx 2 AMI 선택

  • Centos 7 버전 내용과 호환
  • 아마존이 개발하고 있어 지원 받기 쉽다.
  • 레드햇 베이스이므로 레드햇 계열의 배포판을 다뤄본 사람일수록 사용하기 쉽다.
  • AWS의 각종 서비스와 상성이 좋다.
  • Amazon 독자적인 개발 리포지터리를 사용하고 있어 yum이 매우 빠르다.

인스턴스 유형 선택


인스턴스 유형 선택

  • t2.micro 선택

T 시리즈

  • 크레딧인란 CPU를 사용할 수 있는 포인트 개념 존재
  • 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받으며 사용하지 않을 때 축적하고 사용할 때 크레딧을 계속 사용한다
  • 크레딧이 모두 사용되면 더이상 EC2를 사용할 수 없다.
  • 트래픽이 높은 서비스인 경우 다른 유형의 인스턴스를 사용한다.

인스턴스 세부 정보 구성


인스턴스 세부 정보 구성

  • 오토스케일링, 서브넷, VPC, 모니터링 등 용도에 맞게 세부적인 설정 가능
  • 지금은 크게 변경할 내용이 없다.

스토리지 추가


스토리지 추가

  • 프리 티어의 경우 30GB 까지 스토리지 사용 가능

태그 추가


태그 추가

  • 인스턴스에 태그 추가
  • 인스턴스가 많아질 경우 태그를 통해 관리가 용이하다.

보안 그룹 구성


보안 그룹 구성

  • 방화벽 설정
  • SSH 22 포트와 내 IP 규칙 추가
  • 웹 서비스 포트 Public 추가
  • HTTPS 포트 Public 추가

키 페어 생성


키 페어 생성

키 페어 등록

  • 다운로드 받은 키 페어를 등록하자
$ cd .ssh
$ mv ~/Downloads/springboot-aws-study-webservice.pem .
$ chmod 600 springboot-aws-study-webservice.pem
$ ssh-add springboot-aws-study-webservice.pem

인스턴스 대시보드에서 확인


인스턴스 대시보드 목록 확인

EIP 할당

  • AWS의 고정 IP 서비스 Elastic IP(EIP, 탄력적 IP)

  • 좌측 메뉴에서 탄력적 IP를 선택

 

  • 탄력적 IP 주소 할당 클릭

 

  • 할당 클릭

 

  • 이 탄력적 IP 주소 연결 또는 주소 Actions에서 탄력적 IP 주소 연결 선택

 

  • 생성한 EC2에 연결
  • 인스턴스와 프라이빗 주소의 드롭다운 목록에서 선택
  • 생성한 탄력적 IP를 EC2에 연결하지 않으면 비용이 발생하므로 바로 연결하는 것이 좋다.
  • 인스턴스가 없을 경우 탄력적 IP는 바로 삭제하는 것이 좋다.

인스턴스 정보 확인

인스턴스 정보 확인

  • 인스턴스 목록에서 인스턴스 선택 후 아래에 표시되는 세부 정보의 탄력적 IP에 할당된 모습 확인

터미널로 EC2 인스턴스 접속

pem키 등록

$ cd .ssh
$ mv ~/Downloads/springboot-aws-study-webservice.pem .
$ chmod 600 springboot-aws-study-webservice.pem
$ vim ~/.ssh/config

# Edit config                                                                                                                 Buffers
    # springboot-aws-study-webservice
  Host springboot-aws-study-webservice
      HostName [탄력적 IP]
        User ec2-user
      IdentityFile ~/.ssh/springboot-aws-study-webservice.pem

# config 저장 및 종료 :wq

# config 실행 권한 등록
$ chmod 700 ~/.ssh/config

SSH 호스트 Config

  • ssh [Host 이름]으로 바로 접속 가능하다.
ssh springboot-aws-study-webservice

접속 결과

인스턴스 아마존 리눅스 서버 설정

JDK 설치

  • openjdk13 설치를 진행한다.
  • 아마존 레포지토리에는 8버전까지 밖에 없어 13을 다운로드 한다.
$ curl -O https://download.java.net/java/GA/jdk13.0.2/d4173c853231432d94f001e99d882ca7/8/GPL/openjdk-13.0.2_linux-x64_bin.tar.gz

# 다운로드 하면서 아래와 비슷한 내용이 출력
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  186M  100  186M    0     0  10.0M      0  0:00:18  0:00:18 --:--:-- 9961k

# 다운로드 완료된 것 확인
$ ls
openjdk-13.0.2_linux-x64_bin.tar.gz

# 압축 풀기
$ tar -xvf openjdk-13_linux-x64_bin.tar.gz
$ ls
jdk-13.0.2  openjdk-13.0.2_linux-x64_bin.tar.gz

# /opt/ 디렉토리로 이동
$ sudo mv jdk-13.0.2 /opt
$ cd /opt
$ ls
aws  jdk-13.0.2  rh

# 환결변수 설정
$ cd /etc/profile.d
$ vim jdk13.sh

# Edit jdk13.sh
export JAVA_HOME=/opt/jdk-13.0.2
export PATH=$PATH:$JAVA_HOME/bin
## 저장 및 종료 :wa

# 설정 반영
$ source /etc/profile.d/jdk13.sh

# 확인
$ echo $JAVA_HOME
/opt/jdk-13.0.2

$ java --version
openjdk 13.0.2 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
  • [참고사항] curl -O 링크 참고 주소: 자바 릴리즈 아카이브 에서 JDK 13 최신 메이저 버전에서 Linux 운영체제의 tar.gz의 링크를 복사해와서 curl로 받아온다.

서버 시간대(타임존) 변경

  • 기본 타임존은 UTC (세계 표준시)로 우리나라와 9시간 차이가 난다.
  • 한국시간대 (KST)로 변경하자
# 현재 시간 확인
$ date
Sun Jun 28 13:25:53 UTC 2020

# 시간대 정보 변경
$ sudo rm /etc/localtime
$ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 심링크 확인
$ ll /etc/ | grep localtime
lrwxrwxrwx  1 root root       30 Jun 28 22:26 localtime -> /usr/share/zoneinfo/Asia/Seoul

# 현재 시간 다시 확인
$ date
Sun Jun 28 22:27:26 KST 2020

호스트네임 변경

  • 여러 서버를 관리할 때 IP만으로 어떤 서비스의 서버인지 확인이 어렵다.
  • Hostname을 설정하자
$ sudo hostnamectl set-hostname springboot-aws-study-webserivce
$ hostname
springboot-aws-study-webserivce

$ sudo systemctl restart network

$ sudo reboot

 

참고

  • 이동욱. 2019. 스프링 부트와 AWS로 혼자 구현하는 웹 서비스. 프리렉

'프로그래밍 > AWS' 카테고리의 다른 글

AWS RDS 생성과 기본 설정  (2) 2020.07.07

+ Recent posts