📌 왜 AWS RDS를 구축할까?
Web Server(WS), Backend Lanauage(BL), DataBase(DB)로 구성된 서버에는 2가지 구조가 존재한다.
1) DB가 각각 서버 컴퓨터에 존재하는 경우
- 장점: 하나의 계정이 해킹당해도 다른 그 계정으로 다른 서버 컴퓨터에는 있는 DB에 접근할 수 없으므로 보안상 강점이 있다.
- 단점: 상호 서버간 DB 호환성이 좋지 않다. 따라서 정보 공유가 어려고, 특히 서버가 다운되면 DB도 함께 꺼진다.(데이터 유실 가능성)
2) DB가 독립된 경우
- 장점: 상호 서버간 DB 호환성이 좋다. 서버가 다운되어도 데이터 유실이 발생하지 않는다. DB를 따로 관리하다 보니 DB에 보안을 집중할 수 있게 된다.
- 단점: 보안상 위험, 각 서버와 연동되면서 속도 저하 발생 가능성
아마존에서는 이렇게 데이터 베이스를 분리해서 관리할 수 있도록 RDS라는 서버를 제공해준다.
RDS 인스턴스 생성
AWS에 들어가서 우선 RDS 서비스를 선택하고 데이터 베이스를 생성한다.
MySQL 8.0.20 버전을 이용한다.
우선 프리 티어로 선택을 합니다. ( 이미 rds가 있다면 두 번째 인스턴스부터는 프리 티어 설정하지 못한다.)
DB 인스턴스 식별자를 자유롭게 정해주고, 데이터베이스 마스터 사용자 계정을 생성해 준다.
외부에서 데이터베이스에 접속할 수 있도록 퍼블릭 액세스 가능을 '예'로 설정한다.
필자는 'jminieVPC'라는 VPC 보안 그룹을 새로 만들었다.
마지막으로 추가 구성으로 DB이름을 지정해주고 데이터 베이스 생성을 해준다.
다음과 같이 사용가능 표시가 나오면 DB구축이 완료된 것이다.
RDS 운영 환경에 맞는 파라미터 설정
ec2에서 rds로 접근 가능하게 하기 위해서 포트를 열어주는 과정이 필요하다.
앞서 생성한 보안 그룹을 클릭해서 접근한다.
인바운드 규칙을 다음과 같이 편집해준다.
우선 위와 같이 기본적으로 RDS 서버를 관리할 호스트 컴퓨터의 ip만 접속할 수 있도록 설정되어 있는 것을 볼 수 있다.
하지만 EC2역시 RDS의 MySQL에 접근할 수 있게 해야 하므로
MySQL를 선택하고 소스 부분에서 EC2의 보안그룹 코드를 설정해주고 저장해준다.
이제 EC2가 RDS에 접근 가능하도록 설정이 완료되었다.
타임존 설정
RDS의 시간을 서울 시간으로 수정해주기 위해AWS RDS의 [파라미터 그룹]으로 이동한다.
기본적으로 default 파라미터가 존재하지만,
default 파라미터 그룹은 수정이 불가능하기 때문에 새로운 본인이 원하는 이름으로 새로운 그룹생성을 해준다.
생성한 파라미터 그룹을 클릭하여 들어가서
time_zone 이라고 검색합니다.
파라미터 편집 버튼을 누르고 Asia/Seoul로 설정해주고 변경 사항 저장을 합니다.
Characater set utf-8 설정
한글 데이터가 깨지지 않고 잘 출력시키게 하기 위해서 utf-8 인코더를 설정해준다.
타임존 설정했던 과정과 마찬가지며 검색 키워드를
character_set으로 하고 해당 요소들을 모두 utf8mb4로 설정해준다.
collation 설정
collation을 검색하여 collation부분을 모두 utf8mb4_general_ci로 바꿔준다.
위의 파라미터 그룹 설정을 새로 만든 파라미터 그룹에 설정을 한 것이다.
하지만 RDS의 파라미터 그룹은 default가 기본으로 설정되어 있을 것이다.
RDS의 파라미터 그룹을 우리가 새로 만든 파리미터로 바꾸어 주는 설정이 필요하다.
수정 버튼을 누른다.
데이터베이스 옵션 부분에서 DB 파라미터 그룹을 default에서 우리가 만든 그룹으로 수정해준다.
계속을 누르고 즉시 적용을 눌러줘 바로 적용해준다.
📖 외부에서 RDS 접근 확인
필자는 외부에서 데이터 베이스로 접속할 수 있는 MySQL Workbench을 사용하였다.
다음과 같이 사용자는 RDS를 생성할 때 생성한 master 계정으로 로그인을 한다.
host에는 RDS의 엔드포인트 넣으면 된다.
시간테스트
정상적으로 RDS에 접근하여 시간이 Asia/Seoul로 되어있는지 확인한다.
select @@time_zone, now();
정상적으로 서울 시간이 잘 나오는 것을 확인할 수 있다.
한글테스트
한글이 잘 출력되는지 확인하기 위해서 다음과 같이 test라는 table을 생성한다.
CREATE TABLE test (
id bigint(20) NOT NULL AUTO_INCREMENT,
content varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB;
여기서 InnoDB란?
InnoDB란 말은 Mysql에서만 쓰인다.
왜냐하면 InnoDB와 MyISAM은 Mysql에서 쓰이는 스토리지 엔진이기 때문이다. (이 이외에도 다양한 엔진을제공함)
가장 큰 차이점은 locking 방식의 차이이다. Innodb는 특정한 로우를 Rokcing 하는 반면, MyISAM은 Mysql의 테이블 그전체를 락킹한다.
또한 InnoDB는 트랜젝션을 제공하며 MyISAM은 제공하지않는다.
그러면 어느때 Innodb 를 사용하고 MyISAM을 사용해야할까?
1. MyISAM
- 한번의 대량의 isnert를 하는 배치작업.
- 읽기위주의 간단한 작업.
- 전문검색 필요.
- 트랜잭션 x 데이터복구 x
- 블로그등 비교적 작은 웹
2. InnoDB를 고려 해야하는 경우.
- order by등 정렬이 있는경우
- 트랜잭션 관리가 필요.
- 대용량의 데이터를 컨트롤.
- insert updater delete 등이 빈번하게 발생하는 경우(Row-Level locking 때문에)
- 복구가 필요할 경우
- 은행 또는 크고 복잡한 웹
테이블 안에 '한글 테스트'라는 텍스트 데이터를 넣어준다.
insert into test(content) values ('한글 테스트');
select * from test;
다음과 같이 한글 파일이 잘 나오는 것을 알 수 있다.
Referece:https://luminitworld.tistory.com/94
https://develop-im.tistory.com/13
https://develop-im.tistory.com/13
'Server Program' 카테고리의 다른 글
AWS Nginx 디폴트 페이지(Default Page) 변경하기 (0) | 2021.09.27 |
---|---|
AWS Nginx 서브 도메인 및 Domain Redirection 적용 (0) | 2021.09.24 |
AWS Nginx에 HTTPS 적용하기 (Let's Encrypt) (0) | 2021.09.24 |
도메인 구입(가비아) 및 설정 (0) | 2021.09.24 |
AWS Nginx에 PHPMyAdmin 설치하기 (0) | 2021.09.22 |