쉬엄쉬엄블로그

(Product Serving) Cloud 본문

부스트캠프 AI Tech 4기

(Product Serving) Cloud

쉬엄쉬엄블로그 2023. 9. 20. 12:35
728x90

이 색깔은 주석이라 무시하셔도 됩니다.

Part 2. 프로토타입부터 점진적으로 개선하기

2.4 Cloud

1. Cloud

  • Cloud 서비스를 사용하는 이유

    • 웹, 앱 서비스를 만드는 경우
      • 자신의 컴퓨터(localhost)로 서비스를 만들 수도 있음
      • IP로 누구나 접근할 수 있게 수정하고, IP를 공유하기 등
      • 그러나 이런 경우 자신의 컴퓨터가 종료되면 웹, 앱 서비스도 종료됨
        • 이런 경우 전통적인 접근 방법
          • 물리적 공간, 확장성을 고려한 서버실을 만들고 운영
          • IDC(Internet Data Center)
          • 서버 컴퓨터를 넣을 공간 + 추후 서버를 추가할 때 즉각적으로 확장할 수 있는지
          • 전기, 에어컨 등 서버가 급작스럽게 종료되지 않도록 준비가 필요함
            • 갑자기 트래픽이 몰릴 경우, 컴퓨터 10대를 설치하기 어려움(자재 수급 이슈 등)
            • 반대로 트래픽이 적어서 컴퓨터 10대를 없애기가 수월하지 않음
      • 앞선 내용보다 자유롭게 활용할 수 있는 개념으로 클라우드 서비스가 점점 발전
      • 그 이후엔 개발자가 직접 설정해야 했던 작업 등을 클라우드에서 쉽게 할 수 있는 방향으로 발전 (Managed 서비스)
        • Apache Spark를 쉽게 운영할 수 있도록 AWS EMR, GCP Dataproc 등을 활용 ⇒ 직접 하둡을 설치할 필요 없이 이미 설치되어 있음
        • Jupyter Notebook 환경도 미리 설치해두고 사용할 수 있음(Tensorflow, cuda 등)
  • 다양한 Service

  • 다양한 Cloud 회사

  • Cloud 서비스의 다양한 제품 - Computing Service(Server)

    • 연산을 수행하는(Computing) 서비스
    • 가상 컴퓨터, 서버
    • CPU, Memory, GPU 등을 선택할 수 있음
    • 가장 많이 사용할 제품
    • 인스턴스 생성 후, 인스턴스에 들어가서 사용 가능
    • 회사별로 월에 무료 사용량이 존재(성능은 약 cpu 1 core, memory 2G)
  • Cloud 서비스의 다양한 제품 - Serverless Computing

    • 앞에 나온 Computing Service와 유사하지만, 서버 관리를 클라우드쪽에서 진행
    • 코드를 클라우드에 제출하면, 그 코드를 가지고 서버를 실행해주는 형태
    • 요청 부하에 따라 자동으로 확장(Auto Scaling)
    • Micro Service로 많이 활용
  • Cloud 서비스의 다양한 제품 - Stateless Container

    • Docker를 사용한 Container 기반으로 서버를 실행하는 구조
    • Docker Image를 업로드하면 해당 이미지 기반으로 서버를 실행해주는 형태
    • 요청 부하에 따라 자동으로 확장(Auto Scaling)
  • Cloud 서비스의 다양한 제품 - Object Storage

    • 다양한 Object를 저장할 수 있는 저장소
    • 다양한 형태의 데이터를 저장할 수 있으며, API를 사용해 데이터에 접근할 수 있음
    • 점점 데이터 저장 비용이 저렴해지고 있음
    • 머신러닝 모델 pkl 파일, csv 파일, 실험 log 등을 Object Storage에 저장할 수 있음
  • Cloud 서비스의 다양한 제품 - Database(RDB)

    • Database가 필요한 경우 클라우드에서 제공하는 Database를 활용할 수 있음
    • 웹, 앱서비스와 데이터베이스가 연결되어 있는 경우가 많으며, 대표적으로 MySQL, PosgreSQL 등을 사용할 수 있음
    • 사용자 로그 데이터를 Database에 저장할 수도 있고, Object Storage에 저장할 수도 있음
      • 저장된 데이터를 어떻게 사용하냐에 따라 어디에 저장할지를 결정
  • Cloud 서비스의 다양한 제품 - Data Warehouse

    • Database에 저장된 데이터는 데이터 분석을 메인으로 하는 저장소가 아닌 서비스에서 활용할 Database
    • Database에 있는 데이터, Object Storage에 있는 데이터 등을 모두 모아서 Data Warehouse에 저장
    • 데이터 분석에 특화된 Database
      • query문도 더 빠름
  • Cloud 서비스의 다양한 제품 - AI Platform

    • AI Research, AI Develop 과정을 더 편리하게 해주는 제품
    • MLOps 관련 서비스 제공
    • Google Cloud Platfor : TPU
  • 다양한 Cloud 회사

    • 클라우드마다 제품의 이름은 다르지만, 비슷한 제품들이 있음

    • 하나의 제품 이름을 알면 다른 클라우드에서 검색할 수 있음

    • 예) Compute Engine Like AWS

2. Google Cloud Platform

  • GCP를 선택한 이유
    • 첫 가입시 $300 크레딧 제공
    • 학습할 때 클라우드 비용을 내면서 쓰는 부담을 줄이기 위해
    • 하나의 클라우드의 서비스에 익숙해지면, 다른 클라우드도 수월
    • 클라우드 서비스란 무엇이고, 어떤 방식으로 쓸 수 있구나!에 집중하기
    • https://console.cloud.google.com/

Special Mission

  1. Computer Engine 인스턴스 띄우고 삭제해보기 ✔️

  2. Computer Engine 인스턴스에서 Shell Command 연습하기 ✔️

  3. Cloud Storage의 Bucket 생성하고 파일 업로드, 삭제해보기 ✔️

  4. Python Cloud Storage API를 사용해 Cloud Storage에 업로드한 파일을 파이썬에서 사용하는 코드 작성 (참고 문서 : https://googleapis.dev/python/storage/latest/index.html) ✔️

    • 참고

      • https://cloud.google.com/storage/docs/downloading-objects?hl=ko#storage-download-object-portion-python

          from google.cloud import storage
        
          def download_byte_range(
              bucket_name, source_blob_name, start_byte, end_byte, destination_file_name
          ):
              """Downloads a blob from the bucket."""
              # The ID of your GCS bucket
              # bucket_name = "your-bucket-name"
        
              # The ID of your GCS object
              # source_blob_name = "storage-object-name"
        
              # The starting byte at which to begin the download
              # start_byte = 0
        
              # The ending byte at which to end the download
              # end_byte = 20
        
              # The path to which the file should be downloaded
              # destination_file_name = "local/path/to/file"
        
              storage_client = storage.Client()
        
              bucket = storage_client.bucket(bucket_name)
        
              # Construct a client side representation of a blob.
              # Note `Bucket.blob` differs from `Bucket.get_blob` as it doesn't retrieve
              # any content from Google Cloud Storage. As we don't need additional data,
              # using `Bucket.blob` is preferred here.
              blob = bucket.blob(source_blob_name)
              # blob.download_to_filename(destination_file_name, start=start_byte, end=end_byte)
              blob.download_to_filename(destination_file_name)
        
              print(
                  "Downloaded bytes {} to {} of object {} from bucket {} to local file {}.".format(
                      start_byte, end_byte, source_blob_name, bucket_name, destination_file_name
                  )
              )
        
          if __name__ == "__main__":
              download_byte_range("test1-gcp-jjn", "tweet_search_output-230102.csv", 0, 1000, "tweet_search_output-230102.csv")
        • 참고 링크에서 보여주는 예시에는 blob.download_to_filename 메서드의 인자로 start와 end를 넣어주는데 위의 주석처럼 다운로드를 할 시작 byte와 끝 byte를 의미한다.
        • start, end 인자를 입력하지 않으면 그냥 파일을 온전히 받을 수 있다.

출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)

Comments