72DAYS) [Cloud] 운영 환경 구성 - AWS Web Service, 서버 배포

nacSeo (낙서)·2023년 1월 31일
0

◉ 학습목표

1. Cloud와 Deployment의 의미를 알고, 코드를 배포할 수 있다.
  1. Amazon Web Service

⦿ 학습내용

☞ Cloud Computing

✔︎ 기존 서버 방식

  • 서버실과 같은 곳에 컴퓨터를 배치
  • 수용 능력 한계 도달 시
    • 같은 공간에 더 많은 컴퓨터 추가
    • 컴퓨터 성능 업그레이드
  • 문제점 🤯
    • 주기적 유지 관리 필요
    • 공간의 한계
  • 문제점 대처
    • 데이터 센터의 등장
    • 유후자원 대여

✔︎ 클라우드

  • 온프레미스 방식 : 서버의 자원과 공간 및 네트워크 환경 제공
    ex) 데이터 센터 등 (물리적)
  • 가상화(Virtualization) 클라우드 서비스
    • 필요할 때마다 컴퓨팅 능력을 유연하게 조절
    • 사용한 만큼의 요금 지불
    • 다른 컴퓨터로 즉시 이주(migration) 가능
  • 클라우드 단점
    • 운영 환경 자체가 클라우드 제공자(vendor)에게 종속
    • 클라우드 서비스가 서비스에 영향을 미침
  • 클라우드 서비스 형태
    • SaaS (Software as a Service)
    • PaaS (Platform as a Service)
    • IaaS (Infrastructure as a Service)

☞ Deploy

✔︎ Deployment (배포) : 개발한 서비스를 사용자가 이용가능하게 하는 과정
✔︎ 배포 4단계 과정

  • Development (개발)
    • Local 컴퓨터 환경에서 개발 및 테스트
    • Sample Data를 이용
    • 변경사항이 있어도 문제가 되지 않음
    • 모든 구성원이 각자의 환경에서 진행
  • Integration (통합)
    • 각자의 환경에서 개발된 부분을 취함
    • 코드간 Conflict가 없는지 확인하는 단계
    • 작성한 코드가 다른 코드에 문제를 발생시키지 않는지 확인
  • Staging (단계)
    • Production단계와 가장 유사한 환경에서 테스트
    • 복제된 실제 데이터를 이용해서 테스트
    • 모든 관계자들에게 검증하는 단계
  • Production (생산)
    • 개발환경과는 구분된 환경
    • 실제 데이터를 이용
    • 실제로 서비스가 제공되는 단계

✔︎ Development환경과 Production환경이 서로 다를 수 있음
✔︎ 따라서, 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요
✔︎ 작성한 코드가 다른 환경에서 정상 작동할 수 있는 방법 ?

  • 절대경로 대신 상대경로 이용
  • 환경에 따라 포트를 분기할 수 있도록 환경 변수 설정
  • Docker와 같은 개발 환경 자체를 통일시키는 솔루션 사용

✔︎ DeploymentPlatforms

☞ EC2

✔︎ Amazon EC2 (Elastic Compute Cloud)의 약자
✔︎ AWS에서 제공하는 클라우드 컴퓨팅 서비스
✔︎ AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것
✔︎ 비용, 성능, 용량면에서 탄력적인 클라우드 컴퓨터를 제공하는 서비스
ex) 사용한 만큼 비용 지불, 필요에 따라 성능과 용량 자유롭게 조절 등
✔︎ EC2 장점

  • 구성하는 데에 필요한 시간이 짧음
  • 다양한 운영체제에 대한 선택이 가능 (CPU, RAM, 용량까지도 손쉽게 구성 가능)

✔︎ 인스턴스 (Instance) : AWS에서 빌리는 컴퓨터
✔︎ 인스턴스 생성 : AWS에서 컴퓨터를 빌리는 것
✔︎ AMI (Amazon Machine Image)

  • 소프트웨어 구성이 기재된 템플릿
  • 이미지 종류로 단순히 운영체제만 깔려있는 템플릿 선택 가능
    ex) 윈도우, 우분투, 리눅스
  • 아예 특정 런타임이 설치되어 있는 템플릿이 제공되는 경우도 있음
    ex) 우분투 + node.js, 윈도우 + JVM

✔︎ EC2 인스턴스 생성의 의미

  • AMI를 토대로 setting(운영체제, CPU, RAM 혹은 런타임 등이 구성)된 PC를 빌리는 것

☞ RDS (Relational Database Service)

✔︎ AWS에서 제공하는 관계형 데이터베이스 서비스
✔︎ 장점1) EC2 인스턴스에 데이터베이스 설치 🆚 RDS 사용

  • EC2 인스턴스에 데이터베이스 설치

    - 데이터베이스와 관련해서 자동으로 관리를 담당하는 부분이 매우 적음
    - 사용자가 일일이 시간을 투자해 데이터베이스 엔진의 설치와 버전 관리, 데이터 백업을 해야함
    - 가용성, 내구성 확보 ❌
    - 데이터베이스에 저장된 데이터가 유실되거나 정상적으로 사용하지 못할 확률 ↑
    - 후에 필요에 따라 데이터베이스의 규모를 확장하기 어려움
  • RDS 사용

    - 데이터베이스 유지 보수와 관련된 일들을 RDS에서 전적으로 자동 관리
    - 사용자가 초기 설정을 제외하고 데이터를 관리할 일밖에 없기에 편의성 ↑

✔︎ 장점2) 다양한 데이터베이스 엔진 선택지 제공

  • 필요와 목적에 맞게 데이터베이스 엔진을 선택하여 효율성 ↑
    ex) ORACLE, AmazonAurora, Microsoft SQL Server, MySQL, MariaDB, PostgreSQL 등

☞ S3

✔︎ 클라우드 스토리지 : 인터넷 공간에 데이터를 저장하는 저장소
ex) 구글의 Google Drive, 네이버의 MYBOX, 마이클소프트의 Onedrive 등
✔︎ 클라우드 스토리지 서비스 장점 : 뛰어난 접근성
✔︎ S3 (Simple Storage Service) : AWS에서 제공하는 클라우드 스토리지 서비스
✔︎ S3 장점

  • 뛰어난 접근성
  • 확장성 : 데이터 무한히 저장 가능
  • 효율적 비용 : 사용한 만큼만 비용 지불
  • 강력한 가용성과 내구성
  • 다양한 스토리지 클래스 제공
    • S3 Standard
      • 가장 일반적으로 사용되는 스토리지 클래스
      • 데이터에 자주 액세스해야할 경우 사용 (빠른 속도)
    • S3 Glacier
      • 데이터의 장기보관 목적으로 사용되는 스토리지 클래스
      • 데이터를 보관 비용 저렴
  • 정적 웹사이트 호스팅이 가능
    - 정적 파일 : 서버의 개입없이 클라이언트에 제공될 수 있는 파일
    - 웹 호스팅 : 서버의 한 공간을 빌려주어 웹 사이트의 배포, 운영이 가능하게 만들어주는 서비스
    - S3에서는 버킷을 통해 정적 웹 사이트 호스팅이 가능

✔︎ S3의 핵심 개념

  • 버킷
    • 파일을 담는 바구니 (최상위 디렉토리)
    • 무한히 많은 파일을 저장 가능
    • 버킷의 이름은 각 리전에서 고유해야 함
    • 버킷의 정책을 생성하여 액세스 권한 부여 가능
  • 객체
    • 버킷에 담기는 파일
    • 파일과 메타데이터로 구성
    • 모든 객체는 고유한 키를 가짐
    • URL 주소를 통해서 객체에 접근 가능
    • URL 주소 형식 : http://[버킷의 이름].S3.amazonaws.com/[객체의 키]

☞ 3 Tier-Architecture 배포 전략

✔︎ Client 배포

  • AWS 서비스 중 S3를 이용해 사용자에게 client application 제공
  • 클라이언트를 정적파일로 빌드하여 배포 → S3를 이용해 배포
  • 빌드
    • 불필요한 데이터를 없애고, 통합/압축하여 배포하기 최적화된 상태를 만드는 것
    • 데이터의 용량이 줄어들고 웹 사이트 로딩 속도가 빨라짐
  • AWS에서 제공하는 CDN 서비스인 CloudFront를 통해 사용자에게 콘텐츠를 더 빨리 배포 가능

✔︎ Server Application 배포

  • 사용자들이 S3와 CloudFront를 통해서 Client Application을 제공받음
  • 안정적으로 서비스를 제공하기 위해 가상의 PC (AWS EC2)를 빌려 서버코드 구동 가능

✔︎ Database 배포

  • AWS에서는 관계형 데이터베이스 특화 서비스인 RDS 서비스 제공
  • RDS 서비스를 통해 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스 배포 가능

DNS

  • S3, EC2를 이용해 배포된 서비스는 IP주소 혹은 AWS에서 제공하는 서비스와 전혀 상관없는 도메인 주소를 통해 접근
  • 도메인을 통해 접속하려면, AWS의 서비스 중 Route53 이용
  1. 서버 배포

⦿ 학습내용

☞ 서버 배포 (EC2)

✔︎ EC2 콘솔을 통해 EC2 인스턴스에 연결
✔︎ 간단한 서버 애플리케이션을 생성하고 EC2 인스턴스에 코드 배포
✔︎ 서버를 실행시키고 브라우저에서 서버에 접속할 수 있어야 함

☞ EC2 인스턴스 상에서 서버 실행

✔︎ 인스턴스에 개발 환경 구축
✔︎ git을 통해 서버 코드 클론 받기
✔︎ EC2 인스턴스에서 서버 실행

☞ Security Group

✔︎ 보안그룹 (Security Group)

  • AWS에서 임대한 인스턴스의 가상 방화벽
  • 인바운드(Inbound)와 아웃바운드(Outbound) 규칙 설정 가능
  • 인바운드 규칙 : EC2 인스턴스로 들어가는 트래픽
  • 아웃바운드 규칙 : EC2 인스턴스에서 나가는 트래픽
    ※ 따로 설정하지 않는 경우, 기본적으로 EC2에서 나가는 모든 트래픽 허용

◉ 느낀 점

☞ 오늘은 클라우드와 배포에 관해 알아보고, 대표적인 클라우드 서비스인 AWS를 통해 서버 배포하는 방법에 대해 학습했다. 코드스테이츠에서 제공해주는 AWS 계정정보를 이용해 말로만 듣던 AWS를 조작해보며 흥미롭게 진행해봤다! 많이 낯설고 어려운 부분도 있었으나 페어와 함께 keep going 😤 내일은 오늘 학습한 서버 배포에 이어 클라이언트 배포, 데이터베이스 연결에 대해 공부해볼 예정이다. 뒤쳐지지말고 잘 따라가자❗️🔥

◉ 내일의 키워드

・ 클라이언트 배포
・ 데이터베이스 연결
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글