AWS

AWS Serverless(서버리스)로 서버 고민 없이 웹 애플리케이션 구축하기 #1

묠니르묘묘 2024. 9. 6. 00:15

 

AWS 대표 서비스인 Lambda(람다)를 사용하여 서버 고민 없이 간단한 웹 애플리케이션을 구축하는 방법을 다뤄본다.

우리가 만들 웹 서비스는 "친구들의 기분 상태를 랜덤으로 매칭하는 서비스"이다.

 

https://static.us-east-1.prod.workshops.aws/public/a09c2a3d-2abf-401d-accc-2e749ca0c294/static/images/110-others/architecture-1.png

 

1. Lambda와 DynamoDB를 활용한 데이터 처리

비즈니스 로직을 AWS Lambda 함수에 작성하고 이 Lambda가 실행될 때마다 친구들의 기분 상태 데이터를 랜덤하게 생성하여 DynamoDB에 저장한다. Lambda는 서버를 직접 관리할 필요 없이 이벤트가 발생할 때 자동 실행된다.

 

2. API Gateway를 통한 인터넷 연결

Lambda 함수를 API Gateway와 연결하여 인터넷에서 접근할 수 있는 URL을 생성한다. 이 URL을 통해 사용자는 Lambda 함수를 실행할 수 있다.

 

3. S3를 이용한 정적 웹사이트 호스팅

프론트엔드는 간단한 HTML로 구현한다. HTML에 버튼을 추가해 사용자가 버튼을 누르면 Lambda가 실행되도록 한다. 이 HTML 파일은 S3 버킷에 업로드하여 S3 정적 웹사이트 호스팅 기능을 사용하여 전 세계에서 접근가능하게 한다. 즉, 웹 서버를 따로 두지 않고 S3가 웹 서버 역할을 수행하게 된다.

 

 

자 그럼 해당 서버리스 웹 애플리케이션을 구축하기 전에 해당 서비스들의 개념을 살펴보고 해당 웹 애플리케이션 구축은 2번째 게시글에서 살펴보자.

 

 

1. 서버리스란?

  • 서버가 없다는 의미가 아닌 서버 관리가 불필요하다는 의미
  • 서버를 관리하고 운영하는 부분은 AWS에 위임
  • 개발자는 오직 비즈니스 문제를 해결하는 코드 작성에만 집중

 

 

2. 패러다임의 전환 (paradigm shift)

  • 초기에는 개발자들이 물리적인 서버를 직접 구축하고 관리
  • 클라우드 기술이 발전하면서 가상 머신을 통해 이 작업을 단순화하였고, 대표적인 가상머신으로 AWS EC2가 있음
  • 현재는 컨테이너 기술이 발전하면서 인프라를 컨테이너로 구축하여 사용

위 사항들은 여전히 개발자가 전부 관리해야 한다는 단점이 있음.

서버리스를 사용하게 된다면 AWS가 인프라를 관리해주기 때문에 이런 부담이 줄어들게 됨.

 

 

3. 서버리스의 장점

  • 서버 관리 필요 없음
  • 사용한 만큼만 지불
  • 요청에 맞게 스케일링
  • 높은 보안수준
    • 대부분 AWS가 책임지므로 덜 신경써도 됨

 

 

4. 다양한 범주의 서버리스 서비스

  • Lambda : 이벤트에 의해 구동되는 이벤트 드리븐 아키텍처에서 많이 사용
  • Fargate : 컨테이너 노드를 위한 서버리스 서비스
  • S3 : 객체 오브젝트 저장소
  • Aurora Serverless : 관계형 데이터베이스
  • DynamoDB : NoSQL
  • EventBridge : 이벤트 리스너 또는 라우터 역할
  • API Gateway : api 엔드포인트 역할
  • SQS, SNS : 메시징과 관련
  • Step Functions : 워크 플로우 제어를 위한 것
  • AppSync : GraphQL 지원

 

 

5. 3-Tier 서버리스 아키텍처 구성

  • S3 : 웹 서버 역할 담당하며 사용자가 가장 먼저 접속하는 웹페이지 제공
  • API Gateway : Lambda 실행을 위한 API 정의하고 인터넷 주소(엔드포인트) 생성
  • Lambda : API Gateway에서 호출된 후 비즈니스 로직 처리
  • DynamoDB : 데이터베이스 역할을 하여 데이터를 저장하고 관리

 

 

6. AWS Lambda

  • AWS 대표적인 서버리스 서비스
  • 많은 요청이 발생할 때에도 Lambda는 자동 확장 및 관리됨
  • 추가하고 싶은 기능이나 간단한 서비스를 만들 때도 쉽게 사용 가능
    • 사진 이미지 썸네일 버전 만드는 기능
    • 간단하게 데이터 분석하고 싶을 때
    • AWS 의 이벤트 서비스들과 연동해서 이벤트 발생 시, Lambda 기능을 이용해서 이벤트 처리

 

 

6-1. AWS Lambda 특성

서버를 프로비저닝하거나 관리하지 않고도 코드를 실행해주는 컴퓨팅 서비스

  • 불필요한 서버 관리
  • 자동 확장
  • 고가용성 및 보안
  • 사용한 만큼만 지불

 

 

6-2. AWS Lambda를 사용한 아키텍처

  • 이벤트 소스로부터 람다가 호출되면 함수가 구동
  • 여러 언어로 함수의 코드 작성 가능
  • 여러 언어로 애플리케이션을 만들어서 코드만 실행하면 됨
  • 함수는 함수를 호출하거나 DB, 인터넷 등 통신 가능

 

 

6-3. AWS Lambda 사용 사례

  • 우리가 만드는 대부분의 서비스는 Lambda로 구축 가능
  • 웹서버, 백엔드 서비스, 데이터 처리, 챗봇, 자동화 등 다양한 사례 존재
  • AWS에서는 자동화를 위해 Lambda 많이 사용

 

 

7. API Gateway

  • AWS의 API 관리 서비스
  • API 를 관리해주고 API 를 통해 외부에서의 호출이 왔을 때 대문 역할을 하는 서비스
API 란 외부에서 기업의 서비스를 이용하려고 할 때 규격을 정해주는 것을 의미한다. 일종의 형식을 정하고 이 형식대로 기업 서비스를 호출하면 기업은 서비스를 제공해 주는 약속이라고 생각하면 된다.

 

 

 

7-1. API Gateway 는 API 기반 아키텍처의 관문

  • 어떤 규모에서도 개발자가 API 를 손쉽게 생성, 개시, 유지, 관리, 모니터링 등 할 수 있는 완전관리형 서비스
  • 애플리케이션이 백엔드 서비스에 데이터, 비즈니스 로직, 기능에 접근할 수 있는 정문 역할
  • 사용자로부터 요청을 받으면 Lambda 또는 Load Balancer 등 다양한 서비스에 요청 전달 가능

 

 

7-2. 다양한 API 유형 지원

  • 일반적으로 RESTful API 생성 가능
  • 채팅앱, 스트리밍 대시보드와 같은 실시간 양방향 통신은 WebSocket APIs 생성 가능

 

 

8. Amazon DynamoDB

  • 대규모 성능에 최적화된 완전 관리형 NoSQL 데이터베이스 서비스
  • RDB에서는 데이터를 보관하는 형태인 스키마를 정의하고 이를 이용하여 데이터를 저장하지만, DynamoDB와 같은 NoSQL은 스키마 없이 데이터를 원하는 형태로 자유롭게 저장 가능
  • AWS의 완전관리형 서비스이기에 서버 관리를 신경쓰지 않음

 

 

8-1. Dynamo 특징

서버리스

  • 유지관리 불필요
  • 오토 스케일링
  • 고가용성 및 내결함성

높은 성능

  • Known access pattern 이 있는 애플리케이션에서 이상적 성능
  • 초당 수백만 요청 처리 및 짧은 지연시간
  • 자동화된 글로벌 복제
  • 다른 AWS 서비스와 통합

보안 및 액세스

  • 전송 중 및 저장 시 암호화
  • API/ORM 을 통한 세부적인 액세스 제어
  • IAM을 통한 승인

 

 

8-2. 데이터베이스 확장

  • SQL은 하드웨어의 성능을 높이는 방법으로 한계가 있음
  • NoSQL은 수평 확장 가능하도록 데이터가 설계되었기에 매우 유연함

 

 

8-3. Core Concepts - Tables, Items, Attributes, Indexes

  • RDB 와 달리 서버 사이즈 등 데이터베이스 설정 필요 없음
  • 필요한 키 이외의 스키마를 따로 지정 X, 데이터를 넣으면 넣는대로 들어가기에 따로 저장할 필요 X, 정규화 과정 필요 X
  • key-value 형태의 스키마 지원
  • RDB와 동일하게 테이블 생성 가능
  • partition key라는 것을 만들어야 하며, 이는 유니크한 값이고 정렬이 필요하면 sort key 사용하며, 이 전부가 primary key에 해당함
  • column 은 attribute
  • row는 item

 

 

9. Amazon S3

  • Amazon Simple Storage Service
  • 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있도록 구축된 객체 스토리지
  • 높은 확장성, 데이터 가용성, 보안, 대용량 데이터 처리 성능 갖춤

 

 

9-1. 정적 웹 사이트 호스팅

  • S3가 마치 웹서버처럼 동작
  • S3에 권한을 주어 미리 업로드한 파일(HTML, CSS, JS 등)을 읽을 수 있게 함
  • 정적 웹 사이트 호스팅
    • 서버 측 스크립팅(서버 사이드 렌더링) 지원 X
    • 클라이언트 렌더링만 가능
  • 버킷 구성
    • 웹 사이트 호스팅
    • 퍼블릭 읽기 액세스
  • 리전별 웹 사이트 엔드포인트
    • 웹 사이트 엔드포인트
    • https://[bucketname].s3-website-[Region].amazonaws.com

 

 

9-1-1. 차단되는 퍼블릭 액세스의 유형

  • S3에 데이터를 올리면 오브젝트 형태로 저장되며, 이 공간을 버킷이라고 함
  • 버킷은 기본적으로 모든 접근 차단되며, 특히 퍼블릭 접근 차단
  • 퍼블릭으로 열면 클라우드 특성상 누구든지 접근 가능하기에 위험하며, S3에 데이터 전송 비용도 추가됨
  • 접근을 꼭 해야하는 경우에만 제한적으로 풀기

 

 

9-2. S3 버킷 정책

  • S3 버킷 정책은 익명 사용자에게 읽기 전용 권한 부여
  • Effect : 허용 및 불가 설정
  • Action : 권한
  • Resource : 자원
  • Principal : 누가 이 적용을 받는지 의미