1. Docker란 무엇인가?

 

Docker는 애플리케이션을 어디서나 쉽게 실행할 수 있도록 도와주는 도구입니다. 쉽게 말해, ‘포장 상자(컨테이너)’ 같은 역할을 합니다.

 

예를 들어, 우리가 물건을 택배로 보내려고 합니다. 상자 없이 물건을 그냥 보낸다면, 운송 과정에서 손상이 생기거나, 일부만 도착할 수도 있습니다. 하지만 튼튼한 상자에 잘 포장하면, 어디로 보내든 안전하고 빠르게 배송할 수 있습니다.

 

Docker도 이와 비슷합니다. 애플리케이션과 그 실행에 필요한 모든 것을 ‘컨테이너’ 라는 상자 안에 담아 둡니다. 이렇게 하면 개발자가 만든 프로그램을 어디에서 실행하든 동일한 환경에서 문제없이 작동할 수 있습니다.

 

또 다른 예로 Docker를 음식 배달 서비스에 비유해 보겠습니다. 일반적인 앱 배포 방식(전통적인 방법)에서는 마치 셰프가 요리를 만들고, 각 배달원이 매번 다른 방법으로 포장해서 배달합니다. 포장 방법이 다르다 보니 어떤 고객은 따뜻한 음식을 받지만, 어떤 고객은 식은 음식을 받을 수도 있습니다.

 

Docker를 이용한 배포(컨테이너 방식)에서는 모든 음식은 표준화된 용기에 포장됩니다. 고객이 어디에 있든 같은 품질의 음식을 받을 수 있습니다. 즉, Docker는 앱을 컨테이너라는 표준 포장 상자에 담아, 어디서든 안정적으로 배포될 수 있도록 돕는 역할을 합니다.

 

요약하자면, 도커는 앱과 실행환경 모두 한꺼번에 일정한 규격의 파일(이미지)에 담아두었다가, 운영체제가 무엇이든 어떠한 서버에도 실행할 수 있는 컨테이너라는 것입니다.

 

2. Docker는 어떻게 개발되었나?

 

Docker는 2013년, Solomon Hykes라는 개발자가 만들었습니다. 그는 개발자들이 쉽게 애플리케이션을 배포하고 실행할 수 있도록 돕기 위해 Docker를 만들었습니다. 초기에는 리눅스에서만 동작했지만, 점점 발전하면서 Windows와 Mac에서도 사용 가능해졌습니다. 지금은 Google, Microsoft, Amazon 같은 글로벌 클라우드 제공업체들도 Docker를 적극 활용하고 있습니다.

 

Docker는 클라우드와 매우 잘 어울립니다. 왜냐하면, 고객 앱의 트래픽이 증가하면 그에 맞추어 서버를 가변적으로 늘려줘야 하는데, Docker 이미지를 이용해서 똑같은 서버를 자동으로 쉽고 빠르게 늘릴 수 있기 때문입니다. 또한, 이미지 인식 모델 등의 사전 학습된 기계학습 모델들도 미리 이미지로 만들어두고 Docker 파일로 저장해 두었다가 이미지 인식 앱의 제작 등의 필요시에 꺼내 쓸수 있기 때문입니다.

 

3. Docker의 주요 장점

 

따라서 Docker의 이점을 다음과 같이 요약할 수 있습니다: 다양한 운영체제에서 실행 가능, 빠른 배포, 확장성과 유연성

 

4. 간단한 예제

 

아주 간단한 Python Flask 웹 애플리케이션을 만들어서 Docker 컨테이너에 담고 Google Cloud Platform(GCP)에서 실행해보겠습니다.

 

(1) 앱 코드 작성

먼저 아래와 같은 애플리케이션 코드를 작성합니다. (파일 이름은 app.py) 작성된 파일은 구글 클라우드 콘솔 터미널의 업로드 기능을 사용하여 클라우드의 기본 서버에 업로드해 줍니다. 이 코드는 Flask라는 웹 프레임워크를 사용하여 웹 서버를 만듭니다. 이 아래 코드의 목적은 웹상의 어느 브라우저에서도 이 코드를 실행하는 앱의 URL 주소를 입력하면, 브라우저에 “Hello, Docker on GCP!”라는 메시지를 출력하는 것입니다.

 

    from flask import Flask

    app = Flask(__name__)

    @app.route('/')

    def home():

    return "Hello, Docker on GCP!"

        if __name__ == "__main__":

    app.run(host="0.0.0.0", port=5000)

 

(2) Dockerfile 작성

이제 이 애플리케이션을 Docker 컨테이너로 감싸기 위해 Dockerfile을 작성합니다. Dockerfile은 다음과 같습니다. Dockerfile도 터미널을 이용하여 마찬가지로 업로드 해 줍니다.

 

    FROM python:3.9

    WORKDIR /app

    COPY app.py /app

    RUN pip install flask

    CMD ["python", "app.py"]

 

이 파일의 역할을 설명하면,

Python 3.9가 설치된 환경을 기반으로 하고,

우리가 만든 app.py 파일을 컨테이너 내부(/app)로 복사하고,

Flask를 설치한 후,

app.py를 실행하도록 합니다.

 

(3) Docker 이미지 빌드

이제 Docker를 사용하여 위의 Dockerfile을 실행하고 컨테이너를 생성해 보겠습니다.

터미널(명령 프롬프트)에서 다음 명령어를 실행합니다.

 

    docker build -t my-flask-app .

 

이 명령어는 현재 폴더(.)에 있는 Dockerfile을 읽고 "my-flask-app" 이라는 Docker 이미지를 생성합니다.

 

(4) Docker 컨테이너 실행

Docker 이미지를 실행하여 컨테이너를 생성하고 실행합니다.

 

    docker run -p 5000:5000 my-flask-app

 

여기서 -p 5000:5000 옵션은 컨테이너의 5000번 포트를 내 컴퓨터의 5000번 포트와 연결하는 역할을 합니다. 이제 앱은 클라우드의 기본 서버 상에서 실행됩니다.

 

하지만 터미널이 실행되는 클라우드 서버는 명령어 창으로 동작하고, 화면을 보여 줄 방법이 없으므로, 지금 단계에서는 브라우저로 앱이 정상적으로 동작하는지 확인할 수 없습니다. 또한, 이 앱은 나만 사용할 수 있고, 다른 사용자들은 사용할 수 없습니다. 따라서 로컬 컴퓨터를 이용해서 웹상에서 앱의 구동 여부를 확인하고 다른 사용자들도 사용할 수 있으려면 웹상에 배포해야 합니다.

 

(5) 웹에 배포하기

이제 웹상에서 앱을 배포하고 실행하려면 아래와 같이 합니다.

  • Google Cloud에 로그인

GCP 콘솔(https://console.cloud.google.com/)에 로그인합니다.

 

  • Google Cloud SDK 설치

구글 클라우드 콘솔 터미널에서 Google Cloud SDK를 설치합니다. (Docker뿐만 아니라 구글 클라우드의 모든 서비스를 명렁어 기반으로 사용하기 위해서 필요)

 

  • GCP 프로젝트 설정

구글 클라우드 계정 당 여러 개의 프로젝트 생성이 가능하므로, Docker 명령어 실행 전에 어느 프로젝트인지 알려줘야 합니다.

 

     gcloud config set project [YOUR_PROJECT_ID]

 

여기서 [YOUR_PROJECT_ID]는 사용자가 프로젝트 생성시 정해준 프로젝트 이름입니다.

 

  • Docker 이미지 업로드

Docker 이미지를 GCP 컨테이너 레지스트리(컨테이너 이미지 저장소)에 업로드합니다.

 

    gcloud builds submit --tag gcr.io/[YOUR_PROJECT_ID]/my-flask-app

 

  • Google Cloud Run을 사용하여 배포

이제 Cloud Run(제 글 중의 ‘클라우드 컴퓨팅: Cloud Run’을 참조하세요.)을 사용하여 Docker 컨테이너를 실행합니다.

 

    gcloud run deploy my-flask-app --image gcr.io/[YOUR_PROJECT_ID]/my-flask-app --platform managed --region us-central1 --allow-unauthenticated

 

위 명령어는 다음을 수행합니다.

my-flask-app이라는 이름으로 Cloud Run 서비스 배포,

Google Container Registry(GCR)에서 Docker 이미지 가져오기, (<-- 앞에서 저장한 이미지를 불러옵니다.)

GCP에서 실행될 위치(region) 설정 (us-central1), (<-- 사용자가 위치를 변경하여 지정할 수 있습니다.)

모든 사용자(인증 없이)에게 접근가능하도록 설정 (<-- API 게이트웨이를 사용하면 사용자 인증을 추가할 수 있습니다. 제 글 중의 ‘클라우드 컴퓨팅: API 게이트웨이’를 참조하세요.)

 

  • 클라우드에서 실행된 애플리케이션 사용법

이제 우리가 만든 애플리케이션은 인터넷에 연결된 누구나 사용할 수 있습니다!

Cloud Run 배포 후 터미널에 표시된 URL을 웹 브라우저 주소창에 넣고 엔터키를 누르면

브라우저 화면에서 "Hello, Docker on GCP!" 메시지를 확인할 수 있습니다.

 

5. 마무리

 

Docker를 사용하면 개발한 애플리케이션을 어디서든 동일한 환경에서 실행할 수 있습니다. Google Cloud Platform(GCP)과 함께 사용하면 애플리케이션을 쉽게 웹에 배포할 수 있습니다.

 

 

 

API (Application Programming Interface) 게이트웨이는 구글 클라우드 플랫폼(GCP)에서 제공하는 서비스 중 하나로, 여러 가지 다양한 서비스들에 대한 '중앙 출입문' 역할을 합니다.

 

쉽게 예를 들어 설명해 보겠습니다. API 게이트웨이는 레스토랑의 주문 창구와 비슷합니다. 레스토랑은 한식, 중식, 양식 등의 메뉴가 있고, 각 메뉴를 담당하는 요리사가 있다고 가정해 보겠습니다. 손님들이 음식을 주문할 때 직접 요리사와 이야기하지 않고, 웨이터에게 원하는 종류의 음식을 말하면 웨이터는 이를 요리사에게 전달합니다. 이때 웨이터는 주문한 음식이 레스토랑에서 조리를 할 수있는 메뉴인지 아닌지 먼저 확인합니다. 만약 주문한 음식이 일식이면 주문을 받을 수 없습니다. 그런 후, 음식 주문을 각 음식을 담당하는 해당 요리사에게 전달합니다.

 

위의 예와 마찬가지로 API 게이트웨이는 사용자가 서비스에 대한 접근 권한이 있는지 확인하고, 간편하게 하나의 통로를 통해 어떤 요청을 해당 서비스 중의 하나로 전달하고 처리할 수 있게 합니다.

 

따라서 API 게이트웨이는 아래와 같은 장점을 가집니다.

복잡성 감소: 여러 서비스와의 연결을 단순화하고 통합합니다.

보안 강화: 접근 제어와 인증 기능을 제공하여 데이터와 서비스가 안전하게 보호됩니다.

확장성: API 게이트웨이에는 로드 밸런싱(Load Balancing) 기능을 추가할 수 있어서 요청이 많아져도 쉽게 확장할 수 있어 많은 사용자가 동시에 접속해도 안정적입니다.

 

간단히 사용예를 들어 보겠습니다.

만약 어떤 사용자가 http 요청을 통해서 google storage에 사진을 저장한다고 가정해 보겠습니다. 이때, 사용자는 API에 대한 접근권한을 얻기 위해서 요청의 내부에 API Key를 넣습니다. (마치 자물쇠가 달린 문을 열기 위한 열쇠와 같습니다.) 이 키는 오직 사용자만 알고 있어서, 다른 사용자는 사진을 저장할 수 없습니다. (위의 레스토랑 예에서 웨이터가 음식 종류의 확인에 해당)

 

이때, 일반적으로 API 키는 다음과 같이 HTTP 요청에 포함됩니다:

URL의 쿼리 파라미터로 포함하는 방식:

    GET https://your-api-endpoint.com/data?key= <YOUR_API_KEY>

여기서 <YOUR_API_KEY>는 API 게이트웨이를 생성할 때 사용자가 만든 Key입니다.

다른 방식으로는 HTTP 요청 헤더에 포함하는 방식:

    GET /data HTTP/1.1

    Host: your-api-endpoint.com

    x-api-key: <YOUR_API_KEY>

위 두 가지 방식 중 하나를 선택하여 API 키를 요청에 포함할 수 있습니다.

 

다시 사용자가 웹 애플리케이션을 통해 이미지를 업로드하는 경우로 돌아가 보겠습니다. 이 경우 API 게이트웨이는 사용자의 업로드 요청을 받아서 Cloud Run(지난번 글, 클라우드 컴퓨팅: Cloud Run을 보세요.)으로 전달하고, Cloud Run은 이미지를 Cloud Storage에 저장합니다. 이후 Cloud Run은 이미지가 저장되었다는 메시지를 Pub/Sub 서비스(Pub/Sub는 클라우드 내부에서 이벤트의 발생을 다른 서비스들에게 알려주는 서비스입니다.)에 전송합니다.

이렇게 Pub/Sub을 통해 필요할 경우 그것에 맞는 다른 서비스들을 추가적으로 호출하고 그 이미지를 처리/분석하는 작업(예를 들어서 사진의 크기, 포맷에 따라서 분류하고, 추가적으로 썸네일 작성 서비스 호출 혹은 이미지 인식 작업 호출 등)들을 수행할 수 있습니다. (앞의 레스토랑의 예에서 음식 종류별 요리사 선정에 해당)

 

또는 경로 지정을 통해서 서로 다른 서비스를 호출할 수도 있습니다. 예를 들어서 앞에서

    GET https://your-api-endpoint.com/data?key= <YOUR_API_KEY>

이렇게 요청했는데 대신 경로를 바꾸어서

    GET https://your-api-endpoint.com/image?key= <YOUR_API_KEY>

요청을 할 수도 있습니다. 이 경우, /image위치에서 다른 서비스를 하는 또 다른 cloud run 함수가 필요합니다.

 

이처럼 API 게이트웨이는 사용자의 요청을 다양한 서비스로 간단히 연결하고, 안정적이며 효율적인 방식으로 관리하는 핵심적인 역할을 합니다.

 

이번글에서는 Cloud Run에 대해서 소개합니다.

구글 클라우드의 'Cloud Run'이란 무엇일까?

구글 클라우드 플랫폼(GCP)에는 다양한 서비스가 있지만, 그중에서도 특히 'Cloud Run'이라는 서비스가 많은 주목을 받고 있습니다. Cloud Run은 간단히 말해, 애플리케이션이나 웹서비스를 서버를 직접 운영하지 않고도 빠르게 실행할 수 있도록 도와주는 서비스입니다.

 

예를 들어, 기존에는 웹사이트나 앱을 만들 때 서버를 직접 빌리거나, 서버를 관리해야 했습니다. 서버 운영은 복잡하고 시간도 많이 들며, 비용도 꾸준히 발생합니다. 그런데 Cloud Run을 사용하면, 구글이 대신 서버를 관리해주기 때문에 사용자는 코드만 준비해서 쉽게 앱을 배포할 수 있게 됩니다.

 

Cloud Run의 장점

Cloud Run의 가장 큰 장점은 서버를 관리하지 않아도 된다는 것입니다. 다음과 같은 이점들이 있습니다.

  • 간편한 배포: 코드를 준비해서 올리기만 하면 바로 앱이 작동합니다.
  • 자동 확장: 사용자가 많아지면 자동으로 서버가 늘어나서 사용량에 따라 빠르게 반응합니다.
  • 비용 절감: 서버가 작동할 때만 비용을 내기 때문에 비용이 효율적입니다.

 

어디에 활용할 수 있을까?

Cloud Run은 다양한 곳에서 활용될 수 있습니다.

  • 간단한 웹사이트나 API 서비스
  • 모바일 앱의 백엔드 서버
  • 배치 작업이나 자동화된 작업 처리

 

간단한 사용 예시

간단한 예시를 통해 Cloud Run의 동작 방식을 알아보겠습니다.

예를 들어, "안녕하세요!"라는 문장을 출력하는 간단한 웹 애플리케이션을 만든다고 가정해봅시다.

먼저 사용자는 애플리케이션 코드(파일 이름은 app.py입니다.)를 작성합니다. (Python의 Flask 프레임워크를 활용) 작성된 코드는 구글 클라우드 콘솔 터미널의 업로드 기능을 이용하여 업로드합니다.

 

    from flask import Flask

    app = Flask(__name__)

 

    @app.route('/')

    def hello():

    return "안녕하세요! Cloud Run에서 서비스 중입니다."

 

    if __name__ == '__main__':

    app.run(host='0.0.0.0', port=8080)

 

2. 작성한 코드를 컨테이너 이미지로 만듭니다. Docker를 이용하여 이미지를 만들 수 있습니다.

먼저 Dockerfile을 다음과 같이 작성합니다.

 

    # 베이스 이미지

    FROM python:3.10-slim

 

    # 작업 디렉토리 설정

    WORKDIR /app

 

    # 필요 패키지 설치

    COPY requirements.txt .

    RUN pip install -r requirements.txt

 

    # 소스 코드 복사

    COPY . .

 

    # 컨테이너 실행 시 사용할 명령어

    CMD ["python", "app.py"]

 

requirements.txt 파일에는 Flask를 추가합니다.

 

    flask

 

위의 두 파일들 (Dockerfile과 requirements.txt) 모두 콘솔 터미널을 이용하여 업로드 합니다.

이제 터미널 상에서 Docker 명령어를 이용해 이미지를 빌드하고 Google Cloud Container Registry(GCR)에 업로드합니다.

 

    docker build -t gcr.io/your-project-id/hello-cloudrun .

    docker push gcr.io/your-project-id/hello-cloudrun

 

3. Cloud Run 콘솔메뉴에서 배포할 컨테이너 이미지를 선택하고 간단한 설정(사용자가 이 cloud run의 이름을 "hello-cloudrun"으로 정한다고 가정하겠습니다.) 후 배포 버튼을 누르면 자동으로 서비스가 작동합니다. 그럼 이제 "your-project-id"(<-사용자 지정 프로젝트 이름입니다.)라는 구글 클라우드 프로젝트의 "hello-cloudrun"이라는 이름의 cloud run이 구동합니다.

 

배포된 Cloud Run 사용하기

Cloud Run에서 애플리케이션을 배포하면 URL이 자동으로 생성됩니다. 이 URL을 사용해 간편하게 HTTP 요청을 통해 앱에 접근할 수 있습니다. 예를 들어 웹브라우저의 주소창에 Cloud Run에서 제공된 URL을 입력하고 엔터키를 누르면, 바로 애플리케이션이 작동하는 것을 확인할 수 있습니다. (즉, 브라우저가 cloud run 서버에 요청하여 “안녕하세요! Cloud Run에서 서비스 중입니다.”라는 문자열 읽어와서 화면에 보여줍니다. 브라우저의 주소창에 주소를 입력하고 엔터키를 치는 것은 HTTP의 GET 요청(원격 사이트에서 정보를 읽기)과 같습니다. 물론 HTTP의 POST 요청(원격 사이트에 정보를 쓰기) 등 다른 타입의 요청도 위의 python 스크립트로 구현이 가능합니다.) 또한 프로그래밍적으로 앱을 호출하고자 할 때는 curl 또는 다른 HTTP 클라이언트를 통해 다음과 같이 요청할 수 있습니다.

    curl https://<YOUR_CLOUD_RUN_URL>/

이를 통해 앱이 정상적으로 작동하고 있는지 테스트할 수 있으며, 모바일 앱이나 다른 서비스에서도 HTTP 요청을 통해 데이터를 주고받을 수 있습니다.

 

 

* 제가 구글 클라우드를 아마존보다 먼저 접하고 유일하게 사용하는 클라우드 서비스로, 제 블로그에서는 구글 클라우드를 소개합니다만 아마존 클라우드를 배우시기를 권합니다. 아마존이 국내외 1위 서비스업체입니다. (물론 구글 클라우드로 배우셔도 상관없습니다.) 이 글은 클라우드 스토리지에 대한 간단한 안내이며, 당연히 아마존 클라우드(AWS)에도 비슷한 서비스가 있습니다.

 

구글 클라우드 플랫폼(Google Cloud Platform, GCP)의 스토리지 서비스는 사용자가 데이터를 쉽게 저장하고 안전하게 관리할 수 있도록 지원하는 클라우드 기반의 저장 공간입니다. GCP는 다양한 목적과 상황에 맞는 여러 가지 스토리지 서비스를 제공합니다. 이제 GCP의 대표적인 스토리지 서비스 종류와 간단한 활용 방법에 대해 알아보겠습니다.

 

첫 번째는 Google Cloud Storage입니다. 이것은 인터넷에 연결된 어디서든 데이터를 손쉽게 저장하고 검색할 수 있는 가장 기본적인 저장소입니다. 파일, 이미지, 비디오와 같은 데이터를 클라우드에 저장하여 언제 어디서나 접근할 수 있게 합니다. 예를 들어, 웹사이트에서 사용하는 이미지나 동영상 파일을 저장하거나, 앱에서 사용자 데이터 백업 용도로 활용할 수 있습니다.

 

두 번째는 Cloud SQL입니다. 이는 구글 클라우드에서 관리하는 관계형 데이터베이스 서비스(쉽게 생각해서 엑셀처럼 열과 행이 있는 데이터베이스)로, MySQL, PostgreSQL 및 SQL Server와 같은 널리 쓰이는 데이터베이스 시스템을 지원합니다. Cloud SQL은 데이터를 체계적으로 저장하고 관리할 때 쓰이며, 특히 웹 애플리케이션의 사용자 정보, 상품 목록, 주문 내역 등을 관리할 때 적합합니다. 또한 자체적인 검색 언어를 가지고 있습니다 (필터링, 정렬 등 기능 제공).

 

세 번째는 Cloud Bigtable입니다. 이는 대규모 데이터를 빠르게 처리할 수 있는 비관계형(NoSQL) 데이터베이스로, 주로 IoT(사물인터넷) 센서 데이터, 금융 거래 정보와 같은 대량의 데이터를 저장하고 분석할 때 사용됩니다. 짧은 시간 안에 많은 양의 데이터를 실시간으로 처리해야 하는 환경에 적합합니다.

 

네 번째는 Cloud Firestore입니다. Firestore는 구글 클라우드의 일부인 Firebase 서비스의 일부입니다. Firebase는 휴대폰 앱개발과 구글 클라우드를 쉽게 통합하기 위해서 개발된 서비스로, 앱의 사용자 관리, Firebase 전용 스토리지(=Firestore), 실시간 데이터베이스, 메시징 (Firebase Cloud Messaging), 앱 통계 및 사용자 분석 등의 서비스를 모두 포함하고 있습니다. Firestore는 유연한 구조를 가진 NoSQL 문서 데이터베이스로, collection과 document로 구성됩니다. document들이 모여서 하나의 collection을 구성하며, tree구조를 가지고 있습니다. document에는 기본적인 형태의 데이터들(숫자, 문자열 등)의 정보를 저장할 수 있습니다. 모바일 애플리케이션에서 실시간 채팅 서비스, 협업 툴, 게임 사용자 데이터 저장 등에 널리 활용됩니다.

 

마지막으로, Persistent Disk는 가상 머신(VM)에서 사용하는 영구 저장 공간입니다. 일반적인 하드디스크와 유사하게 작동하며, 서버가 종료된 후에도 데이터를 계속 유지할 수 있어 서버 운영에 필수적입니다. Persistent Disk는 웹사이트나 데이터베이스를 운영하는 서버에서 데이터 저장과 백업 용도로 활용됩니다.

 

구글 클라우드의 스토리지 서비스들은 필요에 따라 자유롭게 선택하고 조합하여 쓸 수 있습니다. 소규모 프로젝트부터 대규모 기업 환경까지 모두 대응 가능하며, 효율성, 안정성, 확장성을 모두 갖추고 있어 다양한 상황에서 데이터 관리를 효과적으로 지원합니다.

 

구글 클라우드 스토리지 설명 동영상

 

이번 글에서는 구글 클라우드 서비스 중의 하나인 Compute Engine에 대해서 소개합니다.

 

Compute Engine은 Google Cloud Platform(GCP)에서 제공하는 원격서버(가상머신) 서비스이며 서버의 성능과 서버의 동작 시간만큼 사용료를 내고 사용할 수 있습니다. 간단한 웹사이트부터 복잡한 고성능 컴퓨팅 작업까지 다양한 작업에 사용할 수 있고, Linux 및 Windows와 같은 여러 운영 체제를 설치할 수 있으며, 사용자가 CPU, 메모리, 스토리지 유형, 네트워크 성능 등 다양한 구성을 필요에 맞게 선택할 수 있습니다.

 

Compute Engine에서 서버 한대를 생성하려면 아래와 같이 하면 됩니다. (자세한 것은 GCP의 도움말을 검색하시거나 유튜브에서 관련 동영상을 찾으시길 권합니다. 여기서는 간략하게 어떤 단계로 설정하는지만 설명합니다.)

    1. Google Cloud Console 로그인: 로그인 후 메뉴에서 Compute Engine 서비스로 이동합니다.

    2. 인스턴스 생성: "인스턴스 만들기"를 클릭하고 원하는 지역(region)과 영역(zone)을 선택합니다. (사용자의 현재 위치와 같은 지역과 영역을 선택하는 것이 응답속도도 빠르고 네트워크 비용도 줄일 수 있습니다.)

    3. 머신 유형 선택: 미리 정의된 유형(예: 표준, 고메모리, 고CPU)을 선택하거나 직접 커스터마이징합니다. (제 기억에 좀 성능이 낮고 공동 사용(shared)이 가능한 CPU를 선택하면 비용이 저렴했습니다.)

    4. 부팅 디스크 구성: 애플리케이션 요구 사항에 맞게 운영 체제와 디스크 크기를 선택합니다.

    5. 네트워킹 및 보안: 방화벽 규칙과 네트워크 설정을 조정합니다.

6. 배포 및 연결: "만들기"를 클릭하여 인스턴스를 실행합니다. 실행 후 SSH(Linux용) 또는 RDP(Windows용)를 사용하여 연결할 수 있습니다.

 

그런 다음 서버에 원격으로 접속하려면 아래와 같이 설정합니다.

    ● Linux 인스턴스의 경우:

        Compute Engine에서 VM 인스턴스를 클릭합니다.

       Cloud Console에 내장된 SSH 버튼을 사용하거나 SSH 키를 수동으로 구성하여 명령어(ssh username@external-ip)로 원격 접속합니다.

    ● Windows 인스턴스의 경우:

        Compute Engine 콘솔에서 Windows 사용자 이름과 암호를 설정합니다.

        로컬 컴퓨터에서 원격 데스크톱 프로토콜(RDP) 클라이언트를 다운로드하여 실행합니다.

        인스턴스의 외부 IP(서버 생성시 외부 주소도 만들수 있습니다.)와 설정한 사용자 이름 및 암호를 사용하여 RDP 연결을 설정합니다.

 

필요에 따라서 서버의 성능을 조절할 수 있습니다. 특히 CPU의 종류, 메모리의 크기 등을 지정할 수 있습니다. 그래서 서버 모델 선택 시 고려할 사항은,

    1. 작업 부하 요구 사항: CPU 집약적인 작업은 고CPU 인스턴스가 적합하며, 데이터베이스나 메모리 집약적인 애플리케이션은 고메모리 인스턴스가 더 적합합니다.

    2. 비용 대비 성능: 예산과 자원 요구 사항 간의 균형을 맞춥니다.

    3. 확장성: 향후 요구 사항에 따라 리소스를 확장하거나 축소할 수 있는 능력을 고려합니다.

 

예를 들어, 데이터 중심의 웹 애플리케이션을 실행하는 경우 CPU와 메모리가 균형 잡힌 "n1-standard-4" 인스턴스(4 vCPU, 15GB RAM)를 선택할 수 있으며, 중간 정도의 트래픽 및 데이터베이스 상호작용에 적합합니다.

'GreenTam의 생각' 카테고리의 다른 글

클라우드 컴퓨팅: Cloud Run  (0) 2025.03.13
클라우드 컴퓨팅: Storage의 종류  (0) 2025.03.12
클라우드 컴퓨팅: App Engine  (1) 2025.03.08
클라우드 컴퓨팅: 개념  (3) 2025.03.08
경제적 독립의 길  (6) 2025.03.03

 

Google Cloud Platform App Engine 개요 예제

 

App Engine이란 App Engine이란 뜻으로, 휴대폰 앱을 예로 들자면, 사용자에게는 보이지 않지만 사용자가 입력하는 데이터를 처리하는 Application(App)이라는 의미입니다. 흔히 말하는 backend(백엔드)입니다. 반면 프론트엔드는 사용자가 볼수 있는 사용자 인터페이스를 의미합니다. 화면 상에 보이는 입력창, 버튼, 그림 등을 말합니다.

 

백엔드는 휴대폰의 앱에 내장되어 있을 있습니다. 예를 들어 계산기 앱은 계산을 하는 코드가 앱에 내장되어 있습니다. 그러나 휴대폰에서 처리할 없는 정보는 원격 서버에 보내서 처리해야 합니다. 예를 들어 chatgpt 앱은 사용자의 질문에 대한 대답을 앱안에 가지고 있지 않으므로, 그 질문을 openaAI에서 관리하는 서버로 보내면, 서버의 LLM(대규모 언어모델) 응답을 생성해서 휴대폰으로 돌려줍니다. 그러니까 원격 서버에서 정보를 처리할 필요가 있습니다.

 

Google Cloud Platform(GCP) App Engine 완전 관리형 서버리스(*1 - 아래 주석을 달았습니다) 애플리케이션 플랫폼으로, 개발자가 서버를 직접 관리할 필요 없이 코드를 배포하고 실행할 있도록 지원합니다. App Engine 요청 트래픽이 늘어나면 서버 수를 자동 확장 기능을 제공하여 트래픽 변화에 따라 서버 수를 자동으로 조절하며, 여러 프로그래밍 언어(Python, Java, Node.js, Go ) 코드를 있습니다.

 

*1 완전 관리형 서버리스란 사용자가 서버를 장만할 필요없이 인터넷연결로 원격서버를 이용하며, 구글이 서버를 관리해 주는 것을 말합니다.

 

아래는 간단한 App Engine 사용 예제입니다.

 

1. 환경 설정 (*2)

  • GCP 콘솔에서 App Engine 사용설정합니다.
  • GCP 프로젝트를 생성하고, App Engine에서 사용할 언어로 Python 선택합니다.
  • GCP 콘솔에서 아래의 명령으로 Google Cloud SDK Flask 설치합니다.

        pip install Flask gunicorn

 

* 2 구글 글라우드에 계정을 만들면 계정마다 여러 개의 프로젝트들을 생성할 있습니다. 하나의 프로젝트 개의 App Engine 만들 있으며, 사용자는 콘솔(GCP 콘솔)에서 명령어를 사용할 있습니다. 콘솔은 계정 기본적으로 제공되는 원격서버에서 구동하는 명령어 창입니다. (윈도우의 명령 터미널 창과 같은 )

 

2. 간단한 API 서버 코드 (app.py)

 

아래의 python 코드를 app.py(*3)라는 파이썬 파일을 작성하고, 콘솔의 업로드 기능을 이용하여 원격서버에 파일을 업로드 합니다.

        from flask import Flask, jsonify

 

        app = Flask(__name__)

 

        @app.route('/hello', methods=['GET'])

        def hello():

        return jsonify({"message": "Hello, App Engine!"})

 

        if __name__ == '__main__':

        app.run(host='0.0.0.0', port=8080)

 

*3 위의 코드는 http 요청을 처리하는 웹서버를 시작하는 코드로, http request get 요청을 받으면 “Hello, App Engine!”이라는 문자열을 json 형태로 응답하는 서버의 코드입니다.

 

3. 배포하기하고 app 실행하기

  • 콘솔에서 아래의 내용이 담긴 app.yaml파일을 생성하고 앱을 배포합니다. (App Engine 설정 파일입니다.)

        runtime: python39

        entrypoint: gunicorn -b :$PORT app:app

  • 콘솔에서 아래 명령어를 실행하면 app 배포하고 실행이 됩니다.

        gcloud app deploy

  • 배포가 완료되면 브라우저에서 https://<YOUR_PROJECT_ID>.appspot.com/hello 접속하여 API 정상 작동하는지 확인합니다. (*4)

*4 <YOUR_PROJECT_ID> 프로젝트 생성시 자동 생성되는 프로젝트 고유 문자열입니다.

 

브라우저로 주소창에 위의 주소를 입력하면 브라우저 화면에 “Hello, App Engine!” 표시됩니다. , 주소를 주소창에 입력하고 엔터키를 누르면, 앱에 http get 요청이 app으로 전달되며, app 요청에 대한 응답으로 “Hello, App Engine!”라는 문자열을 브라우저로 되돌려주면, 브라우저는 문자열을 보여줍니다.

 

위의 예제에서는 문자열 회신이라는 아주 간단한 정보 처리 예를 보여주었지만, 이보다 복잡한 처리 루틴을 python으로 있습니다. 또한 요청에는 사용자가 처리하기를 원하는 정보를 실어서 보내고, 응답에 처리된 결과값을 포함하여 받을 있습니다.

 

이와 같은 방식으로 App Engine 활용하면 웹브라우저, 모바일 , 또는 인터넷에 연결된 장치 등의 단말기가 어떠한 정보 처리 요청을 app 보낼 있고, app 처리를 마치면 다시 단말기로 응답을 보낼 있습니다.

 

 

'GreenTam의 생각' 카테고리의 다른 글

클라우드 컴퓨팅: Storage의 종류  (0) 2025.03.12
클라우드 컴퓨팅: Compute Engine  (0) 2025.03.12
클라우드 컴퓨팅: 개념  (3) 2025.03.08
경제적 독립의 길  (6) 2025.03.03
직장인으로서의 단상  (1) 2025.02.17

 

이번 부터 제가 알고 있는 한도내에서 클라우드 컴퓨팅, 기계학습, 임베디드 등에 대해서 소개를 해보겠습니다. 어디까지나 소개니 간략히 각각이 무엇인지 왜 필요한지 정도만 설명하겠습니다.

 

먼저 클라우드 컴퓨팅을 설명합니다. 한마디로 표현하면 서버를 빌려쓴다라는 개념입니다. 즉 사용하는 자원, 시간 만큼 돈을 지불하고 사용하는 것인데, 그 것 외 다양한 서비스가 있습니다. 최근 많은 회사들이 자사의 내부에 서버를 두고 운영하는 게 아니라 클라우드 서비스를 활용해서 전산업무를 수행하고 있습니다. 왜냐하면 직접 서버를 운영하는 것보다 그렇게 하는 것이 더 저렴하고 관리가 쉽기 때문입니다.

 

대표적으로 아마존의 AWS(Amazon Web Service), 구글의 GCP(Google Cloud Platform)가 있습니다. 아래는 클라우드 컴퓨팅을 소개하는 어느 유튜브 동영상의 내용을 요약한 것입니다.

 

클라우드 컴퓨팅이 유용한 이유

 

스케일링(Scaling)

    • 애플리케이션이 갑자기 인기가 많아지면, 많은 사용자가 몰려 서버가 버티지 못할 수 있음.
    • 이를 해결하기 위해 두 가지 방법이 있음:
      • 수직 스케일링(Vertical Scaling): 서버의 CPU, 메모리, 저장 공간을 늘려 더 강력하게 만듦. 하지만 비용이 점점 비싸지고 한계가 있음.
      • 수평 스케일링(Horizontal Scaling): 여러 개의 작은 서버를 추가하여 부하를 분산시킴. 더 안정적이고 비용 효율적임.

 

로드 밸런싱(Load Balancing)

    • 수평 스케일링을 할 때, 트래픽을 여러 서버에 고르게 분배하는 기술.
    • 특정 서버에 과부하가 걸리지 않도록 자동으로 분산함.
    • 라운드 로빈(Round Robin) 방식 등 다양한 분배 방식이 있음.

 

서버리스(Serverless)

    • 사용자는 서버를 직접 관리하지 않고, 원하는 기능을 수행하는 코드만 실행하는 방식.
    • AWS Lambda 같은 서비스가 대표적이며, 코드 실행만 신경 쓰면 됨.

 

이벤트 기반 아키텍처(Event-Driven Architecture)

    • 예를 들어, 아마존에서 주문이 들어오면 ‘결제’, ‘배송’, ‘사기 감지’ 등 여러 서비스가 자동으로 반응하는 방식.
    • 서비스 간의 의존도를 줄이고 유연성을 높여줌.

 

컨테이너 오케스트레이션(Container Orchestration)

    • 여러 개의 서버에서 동일한 애플리케이션을 실행하고 관리하는 기술.
    • 쿠버네티스(Kubernetes) 같은 도구를 사용해 컨테이너를 효율적으로 배포하고 운영함.

 

클라우드 스토리지(Cloud Storage)

    • 데이터를 저장하는 방식이 여러 가지 있음:
      • 객체 스토리지(Object Storage): 사진, 영상 등 파일을 저장하는 방식 (예: AWS S3).
      • 블록 스토리지(Block Storage): 서버의 하드디스크처럼 사용되는 저장소.
      • 데이터베이스 스토리지(Database Storage): SQL, NoSQL 등 데이터 저장을 위한 공간.

 

클라우드 네트워크(Cloud Network)

    • 기존의 기업 데이터센터와 달리, 클라우드는 기본적으로 모든 리소스가 인터넷과 차단된 상태.
    • 보안 규칙을 설정하여 원하는 리소스끼리만 통신할 수 있도록 함.

 

 

유튜브에 있는 많은 클라우드 컴퓨팅 소개 영상들 중에 몇 개 가져왔습니다.

 

안될과학 - 클라우드 컴퓨팅 한 방 정리

https://www.youtube.com/watch?v=exewHoMNjsQ&pp=ygUd7YG065287Jqw65OcIOy7tO2TqO2MhSDqsJzrhZA%3D

 

조코딩 - 요즘 모르면 안되는 클라우드 개념과 필수 서비스 무료 교육 알아보기

https://www.youtube.com/watch?v=eRTUmgODZtg&pp=ygUd7YG065287Jqw65OcIOy7tO2TqO2MhSDqsJzrhZA%3D

 

다음 글부터는 좀 더 구체적으로 제가 사용해본 클라우드 서비스들에 대해 설명해 보겠습니다.

 

'GreenTam의 생각' 카테고리의 다른 글

클라우드 컴퓨팅: Storage의 종류  (0) 2025.03.12
클라우드 컴퓨팅: Compute Engine  (0) 2025.03.12
클라우드 컴퓨팅: App Engine  (1) 2025.03.08
경제적 독립의 길  (6) 2025.03.03
직장인으로서의 단상  (1) 2025.02.17

+ Recent posts