Study/TIL(Today I Learned)

24.11.27 서버, AWS

에린_1 2024. 11. 27. 22:25
728x90

서버

서버리스 아키텍처

  • 서버리스(Serverless) 아키텍처는 애플리케이션 개발자가 서버를 직접 관리하지 않고, 클라우드 제공자가 백엔드 인프라를 동적으로 관리하는 아키텍처를 말한다. 개발자는 애플리케이션의 로직과 기능에만 집중하고, 서버 프로비저닝, 유지보수, 확장 등은 클라우드 제공자가 처리한다.

특징

  1. No Server Management(서버 관리 불필요)
    • 개발자는 물리적 서버, 가상 서버, 운영체제 관리에 신경 쓰지 않는다.
    • 클라우드 제공자가 서버를 자동으로 관리한다.
  2. 이벤트 기반 실행
    • 서버리스 함수(예: AWS Lambda)는 특정 이벤트가 발생할 때만 실행된다.
    • 사용자가 요청을 보내거나 특정 조건이 충족될 때만 리소스를 사용한다.
  3. 자동 확장
    • 트래픽에 따라 클라우드 제공자가 애플리케이션을 자동으로 확장하거나 축소한다.
    • 과도한 트래픽에서도 안정적으로 동작할 수 있다.
  4. 비용 효율성
    • 사용한 만큼만 요금을 지불한다.(Pay-as-you-go)
    • 애플리케이션이 실행되지 않을 때는 비용이 발생하지 않는다.

장점

  1. 운영 비용 감소
    • 서버 유지보수와 모니터링 인력을 줄일 수 있다.
    • 인프라 운영 비용도 절감된다.
  2. 빠른 개발
    • 인프라를 설계하거나 설정할 필요 없이 애플리케이션 개발에만 집중할 수 있다.
    • 더 짧은 개발 주기로 애플리케이션을 배포할 수 있다.
  3. 확장성
    • 클라우드 제공자가 트래픽 증가에 따라 애플리케이션을 자동으로 확장한다.
  4. 높은 가용성
    • 클라우드 제공자는 애플리케이션이 다운되지 않도록 자동으로 관리한다.

단점

  1. 종속성 문제(Vendor Lock-In)
    • 특정 클라우드 서비스(AWS Lambda, Azure Functions 등)에 종속될 수 있다.
    • 다른 플랫폼으로 이전이 어려워질 수 있다.
  2. 성능 이슈(Cold Start)
    • 함수가 실행되기 전, 서버가 초기화되는 데 시간이 걸릴 수 있다.
    • 특히 서버리스 함수가 오랫동안 실행되지 않았을 때 성능 저하가 발생할 수 있다.
  3. 디버깅 및 모니터링 어려움
    • 서버리스 환경에서는 디버깅과 로깅이 제한적일 수 있다.
    • 서버 로그에 직접 접근할 수 없기 떄문에 문제를 추적하기가 어렵다.
  4. 복잡한 애플리케이션 관리
    • 마이크로서비스 기반의 서버리스 환경은 많은 함수로 구성되기 때문에 관리가 복잡해질 수 있다.

AWS

CodeDeploy

  • 애플리케이션을 다양한 컴퓨팅 서비스에 자동으로 배포할 수 있도록 지원하는 자동화 배포 서비스이다. CodeDeploy를 사용하면 애플리케이션 배포 프로세스를 효율적으로 관리하고, 오류를 줄이며, 중단 없는 배포(Zero Downtime Deployment)를 구현할 수 있다.

    주요 기능

  1. 자동화된 배포
    • 코드 업데이트와 애플리케이션 배포를 자동화하여 인적 오류를 줄인다.
  2. 다양한 배포 대상
    • EC2 인스턴스, 온프레미스 서버, AWS Lambda 함수, Amazon ECS 클러스터 등 다양한 환경에 배포를 지원한다.
  3. 배포 전략
    • In-place Deployment: 기존 인스턴스에서 애플리케이션을 업데이트한다.
    • Blue/Green Deployment : 새 환경에 애플리케이션을 배포하고, 모든 것이 정상임을 확인한 후 트래픽을 전환한다.
  4. Custom Deployment Hooks
    • 배포 중에 특정 스크립트를 실행할 수 있는 기능을 제공한다.
  5. 중단 없는 배포(Zero Downtime)
    • Blue/Green 배포를 통해 애플리케이션 업데이트 중에도 사용자는 서비스를 계속 이용할 수 있다.
  6. 통합 모니터링
    • Amazon CloudWatch, AWS CloudTrail 등과 통합하여 배포 상태를 모니터링하고 문제를 추적할 수 있다.

주요 구성 요소

  1. 애플리케이션
    • CodeDeploy에서 배포를 관리하는 논리적 그룹이다.
  2. 배포 그룹(Deployment Groups)
    • 배포가 이루어질 EC2 인스턴스나 Lambda 함수의 논리적 집합이다.
    • 태그나 Auto Scailing 그룹을 기준으로 대상 정의가 가능하다.
  3. 배포 설정(Deployment Configurations)
    • 배포 방법을 정의한다.
  4. AppSpec 파일
    • 배포 프로세스를 정의하는 파일이다.
    • 애플리케이션의 소스 파일 위치, 배포 후 실행할 스크립트 등을 지정한다.

배포 프로세스

  1. 소스 준비
    • CodeDeploy는 소스 코드를 AWS S3 버킷 또는 GitHub에서 가져온다.
  2. 배포 대상 정의
    • 배포할 대상 인스턴스나 Lambda 함수를 설정한다.
  3. 배포 수행
    • 지정된 AppSpec 파일에 따라 애플리케이션을 배포한다.
    • 배포 전후에 스크립트를 실행할 수 있다.
  4. 검증 및 완료
    • ClodeWatch Logs를 사용하여 배포 상태를 검증하고, 문제가 없으면 배포를 완료한다.

장점

  1. 배포 자동화
  2. 다양한 통합
  3. 유연한 배포 전략
  4. 중단없는 배포

단점

  1. 복잡성 증가
  2. 비용
  3. 학습 곡선
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.11.29 C++  (0) 2024.11.29
24.11.28 면접 후기  (1) 2024.11.28
24.11.26 C++, 책  (0) 2024.11.26
24.11.25 CS, C++  (0) 2024.11.25
24.11.24 C++  (0) 2024.11.24