클라우드

Introduce. 클라우드 인프라 시작하기

szoo_ 2024. 9. 12. 11:47

클라우드??  뭐부터 시작해야 하나요?

클라우드를 시작하면 AWS, Docker.. 등등을 공부하고,

만약 팀에서 역할이 개발(프론트엔드, 백엔드, 인공지능) / 클라우드 인프라 관리로 나뉘었다면?
"어? 인프라를 쌓을려면 개발물들이 나와야 하는데, 어느정도 나오면 그 때 시작해야지" 라는 생각과 함께

프로젝트 초기때 방황하곤 한다.

 

근데 나는 도시의 인프라(도로, 수도, 전기 등등)을 클라우드라 생각하고,
개발물(프론트엔드, 백엔드, 인공지능)은 하나의 빌딩(건축물)이라 생각한다.

 

그럼 생각해보자. 어떤 도시를 계획하고 만들 때, 건물을 지은 뒤 도시의 인프라를 구축하는가?

아니면 인프라를 구축하고 건물을 짓는가?


정답은, 도시 초기에 인프라를 계획하고 인프라를 어느정도 구축한 뒤 건물이 지어지기 시작한다. 

위 사진을 보라,

각각의 요소가 어떤 통신을 하고 어떻게 구성을 하고 각각의 세팅이 어떻게 되는지, 모두 알겠는가?

만약 이 클라우드 아키텍처를 보고 바로 이해되며 다른 설명서 없이 모든 인프라를 유기적으로 세팅할 수 있다면

앞으로의 글은 보지 않아도 된다.

 

하지만 각각의 구성요소가 어떤건지 모르거나, 알지만 어떻게 구성해야 될지 모른다면

앞으로 내가 설명하는 경로대로 학습하길 추천한다.

 


클라우드 인프라 구축 및 애플리케이션 실행

이 블로그에서는 일차적인 목표로 프론트와 백엔드의 인스턴스를 직접 구성하고 애플리케이션을 적용하고
CI/CD까지 연결하는 것을 목표로 한다.

 

아래는 목표점인 아키텍처를 그렸다.

최대한 간소화했음에도 어떤 그림인지 짐작이 안갈 것이다.

하지만 앞으로의 과정을 거치고 난다면 분명 스스로도 직접 구성 할 수 있게 될 것이다.

 

1. AWS 시작하기

 

2. AWS 계정 생성하기

 

3. EC2 인스턴스(가상서버) 시작하기

 

4. 네트워크 요소 구성하기 - VPC

VPC 네트워크를 구성했을 때
VPC에 인스턴스를 생성한 모습

 

 

만약 여기까지 도달했다면 "어? 다한거 아닌가?" 싶을 것이다.

 

하지만 우리는 인프라의 기초 뼈대를 구성한 것이지,
EC2 인스턴스에는 아무 애플리케이션이 돌아가지 않는 빈 껍데기일뿐이다.

(집을 다 짓는다고 바로 들어가서 사는게 아니라,
인테리어도 하고 필요한 가전기구를 들여놓지 않는가?)

 

그래서 다음으로 도커에 대해 알아보고 인스턴스 안에 도커를 구성 한 뒤(집 인테리어)

도커로 각 애플리케이션을 띄울 것이다.(가전 기구 들여다 놓기)

 

5. 도커 시작하기

도커가 가장 기본적이면서도 중요한 것이다보니 글이 많다. 

그래도 이왕하는거 하나씩 보며 제대로 알아가는 것을 추천한다.

 

 

6. 기본 인프라 구성해보기

[여기서부터 새로운 글을 쓰면 추가하기]

7. CI/CD 연결하기

8. 전체적인 인프라 테스트하기

 

 

여기까지 도달했다면 축하한다!

 

이제 클라우드의 가장 기본적인 요소를 구축 해보았다.

이후에는 좀 더 하나씩 발전 시켜가며 진행되는 과정을 설명 할 것이다.


클라우드 인프라 - 멀티 티어 아키텍처

이전 단계에서는 두개의 인스턴스에서 구축을 해보았다.

그런데 만약 서비스가 프론트 - 백엔드 - AI 으로 세개의 인스턴스가 있다고 가정해보자.

자, 그럼 어떻게 해야 할까?

"이전에.. 내가 인스턴스 띄우는 것까지 해봤으니까 이제는 한번에 다 구축하고 그 다음 테스트하면 되겠지?"

싶을 것이다.

 

내가 "모든 연결을 아무런 에러 없이, 어떤 문제가 생겨도 바로 알 수 있어!"라는 수준이면 바로 해도 된다.

 

하지만..나같은 경우는 각 구성 요소와 연결이 정상적으로 되는지,

만약 어떤 문제가 생긴다면 어디에서 문제가 생겼는지 잘 모르고 바로 대응하기 어렵기에

한 단계씩 절차를 밟아나가며 확실하게 문제가 없는 것을 확인하며 인프라를 구축하였다.

그래서 해당 순서를 설명하고자 한다.

멀티 티어 아키텍처 - 클라우드 인프라 구성하고 테스트하기

1. VPC 네트워크 구성

  • 멀티 티어 아키텍처를 위한 VPC(Virtual Private Cloud)를 생성하고, 퍼블릭 서브넷과 프라이빗 서브넷을 나눈다.
  • 목표: 네트워크 구성을 통해 퍼블릭과 프라이빗 인스턴스가 서로 통신할 수 있는 구조를 만듦.
  • 작업:
    • VPC, 서브넷, 라우팅 테이블 구성.
    • NAT 게이트웨이 설정
    • IGW 게이트웨이 설정

2. 퍼블릭, 프라이빗 인스턴스 생성

  • 퍼블릭 서브넷에는 외부에서 접근 가능한 인스턴스(예: 프론트엔드), 프라이빗 서브넷에는 외부에서 직접 접근할 수 없는 인스턴스(예: 백엔드, DB)를 생성한다. 
  • 목표: 필요한 인스턴스들이 적절한 서브넷에 배치되도록 구성.
  • 작업:
    • EC2 인스턴스를 생성하고, 퍼블릭 인스턴스에 Public IP를 할당.
    • 보안 그룹을 통해 각 인스턴스의 접근 권한을 설정.

3. 퍼블릭, 프라이빗 인스턴스 접속 테스트

  • 퍼블릭 인스턴스에 SSH로 접속하고, 퍼블릭 인스턴스를 통해 프라이빗 인스턴스에 접근 가능한지 확인.
  • 목표: 인스턴스들이 정상적으로 생성되고 통신 가능한지 확인.
  • 작업:
    • 퍼블릭 인스턴스에 SSH 접속
    • 퍼블릭 인스턴스에서 프라이빗 인스턴스로 SSH 접속 테스트

4. 도커 파일 생성 및 이미지 빌드

  • 애플리케이션을 컨테이너로 배포하기 위해 도커 파일을 작성하고 이미지를 빌드.
  • 목표: 도커 이미지로 애플리케이션을 패키징.
  • 작업:
    • 도커 파일 작성 및 빌드.
    • 도커 이미지의 동작 확인.

5. 도커 이미지 컨테이너 테스트

  • 도커 컨테이너를 실행하여 애플리케이션이 정상적으로 작동하는지 확인.
  • 목표: 애플리케이션 컨테이너가 정상적으로 실행됨을 확인.
  • 작업:
    • 도커 컨테이너 실행.
    • 컨테이너 내부에서 애플리케이션 테스트

6. 인스턴스에 도커 컨테이너 실행 및 외부 통신 테스트

  • 각 EC2 인스턴스에서 도커 컨테이너를 실행하고 외부 통신 및 보안 그룹 설정 확인.
  • 목표: 도커 컨테이너가 외부와 원활하게 통신하고, 보안 그룹이 적절히 설정되었는지 확인.
  • 작업:
    • 인스턴스에 도커 컨테이너 실행.
    • 외부 터미널(맥북 등)에서 애플리케이션 테스트.
    • 보안 그룹 설정 확인.

7. [프론트 인스턴스 - 백엔드 인스턴스] API 요청 테스트

  • 프론트엔드 인스턴스에서 띄운 웹 애플리케이션이 백엔드 인스턴스에 API 요청을 정상적으로 수행하는지 확인.
  • 목표: 프론트엔드에서 백엔드로의 통신 테스트.
  • 작업:
    • 프론트엔드 웹 페이지에 접속.
    • 백엔드에 API 요청 및 CORS 문제, 데이터 형식 확인.

8. [백엔드 인스턴스 - AI 인스턴스] API 또는 기능 테스트

  • 백엔드 애플리케이션에서 AI 인스턴스에 API 호출 또는 기능 테스트를 수행하여 AI와의 통신을 확인.
  • 목표: 백엔드와 AI 인스턴스 간 통신 테스트.
  • 작업:
    • 백엔드 애플리케이션에서 AI 인스턴스로 API 요청.
    • 데이터 응답 확인 및 통신 상태 점검.

9. 전체 인프라 테스트 [프론트 - 백엔드 - AI]

  • 프론트엔드에서 모든 기능이 정상 작동하는지 테스트하여 프론트-백엔드-AI 간의 전체적인 통신을 확인.
  • 목표: 전체 애플리케이션이 의도대로 작동하는지 확인 (E2E 테스트).
  • 작업:
    • 프론트에서 모든 기능을 테스트.
    • 각 단계(프론트 -> 백엔드 -> AI)에서 데이터 흐름과 통신 점검.

10. 젠킨스 환경 구성

  • CI/CD를 위한 젠킨스 환경을 구성하고, 각 애플리케이션 인스턴스에 배포할 준비.
  • 목표: 젠킨스를 통해 자동화된 빌드 및 배포 파이프라인 설정.
  • 작업:
    • 젠킨스 설치 및 구성.
    • 플러그인 설정 및 프로젝트 연결.

11. CI 파이프라인 구성 및 테스트

  • 애플리케이션의 CI(Continuous Integration) 파이프라인을 설정하고, 각 빌드가 정상적으로 실행되는지 확인.
  • 목표: 자동화된 빌드와 테스트 파이프라인이 올바르게 동작하는지 확인.
  • 작업:
    • 젠킨스 CI 파이프라인 설정.
    • 자동 빌드 및 테스트가 의도대로 수행되는지 확인.

12. CD 파이프라인 구성 및 E2E 테스트

  • CD(Continuous Deployment) 파이프라인을 설정하여 CI 이후 자동으로 배포가 이루어지도록 하고, 배포 후 애플리케이션이 정상 작동하는지 E2E 테스트.
  • 목표: 애플리케이션의 자동 배포와 기능 테스트가 완료됨을 확인.
  • 작업:
    • 젠킨스 CD 파이프라인 구성.
    • CI/CD 과정이 성공적으로 이루어지고, 배포 후 애플리케이션이 정상적으로 작동하는지 확인.

 

 

이렇게 절차를 밟아 나간다면 적어도 내가 테스트 한 부분에서의 문제의 고민은 소거할 수 있다는 장점이 있었다.