관리 메뉴

개발공부기록

RDS(Relational Database Service), VPC(Virtual Private Cloud) 본문

인프라/AWS

RDS(Relational Database Service), VPC(Virtual Private Cloud)

소소한나구리 2025. 5. 8. 11:28
728x90

RDS(Relational Database Service)

RDS 소개

RDS는 SQL을 쿼리언어로 사용하는 관계형 DB를 위한 서비스이다

 

데이터베이스 엔진과 필요한 크기(용량)을 선택하여 인프라를 자동으로 구축(Provisioning) 할 수 있기 때문에 EC2 인스턴스 내에 직접 데이터 베이스를 설치하고 구성하는 대신 RDS 서비스를 사용하면 데이터베이스를 확장성 있게 생성 및 관리할 수 있게 된다.

 

EC2 내에 RDB를 직접 설치하는 것보다 RDS를 사용하면 얻는 이점은 아래와 같다

  • DB를 위한 인프라를 자동으로 구축하고 업데이트도 가능함
  • 지속적인 백업과 복구 기능을 지원함
  • 트래픽 모니터링을 위한 대시보드를 지원
  • 성능 향상을 위한 read replicas 지원
  • Disaster Recovery(재해 복구)를 위한 multi AZ 지원
  • 수평/수직 확장성 지원
  • EBS 백업 지원

다만 RDS를 사용하면 SSH로 DB에 접속하는 것은 불가능하기 때문에 서비스 중간에 RDS로 옮기는 작업이 조금 번거로울 수 있다.

 

RDS 기능들

Storage Auto Scaling

  • DB 용량의 한계치 까지 왔을 때 자동으로 용량을 늘려주는 기능(수직 확장)으로 예측 불가능한 트래픽(이벤트 등)이 있을 때 매우 유용하다.
  • 사용을 위해서는 Maximum Storage Threshold(최대치)를 지정해주어야 한다.

RDS Read Resplicas

 

  • 일반적인 서버는 쓰기보다 읽기에 사용되는 트래픽이 많은데 이러한 경우에 읽기 성능을 높여주는 기술이다.
  • 실제 서버의 데이터를 보관하고 조회하는 RDS를 하나 두고 이와 동일한 읽기용 복제 DB를 만들어서 읽기가 발생되는 트래픽을 복제된 DB에서 처리하는 방식이다.
  • 물론 새로운 쓰기가 발생하여 복제 DB에 확산되기 까지는 시간이 좀 걸릴 수 있지만 결국 시간이 지나면 복제 DB에도 모두 동일하게 확산되기 때문에 트래픽을 하나의 DB에 몰리는 것을 방지할 수 있다
  • 읽기 서버이기 때문에 오직 select문만 가능하며 read replica로 사용하던 DB를 용도를 변경하여 Multi AZ로도 사용할 수 있다.

Multi AZ

  • 고가용성을 위한 기능으로 RDS를 다른 AZ(가용 영역)에 그대로 백업 시키는 것이다
  • 서버에서 주로 사용하고 있던 RDS에 문제가 생길 경우 다른 AZ에 있는 RDS를 활용하여 데이터를 복구 시킬 수 있다
  • 즉, 가용성을 높여주는 기능이므로 확장성을 높여주지는 않으며 수동으로 설정할 필요없이 알아서 적용된다.

RDS 생성해보기

 

RDS를 검색하여 대시보드에 진입하면 중앙에 데이터베이스 생성 버튼을 클릭하면 RDS를 생성하는 페이지로 넘어간다.

 

 

처음 진입하면 표준 생성과 손쉬운 생성을 선택할 수 있는데 편한 방법을 선택하면 되지만 지금은 기능을 알아보기 위해 표준 생성으로 진행해볼 예정이다.

 

 

다양한 엔진 옵션을 선택할 수 있다.

 

 

템플릿도 지정할 수 있는데 일반적으로 배포할 때에는 프로덕션을 사용하지만 연습하거나 개인 프로젝트로 사용할 때에는 프리티어로 선택하여 사용해주면 된다

 

 

위에서 언급했던 가용성 및 내구성에 대한 옵션도 설정할 수 있다.

 

 

DB 인스턴스의 식별자와 자격증명을 설정 해줄 때 AWS Secrets Manager(비용 부과됨)를 사용하여 관리할 수도 있고 직접 비밀번호를 입력하여 관리할 수도 있다.

 

인스턴스 구성과 스토리지도 설정할 수 있는데 이부분은 서비스에 따라 선택해 주면 되며 스토리지 설정 시 스토리지 자동 조정(오토 스케일링) 옵션을 설정할 수 있다.

위의 이미지 처럼 할당된 스토리지를 20GB로 설정하고 최대 스토리지 임계값을 1000GB로 설정하면 약 스토리지의 용량이 약 18GB정도가 되면 최대 1000기가가 될 때까지 20GB씩 계속 자동으로 늘려주게 된다.

 

연결 정보 옵션을 통해서 이미 생성되어있는 EC2에 생성할 RDS를 편리하게 연동할 수도 있으며 먼저 RDS를 생성한 후 이후에 EC2에 연동해도 무방하다.

 

 

연결 정보 옵션 중 퍼블릭 엑세스라는 옵션이 있는데, 외부에서 편리하게 접속할 수 있는 퍼블릭 IP 주소를 열어두는 옵션이다.

로컬에서 개발을 할 때 로컬에서 RDS에 편리하게 접속하기 위해서는 해당 옵션을 키는 것이 수월할 수 있으나 나중에 배포용 RDS인 경우에는 초기 세팅을 제외하고서는 해당 옵션이 필요없으므로 꺼주면 된다.

 

 

RDS에 적용할 보안그룹도 별도로 적용할 수 있으며 가용 영역과 RDS 프록시 설정도 적용할 수 있으므로 상황에 맞게 적용해 주면 된다.

데이터베이스 포트는 위에서 설정한 데이터 베이스 엔진에 따라 자동으로 설정되는데 수동으로 설정하고 싶은 경우 추가적으로 입력해주면 된다.

 

 

추가적으로 DB 인증과 모니터링 관련 설정도 입력 할 수 있는데, 추가 모니터링 설정에서 CloudWatch Logs에서 게시될 로그 유형을 선택할 수도 있다.

 

추가 구성에 들어가면 초기 데이터베이스 이름을 지정할 수 있는데 접근을 할 때 해당 RDS이름을 사용하므로 직접 지정하고 이름을 기억하고 있는것이 좋다

 

 

자동 백업 옵션도 설정할 수 있는데, 백업 보존 기간과 특정 시간마다 백업을 수행하도록 할 수도 있으며 다른 AWS 리전에 백업을 복제할 것인지도 선택할 수 있다.

 

이런 모든 설정이 끝나면 데이터베이스 생성 버튼을 눌러서 RDS를 생성하면 되는데 RDS를 생성하고 유지하는 것만으로도 비용이 나올 수 있기 때문에 필요한 만큼 설정하고 생성하여 사용하면 된다.

 

 

RDS 생성을 누르면 상태가 생성 중으로 추가된 RDS 목록을 확인할 수 있으며 시간이 지나면 상태가 사용가능으로 변경된다.

 

 

우측 상단의 작업 메뉴를 눌러보면 다양한 작업 메뉴들을 볼 수 있다.

다중 AZ 배포로 전환 버튼을 누르면 RDS를 내릴 필요 없이 바로 다른 AZ에서 백업을 할 수 있게 되고, 해당 RDS를 EC2와 연결하기 위한 EC2 연결 설정 버튼도 있다 

위에서 잠깐 배웠던 Read replicas 설정을 할 수 있는 읽기 전용 복제본 생성 버튼과 스냅샷을 생성하고 마이그레이션 하는 작업 등이 있다

 

 

해당 데이터 베이스에 접근하기 위해 다양한 DB 클라이언트를 활용할 수 있는데 여기에서는 DBeaver를 활용해서 접근 해보겠다.

외부에서 접속하기 위해서는 퍼블릭 엑세스를 열어주어만 가능하다는점을 다시한번 상기하며 만들어진 RDS의 상세정보로 들어가보면 엔드 포인트가 적혀있는데 이 엔드포인트를 복사하여 원하는 DB 클라이언트에서 접속해주면 된다

 

 

DBeaver를 기준으로 보면 복사한 엔드포인트를 Server Host: 부분에 붙여넣어 주고 Database:에 데이터베이스 옵션에서 지정해 주었던 초기 데이터베이스 이름을 입력해주면 된다.

 

그 다음 입력해둔 RDS의 자격증명의 Username과 Password를 입력해주고 연결 테스트를 해보면 정상적으로 연결이 성공했다는 확인 창이 뜨는 것을 볼 수 있다.

 

 

이렇게 연결된 RDS에 테이블을 생성하고 값을 입력한 후 조회해보면 정상적으로 동작하는 것을 확인할 수 있다.

 

 

이후 RDS의 모니터링 부분에 접속해보면 DatabaseConnections가 증가한 모습을 확인할 수 있다


VPC(Virtual Private Cloud)

VPC란

AWS에서 제공하는 클라우드 컴퓨팅 리소스를 사용할 수 있는 가상 사설 네트워크(가상 사설 망)이다.

사용자는 VPC 내에서 IP 주소 범위, 라우팅 테이블, 서브넷 및 보안 그룹을 설정할 수 있으며 가상 서버, 스토리지 및 데이터베이스와 같은 다양한 AWS 리소스를 시작하고 관리할 수 있다

 

다양한 서버 아키텍처가 있겠지만 지금 배워온 서버 아키텍처는 아래의 이미지와 같이 기본적으로 DNS를 찾고 로드밸런서를 통해 인스턴스에 접근하고 DB에 데이터를 저장하는 독립적인 구조로 되어있었다.

 

하지만 실제 서버 아키텍처는 아래의 이미지의 예시처럼 다양하고 복잡하게 설정되어 있는데 잘은 모르겠지만 VPC라는 큰 틀 안에 Public Subnet과 Private Subnet이 구성되어있고 이 동일한 구조의 VPC가 한개 더 있는 멀티 환경으로 구축 되어있는 것을 확인할 수 있는데 이러한 상황에서 VPC를 활용한다고 보면 된다.

VPC는 하나의 리전안에 존재하며 VPC 안에 AZ가 있고 AZ 안에 Public Subnet과 Private Subnet이 있는 구조이다

VPC가 여러 리전에 걸쳐서 존재하지는 않는다

 

사용자가 요청을 하면 VPC안에 있는 로드 밸런서를 거쳐서 여러 AZ 존에 나누어서 묶여있는 서비스에 트래픽을 분산 시킬 수 있게 된다.

Public Subnet은 외부와 직접 연결되어 있는 Subnet이며 Private Subnet은 외부외 직접 연결되지 않는 Subnet이다.

 

 

하나의 AZ를 확대해보면 아래의 구조처럼 되어 있는데 Public Subnet의 제일 앞단에는 IGW(게이트 웨이)가 있어 인터넷 요청을 받게 된다.

해당 요청을 Public Subnet안에서 처리할 내용이있다면 Public Subnet 안에 있는 인스턴스를 통해 처리를 하게 되고, 없다면 NAT를 통해 Private Subnet으로 요청을 보내게 된다.

 

각 Subnet에는 라우팅 테이블이라는 것이 있는데 subnet내부에서 라우팅 테이블을 통해서 서비스(기기)들이 통신할 수 있게 해주는 미니 주소록의 개념이라고 이해하면된다.

하나의 서브넷에는 하나의 라우팅 테이블이 항상 존재를 하게 된다.

 

 

AWS 기반의 레퍼런스 아키텍처를 보면 사용자 요청이 Route 53을 거처 IP주소를 받고 ACF를 거쳐서 AWS리전으로 들어오게 된다.

 

이후 IGW를 거쳐서 VPC로 들어오게 되면 각 AZ영역의 Public Subnet과 통신하고 Public Subnet 안에 있는 NAT gateway를 통해 내부 Subnet과 통신하는 구조로 설계할 수 있다.

 

물론 IGW에서 ALB(로드 밸런서)를 통해 Private subnet과 통신할 수 있다.

 

이렇게 Public Subnet + 로드밸런서, Private Subnet 서버, Date Subnet(저장소)와 같이 3단 Subnet 아키텍처로 구성하는 것이 전형적인 3Tier-Architecture라고 불린다.

서브넷

VPC 내에서IP 주소 범위를 지정하는 가상의 네트워크이다

라우팅 테이블에 연결되며 각 서브넷은 하나의 라우팅 테이블에만 연결될 수 있다

서브넷을 사용하면 VPC 내에서 다른 서브넷과 격리된 가상 네트워크를 생성할 수 있으며 이를 통해 다양한 서비스를 실행하는 데 필요한 보안 요구 사항을 충족시킬 수 있다

 

퍼블릭 서브넷은 인터넷 게이트웨이와 연결된 서브넷으로 인터넷에 직접 연결되어 있는 서브넷이다

퍼블릿 서브넷을 사용하면 인터넷에서 직접 액세스할 수 있는 인스턴스를 실행할 수 있으며 이러한 인스턴스는 공인 IP 주소를 사용하고 인터넷 게이트웨이를 통해 인터넷으로 트래픽을 보낼 수 있다.

 

프라이빗 서브넷은 인터넷과 직접 연결되지 않는 가상의 네트워크이다

이러한 서브넷에서 실해오디는 인스턴스는 인터네에 직접 액세스 할 수 없는 대신 NAT 게이트웨이를 사용하여 인터넷을 통해 인스턴스에 연결하거나 VPC 피어링 등을 사용하여 다른 VPC와 연결할 수 있다

 

VPC의 라우팅 테이블은 VPC 내에서 트래픽이 전달되는 방법을 제어하는데 사용된다.

라우팅 테이블은 서브넷과 연결되며 각 서브넷에는 하나의 라우팅 테이블이 있어야 한다.

라우팅 테이블은 목적지 IP 주소와 대상 게이트웨이 또는 NAT 게이트웨이와 같은 대상을 매핑하며 여러 개의 라우팅 규칙을 포함할 수 있으므로 이를 사용하여 서브넷에서 트래픽을 전달하는 방법을 제어할 수 있따

IGW(Internet Gateway)

VPC와 인터넷 간의 통신을 가능하게 하는 게이트 웨이이다.

인터넷 게이트웨이를 통해 VPC 내부로 들어오는 트래픽을 받아 VPC에 연결된 서브넷으로 라우팅한다.

NAT(Network Address Translation) Gateway

프라이빗 서브넷에서 아웃바운드 인터넷 트래픽을 가능하게 하는 서비스이다.

NAT 게이트웨이는 프라이빗 서브넷 내 인스턴스가 인터넷으로 나가는 트래픽을 대신하여 공인 IP주소를 사용하고 인터넷 게이트웨이로부터 들어오는 트래픽을 프라이빗 서브넷으로 라우팅한다.

 

 

 

 

728x90