- 서버리스로 서버 고민없이 웹 애플리케이션 구축하기 #1
- 서버리스로 서버 고민없이 웹 애플리케이션 구축하기 #2
AWS 대표 서비스인 Lambda(람다)를 사용하여 서버 고민 없이 간단한 웹 애플리케이션을 구축하는 방법을 다뤄본다.
우리가 만들 웹 서비스는 "친구들의 기분 상태를 랜덤으로 매칭하는 서비스"이다.
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 : 누가 이 적용을 받는지 의미
'AWS' 카테고리의 다른 글
AWS 핵심 서비스로 웹 애플리케이션 구축하기 - 이론 (0) | 2024.10.06 |
---|---|
AWS Serverless(서버리스)로 서버 고민 없이 웹 애플리케이션 구축하기 #2 (0) | 2024.09.09 |
AWS TechCamp란? (0) | 2024.09.04 |
CodeDeploy - CodePipeline 만드는 도중 실패 및 설명 (0) | 2024.05.05 |
CodeBuild - CodePipeline 만드는 도중 build 실패 (0) | 2024.05.05 |