개발놀이터

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전1 (VPC와 서브넷) 본문

사이드 프로젝트/온라인 쇼핑몰 ver.4

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전1 (VPC와 서브넷)

마늘냄새폴폴 2023. 8. 13. 16:52

앞선 포스팅에서 우리는 VPC와 서브넷, 라우터와 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이까지 알아봤습니다. 이번 포스팅에선 그 중 첫 번째 단계라고 볼 수 있는 VPC와 서브넷을 만들어 볼 것입니다. 

 

개념적인 부분에 대해서 아직 모르고 계시다면 앞선 포스팅을 참고해주세요!

 

https://coding-review.tistory.com/451

 

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 개념

저는 항상 의문점이 있었던 것이 애플리케이션 서버와 데이터베이스 서버를 나누게 되면 이 둘은 어떻게 통신을 하는가? 였습니다. 제가 기존에 배포하던 방식인 EC2 인스턴스에 애플리케이션과

coding-review.tistory.com

 

VPC 생성과 서브넷 생성

1. VPC 생성

AWS 검색창에 VPC를 입력하고 들어간 곳에서 VPC 생성을 누릅니다. 

 

그리고 생성할 리소스에 VPC만, 이름 태그, CIDR를 입력해줍니다. CIDR에 대해서는 조금 더 공부가 필요하기 때문에 우선 똑같이 따라해달라고 부탁드리겠습니다. 

 

그리고 아래있는 VPC 생성을 누르면 끝입니다. 

 

2. 서브넷 생성

왼쪽 카테고리에서 서브넷을 클릭하고 서브넷 생성을 클릭합니다.

 

우리가 방금 만든 VPC를 선택하고 서브넷 이름, 가용 영역, CIDR를 입력해줍니다. 

 

여기서 서브넷의 CIDR는 VPC의 CIDR에 포함되는 CIDR만 가능합니다. 

 

이어서 두 번째 서브넷도 만들어줍니다. 이 서브넷은 private subnet으로 운영할 생각입니다. 

 

3. 인터넷 게이트웨이 생성

왼쪽 카테고리에서 인터넷 게이트웨이를 선택하고 "인터넷 게이트웨이 생성"을 누릅니다. 

 

인터넷 게이트웨이는 간단하게 이름 태그만 적어주면 됩니다. 

 

4. 라우팅 테이블 생성

왼쪽에 라우팅 테이블 카테고리를 선택하고 "라우팅 테이블 생성"을 누릅니다. 

 

라우팅 테이블도 만드는건 아주 쉽습니다. 이름과 VPC만 선택해주면 됩니다. 

 

우리는 두개의 서브넷을 가지고 있기 때문에 database-routing-table이라는 라우팅 테이블도 하나 더 만들어줍니다. 그럼 이렇게 두개의 라우팅 테이블을 볼 수 있습니다. 

 

이제 각각의 라우팅 설정을 해주도록 하겠습니다. 

 

먼저 public subnet에 연결할 라우팅 테이블의 라우팅을 설정해줄겁니다. 여기서 헷갈리시면 안됩니다! public subnet에 연결될 라우팅입니다. 잘 보고 선택해주셔야합니다. 

 

대상에 igw를 치시면 우리가 만든 인터넷 게이트웨이가 뜨게 됩니다. 그걸 선택해주면 됩니다. 

 

이 라우팅 테이블의 뜻은 "10.10.0.0/16으로 들어오는 요청을 제외한 모든 요청을 인터넷 게이트웨이로 전달해라" 라는 설정입니다. 

 

private subnet의 라우팅 테이블을 설정하기 전에 먼저 NAT 게이트웨이를 만들고 오겠습니다. 

 

5. NAT 게이트웨이 생성

왼쪽 카테고리에서 NAT 게이트웨이를 클릭하고 "NAT 게이트웨이 생성" 버튼을 클릭합니다. 

 

NAT 게이트웨이는 이름을 입력하고 서브넷을 public subnet으로 연결해야합니다. 

 

NAT 게이트웨이는 private subnet이 외부 네트워크 통신을 가능하도록 하게 만들어주는 시스템이라 private subnet을 선택해야할 것 같지만 NAT 게이트웨이는 인터넷 게이트웨이와 통신해야하기 때문에 public subnet이랑 연결해야합니다. 

 

앞서 우리는 public subnet 라우팅 테이블에 인터넷 게이트웨이를 연결했습니다. 그것을 기억하시면 조금 더 이해하기가 쉬울겁니다. 

 

또한, NAT 게이트웨이를 만들기 위해서는 탄력적 IP가 필요합니다. AWS에선 탄력적 IP를 EIP라고도 부르니 다른 곳에서 EIP라는 것을 보면 당황하지마시고 탄력적 IP구나 생각하시면 됩니다. 

 

주의!!!

NAT 게이트웨이는 정말 많은 돈이 듭니다. AWS의 내부적인 통신 (Inbound)에 대해서는 아무런 비용이 발생하지 않습니다. 때문에 내부적으로 스트레스 테스트를 진행해도 되는 이유이기도 하죠. 

 

하지만 외부적인 통신 (Outbound)에 대해서는 비용이 발생하게 됩니다. NAT 게이트웨이는 private subnet으로부터 외부로 네트워크 통신을 진행하게 됩니다. 

 

왜냐하면 private subnet에서 외부 네트워크와 통신해야 하기 때문이죠. 

 

때문에 NAT 게이트웨이는 프리티어가 아니라면 실습만 해보시고 바로 삭제하는 것을 추천드립니다. 

 

그럼 private subnet을 영원히 외부 네트워크와 통신하지 못하는데요? 

 

맞습니다. 때문에 우리는 추후에 NAT 게이트웨이를 AWS에서 설정하는 것이 아니라 EC2 인스턴스를 NAT 게이트웨이로 설정하는 방법에 대해서 알아볼 것입니다. 

 

 

이어서 보겠습니다. NAT 게이트웨이를 만들고 조금 있다보면 상태가 Available로 바뀌게 됩니다. 

 

 

6. private subnet의 라우팅 테이블 설정

이제 다시 왼쪽 카테고리의 라우팅 테이블로 가줍니다. 

라우팅 탭에서 라우팅 편집에 들어간 다음

 

모든 요청에 대해 NAT 게이트웨이를 설정해줍니다. 이 라우팅 테이블의 뜻은 위에서와 마찬가지로 10.10.0.0/16으로 들어오는 요청을 제외한 모든 요청을 NAT 게이트웨이로 가게 하는 설정입니다. 

 

이제 마지막으로 각각의 라우팅 테이블과 서브넷을 연결해주면 끝입니다. 

 

해당 라우팅 테이블은 public subnet의 라우팅 테이블입니다. 이 라우팅 테이블은 어떤 설정을 하고 있었죠? 

 

맞습니다. 인터넷 게이트웨이와 연결되어 외부 네트워크 통신이 가능합니다. private subnet은 외부와 연결되어있지 않고 public subnet을 통해서만 연결할 수 있도록 할겁니다. 

 

 

이 상황이 어떻게 된건지 도식화로 정리해보겠습니다. 

 

마치며

자 이렇게 해서 AWS의 설정을 모두 마무리지었습니다. 이제 다음 포스팅에선 EC2 인스턴스를 통해 직접 public subnet과 private subnet에 연결해보도록 하겠습니다. 

 

다음 포스팅

https://coding-review.tistory.com/453

 

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전2 (EC2 생성)

이전 포스팅에서 AWS 설정을 마무리지었습니다. 이번엔 public subnet에 애플리케이션 서버를 두고 private subnet에 데이터베이스 서버를 둬보겠습니다. 이전 포스팅과 이어지는 포스팅입니다. https://co

coding-review.tistory.com