[Cloud] Cloud 입문


Cloud

  • 현업에서는 클라우드 서비스를 많이 쓴다. 클라우드 서비스를 사용하는 이유로는 아래와 같다.
    • 자신의 컴퓨터(localhost)로 서비스를 만들 수 있다.
    • IP 로 누구나 접근할 수 있도록 수정하고, IP 를 공유할 수 있다. 그러나 이 경우 자신의 컴퓨터가 종료되면 웹, 앱 서비스도 종료된다.
  • 전통적 접근 방법은 물리적 공간, 확장성을 고려한 서버실(IDC, Internet Data Center)을 만들고 운영한다. 따라서 서버 컴퓨터를 넣을 공간과 추후 서버를 추가할 때 즉각적으로 확장할 수 있는 장소가 중요하다.
  • 또한 전기, 에어컨 등 서버가 급작스럽게 종료되지 않도록 장애 대응 준비가 필요하다. 그러나 물리적인 장소에서는 컴퓨터를 늘리고 줄이기가 어렵다.
  • 이를 자유롭게 활용할 수 있는 개념으로 클라우드 서비스가 점점 발전했다.
  • 그 이후에는 개발자가 직접 설정해야 했던 작업 등을 클라우드에서 쉽게 할 수 있는 방향으로 발전하고 있다. (Managed 서비스)
    • 예를 들어, Apache Spark 를 쉽게 운영할 수 있도록 AWS EMR, GCP Dataproc 등을 활용한다. 직접 하둡을 설치할 필요할 필요없이 이미 설치되어 있다.
    • Docker Image 기반으로 서버를 띄운다. 자주 사용하는 주피터 랩 환경 등을 필요할 때마다 띄울 수 있다.
  • 이러한 클라우드 서비스의 반대 표현은 온프레미스라고 한다.
  • 클라우드 서비스에는 다양한 제품이 있다. 즉 AWS, GCP, Azure, NCP 와 같은 클라우드 서비스 벤더가 굉장히 다양하게 등장했다.
    • 대부분 회사에서는 AWS 를 많이 사용한다. 서비스 할 때는 대부분 AWS 를 사용한다. 온프레미스 즉 서버실이 있으면 쓰지 않는다.
    • 구글의 GCP 는 TPU 를 사용하고 싶을 때 사용할 수 있다.
  • 모든 클라우드 서비스가 컨셉 자체는 비슷하다. 따라서 하나의 클라우드 서비스를 먼저 충분히 익히고 다른 걸 사용하면 크게 어렵지 않다.
  • 플랫폼(클라우드 서비스 벤더) 별 유사한 제품이지만 명칭과 세부 옵션이 다른 경우들이 존재한다. 예를 들어 Storage(저장소) 의 경우 AWS 는 S3(비정형 데이터를 저장하는 object storage), Azure 는 Blob Storage 이다.
  • 이런 공통적인 기술 개념을 이해하면 좋다. 예를 들어 Storage 는 무엇이고 왜 쓰는가? 를 이해하는 것이다.
  • 클라우드 서비스의 공통 기술 개념은 대표적으로 사용하는 클라우드 제품으로 크게 7 개다.
    • Computing Service(Server)
      • 가장 많이 사용하는 제품이다. 서버를 띄운다 하면 기본적으로 Computing Service 를 쓰는 것이다.
      • 즉 연산을 수행하는 서비스다.
      • 가상컴퓨터, 서버로서 CPU 나 메모리, GPU 등을 선택할 수 있다. 예를 들어 CPU 4core, 메모리 16G 처럼 선택할 수 있다. 당연하게도 좋은 옵션을 선택하면 비용이 비싸진다.
      • 인스턴스(VM 인스턴스)를 생성한 후, 인스턴스에 들어가서 사용할 수 있다. 대부분 OS 로 리눅스를 사용하고, 터미널에서 shell command 를 사용할 수 있다.
      • 클라우드마다 무료 사용량이 존재한다. 이 때 성능은 약 cpu 1 core, memory 는 2G 정도 된다.
      • 대표적으로 AWS 의 EC2, GCP 의 Compute Engine 등이 있다.
    • Serverless Computing
      • Computing Service 와 유사하지만 서버 관리를 클라우드 쪽에서 진행한다.
      • Computing Service 에서는 서버관리를 사용자가 해야 한다. 즉 서버가 죽으면 사용자가 디버깅해야 한다. 그러나 Serverless 는 서버관리를 클라우드 쪽에서 진행해준다.
      • 코드를 클라우드에 제출하면, 그 코드를 가지고 서버를 실행해주는 형태다.
      • FastAPI 로 API endpoint 를 만들어 이를 serverless computing service 에 제공해주고, 해당 endpoint URL 로 접근하면 API 가 호출된다.
      • 요청 부하에 따라 자동으로 확장(Auto Scaling)된다.
      • AWS EC2 의 경우, 요청이 굉장히 많으면 서버 성능을 바꾸거나 앞에 로드 밸런서를 달아야 한다. 서버리스 컴퓨팅은 이를 알아서 확장해준다.
      • Micro Service 로 많이 활용된다.
      • 대표적으로 AWS 의 Lambda, GCP 의 Cloud Function 등이 있다.
    • Stateless Container
      • Stateless 는 컨테이너의 외부(DB, Cloud Storage, object storage 등)에 데이터를 저장하는 것을 뜻한다. 컨테이너는 이 데이터를 가지고 동작하게 된다.
      • Docker 에서 Volume Mount 를 하지 않으면, Docker 컨테이너를 중지하거나 삭제할 때 컨테이너 내에서 생성된 모든 데이터나 상태가 삭제되는데, 이게 Stateless 다.
      • Docker 를 사용해서 컨테이너 기반으로 서버를 실행하는 구조를 가진다. 즉 Docker 이미지를 업로드하고 Registry(AWS ECR 등) 와 같은 곳에 푸시해두면, 그 이미지를 기반으로 서버를 실행해주는 형태다.
      • 마찬가지로 요청 부하에 따라 자동으로 확장(Auto Scaling)된다.
      • 대표적으로 AWS 의 ECS, GCP 의 Cloud Run 등이 있다.
    • Object Storage
      • 다양한 형태의 데이터를 저장할 수 있으며, API 를 사용해 데이터에 접근할 수 있다.
      • object storage 를 많이 사용하기 때문에, 점점 데이터 저장 비용이 저렴해지고 있다.
      • 다양한 Object 를 저장할 수 있는 저장소다. 즉 머신러닝 모델 pth/pkl 파일, csv, 이미지, 비디오, 텍스트, 실험 log 등을 object storage 에 저장할 수 있다.
      • 대표적으로 AWS 의 S3, GCP 의 Cloud Storage 가 있다.
    • Database(DB)
      • DB 가 필요한 경우 클라우드에서 제공하는 DB 를 활용할 수 있다.
      • 대표적으로 Mysql, postgreSQL 을 많이 생각하는데, 웹/앱 서비스에는 DB 가 항상 붙어야 한다.
      • mysql 등은 로컬에서 띄울 수 있고 서버에서 띄울 수도 있는데, 그러다보면 관리 포인트가 어려울 수 있다. 이에 따라 클라우드에서 제공하는 DB 를 사용한다.
      • 사용자 로그 데이터를 DB 에 저장할 수도 있고, Object storage 에 저장할 수도 있다.
      • 저장된 데이터를 어떻게 사용하냐에 따라 어디에 저장할지를 결정한다.
      • 대표적으로 AWS 의 RDS(Aurora), GCP 의 Cloud SQL 등이 있다.
    • Data Warehouse
      • DB 와 굉장히 유사하지만, DB 는 서비스에서 사용하기 위한 데이터를 저장하는 것이고 분석 목적의 DB 가 아니다. 따라서 분석에 최적화된 쿼리를 실행하기 어렵거나 굉장히 느리다.
      • Data Warehouse 는 데이터 분석에 특화된 Database 라고 할 수 있다.
      • Database 에 있는 데이터를 Data Warehouse 로 옮기는 작업을 ETL 파이프라인으로 만들기도 하고, Object Storage 에 있는 데이터 등을 모두 Data Warehouse 에 저장할 수도 있다.
      • 대표적으로 AWS 의 RedShift, GCP 의 BigQuery 등이 있다.
    • AI Platform
      • AI Research, AI Develop 과정을 더욱 편리하게 해주는 제품이다.
      • 매년 발전이 엄청나게 되고 있다. MLOps 관련 서비스도 제공해주고, 최근에는 feature store(FS) 도 제공하고 있다.
      • GCP 에서는 TPU 를 사용할 수 있다.
      • 대표적으로 AWS 의 SageMaker, GCP 의 Vertex AI 등이 있다.
  • 아래는 클라우드 벤더 간 유사한 옵션을 비교한 표다. Compute Engine Like AWS 이런 식으로 검색하면 나온다.

    Untitled

Cloud Network

  • 클라우드를 잘 이해하기 위해 네트워크 지식이 있으면 좋다. CS category 의 네트워크에서 자세한 내용을 다루지만, 여기서는 Cloud 에 관련한 Network 개념으로 아래의 내용을 다뤄보자.
    • VPC 는 네트워크를 퍼블릭과 프라이빗 영역으로 논리적으로 분리하는 기능이다. Virtual Private Cloud 의 약자이며 네트워크를 논리적으로 분리할 수 있게 한다. 이를 통해 네트워크가 확장성을 가지고 해당 네트워크 영역에 대한 통제권을 가질 수 있다.
    • 인스턴스와 서브넷을 위한 보안 그룹을 설정하는 기능은 보안 그룹(Security groups)에서 한다.
    • 서브넷은 네트워크를 더 작은 단위로 분할하는 기능이다. IP 를 Block 으로 나누어 구분할 때 해당 IP Block 의 모음을 지칭하는 용어이다. 서브넷을 사용하여 대규모 네트워크를 관리하고 효율적으로 네트워크 리소스를 할당할 수 있다.
    • 라우팅 테이블은 트래픽의 전송 방향을 결정하는 라우트 관련 규칙을 담은 테이블이다.
    • NAT 게이트웨이는 내부 네트워크에서 내부 IP 주소를 외부 IP 주소로 변환하는 작업을 의미한다.
    • NAPT(Network Address Port Translation) 은 복수의 사설 주소를 하나의 글로벌 주소에 대응하는 기능이다.
    • CIDR(Classless inter-Domain Routing)은 클래스가 없는 도메인 간 라우팅 기법에 대한 내용이다.
    • ICMP(Internet Control Message Protocol)은 IP 통신이 정상적으로 이루어지는지 확인하기 위한 프로토콜이다.
  • 네트워크에 대해 잘 알아두면 특정 클라우드 벤더(AWS, GCP, Azure)에 종속되지 않고, 인프라 환경을 이해할 수 있다.
    • 각 벤더에 따라 클라우드 방화벽을 다르게 지칭하고 있다. GCP 는 NetworkACL, AWS 는 Security Group 이다.
  • 또한 외부 공격 가능성을 줄여 보다 안전한 클라우드 인프라를 구성할 수 있다. 예를 들어 포트를 열어두고 방화벽을 설정하지 않으면 해킹 당해서 비트코인을 채굴 당한 사례가 있었다.

VPC(Virtual Private Cloud)

  • VPC 를 설명하기 위해 아파트 단지에 비유할 수 있다. 외부에서 들어갈 수 없는 아파트는 출입구에서 경비원의 인증을 받아야 들어갈 수 있다.

    Untitled출처: Naver Boostcamp

  • 위 그림과 같이 표지판이 있어서 어디로 갈 지를 알 수 있다.
  • 아파트 출입은 통제하지만, 아파트 내 편의점의 경우 통제를 하지 않을 수 있다. 이처럼 목적에 따라서 통제 여부가 달라질 수 있다. 그러나 그 전체를 아파트 단지라고 말할 수 있다.
  • VPC 는 이처럼 보안상의 이유로 네트워크를 분리하는 것이다. 실제로 같은 네트워크 안에 있지만 논리적으로 분리한다. 이를 통해 클라우드 컴퓨팅 서비스, 즉 서버에서 연결 복잡도를 줄여준다.

    Untitled

  • 위 그림과 같이 여러 서버를 하나의 네트워크에 있도록 묶는 개념이다.

서브넷(subnet)

  • 서브넷은 VPC 안에서 여러 망을 쪼개는 기술이다. Public Subnet 은 외부에서 접근 가능한 망이고, Private Subnet 은 외부에서 접근이 불가능한 망이다.
  • 같은 VPC 내에 있으면 Private IP 로 접근 가능하다. 예를 들어 회사에서 회사 네트워크만 타고 들어갈 수 있는 Admin 같은 것이 있다. 이런 경우의 Admin 은 private subnet 에 들어간다.
    • 회사에서 API 서버 만들어 외부에서 request 를 보내도록 할 수 있지만, 이 요청에서 인증을 받아 패스하더라도 지속적이고 많은 요청은 디도스 공격이 될 수 있다.
    • 따라서 애초에 같은 VPC 네트워크 안에서 서로 통신할 수 있게 해야겠다는 컨셉으로 VPC 를 만든 것이다.
  • 때로는 앞서 아파트 단지 내 편의점과 같이 외부에서 접근이 가능한 망이 필요하다. 따라서 Public Subnet 이 필요하다.
  • 아파트 단지에서 거주 구역은 주민만 들어갈 수 있고(private subnet), 편의점 등은 누구나 접근할 수 있다(public subnet)는 예시로 이해해 볼 수 있다.

라우팅(Routing)

  • 라우팅은 경로 지정, 즉 길을 안내해주는 개념이다. 위 예시에서 아파트 단지 내 표지판과 같은 역할을 한다.

    Untitled

  • 경비원은 방화벽 역할을 한다. 방화벽 등은 클라우드 서비스에서 설정 몇 개만 누르면 된다.
  • 그 전에 컨셉인 VPC 에 대한 이해를 하면 좋다. 해당 블로그 글을 참고해보자.
맨 위로 이동 ↑

댓글 남기기