
동아리 온보딩 과정에서 인프라에 대한 무지함을 깨닫고 공부를 시작했다.
개발자라면 글로 배우는 것 보다 직접 부딪혀 봐야 한다고 생각하기에 진행했던 unispace 프로젝트를 배포하고 Jenkins를 이용해서 CI/CD 파이프라인까지 구축해보기로 했다.
1년이라는 시간 제한이 있는 AWS 프리티어와는 달리 오라클 클라우드는 프리티어 계정에 기간 제한이 없다. 또한, 과금 관련해서도 AWS 보다 안전하다고 생각해서 이번 실습때는 오라클 클라우드를 이용하기로 했다.
클라우드 서비스마다 조금씩 다르긴 하지만 제공하는 기능은 큰 틀에서 비슷하기 때문에 오라클 클라우드로 경험을 쌓은 뒤에 AWS 배포에도 도전해 보려고 한다.

오라클 클라우드는 프리티어 계정에 최대 2개까지 인스턴스 생성을 허용한다.
동아리 프로젝트의 인프라 구조를 참고하여 비슷한 인프라 구조를 설계했다.
unispace는 프론트엔드와 백엔드로 구성되어 있으나 프리티어 인스턴스라 인스턴스 스펙이 낮기 때문에 우선 백엔드만을 배포해보려고 한다.
인스턴스를 만들기 전 인스턴스를 연결시킬 가상 클라우드 네트워크(VCN)와 서브넷을 생성해 줄 수 있다.
오라클 클라우드의 VCN(Virtual Cloud Network)는 AWS의 Virtual Private Cloud (VPC)와 유사한 서비스다.
가상 클라우드 네트워크(VCN)은 클라우드 서비스 내에서 사용자에게 제공되는 가상의 네트워크를 의미한다.
VCN을 사용하면 클라우드 내에서 서로 다른 VCN 간에 격리된 네트워크를 구성할 수 있으며 각 VCN은 독립적으로 동작한다. 클라우드 인스턴스가 같은 물리적 네트워크에 속하더라도 VCN을 통해 서로 다른 서브넷이나 가상 네트워크로 분리하여 운영할 수 있다.
사용자는 필요에 따라 고유한 IP 주소 범위, 서브넷, 라우팅 테이블 등을 설정하여 맞춤형 VCN 환경을 만들 수 있다.

VCN이 없다면 각 인스턴스들이 복잡한 거미줄 형태로 네트워크를 이루고 있을 것이다. 이러한 구조는 시스템의 복잡도를 증가시키며, 보안 측면에서도 불리하다.

VCN을 설정하면 위 그림과 같이 VCN 별로 가상의 네트워크를 구성할 수 있다.
VCN 내부에서 서브넷이라는 더 작은 네트워크를 만들 수 있는데, 이를 통해 네트워크를 더 세분화하여 관리할 수 있다.
더 구체적인 예시를 통해 가상 사설 네트워크에 대해 이해해보려고 한다.

집 = VCN
VCN의 사설 IP 대역 10.0.0.0/16은 내 집에 할당된 전체 주소 범위다. 이는 내가 이 VCN 안에서 사용할 수 있는 모든 IP 주소의 범위를 의미한다.
방 = 서브넷
각 방(서브넷)은 집의 전체 주소 범위에서 더 작은 주소를 할당받는다.
보안, 네트워크 관리, 자원의 접근 효율성 등에 기반하여 서브넷을 분리한다.
공용 서브넷은 외부 인터넷과 통신을 하는 인스턴스들이 위치한 서브넷이다.
10.0.1.5의 사설 IP를 사용하는 리엑트 프론트엔드 서버가 올라간 인스턴스가 속한다.
사설 서브넷의 자원들은 외부 인터넷에서 직접 접근할 수 없다. 내부 벡엔드 서버, 데이터베이스, 마이크로서비스 인스턴스 등이 여기에 속할 수 있다.
위 예시에서는 10.0.2.5의 스프링 부트 애플리케이션 인스턴스와 10.0.2.6의 MySQL 데이터베이스 인스턴스가 속한다.
각 서브넷은 보안 그룹이나 네트워크 ACL에 의해 보호된다.
인터넷 게이트웨이는 VPC와 외부 인터넷 간의 연결을 제공하는 컴포넌트다. 공용 서브넷에 배치된 인스턴스가 인터넷에 접근할 수 있도록 해준다.
NAT 게이트웨이는 프라이빗 서브넷에 있는 인스턴스가 외부 인터넷에 접근할 수 있도록 해주는 컴포넌트다. 인터넷과 연결될 수 있는 퍼블릭 IP를 가지고 있어야 하기 때문에 일반적으로 공용 서브넷에 배치된다.
프라이빗 서브넷에 속한 스프링 부트 애플리케이션 인스턴스가 외부 API를 호출하기 위해 인터넷에 접근할 때 NAT 게이트웨이를 통해 요청을 처리하게 된다.
NAT 게이트웨이를 사용함으로써 해당 인스턴스는 인터넷과 연결되지만, 외부에서 직접 접근할 수는 없다.
공용 서브넷에 속한 프론트엔드 서버가 NAT 게이트웨이를 통해서 사설 서브넷의 벡엔드 서버와 통신한다고 생각할 수 있지만 동일한 VPC 내에서 서로 통신하므로 NAT 게이트웨이를 거치지 않는다고 한다. 이 경우 VPC 내부의 IP 주소를 통해 직접 통신한다.
도메인 이름 요청
사용자가 브라우저에 웹 페이지의 도메인 주소 Duke.com을 입력한다.
DNS 해석
DNS 서버는 Duke.com을 리엑트 프론트엔드 서버에 할당된 공용 IP 주소로 변환한다.
공용 IP로 접근
인터넷을 통해 사용자의 요청이 이 공용 IP 주소(54.123.45.67)로 전달된다.
인터넷 게이트웨이
클라우드 VCN에 속한 인터넷 게이트웨이는 공용 IP 주소를 통한 요청을 내부 사설 IP 주소의 인스턴스로 전달한다.
요청이
54.123.45.67에서10.0.1.5으로 라우팅된다.
서버 응답
리엑트 프론트엔드 서버는 사설 IP 10.0.1.5를 사용하여 내부적으로 동작하며 요청을 처리하고 응답을 생성한다.
응답 전송
응답은 리엑트 서버에서 인터넷 게이트웨이를 통해 사용자의 브라우저로 전송된다.

가상 클라우드 네트워크 항목에서 VCN 생성 버튼을 누른다.

VCN 내부에서 사용할 가상 IP주소 블록을 지정하고 좌측 하단의 생성 버튼을 누른다.

VCN이 성공적으로 생성되었다. 서브넷, 인터넷 게이트웨이, NAT 게이트웨이 등을 생성할 수 있으며 보안 그룹 또한 생성할 수 있다.
public(공용) 서브넷 생성
VCN의 공용(Public) 서브넷과 전용(Private) 서브넷을 생성해준다.





각 서브넷의 IP 주소는 레퍼런스 가이드를 참고했다.