이번 글에서는 실제 서비스 운영에 꼭 필요한 RDS 설정들을 알아보고 직접 세팅해보는 시간을 가져보도록 하겠다.
💡 AWS VPC에 대한 사전 지식이 필요하므로, VPC 및 네트워크 구성은 이 글을 확인하길 바란다.
원하는 제품을 선택하면 되긴하지만, 난 MySQL을 선택하도록 하겠다.
템플릿을 무엇으로 선택했는지에 따라서 내가 선택할 수 있는 옵션들이 달라지게 된다.
실제로 서비스 운영에 사용할 데이터 베이스를 생성할 땐느 '프로덕션'을 선택하고 서비스 운영에 필요한 DB 스펙 선택 또는 옵션 활성화를 해주면 된다.
나는 개발/테스트
를 선택하겠다.
RDS에 이중화를 적용할 것이므로, 위에 표시한 2가지 옵션 중에 하나를 선택하면 된다.
나는 아래에 있는 것을 선택했다. 왜냐하면, '신규' 옵션은 비싼 인스턴스에서 밖에 적용이 안된다 ㅎㅎ;;
DB 인스턴스 이름과 Root 계정에 대한 세팅을 해주고, 원하는 인스턴스를 골라주면 된다.
나는 실습용 RDS를 만들고 있는 것이므로, 가장 저렴한 인스턴스를 선택했다.
이 또한 역시 각자가 원하는 옵션으로 구성하면 되지만 나는 가장 저렴하게 구성했다 ㅎㅎ
이 부분은 VPC, 보안그룹등의 AWS의 기본 네트워크 지식을 알아야한다.
이러한 부분은 다른 글에서 다룬적이 있으므로 그 글을 참고해주면 좋을 것 같다.
중요한 부분은 DB 서브넷 그룹에 2개 이상의 AZ를 포함시켜야 한다는 점이다.
나머지 설정들도 역시나 원하는 대로 설정해주면 되는 게 기본이고, 나는 추가 비용이 발생하지 않도록 설정해주었다.
물론, 실제 서비스에 사용할 DB는 백업과 Enhanced 로깅 옵션을 활성화해주는 것이 좋다.
이제 DB 생성을 완료했으니, 잘 생성되었는지 접속해서 확인해보자.
이 엔드 포인트가 DB의 호스트 이름이므로 잘 기억해두자.
선호하는 SQL 클라이언트로 Root 계정과 PW를 입력해서 접속하면 된다.
나는 이렇게 접속이 잘 되는 것을 확인할 수 있다.
데이터베이스 다중화 구성은 추가로 뭔가를 설정해줄 필요 없다.
인스턴스를 생성할 때, 다중화 옵션을 활성화해줬다면 바로 적용이 된다.
인스턴스의 콘솔로 이동해보면, 아중 AZ 활성화 + 어떤 AZ가 보조영역으로 설정되어 있는지 확인할 수 있다.
지금 이 DB는 ap-northeast-C
존의 인스턴스로 구동되고 있고, 혹시나 장애가 발생해서 DB 서버가 다운될 경우 ap-northeast-B
에서 대기하고 있던 StandBy DB 인스턴스
가 이 DB의 대체 인스턴스로 설정되게 된다.
네트워크 인터페이스 콘솔로 이동해보면, 이렇게 방금 생성한 RDS 인터페이스가 2개가 생성되어 있는 것을 확인할 수 있다.
무조건적이라고는 할 수 없겠지만, 어떤 서비스의 장애는 대부분 DB와 관련된 기능에서 많이 발생하고, 그 중에서도 '조회' 기능에서 많은 장애와 이슈들이 발생하게 된다.
수십, 수백만 건의 데이터 중에서 클라이언트에서 원하는 데이터를 찾아서 전달해야하는 일이다 보니 아무래도 자원을 많이 사용하기 때문이다.
그래서 이런 식으로 읽기 전용 복제본을 따로 만들어두고, 조회(읽기) 기능에 대한 자원은 분리해서 관리할 수 있도록 DB를 구성하곤 한다.
💡 만약 Read Replica를 생성하려고 하는데, 생성 버튼이 비활성화되어 있다면 '백업'을 활성화해주면 된다.
RDS 인스턴스 콘솔에서 Read Replica 생성 버튼을 눌러주자.
DB 인스턴스의 이름만 원하는대로 지어준다.
나머지 설정은 위에서 RDS를 생성할 때 했던 것과 동일하게 해도 된다. 물론 필요에 따라서 옵션을 달리할 수도 있다.
그리고 잠시후 RDS 콘솔에서 Read replica가 잘 생성된 것을 확인할 수 있다.
Spring과 JPA로 백엔드 서버를 개발한다고 가정하면, 설정 파일에 Read replica의 엔드포인트와 마스터 DB 인스턴스의 엔드포인트를 모두 추가해주고 읽기 전용 기능을 수행할 때는 아래의 JPA 어노테이션을 사용해주면, Read replica에 쿼리가 수행되게 된다.
@Transactional(readOnly = true)
자세한 내용은 이 글을 참고하면 좋을 것 같다.