AWS 인프라 구축 ‐ (5) RDS - ttasjwi/board-system GitHub Wiki
RDS
- 관계형 데이터베이스 서비스(Relational Database Service)
RDS 서브넷그룹 생성
- RDS는 기본적으로 서브넷 그룹을 지정하고 배치해야한다.
- 서브넷 그룹은 2개 이상의 AZ 에 위치한 서로 다른 서브넷들의 묶음이다.
- 여기서는 이전에 만든 private-subnet-a, private-subnet-b 를 지정한다. (이들은 각각 ap-northeast-2a, ap-northeast-2b 에 위치했다.)
RDS 보안그룹 생성
- 보안그룹: AWS 클라우드에서의 네트워크 보안
- 인바운드 규칙: 인바운드 트래픽(즉, 보안 그룹의 외부에서 내부로 보내는 트래픽)
- 아웃바운드 규칙: 아웃바운드 트래픽(보안 그룹의 내부에서 외부로 나가는 트래픽)
- 보안 강화를 위해 RDS 로 들어오는 인바운드 규칙을 설정해야한다.
- 설정하기 앞서... 향후 계획
- RDS로는 기본적으로 EC2 보안그룹에서만 접근 가능하게 한다.
- 하지만, 데이터 삽입등의 편의로 초기작업에서는 내 로컬 PC 에서 접속 가능하게 할 것이다.
- 일단 로컬 PC에서 접속하기 편하게, 3306 포트로의 트래픽을 내 IP에서 접근 가능하도록 설정.
RDS 파라미터 그룹 생성
-
character-set 설정 : 모두
utf8mb4
로 설정 (한글 + 이모지)character_set_client
character_set_connection
character_set_database
characater_set_filesystem
characater_set_results
character_set_server
-
collation 설정 : 문자열 정렬 기준이다. collation_connection, collation_server을 utf8mb4_unicode_ci로 설정.
- utf8mb4_general_ci : 한글을 정렬 기준에서 제외해서 문제
- utf8mb4_utf8mb4_0900_ai_ci : MySQL 8 을 기본값으로 하였으나 "가" 와 "ㄱㅏ"를 동일한 문자열로 취급하는 문제가 있음
- utf8mb4_bin : 모든 문자열을 UTF-8 코드 포인트 값에 따라 바이너리 방식으로 비교, 대소문자 구분
- 대소문자가 다른 것을 다르게 인식하는 것이 좋아보일 수 있어도, 사용자 경험 관점에서 aAAA 사용자와 Aaaa 사용자를 구분해야함.
- 조회 과정에서도 aaa 로 검색했을 떄 Aaa 가 조회되지 않을 수 있고 쿼리를 수정해야하는 불편함이 발생
- 보통 무한 detph 댓글 구현 시 경로 열거 방식에서 이 collation 을 부분적으로 활용하는게 나을 듯.
- utf8mb4_unicode_ci : 대소문자 구분x, 전각/반각 문자 구분 x, 유니코드 표준
- 제일 무난한 선택이므로 기본값은 utf8mb4_unicode_ci 로 한다.
- 제일 무난한 선택이므로 기본값은 utf8mb4_unicode_ci 로 한다.
-
timezone : Asia/Seoul
RDS 생성
- 표준생성, MySQL(MySQL Community)
- 템플릿: 프리티어
- 배포옵션: 단일 AZ DB 인스턴스 배포(인스턴스 1개)
- 식별자: board-system-rds
- 자격증명
- username: admin
- password: 적절히 암호생성사이트를 통해 생성한 값
- 인스턴스 설정은 기본값을 가져간다.
- 만들어둔 서브넷그룹, 보안그룹 연결
- 편의를 위해 퍼블릭 액세스 yes
- 데이터베이스 인증, 모니터링: 기본값
- 초기 데이터베이스 이름: board_db_production
- 파라미터그룹 연결
- 백업 비활성화
- 삭제 방지 활성화 (x)
RDS 접근 설정
- 일단 현재 rds 는 board-system-subnet-group에 위치해있다.
- 데이터를 삽입하기 위해서 일단 RDS 접근 설정을 잠깐 열어둘 필요가 있다.
- 이들 서브넷 그룹의 라우팅 테이블에서 라우팅 규칙을 수정할 필요가 있다.
- 인터넷 게이트에 임시 연결
- rds로 들어오는 인바운드 규칙은 이미 현재 ip 기준 접근 허용을 해놨다.
RDS 접속
- host : 엔드포인트
- user: admin (아까 지정한거)
- password: 아까 지정한거
- database: board_db_production
- advanced ->
allowLoadLocalInfile
- Test Connection 버튼을 눌러서 접속에 성공하는 지 확인하면 됨.