클라우드/AWS

DynamoDB / Lamda 이용하여 Serverless 서버 배포하기, 실제 현업에서 쓰이는 구조의 서버 배포하기

D269 2023. 3. 23. 10:24
728x90

 

이 글은 
2022년 12월 7일 ~ 2022년 12월 18일 에 원티드에서 프리온보딩 백엔드 챌린지에 참가하여 들은 강의를 정리한 것입니다.

 

 

SNS의 이미지 처리 아키텍쳐

  • 해당 아키텍처를 고른 이유
  • 대부분 SNS라는 도메인을 잘 알고 있기때문에 이해하기 쉬울 것
  • 사진이 있기 때문에 부하가 잦은 서비스 중 하나
  • 사용하게 될 AWS 서비스
  • ELB, EB (EC2), S3, SQS, CloudFront, SSM
  • 구성 언어 및 프레임워크
  • NodeJS V14, Serverless (https://serverless.com/)

 

 

 

1. 서버(EC2) 자제척으로 처리하기

  1. 이미지 업로드
  2. 서버는 썸네일을 만들어 S3에 저장
  3. 다른 사용자가 해당 유저의 썸네일을 부르면 S3에서 해당 파일을 가지고 와서 주소를 전달

 

 

2. Elastic Load Balancer를 연결하고 Auto Scaling을 적용하여 부하에 대응하기

  1. 이미지 업로드
  2. ELB를 통해 적절한 인스턴스로 요청을 보낸 뒤 썸네일을 만들어 S3에 저장
  3. 다른 사용자가 해당 유저의 썸네일을 부르면 S3에서 해당 파일을 가지고 와서 주소를 전달

 


 

 

(실습)

어떤 것을 가지고 모니터링 할 것이냐 설정.

 

→ 환경 생성. (오래걸림)

 

생성 완료하면 이 화면이 뜸.

 

 

보안에서 IAM 역할 : 권한을 관리할 수 있는 곳.

management console에 가면 권할을 볼 수 있음.

 

 

 

 


오토 스케일링 되는 것을 보여주고 싶었으나 몇 십개 request로는 움직이지 않아서 보여주기 어려운 상황. pass

 

 

직방에서 중개사들이 사진을 올리는데, 이 이미지는 용량이 크니까 이것을 썸네일 처리한다.

 

 


3 - 1. 람다와 메세지 큐를 통해 비동기로 처리하기

  1. 이미지를 하기 위해 서버로 s3 presigned URL 요청 : 이용자들이 server?를 거치지 않고 바로 업로드하는 과정
  2. 전달받은 Presigned URL로 이미지 업로드
  3. 업로드 된 객체의 이름을 서버로 전달
  4. 서버는 메세지 큐로 해당 이름을 전달
  5. 메세지 큐에 쌓인 정보는 람다를 통해 썸네일을 생성
  6. CloudFront를 사용해서 썸네일을 캐싱

 


 

(설명)

 

 

 

이용자는 서버에 “나 이미지가 있어서 업로드 해야되는데 업로드 할 수 있는 url을 던져 줘” 하면,

서버는 “AWS S3에 올릴 수 있는 presigned url(그냥 링크는 보안상 업로드가 안되고, 미리 사인한 권한에 문제없는 url)을 줌

이용자는 url을 가지고 s3에 올리면

서버는 그 올린 이미지에 대한 id를 Queue로 보내줌. 그러면 뒤에 람다가 수백 개 떠있음.

람다는 결국 그 이미지를 처리하고 다시 s3에 올린다.

 

 

빨간 부분은 server일 뿐, 진짜 aws infura를 사용해야 한다.

빨간 부분은 main server

뒷 부분은 image server

람다에 올라갈 것이 image server

 

 

이미지 서버에서는 큐에 보내진 아이디를 s3에서 가져와서 썸네일 만들어서 다시 올리는 과정. (간단함, 노드 처음봐도 알 수 있음.)

 

 

image.server.zip

aws 내에 있는 infura role은 iamRole 로 정의한다.

s3같은 경우는 우리가 모든 권한을 allow하니까. 이 코드에서 s3가 이용이 되는데, 그 권한을 serverless.yml에서 설정을 해준다.

function.event는 SQS인데 queue에서 이미지가 쌓이면 람다들이 알아서 quere에 있는 걸 뽑아서 알아서 처리함.

동작 흐름 :

api 서버에서 사용자한테 전달받은 image-id를 비동기로 sqs에 보내고 큐에서 생성된 메시지를 image서버(람다서버)가 받아서 썸네일 처리해서 S3 저장

 

 


 

3 - 2. 람다와 S3 트리거를 통해 비동기로 처리하기

  1. 이미지를 하기 위해 서버로 s3 presigned URL 요청
  2. 전달받은 Presigned URL로 이미지 업로드
  3. S3 트리거를 통해 람다를 실행하여 썸네일을 생성
  4. CloudFront를 사용해서 썸네일을 캐싱

s3 시크릿 매니저에서 환경 주입하고 이미지 업로드 하면 썸네일 주입 시켜서 s3에 다시 업로드 하는 .

  1. 서버 (ec2) 자체적으로 처리하기 함.
  2. Elastic Load Balancer를 연결하고 오토 스케일링을 적용하여 부하에 대응하기.
728x90
반응형