Introduce. 클라우드 인프라 시작하기
클라우드?? 뭐부터 시작해야 하나요?
클라우드를 시작하면 AWS, Docker.. 등등을 공부하고,
만약 팀에서 역할이 개발(프론트엔드, 백엔드, 인공지능) / 클라우드 인프라 관리로 나뉘었다면?
"어? 인프라를 쌓을려면 개발물들이 나와야 하는데, 어느정도 나오면 그 때 시작해야지" 라는 생각과 함께
프로젝트 초기때 방황하곤 한다.
근데 나는 도시의 인프라(도로, 수도, 전기 등등)을 클라우드라 생각하고,
개발물(프론트엔드, 백엔드, 인공지능)은 하나의 빌딩(건축물)이라 생각한다.
그럼 생각해보자. 어떤 도시를 계획하고 만들 때, 건물을 지은 뒤 도시의 인프라를 구축하는가?
아니면 인프라를 구축하고 건물을 짓는가?
정답은, 도시 초기에 인프라를 계획하고 인프라를 어느정도 구축한 뒤 건물이 지어지기 시작한다.
위 사진을 보라,
각각의 요소가 어떤 통신을 하고 어떻게 구성을 하고 각각의 세팅이 어떻게 되는지, 모두 알겠는가?
만약 이 클라우드 아키텍처를 보고 바로 이해되며 다른 설명서 없이 모든 인프라를 유기적으로 세팅할 수 있다면
앞으로의 글은 보지 않아도 된다.
하지만 각각의 구성요소가 어떤건지 모르거나, 알지만 어떻게 구성해야 될지 모른다면
앞으로 내가 설명하는 경로대로 학습하길 추천한다.
클라우드 인프라 구축 및 애플리케이션 실행
이 블로그에서는 일차적인 목표로 프론트와 백엔드의 인스턴스를 직접 구성하고 애플리케이션을 적용하고
CI/CD까지 연결하는 것을 목표로 한다.
아래는 목표점인 아키텍처를 그렸다.
최대한 간소화했음에도 어떤 그림인지 짐작이 안갈 것이다.
하지만 앞으로의 과정을 거치고 난다면 분명 스스로도 직접 구성 할 수 있게 될 것이다.
1. AWS 시작하기
2. AWS 계정 생성하기
3. EC2 인스턴스(가상서버) 시작하기
4. 네트워크 요소 구성하기 - VPC
만약 여기까지 도달했다면 "어? 다한거 아닌가?" 싶을 것이다.
하지만 우리는 인프라의 기초 뼈대를 구성한 것이지,
EC2 인스턴스에는 아무 애플리케이션이 돌아가지 않는 빈 껍데기일뿐이다.
(집을 다 짓는다고 바로 들어가서 사는게 아니라,
인테리어도 하고 필요한 가전기구를 들여놓지 않는가?)
그래서 다음으로 도커에 대해 알아보고 인스턴스 안에 도커를 구성 한 뒤(집 인테리어)
도커로 각 애플리케이션을 띄울 것이다.(가전 기구 들여다 놓기)
5. 도커 시작하기
- 도커란? - 도커 설치하고 명령어 사용
- 도커 파일 - 도커 파일 작성& 컨테이너 실행
- 도커허브란? - 계정 생성하고 이미지 업,다운
- 도커 멀티스테이지빌드란? - 멀티스테이지빌드 파일 작성
- 도커 레이어란? - 이미지 캐싱 잘 활용하기
- 도커 파일 시스템 - Overlay & Storage
- 도커 컴포즈란? - 컴포즈 요소 알아보기 & 고려해보기
도커가 가장 기본적이면서도 중요한 것이다보니 글이 많다.
그래도 이왕하는거 하나씩 보며 제대로 알아가는 것을 추천한다.
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 과정이 성공적으로 이루어지고, 배포 후 애플리케이션이 정상적으로 작동하는지 확인.
이렇게 절차를 밟아 나간다면 적어도 내가 테스트 한 부분에서의 문제의 고민은 소거할 수 있다는 장점이 있었다.