
Part 5에서 첨삭으로 예고한 AWS 기반의 아키텍처 구성에 대해 간결하게 기록하려 한다. 참고로 본인은 웹 개발 및 Backend 개발 베이스여서 AWS 관련된 인프라 개발로만 서브로 업무 경험을 해보았지, 지금처럼 Devops Engineer로 활동한거는 2~3년 정도 밖에 안된다. (해당 경력도 지금 회사 다니면서 본격적으로 AWS 업무를 한 것이라 찐으로 보면 데브린이(?)이긴 하다...) 해서 관련 내용이 상대적으로 전문적이지 못할 수 있겠지만, 개발 및 Cloud Engineer로 고민 중인 뉴비분들께 최대한 이해할 수 있도록 기록해보려한다.
LLMEdubank는 Serverless 기반 아키텍처로 구성하였으며, 이를 위해 3-Tier 구성에 필요한 AWS Managed Service를 사용하였다. Managed Service란 오픈소스/상용 등의 다양한 어플리케이션에 대하여 AWS의 검증을 통해 사용자에게 제공하는 서비스를 말하며, "Managed"란 용어의 의미처럼, 인프라 및 소프트웨어에 대한 유지보수 및 운영 주체는 AWS에서 주관한다.
(오픈소스/상용 어플리케이션의 구축과 운영에 어려움을 겪거나 운영 노하우를 가지고 있지 않은 수 많은 기업들에게는 이러한 서비스가 큰 메리트로 다가왔으며, 운영 전략에 따라 비용이 상대적으로 비싸질 수 있다는 것은 단점으로 다가올 수 있다.)
이번 Toy Project에는 MVP 어플리케이션 특성을 고려하여 최소화된 비용으로 시스템을 구축하고 싶어, Serverless 기반 서비스로 구축하는 것을 최종 결정하였고, DB의 경우 기술 외 필요한 부분을 지원 받아 구성하였다.
(지원해주신 분들께 감사드립니다.^^)

① S3에 구축되어 있는 LLMEdubank 관리자 시스템을 통해 사용자가 입력한 프롬프트를 "LLM 프롬프트 조회 API"를 호출한다.
② 호출된 API는 입력된 Foundation Model과 프롬프트를 바탕으로 Bedrock Endpoint를 호출하고, 응답 결과를 API에 전달한다. 위의 예시에서 Foundation Model은 Claude사의 Claude 3.5 Sonnet을 사용하였다.
③ Bedrock을 통해 응답받은 데이터는 관리자 시스템의 정해진 항목에 맞춰 표시가 되어지고, 사용자 검수를 통해 컨텐츠 데이터를 "학습 문제 컨텐츠 저장" API에 요청한다.
④ 학습 컨텐츠 데이터는 EC2에 구축된 Database에 저장된다. Database는 비용을 고려하여 T3.Medium으로 구축하였다.
⑤ 저장된 학습 문제 컨텐츠를 사용자게 메일로 발송하기 위하여 메일을 보낼 사용자를 입력 후 "메일 전송"API를 요청한다.
⑥ 사용자 메일 주소를 조회하여 SES로 학습 진행을 위한 메일을 발송한다.
⑦ 메일을 받은 사용자는 학습을 진행하게 되며, 학습 풀이 결과 데이터는 "문제 풀이 저장" API로 요청하여 저장한다.
AWS S3는 오프젝트 타입으로 파일을 관리할 수 있는 Object Storage로 단순한 파일 관리 뿐만 아니라, 정적 웹사이트 등의 호스팅 기능을 제공하고 있다. 비용적인 측면에서도 저장 비용과 파일 조회 비용만 발생하기 때문에 복잡하지 않은 단순 웹 사이트나 데모 형태의 웹 어플리케이션 구성 시, 효율적인 비용으로 자신만의 웹 페이지 구성이 가능하다.

정적 웹 사이트 호스팅을 위해 버킷 정책 설정 및 S3에서 "정적 웹 사이트 호스팅"을 활성화를 진행하였으며, API G/W와 API 통신을 위해 S3의 CORS 정책을 설정하여 API G/W에 대한 접근 허용을 설정하였다.

Rest API 구성은 Amazon API Gateway(API G/W)를 사용하여 구성하였으며, 비즈니스 로직을 수행하기 위해 각 API별로 Lambda 함수를 Integration하여 API G/W로 입력된 파라미터를 바탕으로 비즈니스 로직을 수행한다. Amazon API Gateway는 Lambda 뿐만 아니라 SQS, Kinesis Data Stream, ECS 등의 다양한 AWS Managed 서비스와의 통합이 가능하며, 요청된 파라미터에 대한 추가 파라미터 설정 또는 파라미터 튜닝이 가능하다. 비용 측면에서도 최초 12개월 동안 월 요청 100만건 까지는 비용이 발생하지 않는다.
(심지어 Mockup 처리도 가능하다.)

비즈니스 로직을 수행하는 AWS Lambda는 Serverless로 운영하는 어플리케이션을 구축할 수 있으며, 요청이 들어올 경우에만 실행되어 종료되는 stateless 형태의 Managed 서비스이다. 그렇기 때문에 Lambda 또한 API G/W처럼 요청 건수 단위로 비용이 책정되며, 최초 12개월 동안 월 100만건까지는 비용이 발생하지 않는다.

Database는 MariaDB를 사용하였으며, EC2 또는 Amazon Managed Service인 RDS 중 Toy Project임을 고려하여 EC2에 Database를 구축하였다.
EC2는 AWS Cloud를 사용한다면 가장 먼저 접하고 사용하는 가상 머신 서버로, 다양한 리소스 Spec을 가진 논리 서버를 선택하여 구성할 수 있으며, 장애 복구 / 회복 탄력성 / 서비스 확장 등의 서비스 안정화를 위한 다양한 요소를 추가로 구축할 수 있다.
생성형 AI 서비스인 Amazon Bedrock은 Claude, LLAMA, Stable Diffusion 등의 다양한 Foundation Model을 제공하고, 사용자가 원하는 Model을 선택하여 사용할 수 있다. 뿐만 아니라 사용자가 가지고 있는 데이터를 RAG로 구축하고, Foundation Model이 해당 데이터를 바탕으로 응답 할 수 있도록 Integration이 잘 구축되어 있어, 사용자가 쉽게 생성형 AI를 구축하여 사용 할 수 있다.
(물론 데이터의 정합성 / 무결성 / 환각 등에 대한 극복 방법이 필요하며, 이 부분은 Data를 전문적으로 다루는 데이터 사이언티스트 또는 데이터 분석가와 협업이 필요하다.)

Simple Email Service라는 약어 답게 말 그대로 메일을 주고 받을 수 있는 AWS의 Mail 서비스이다. MVP 등의 서비스 테스트 용도로 제공하기 위해 SES 구축 시, Sendbox 형태로 일 200건까지 무료로 사용이 가능하며, Production 전환을 요청할 경우 비용이 발생하게 된다.
