jh.nrtv

[Deploy] AWS 본문

Network, server

[Deploy] AWS

wlgus3 2023. 2. 2. 13:05

✅ AWS

아마존 웹 서비스(AWS)란 아마존이 자사의 노하우를 살려 제공하고 있는 ‘클라우드 컴퓨팅 서비스’를 의미합니다. AWS에는 컴퓨팅, 스토리지, 데이터베이스, 분석, 네트워킹, 모바일, 개발자 도구, 관리 도구, IoT, 보안, 엔터프라이즈 애플리케이션 등 다양한 서비스가 준비되어 있으며, AWS의 다양한 서비스를 조합하여 모든 애플리케이션과 인프라를 구축할 수 있기도 합니다.

 

AWS의 특징

  • 서비스를 조합하기 쉽습니다. AWS에서만 제공하는 서비스로도 필요한 기능을 대부분 구축 가능하며, AWS와 AWS 외부 시스템을 조합하여 구축하기 쉽습니다.
  • 앞으로 사용할 양을 미리 생각하지 않고 현재 필요한 만큼만 사용하고 부족해지면 그때마다 추가할 수 있으며, 같은 양을 계속 빌려야 하는 정액제와 차별점이 있습니다.
  • 네트워크 및 서버가 매우 큰 규모가 아니라면 네트워크나 서버 전문가가 아니더라도 사용 가능합니다.
  • 전세계 21개 리전 66개의 시설(가용 영역)에서 데이터 센터 운영하고 있어, 글로벌로 확장 시 확장하고자 하는 지역과 지리적으로 가까운 리전에서 서비스 시작 가능합니다.
  • 한국어 지원 및 원화 결제 가능하며, 보안 관련하여 법령, 규정, 프라이버시 기준을 준수하고 있는 안전한 서비스입니다.

이런 AWS는 165개 이상의 서비스를 제공하고 있으며, 목적에 따라 다양한 서비스를 사용할 수 있습니다. 그 중 유명한 서비스로는 EC2, S3, RDS 등이 있습니다. 해당 서비스들에 대하여 개념을 익혀두면 향후 프로젝트에서 여러분들이 만든 앱을 배포할 때 큰 어려움이 없을 것입니다.

 


✅ Cloud Computing

  • 클라우드 컴퓨팅 이전의 서버? 전산실 등에 컴퓨터 배치하고 인터넷을 연결해서 서비스를 제공했음
  • 만약 요청 수용능력이 한계에 다다르면? 컴퓨터 추가설치 후 여러 대가 요청 나눠서 해결 or 한 대의 컴퓨터 성능 높여서 해결
  • 이러한 방식의 문제점? 주기적인 관리 필요, 공간의 한계 
  • -> 거대기업의 데이터 센터 등장 -> 유휴 자원 대여 서비스 등장 (클라우드 컴퓨팅의 시작)
  • 데이터센터에서 서버의 자원과 공간, 네트워크 환경을 제공 -> '온프레미스'라고 부름
  • 클라우드 컴퓨팅 -> 데이터 센터와 비슷한 역할 하지만 물리적 컴퓨터X 가상의 컴퓨터를 대여한다는 차이점 ->가상화 (Virtualization)기술의 발전으로부터 비롯됨 
  • 다음과 같은 장점 존재
    • 필요할 때마다 컴퓨팅 능력 유연하게 조절 
    • 고정적인 비용 들어가는 온프레미스와 달리 사용한 만큼만 지불
    • 컴퓨터의 스냅샷('이미지' 라고 부름) 을 이용해 다른 컴퓨터로 즉시 이주(migration) 가능
  • 클라우드의 단점
    • 운영환경 자체가 클라우드 제공자에 종속됨 -> 서버장애시 영향받음
    • 백엔드 구성 기술이 해당 회사 기술에만 종속됨
  • 클라우드는 모든 것을 서비스 하는 것을 목표로 함. 대표적인 클라우드 형태는 다음과 같음
    • SaaS -> Software as a Service <-당장 사용가능 소프트웨어
    • PaaS -> Platform as a Service  <- DB, 개발플랫폼까지 제공
    • IaaS -> Infrastructure as a Service  <- 대부분의 가상 컴퓨터 제공은 IaaS에 해당


Amazon EC2 (Elastic Compute Cloud)

  • EC2란 아마존 웹서비스에서 제공하는 클라우드 컴퓨팅 서비스
  • 클라우드 컴퓨팅 서비스? 인터넷(클라우드)를 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 것
  • 정리하면 아마존에서 가상의 컴퓨터 한 대를 빌리는 것과 같다.
  • EC2의 Elastic = 탄력있는, 유연한 -> 후불제 pc방과 같이 사용한 만큼 비용을 지불하기에 탄력적 , 성능과 용량도 탄력적
  • 장점 
    • 구성하는 시간이 짧다
    • AMI ( 제공하는 템플릿 ) 를 통해 필요한 용도에 따라 다양한 운영체제 선택 가능 , CPU나 RAM도 손쉽게 구성 가능
  • EC2는 컴퓨터로 할 수 있는 모든 일을 할 수 있다.
  • 컴퓨터를 조작하기 위해 네트워크(인터넷)을 통해서만 컴퓨터를 제어해야 한다는 차이만 존재함
  • 아마존 EC2를 통해 할 수있는 가장 기본적인 일은 -> 웹서버 설치하고 웹 서버를 통해서 사용자가 요청하는 서비스 제공
  • 아마존에서 빌리는 컴퓨터를 인스턴스( Instance)라고 하며, 인스턴스는 컴퓨터 1대를 의미하는 단위
  • AMI (Amazon Machine Image) ->소프트웨어 구성이 기재된 템플릿 ->단순히 운영체제(윈도우, 우분투, 리눅스)만 깔린 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설치된 템플릿이 제공되는 경우도 있음(우분투 +node.js)

  • Instance는 선택한 AMI를 토대로 구성됨
  • 다양한 AMI 세팅이 존재하기에 편리하게 고르거나, 직접 구성할수도 있음

AWS EC2 인스턴스 생성한다 = AMI를 토대로 OS, CPU, RAM 혹은 런타임이 구성된 컴퓨터를 빌린다.

 

 


RDS (Relational Database Service )

  • RDS ? AWS에서 제공하는 관계형 데이터베이스 서비스
  • RDS를 왜 사용할까? EC2에 MySQL과 같은 관계형 데이터베이스 엔진 설치하면 되는데..
  • EC2 인스턴스에 데이터베이스를 설치하여 데이터를 관리하는 것은 개인 소유 차량을 이용하는 것과 비슷-> 유지보수 등 시간과 수고가 큼
  • 자동관리가 적고, 엔진 설치와 버전관리, 데이터백업 등을 직점 수행, 가용성과 내구성 확보되지않고, 유실될 가능성도 존재, 후에 데이터베이스 규모 확장도 어려움

  • 이에반헤 RDS는 렌터카와 비슷 -> 위의 여섯가지 모두 AWS가 유지보수 자동관리 해줌, 사용자는 초기 설정을 제외하고 데이터베이스에 저장된 데이터를 관리하는 일 맊에 없기에 편의성 큼
  • 기타 RDS 의 장점
    • 다양한 데이터베이스 엔진 선택지 제공

 

 

 


S3 (Simple Storage Service)

    • 클라우드 스토리지? 인터넷 공간에 데이터를 저장하는 저장소 ->컴퓨터 부품으로 보면 하드디스크 ->어디서나 접근 가능하기에 접근성 뛰어남

  • S3AWS에서 제공하는 클라우드 스토리지 서비스
  • S3 사용시 이점
    • 높은 확장성 ->추가요금 내고 무한히 확장 가능
    • 강력한 내구성 ->데이터소실 가능성이 벼락 맞을 확률보다 700배 작다
    • 높은 가용성 ->1년 중 8.76시간 동안만 스토리지 이용시 장애 발생
    • 다양한 스토리지 클래스 제공 ->저장소 목적에 따라 효율적으로 선택할 수 있는 스토리지 클래스가 달라짐. 대표적으로 (Standard클래스와  , Glacier 클래스) 
    • Standard -> 빠르게 데이터접근, 보관비용 비쌈 / Glacier -> 데이터 접근 느림, 보관비용 저렴
    • 정적 웹사이트 호스팅 가능
      •  
      • 정적이란? 서버의 개입 없이 생성된 파일
      • 동적이란? 클라이언트가 서버에 요청 보내면 서버가 요청에 맞게 그 자리에서 생성한 파일
      • 호스팅이란? 서버의 한 공간을 임대해주는 서비스 의미
      • S3에서는 버킷이 사용자들이 정적 웹사이트를 배포할 수 있는 공간 제공-> 버킷이라는 저장공간에 정적 파일 업로드 후 버킷을 정적 웹 사이트 호스팅 용도로 구성하면 정적 웹 사이트를 배포 가능 
        • 버킷이란? S3에 저장되는 파일들이 담기는 바구니 ->파일 저장하는 최상위 디렉터리 ->S3에서 저장되는 모든 파일은 버킷 안에 저장되어야 하고, 무한한 양의 파일 저장 가능, 버킷 이름 리전에서 고유해야함
          • 버킷에 담기는 파일을 '객체'라고 부름 -> 키,값 페어 형식으로 데이터를 저장하기 때문
          • 객체는 파일메타데이터로 구성
            • 파일-> 실제 데이터 저장, S3에서는 최대 5TB 가능, 파일의 키는 객체를 고유하게 만드는 식별자
            • 메타데이터 -> 객체의 생성일, 크기, 유형 등의 정보가 담긴 데이터 

 

 


✅ 배포 전략

  • 배포 ? 개발한 서비스를 로컬 영역을 넘어 외부의 사용자가 사용할 수 있도록 하는것
  • Client 배포 AWS의 S3 서비스를 통해 사용자들에게 Client 코드 제공 가능

  • 로컬 환경에서는 자체 개발 서버 (예, create-react-app)를 이용해서 클라이언트 앱을 실행시키는 것이 보통입니다. 그럼, 클라이언트를 위해서 EC2 인스턴스사용해야 할까? 
  • ->그렇지 않다. 클라이언트 앱을 정적 파일로 빌드해서 제공, 따라서 S3이용해서 클라이언트에 배포 
  • 이 때 필요한 것이 빌드 
    • 빌드 ?  불필요한 데이터 없애고, 통합/ 압축해서 배포하기 최적화된 상태 만드는 것 -> 빌드 전보다 데이터 용량이 줄어들고 로딩 속도 빨라진다는 장점
    • 하지만 일반적인 의미의 빌드는, 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미. 웹 앱에서와같이 HTML, CSS, JS의 형태로 배포하는 경우는 조금 다르다. -> 웹 앱은 배포 가능한 정적 파일(static files)의 형태로 만들어 줘야 함.
  • S3로 사용자들에게 Client Application을 제공하고 있는데, 사용자가 지구 반대편에 있다면 어떻게 빠르게 서비스를 제공할 수 있을까? -> AWS에서 제공하는 CDN 서비스인 CloudFront를 통해서 각지의 데이터 센터에 데이터를 분산시켜서 저장해 뒀다가 가까운 지역에서 데이터를 주는 방식으로 사용자에게 더 빠르게 서비스를 제공
  • Server Application 배포는? AWS EC2서비스 통해 서버 구성하고 서비스 제공 
  • AWS에서는 Database 특화 서비스인 RDS 서비스를 제공함. AWS가 유지 보수 작업을 담당하는 RDS를 이용하여 즉시 데이터베이스를 사용할 수 있다. RDS 서비스를 이용하여 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포가능

  • AWS에서 제공하는 Route 53 서비스 이요하면 직관적인 도메인 주소를 통해서 서비스 접근 가능

 

 

 


✅ Deploy

  • 기본적으로 4단계 과정을 거쳐서 개발한 서비스 배포 

  • Development 단계는 각자의 컴퓨터에서 코드를 작성하고 테스트하는 과정. 개발 단계이기 때문에 실제 데이터를 이용하지 않고 더미 데이터를 이용해서 테스트합니다.
  • Integration 단계는 각자의 컴퓨터에서 작성한 코드를 합치는 과정입니다. 내가 작성한 코드가 다른 코드를 침범해서 오류를 일으키지 않는지, 코드 간에 conflict가 있지는 않은지 확인하는 과정을 거칩니다.
  • Development 환경과 Production 환경은 서로 다를 수가 있으므로 배포에서는, 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요.
  • 작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면, 설정을 환경 변수(envvars나 env라고도 불림)에 저장해야 한다. 환경 변수는 코드 변경 없이 배포 때마다 쉽게 변경할 수 있음. 설정 파일과 달리, 잘못해서 코드 저장소에 올라갈 가능성도 낮다. 애플리케이션의 모든 설정이 정상적으로 코드 바깥으로 분리되어 있는지 확인할 수 있는 간단한 방법은 어떠한 인증정보도 유출시키지 않고 코드가 지금 당장 오픈 소스가 될 수 있는지 확인하는 것. 슬라이드에 나온 내용은 이러한 환경 설정을 코드로부터 분리하는 방법론을 이야기하고 있다. 코드 상의 모든 곳에 절대 경로가 아닌 상대 경로를 사용해야 하며, `.env` 등을 이용해 환경 변수를 설정한다. 그 외에도 docker와 같은 가상화 도구는 환경 자체를 메타데이터로 담아서 아예 모든 개발 환경을 통일시킨다.

배포를 위한 다양한 플랫폼

 


 

 

 

 

'Network, server' 카테고리의 다른 글

[Deploy] AWS 실습  (0) 2023.02.02
Fetch 사용법(get, post, put, delete) , 커스텀 훅 useFetch  (0) 2023.01.26