교육

GCP 기초 #7

김구티2 2024. 3. 5. 12:19

[7주차] 클라우드의 애플리케이션

학습목표

1. Cloud Functions이 구글 클라우드에서 애플리케이션 개발을 지원할 수 있는 방법 설명하기 

2. Cloud Run의 목적과 사용사례 파악하기

3. Cloud Run에 컨테이너형 애플리케이션 배포하기

[7-1] Cloud Run

지금까지 우리는 구글 클라우드에 대해 학습했고, 클라우드에서 가상 머신, 네트워크, 스토리지와 컨테이너를 사용하는 것과 관련된 옵션과 이점에 대해 살펴 보았다. 그리고 이제는 클라우드에서 애플리케이션을 개발하는 것에 집중한다. 먼저 클라우드 런으로 시작한다. 클라우드 런은 웹 요청이나 Hub 하위 이벤트를 통해 스테이트리스 컨테이너를 실행하는 관리형 컴퓨트 플랫폼이다. 클라우드 런은 서버가 없는 서버리스다. 즉, 그것은 모든 인프라 관리 작업을 제거하여 우리가 오롯이 애플리케이션 개발에만 집중할 수 있게 해준다. 그것은 쿠버네티스에 구축된 오픈 API와 런타임 환경인 Knative를 기반으로 구축되었다. 구글 클라우드, 구글 쿠버네티스 엔진, 또는 Knative가 실행되는 모든 곳에서 그것은 완전히 관리될 수 있다. 클라우드 런은 빠르다. 그것은 거의 순간적으로 0에서 자동적으로 위아래로 확대하거나 축소할 수 있다. 그리고 그것은 가장 가까운 100ms까지 계산하여 사용된 리소스에 대해서만 요금이 부과된다. 따라서 초과 프로비저닝 리소스에 대해서는 비용을 지불할 필요가 없다. 

클라우드 런 개발자 워크플로우는 간단한 3단계 프로세스다. 첫째로, 먼저 선호하는 프로그래밍 언어를 사용하여 애플리케이션을 작성한다. 이 애플리케이션은 웹 요청을 듣는 서버로 시작해야 한다. 둘째로, 애플리케이션을 컨테이너 이미지로 구축하고 패키징한다. 그리고 세번째로, 그 컨테이너 이미지는 아티팩트 레지스트리로 푸시되며, 여기서 클라우드 런이 그것을 배포할 것이다.

컨테이너 이미지를 배포하면, 고유한 HTTPS URL을 반환받을 수 있다. 그런 다음 클라우드 런은 요청을 처리하기 위해 요구에 따라 컨테이너를 시작하고, 컨테이너를 동적으로 추가 및 제거함으로써 모든 수신 요청을 처리한다. 클라우드 런은 서버가 없기 때문에 우리는 개발자로서 애플리케이션을 구동하는 인프라를 구축하고 유지하는 것에 힘쓰는 게 아니라, 애플리케이션을 빌드하는 것에만 집중할 수 있다. 일부 사용 사례에서는 컨테이너 기반 워크플로우가 투명성과 유연성을 크게 제공하기 때문에 매우 훌륭하다.

 때때로 소스 코드를 HTTPS 엔드포인트로 전환하는 방법을 찾고 있을 때가 있다. 그리고 우리는 공급업체가 우리의 컨테이너는 안전하며, 일관성있는 방식으로 잘 구축되고 빌드되었는지 확인해주길 원한다. 그리고 클라우드 런을 사용하면, 이 2가지를 모두 수행할 수 있다. 컨테이너 기반 워크플로우와 마찬가지로 우리는 소스 기반 워크플로우도 사용할 수 있다.

소스 기반 접근은 컨테이너 이미지 대신에 소스 코드를 배포하는 것이다. 그런 다음 클라우드 런은 소스를 빌드하고, 애플리케이션을 컨테이너 이미지로 패키징한다. 클라우드 런은 빌드팩을 사용하여 오픈 소스 프로젝트를 수행한다. 클라우드 런은 우리를 위해 제공되는 HTTPS를 처리한다. 즉, 우리는 웹 요청을 처리하는 것만 걱정하면 되고, 클라우드 런이 암호화 추가를 처리하도록 할 수 있다.

클라우드 런의 프라이싱 모델은 고유한데, 컨테이너가 100ms의 세분화된 웹 요청을 처리하는 동안 사용하는 시스템 리소스에 대한 비용만 지불하면 된다. 그리고 시작과 끝에서 발생한다. 그렇기에 컨테이너가 요청을 처리하지 않는다면, 비용을 지불하지 않는다. 추가적으로, 매 100만 건의 요청에 대해 소정의 수수료가 발생한다. 컨테이너 시간의 가격은 CPU와 메모리에 따라 상승한다. 가상 CPU와 메모리가 더 많은 컨테이너는 더 비싸다. 클라우드 런을 사용하여 리눅스 64비트용으로 컴파일된 2진 파일만 실행할 수 있다. 그렇기에 우리는 클라우드 런을 실행하여 자바, 파이썬, Node.js, PHP, Go, C++과 같은 인기있는 언어를 사용해 작성된 웹 애플리케이션을 시행할 수 있다. 물론, 상대적으로 인기가 적은 Cobol, Haskell, Perl과 같은 언어로 작성된 코드를 실행할 수도 있다. 애플리케이션이 웹 요청을 처리할 수만 있다면야 뭐든 좋다. 

[7-2] 클라우드에서의 개발

많은 애플리케이션은 사용자가 이미지를 업로드할 수 있는 애플리케이션처럼 이벤트 기반의 부분을 포함한다. 그러한 이벤트가 발생하면, 이미지를 표준 포맷으로 변환하고, 썸네일을 다른 크기로 변환하고, 각 새로운 파일을 저장소에 저장하는 것처럼, 몇 가지 다른 방식으로 이미지를 처리할 필요가 있을 것이다. 이 기능은 애플리케이션에 통합될 수 있지만, 1ms에 한 번이든 하루에 한 번이든 상관없이 컴퓨트 리소스를 제공해야 한다. Cloud Functions를 사용하면, 필요한 이미지 조작을 완료하는 단일 목적 기능을 작성한 다음, 새로운 이미지가 업로드될 때마다 자동적으로 실행되도록 정렬할 수 있다. Cloud Functions은 서버나 런타임 환경을 관리할 필요없이, 클라우드 이벤트에 대응하는 소규모의 단일 목적 기능을 생성할 수 있도록 허가하는 경량의 이벤트 기반 비동기 컴퓨트 솔루션이다. 이러한 기능을 사용하여 개별 비즈니스 로직 작업으로부터 애플리케이션 워크플로우를 구성할 수 있다. Cloud Functions은 또한 클라우드 서비스를 100ms에 가깝게 연결하고 확장할 수 있지만, 코드가 실행하는 동안에만 가능하다. Cloud Functions은 많은 프로그래밍 언어로 된 소스 코드 작성을 지원한다. Node.js, 파이썬, Go, 자바, .Net Core, 루비, PHP가 이에 포함된다. 지원되는 특정 버전에 대해 자세한 내용을 살펴 보려면 런타임 문서를 참조하면 된다. 클라우드 스토리지와 PubSub의 이벤트는 Cloud Functions을 비동기적으로 트리거하거나 HTTP 호출을 사용하여 동기 실행할 수 있다.

[7-3] Hello Cloud Run

우선 클라우드 런 API를 가능하게 하고, 셸 환경을 구성한다. 이렇게 하지 않고, 콘솔의 APIs & Services 섹션을 사용하여 API를 활성화할 수도 있다. 이제 샘플 애플리케이션을 작성해 본다. 나처럼 크롬을 사용할 경우 서드파티 쿠키가 막혀있을 수 있으니 이를 해제해야 한다.

이제 package.json 파일을 생성한다. 여기서 가장 중요한 것은 파일에 시작 스크립트 명령과 Express 웹 응용 프로그램 프레임워크에 대한 종속성이 포함되어 있다는 것이다. 이후 nano index.js 파일까지 생성한다. 이제 샘플 앱을 컨테이너화하려면, 원본 파일과 동일한 디렉터리에 도커 파일이라는 이름의 새 파일을 만든다. 그런 다음, 도커 파일이 포함된 디렉토리에서 Cloud Build를 사용해 컨테이너 이미지를 구축한다. 이후 클라우드 런에 컨테이너화된 애플리케이션 배포는 gcloud run 명령어를 통해 수행한다.

이제 부러우저 창에서 서비스 URL을 열어 배포된 컨테이너를 방문할 수 있다. 클라우드 런은 우리가 이미 알듯, 서비스를 사용하지 않을 때는 요금이 부과되지 않지만, 구축된 컨테이너 이미지를 저장하는 데에는 요금이 부과될 수 있다. 따라서 GCP 프로젝트를 삭제하여 해당 프로젝트 내에서 사용되는 모든 리소스에 대한 청구를 중지하거나

위 명령을 통해 헬로우 월드 이미지를 삭제할 수도 있다. 이것으로 7주차까지의 모든 강의를 마친다.

 

이렇게 수료를 완료했다. 이제 기초를 다졌으니, GCP 전문성을 갖추기 위해 더욱 심화 과정을 살펴볼 것이다. 그리고 잊지 말고 강의 구독 취소를 하자!

728x90

'교육' 카테고리의 다른 글

Google Professional Cloud Architect Exam Actual Questions#2  (0) 2024.03.09
Google Professional Cloud Architect Exam Actual Questions#1  (0) 2024.03.08
GCP 기초 #6  (1) 2024.03.05
GCP 기초 #5  (0) 2024.03.04
GCP 기초 #4  (0) 2024.03.03