2024.04.19

오라클 클라우드를 이용해봅시다.

오라클 클라우드에서 제공하는 무료 인스턴스를 이용해 개발중인 프로젝트를 배포해봤습니다.

사이드 프로젝트를 진행하면서 본격적인 개발에 들어가기 전에 기획하는 기간동안 개발서버를 구축해놓으려고 합니다.

정해진 일정대로 개발에 들어가는 기간 동안에는 최대한 개발에만 집중할 수 있도록 모든 인프라를 구축해 놓는것을 목표로 정했습니다.

제일 먼저 로컬 개발 환경을 세팅한 다음 실무에서 하는 방식과 동일하게 개발서버와 운영서버를 분리해서 구축해보고 싶었습니다.

분리하는 이유는 아래와 같습니다.

  1. 개발 서버에 문제가 생겨도 운영 서버에는 영향을 미치지 않음.
  2. 서버의 자원은 정해져있기 때문에 하나의 VM에서 개발서버와 운영서버를 모두 운영할 경우 많은 자원을 차지함.

최대한 비용을 절약하고 싶었기 때문에 개발서버는 오라클 클라우드에서 제공하는 무료티어 인스턴스를 이용하여 구축했습니다.

오라클 클라우드에 대해서 알아보니 가입하기 힘들다는 글들이 많이 보였는데 저는 옛날에 가입해서 잘 모르겠습니다...

VM 사양

사양은 아래와 같습니다.

OS : oracle Linux 8

구성 : VM.Standard.E2.1.Micro OCPU 개수 : 1 네트워크 대역폭(Gbps) : 0.48 메모리(GB) : 1 볼륨 : 100GB

1.VCN, 서브넷 생성

VCN(Virtual Network Computing) 은 쉽게 이야기해서 방화벽과 같다고 생각하면 됩니다. 인스턴스를 만들기 전에 인스턴스를 연결시킬 가상 클라우드 네트워크(VCN)와 서브넷을 생성해줍니다. 가상 클라우드 네트워크는 인스턴스들을 연결할 가상의 개인 네트워크이며, 서브넷 생성이나 방화벽 관리와 같은 네트워크 환경을 제어하기위해 필요합니다. 이는 아마존 AWS의 VPC와 유사합니다.

VCN 구성

우선 네트워킹 -> 가상 클라우드 네트워크 탭으로 이동 합니다.

vcn 생성

아래와 같은 화면이 나오면 이름만 입력 후 다음 버튼을 클릭해줍니다.

vcn 생성

이후 생성을 클릭하면 VCN 생성이 완료되었습니다.

vcn 생성

vcn 생성

방화벽 수신 규칙 설정

VCN 구성이 끝났다면 외부에서 접근할 수 있도록 방화벽 수신 규칙 설정을 해줘야 합니다.

방화벽 수신 규칙 설정은 네트워킹 > 가상 클라우드 네트워크 > 세부정보에 들어가면 VCN 의 정보를 볼 수 있고, Subnets를 볼 수 있습니다.

subnet 설정

Subnets 는 PrivatePublic 두 종류가 있는데 다음과 같은 특징이 있습니다.

Private Subnets

  • 프라이빗 서브넷은 외부 인터넷에서 직접 접근 불가능
  • 이 서브넷에 위치한 리소스는 인터넷과의 직접적인 연결 없이 내부적으로만 사용
  • 인터넷 접근이 필요한 경우, NAT 게이트웨이(NAT Gateway) 또는 프록시 서버 같은 추가적인 구성을 통해 인터넷 접속이 가능.
  • 주로 데이터베이스, 백엔드 서버 등 외부에 노출되지 않아야 하는 리소스에 사용

Public subnets

  • 퍼블릭 서브넷은 인터넷과 직접 연결될 수 있는 서브넷
  • 이 서브넷에 배치된 리소스(ex: 컴퓨트 인스턴스, 웹 서버 등)는 인터넷에서 직접 접근 가능
  • 보통 인터넷 게이트웨이(Internet Gateway)를 통해 인터넷과 연결됨.
  • 퍼블릭 서브넷에 있는 리소스는 공개적으로 접근 가능한 IP 주소를 할당받을 수 있음(oci에서 1개까지 무료로 제공)

퍼블릭 서브넷을 설졍해주기 위해 퍼블릭 서브넷 -> Default Security List 로 이동해줍시다.

subnet 설정

subnet 설정

이미 추가되어 있는 수신 규칙을 보면 22번 포트의 경우 SSH 접속을 위한 포트로 기본 설정이 되어있는 것을 확인할 수 있습니다.

수신 규칙 추가를 누르게 되면 아래와 같은 화면이 나오는데 만약 80번 포트와 443번 포트를 사용하려면 Source CIDR에 0.0.0.0/0을 입력하고

그리고 Destination Port Range에 80, 443이라고 작성하면 80번 포트와 443번 포트에 모든 ip로 해당 포트번호로 접근이 가능해집니다.

subnet 설정

subnet 설정

수신 규칙 설정할 때 주의할점으로는 서버로 들어오는 모든 접근을 허용하게 되면 서버가 공격자의 타겟이 될 수 있습니다.

이러한 불상사를 막기 위해 수신 규칙을 설정해줍니다. (ex: HTTP 프로토콜을 통해 웹 서비스를 운영하는 경우 80 포트와 443 포트만 모든 소스의 접근을 허용) 이외에도 SSH 접근에 대한 수신 규칙이 잘 설정되어 있는지 확인해줍니다. 만약 제대로 설정이 안되어있을 경우 인스턴스 쉘 접속 단계에서 문제가 생길 수 있습니다.

2. 인스턴스 생성

VCN 구성이 끝났다면 다음은 인스턴스 생성을 해줘야 합니다. 인스턴스란 오라클 클라우드 환경에서 실행되는 가상 서버를 이야기하는데 특징과 용도는 아래와 같습니다.

  1. 가상화된 컴퓨팅 리소스 : 인스턴스는 가상화 기술을 사용해서 물리적 서버의 컴퓨팅 자원 (CPU, 메모리 등)을 가상 환경에 할당, 이를 통해 사용자는 필요에 따라 유연하게 리소스를 사용
  2. 사용자 정의 구성 : 필요에 따라 인스턴스의 사양 (CPU 코어 수, 메모리 크기 등) 을 선택하고, 운영체제와 같은 소프트웨어 환경을 구성
  3. 다양한 용도 : 인스턴스는 웹 서버, 데이터베이스 서버, 애플리케이션 서버 등 다양한 용도로 사용할 수 있음.
  4. 스케일링 및 관리 : 클라우드 인프라의 장점을 활용하여 쉽게 확장하거나 축소할 수 있고, 모니터링을 위한 다양한 서비스 제공
  5. 네트워킹 및 보안 : 인스턴스는 오라클 클라우드의 네트워크와 통합되어, 가상 클라우드 네트워크(VCN) 내에서 안전하게 통신할 수 있음.
  6. 비용 효율성 : 클라우드 인스턴스는 사용한 만큼만의 비용을 지불하는 방식으로 물리적 인프라를 구축하고 유지하는 것에 비해 효율적일 수 있음.

인스턴스 생성

인스턴스 생성을 위해 컴퓨트 - 인스턴스 메뉴로 이동해줍시다.

인스턴스 생성

인스턴스 생성을 클릭해줍니다.

인스턴스 생성

배치는 변경하지 않고 기본값으로 사용합니다.

인스턴스 생성

회사에서는 Red Hat 을 사용했기 때문에 이번 기회에 한번 다른 운영체제를 사용해보고 싶어서 ubuntu를 선택했습니다.

이 부분은 각자의 취향에 맞게 선택하시면 될 것 같습니다.

인스턴스 생성

인스턴스 생성

다음으로는 SSH 접속을 위한 SSH key 생성을 자동으로 key 생성 후 전용키와 공용 키 모두 저장해줍시다. (window 환경에서는 puTTYgen을 이용해 PuTTY 전용인 ppk 파일로 변환해서 사용하고, Mac 환경에서는 $HOME/.ssh 전용 키와 공용 키를 모두 저장하고, 터미널에서 SSH로 접속합니다.)

터미널에서 SSH 접속

인스턴스를 생성할 때 운영체제를 ubuntu로 설정했기 때문에 SSH 접속 사용자 이름은 ubuntu로 설정이 되어 있습니다.

ssh ubuntu@[주소]

$HOME/.ssh 경로에 private key가 저장되어 있기 때문에 암호를 입력하지 않아도 원격 서버에서 접속할 수 있습니다.

만약 private key가 $HOME/.ssh 경로에 위치하지 않은 경우에는 아래와 같이 입력해줍니다.

ssh -i [private key path] ubuntu@[주소]

인스턴스 생성

인스턴스 생성

SSH 키 추가가 끝났다면 다음은 부트 볼륨을 지정해줍시다.

오라클 클라우드에서 제공하는 무료 부트 볼륨은 최대 100GB까지 무료로 제공하며, 최대 2개의 인스턴스를 생성할 수 있으니, 100GB로 하나의 인스턴스를 만들거나 아니면 50GB씩 두개로 나눠서 사용해도 됩니다.

저는 100GB 하나로 생성했습니다.

인스턴스 생성

이후 인스턴스 생성을 누르면 아래 이미지와 같이 처음에는 갈색 배경으로 프로비중이라고 나오지만 잠시 기다리면 초록색으로 바뀌면서 실행중으로 변경됩니다.

인스턴스 생성

인스턴스 생성

스크롤을 아래로 내려보면 인스턴스 생성 작업 진행도를 확인할 수 있습니다.

인스턴스 생성 인스턴스 생성

이번 포스팅에서는 VCN을 구성하고, 접근 허용 포트 설정, 인스턴스 생성까지 해봤는데요, 설정하다보니 전에 사용해봤던 AWS 설정 방식과 유사한 부분이 많이 있었습니다.

다음 포스팅에서는 고정 ip를 설정하고 직접 SSH로 접속해보도록 하겠습니다.