ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Linux]AWS RDS 서버 구축
    Server 2021. 10. 2. 16:09

     

     

    앞서 AWS EC2를 구축했을 때에는 EC2 인스턴스 안에 nginx, php, MySQL를 모두 설치하고 EC2에서 데이터베이스를 관리했다. 이번 포스팅에서는 기본 서버와 데이터베이스 서버를 분리하는 실습을 진행할 예정이다.

     

    데이터베이스를 분리함으로써 얻을 수 있는 이점은 아래와 같다.

     

    • N : 1의 확장성 

          WAS(Web Application Server)에서 처리할 부분이 DBS(Database Server)에 비해 상대적으로 많은 경우

          WAS와 DBS를 분리하는 것이 좋다. WAS와 DBS의 성능을 높이기 위해선 기술적 방법이 각기 다르게

          적용되어야 하므로 하나의 단일 서버로는 성능을 높이는데 한계가 있다. 즉, 서버의 분리를 통해 자원을 WAS

          서버와 공유하지 않고 독점적으로 사용하므로 더 높은 성능을 기대할 수 있는 것이다.

    • 보안에 좋음

          만약 WAS 서버에 해킹이 발생한 경우 루트 권한 모두가 넘어가게 되면 데이터에 심각한 문제가 발생할 수 있다.

          하지만 DBS를 분리해 제한적인 권한만을 부여한다면 심각한 보안 문제를 상당 부분 막을 수 있게 된다. 

     

    아마존에서는 이렇게 데이터베이스를 분리해서 관리할 수 있도록 RDS라는 서버를 제공한다.

     

     

     

    1. DB 인스턴스 생성

     

    AWS에 로그인 한 뒤 RDS을 검색해 해당 아이콘을 클릭한다.

     

     

    지역(리전)이 서울로 되어 있는지 확인한 후 데이터베이스 생성 버튼을 클릭한다.

     

    데이터베이스 생성 방식 선택 : 표준 생성

    엔진 옵션 : MySQL

    에디션 : MySQL Community

    버전 : MySQL 8.0.23

    템플릿 : 프리티어

    설정 :  DB 인스턴스 식별자, 마스터 사용자 이름, 마스터 암호 모두 각자 원하는 값을 입력하면 된다.

              마스터 사용자 이름과 마스터 암호는 꼭 기억해야 한다.

    스토리지 : 범용(SSD), 20

    DB 인스턴스 크기 : 버스터블 클래스(t 클래스 포함)

    연결 : 나머지는 그대로 두고 퍼블릭 액세스 가능 부분만 '예' 로 변경한다.

    데이터베이스 인증 : 암호 인증

    추가 구성 : 초기 데이터베이스 이름은 각자가 원하는 값을 입력하고 나머지는 그대로 둔다.

     

     

    위의 과정을 모두 마치면 데이터베이스가 성공적으로 생성되었음을 확인할 수 있다.

     

     

     

    2. 파라미터 그룹 설정

     

    RDS 운영환경에 맞는 파라미터를 설정해야 하므로 새 파라미터 그룹을 하나 생성해야 한다. 

    default 파라미터 그룹은 수정이 불가능하므로 새로운 그룹을 꼭 생성해야 한다.

    파라미터 그룹 탭에 접근한 뒤 파라미터 그룹 생성 버튼을 클릭한다.

     

     

    이전 과정에서 MySQL 8.0.23 버전으로 설정했기 때문에 같은 버전대인 mysql8.0을 선택해야 한다.

    그룹 이름과 설명은 각자 원하는 값을 입력하면 된다.

     

     

    새로 생성한 파라미터 그룹을 선택하고 작업 탭에서 편집 버튼을 누른다.

     

     

    2-1) 인코딩 방식 설정

    char을 검색하여 항목들의 값을 utf8mb4로 변경한다.

    utf8과 utf8mb4 모두 한글을 깨지지 않도록 인코딩해주지만 후자의 경우 하나의 문자를 표현하는데 4바이트를

    사용하기 때문에 이모지까지 저장할 수 있다는 차이점이 있다.

    계속 -> 변경사항 저장

     

     

    collation을 검색하여 항목들의 값을 utf8mb4_general_ci로 변경한다.

    계속 -> 변경사항 저장

     

     

    2-2) 타임존 설정

    time_zone을 검색해서 Asia/Seoul로 변경한다.

    계속 -> 변경사항 저장

     

     

    2-3) 기타 

    max_connections의 값을 150으로 설정한다.

    계속 -> 변경사항 저장

     

     

    log_bin을 검색해서 log_bin_trust_function_creators를 1로 설정해준다.

    계속 -> 변경사항 저장

     

     

    파라미터 그룹 설정을 마치고 재부팅을 해야 하는데 이때 시간이 꽤 걸린다.

     

     

     

    3. 파라미터 그룹과 데이터베이스 연결

     

    생성한 데이터베이스를 선택한 뒤 수정 버튼을 누른다.

    DB 파라미터 그룹을 이전 단계에서 새로 생성했던 그룹으로 변경한다.

     

     

    수정 예약 시 즉시 적용을 선택하고 우측 하단의 DB 인스턴스 수정 버튼을 클릭한다.

     

     

    로컬 PC에서 RDS에 접속하기 위해서 RDS 보안그룹의 인바운드 규칙을 추가하도록 한다

    EC2 인스턴스의 보안그룹을 편집했던 것과 동일하게 수행하면 된다.

    필자는 EC2의 보안그룹을 그대로 가져왔기 때문에 위와 같은 화면이지만 

     

    유형 : MYSQL/Aurora 소스 : 사용자 지정, 본인 PC의 IP

    유형 : MYSQL/Aurora 소스 : 사용자 지정, EC2의 보안그룹 코드

     

    이렇게 두 가지만 추가해주면 된다.

     

     

     

    4. RDS 데이터베이스 연결

    workbench에 새로운 connection을 생성하고 방금 생성한 RDS의 엔드포인트를 복사하여 Host에 붙여넣기 한다. Username과 Password는 이전에 RDS를 생성할 때 설정했던 값을 입력하면 된다.

    Test Connection, OK 버튼을 차례로 클릭하면 연결이 완료된다. 이제 외부에서 RDS에 접속할 수 있다.

     

     

     

    5. EC2에서 RDS로의 접근 확인

    $ mysql -u 계정 -p -h 호스트 주소

    EC2 인스턴스에 접속해 위의 명령어를 입력한 후 패스워드까지 입력한다.

    EC2에서 RDS로 접속되는 것을 확인할 수 있을 것이다. 

     

     

    create database test;

    접속이 잘 되었는지 확인하기 위해 테스트용으로 데이터베이스를 하나 생성했다.

     

     

     

    workbench를 열어보니 test 데이터베이스가 잘 생성되었음을 확인했다.

     

     

     

    6. 타임존, 인코딩 변경사항 확인  

    select @@time_zone, now();

    서울 시간(현 시간)이 제대로 출력되는 것을 확인할 수 있다.

     

     

    show variables like 'c%'

    DB 문자형 관련 설정을 확인할 수 있다.

     

     

    CREATE TABLE test (
        id bigint(20) NOT NULL AUTO_INCREMENT,
        content varchar(255) DEFAULT NULL,
        PRIMARY KEY (id)
    ) ENGINE = InnoDB;

    한글이 잘 출력되는지 확인하기 위해서 test라는 테이블을 생성한다.

     

     

    insert into test(content) values ('한글 테스트');
    select * from test;

    테이블 안에 '한글 테스트'라는 한글 텍스트 데이터를 삽입한다.

     

     

    한글이 깨지지 않고 잘 출력되는 것을 확인할 수 있다.

     

     

     

     

    https://webisfree.com/2020-05-07

Designed by Tistory.