ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구글 Cloud를 이용한 웹사이트 호스팅
    Cloud 2025. 5. 29. 09:07
    728x90
    SMALL

    웹사이트를 GCP에 호스팅하는 방법은 정적 사이트인지 동적 웹 애플리케이션인지에 따라 달라집니다. 정적 사이트란 HTML, CSS, JS 같은 고정 콘텐츠로 구성된 사이트이고, 동적 웹앱은 Python 등의 서버 코드로 동작하는 애플리케이션을 말합니다. 초보자에게 적합한 GCP 서비스와 기본 사용법을 각각 소개합니다.

    Cloud Storage를 이용한 정적 사이트 호스팅

    필요한 서비스: Cloud Storage (구글 클라우드 스토리지).
    개념: Cloud Storage는 객체 스토리지 서비스로, 파일(HTML/CSS/이미지 등)을 저장하고 제공할 수 있습니다. 정적 웹사이트의 파일들을 Cloud Storage **버킷(bucket)**에 업로드하여 호스팅할 수 있습니다. 버킷을 특정 설정으로 구성하면 웹호스팅 모드로 동작하게 할 수 있는데, 이때 정적 페이지(예: index.html)를 기본 객체로 지정하면 웹 브라우저에서 해당 버킷 URL로 접속 시 사이트를 볼 수 있습니다cloud.google.com. 다만 Cloud Storage 자체는 커스텀 도메인의 HTTPS를 바로 지원하지 않으므로, 사용자 도메인으로 HTTPS 제공하려면 별도로 로드 밸런서와 SSL 인증서를 구성해야 합니다cloud.google.com. 간단히 테스트할 경우에는 Cloud Storage 버킷의 자동 생성된 사이트 URL(HTTP)로 접속하면 되지만, 민감한 정보는 공개 버킷에 올리지 않도록 주의해야 합니다cloud.google.com.

    Python과의 연동: 정적 사이트 자체는 서버 로직이 없으므로 Python이 직접 관여하지는 않습니다. 하지만 Python으로 Cloud Storage에 파일을 업로드하거나 관리를 자동화할 수 있습니다. GCP의 Python 클라이언트 라이브러리 google-cloud-storage를 사용하면 로컬 파일을 버킷에 업로드하는 스크립트를 작성할 수 있습니다. 예를 들어 다음과 같이 Python 코드로 정적 사이트 파일을 업로드할 수 있습니다cloud.google.comcloud.google.com:

    python
    CopyEdit
    from google.cloud import storage client = storage.Client() bucket = client.bucket("정적사이트용-버킷이름") # 버킷 객체 가져오기 blob = bucket.blob("index.html") # 업로드할 파일 객체 생성 blob.upload_from_filename("local/path/index.html") # 로컬 파일 업로드 print("정적 페이지 파일을 버킷에 업로드했습니다.")

    위 코드에서는 GCP에 인증된 환경(예: Application Default Credentials 설정 완료)이 필요합니다cloud.google.com. 업로드가 완료되면 Cloud Storage 버킷의 퍼블릭 URL 또는 설정한 도메인을 통해 사이트에 접근할 수 있습니다. 주의: 버킷을 웹사이트로 공개하려면 해당 버킷의 접근 권한을 Public으로 설정해야 하며, 이는 누구나 콘텐츠에 접근 가능함을 의미하므로 공개할 파일에 민감한 내용이 없는지 꼭 확인하세요.

    실제 예시 & 배포: 예를 들어 my-static-site라는 이름의 버킷을 생성하고(index.html과 같은 파일 업로드) 웹 사이트 호스팅을 설정했다면, http://storage.googleapis.com/my-static-site/index.html 또는 설정한 도메인으로 접속하면 사이트가 나타납니다. 커스텀 도메인을 사용하려면 버킷 이름을 도메인과 동일하게 짓고 CNAME 레코드 설정 등을 해야 합니다cloud.google.com. 하지만 앞서 언급했듯 HTTPS를 사용하려면 GCP의 Cloud Load Balancing 서비스와 연계가 필요하니, 초보 단계에서는 우선 HTTP로 동작 확인 후 진행하는 것이 좋습니다.

    사용 시 주의사항: Cloud Storage 기반 호스팅은 정적 파일만 제공하며, PHP나 Python같은 서버 사이드 코드는 실행되지 않습니다cloud.google.com. 또한 기본적으로 HTTP로 제공되며, Cloud Storage만으로는 HTTPS가 적용되지 않기 때문에 SEO나 보안상 이슈가 있을 수 있습니다. 비용 측면에서는 저장 용량과 다운로드(아웃바운드 트래픽)에 대해 요금이 부과되지만, 월 5GB 저장과 소량의 트래픽은 항상 무료로 제공되므로 작은 정적 사이트는 무료로 운영 가능했습니다cloud.google.com. 그래도 버킷에 설정한 공개 권한 때문에 발생할 수 있는 보안 문제, 그리고 예상치 못한 트래픽 증가에 따른 과금 등에 유의하세요.

    App Engine을 이용한 파이썬 웹 애플리케이션 호스팅

    필요한 서비스: App Engine (애플리케이션 엔진) - **표준 환경(Standard Environment)**을 사용.
    개념: App Engine은 GCP의 **플랫폼형 서비스(PaaS)**로, 사용자가 애플리케이션 코드만 작성하면 인프라는 Google이 관리해주는 웹 호스팅 서비스입니다. 특히 표준 환경은 Python, Java, Go 등 몇 가지 언어 런타임을 미리 제공하여, 코드를 배포하면 자동으로 인스턴스를 실행하고 요청에 따라 자동 확장해 줍니다cloud.google.com. Python으로 웹 애플리케이션(예: Flask나 Django 기반)을 개발해 배포하면, App Engine이 컨테이너화된 샌드박스에서 안전하게 실행하고 부하에 따라 스케일링합니다cloud.google.comcloud.google.com. 덕분에 인프라 서버를 직접 관리하지 않아도 되어 초보자도 비교적 쉽게 웹 서비스를 올릴 수 있습니다.

    Python과의 연동: App Engine 표준 환경에서는 Python 3 런타임을 선택할 수 있습니다. 애플리케이션 코드를 작성할 때 Flask 같은 프레임워크를 사용해도 되며, app.yaml이라는 설정 파일로 종속 패키지와 스케일링, 런타임 등을 정의합니다. 예를 들어, 간단한 Flask 애플리케이션의 디렉토리 구조와 주요 파일은 다음과 같습니다:

    bash
    CopyEdit
    myapp/ ├── main.py # Flask 애플리케이션 진입점 (예: Flask app 객체 생성 및 라우팅) ├── requirements.txt # 필요한 Python 패키지 목록 (예: Flask 등) └── app.yaml # App Engine 설정 파일

    app.yaml 파일에서는 런타임을 python37 또는 python38 등으로 명시하고, 웹 요청을 처리할 **엔트리포인트(entrypoint)**를 지정합니다. 예를 들어 Flask 앱의 진입 함수를 main.py에 작성했다면 entrypoint: gunicorn -b :$PORT main:app 형태로 설정합니다. 이렇게 코드를 준비한 뒤, GCP에 **배포(deploy)**하면 됩니다.

    배포 및 예시: gcloud CLI로 현재 디렉토리의 App Engine 앱을 배포하려면 다음 명령을 사용합니다:

    bash
    CopyEdit
    gcloud app deploy

    처음 배포 시 지역(Region)을 선택하라는 안내가 나오며, 이는 App Engine 앱의 호스팅 위치를 의미합니다. 배포가 완료되면 PROJECT_ID.appspot.com 도메인으로 애플리케이션에 접근할 수 있습니다. 예를 들어 프로젝트 ID가 my-gcp-project라면 https://my-gcp-project.appspot.com으로 배포된 웹앱에 접속 가능합니다. App Engine은 하루 1GB까지 무료 트래픽, 소량의 인스턴스 시간 등을 무료 제공하므로 작은 웹앱 실습에는 비용 부담 없이 시작할 수 있습니다cloud.google.comcloud.google.com.

    주의사항: App Engine 표준 환경은 일부 제한이 있습니다. 예를 들어, 로컬 디스크 쓰기 제약, 특정 확장 모듈 사용 불가 등 샌드박스 환경 규칙이 있으므로 서버의 파일 시스템에 영구 저장을 하지 못합니다. 이러한 제약에도 불구하고 자동 확장과 관리형 플랫폼의 편의로 초보자가 웹 서비스를 공개하기에 적합합니다. 다만, 무료 할당량을 넘어서면 과금되므로 일일 무료 한도(예: 인스턴스 시간 F1 클래스 28시간/일 등)를 넘지 않도록 유의하세요cloud.google.com. 또한 App Engine에 애플리케이션을 배포하면 기본적으로 인터넷에 공개되므로, 인증이 필요한 서비스라면 추가적인 보안 설정 (예: Firewalls, IAM)이나 Firebase 인증 연계 등을 검토해야 합니다.

    (참고: 최근 GCP에서는 새로운 웹 서비스는 App Engine보다 Cloud Run을 사용하도록 권장하기도 합니다cloud.google.com. Cloud Run에 대해서는 아래 서버 구축 섹션에서 다룹니다.)

    728x90
Designed by Tistory.