AWS한국사용자모임 - serverless 소모임 후기 (23.6)

Seoyong Lee·2023년 6월 7일
0

개발 관련 생각들

목록 보기
9/9

6.7 수요일 당근마켓에서 진행된 AWS 서버리스 소모임 밋업 후기입니다.

처음 참가해본 소모임

재직 중인 회사에서 서버리스로 풀스택 환경을 구축할 일이 생기면서 AWS공부도 할 겸 겸사겸사 서버리스 소모임에도 참여하게 되었다. 실제로 AWS에서 실무에 사용해본 기능은 Amplify 내부 스택(AppSync, DynamoDB, S3 등...)이 전부지만 그래도 강연 내용을 어느 정도 이해할 수 있을지 궁금하기도 했고 또 소모임의 분위기가 궁금하기도 해서 용기를 내서 처음으로 참가해 보았다.

소모임 장소는 당근마켓이 위치한 교보타워 11층이었고, 조금 일찍 모임 장소에 들어가니 다들 각자 노트북으로 조용히 업무를 하고 계셨다. 참가 전에는 혹시나 아는 사람이 없으면 혼자 외롭거나 하진 않을까 걱정했으나 생각보다 각자 묵묵히 노트북을 조용히 하고 계셔서 역시 개발자 모임은 배신하지 않는구나 라고 생각했다.

퇴근 후 이동시간을 배려한 것인지 넉넉히 오후 7:30분에 프로그램이 시작되었고, 첫 세션으로 '서버리스의 장점을 극대화하는 이벤트 기반의 응용 아키텍쳐 "3 Factor App"의 소개 및 AWS 서버리스로 구현해보기'가 진행되었다.

첫 세션 - 3 Factor App

첫 세션은 일본에서 서버리스 기술지원 회사를 운영하고 계신 김선우님의 3 Factor App으로 시작하였다. 3 Factor App은 GraphQL, Event, Serverless의 세 축으로 구성된 모던 풀스택 어플리케이션 아키텍처 패턴이라고 한다.

내용을 간략히 요약하면 GraphQL의 subscription(AppSync)을 이용해서 이벤트 중심의 서버리스 환경을 구성하면 기존 서버리스 아키텍처의 복잡성과 연속적 비동기 처리의 어려움을 극복할 수 있다는 것이었다. 3-Factor는 다음의 3가지를 의미한다.

  • GraphQL: Subscription을 이용한 '리얼타임' 인터랙션
  • Event: 신뢰성 있는 이벤트 처리
  • Serverless: '비동기' 서버리스 함수를 사용한 비즈니스 로직 실행

출처: 3factor.app

위 3가지 Factor 중에서 역시나 가장 중요한 점은 '리얼타임'의 구현이라고 생각된다. 기존에 웹소켓을 이용해 구현해야 했던 것을 GraphQL은 Subscription을 통해서 서버 없이 간단하게 구현하도록 도와준다. 비슷하게 Firebase의 경우에도 onSnapshot을 이용하면 특정 도큐먼트의 변경을 감지해서 클라이언트로 지속적으로 보내주기 때문에 지금도 프로토타입 제작을 위해 유용하게 사용하고 있다.

세션에선 위 아키텍처를 이용한 배달 서비스를 구성해서 직접 시연하였고, 이벤트를 기반으로 주문 상태가 변경되면 예시 사이트의 모달을 통해서 변경된 상태를 눈으로 확인할 수 있었다.

위 3가지 Factor 중에서 GraphQL은 사실 Amplify에서 제공하는 AppSync를 통해 이미 자주 사용하고 있었기에 이미 익숙했다. 그러나 이번 세션을 통해 subscription이 AppSync가 아닌 GraphQL의 스펙이고 내부적으로는 웹소켓으로 구현되어 있다는 사실을 처음 알게 되었다. 또한 서버리스만으로 이루어진 아키텍처의 단점으로 비동기 처리의 어려움 및 복잡도 증가가 있다는 것도 알게 되었다.

이벤트의 개념 역시 다음 문구를 통해서 정확하게 이해할 수 있었다.

이벤트는 '명령'이 아닌 '관측'의 대상이다.

개발을 하는 입장에서는 하향식으로 특정 변경이 발생하면 어떤 행동을 하라고 명령하는 것이 자연스럽지만 실제 3-Factor-App 아키텍쳐는 반대로 하위레벨에서 상태를 지켜보다가 변경이 감지되면 상위레벨로 이벤트를 전달한다. 마찬가지로 에러 처리에 해당하는 이벤트(잔액 부족, 주문 취소, 결제 실패 등)도 동일한 방법으로 상위로 해당 이벤트를 전달한다.

FE > AppSync > DynamoDB(상태 입력) > EventBridge > 각 도메인 별 Lambda function(혹은 마이크로 서비스) > AppSync > FE

전체적인 아키텍처는 위 순서로 작동하도록 설계되어 있었고, 여기서 DynamoDB의 Stream은 SQS 등으로 대체하는 것도 가능하다고 한다. 또한 QnA에서 EventBridge를 Step Functions으로 대체하면 어떻겠냐는 제안도 나왔지만 실제로는 비용이 너무 비싸서 별로라고 어떤 분이 말씀해주셨다. EventBridge의 장애 대응 관련해서는 multi account? 를 사용하면 해결이 가능하다고 하는데 이 부분은 조금 더 고급(실무적?)인 내용이었던 것 같다.

결론적으로는 AWS 자격증을 통해 귀동냥한 지식들이 생각보다 도움이 되었던 것 같다. 특히 서버리스로만 구성된 아키텍처가 실제로는 어떻게 구성되는지 알 수 있어서 많은 도움이 되었다. DynamoDB를 State 관리 용도로만 사용하는 것도 신기했다.

두 번째 세션 - ChatGPT 가 알려주는대로 만드는 Slack Bot

두 번째 세션은 AWS ML 히어로이신 유정열님의 ChatGPT 슬랙봇 만들기로 진행되었다. 그동안 인터넷을 통해서 알긴 했지만 실제로 발표자분을 만난 것은 처음이었다. 강연 내용은 ChatGPT에 물어본 결과물로 openAPI 슬랙봇을 제작한 후기를 기반으로 진행되었고, 깃허브(nalbam)로 작업물을 공유해 주셔서 바로 코드를 확인해 볼 수 있었다.

사실 공유해주신 코드는 파이썬으로 작성되어 있어서 자세히 알지는 못했지만, 이번 세션을 통해서 ChatGPT의 쓰임에 대해 다시 한번 생각해 볼 수 있었다. 또한 openai가 제공하는 api의 경우 단기 기억 능력이 없지만 임의로 context를 DynamoDB 등에 저장해 두고 이를 기반으로 이전 질문의 연장선에서 계속해서 질문을 이어가도록 할 수 있다는 것도 처음 알게 되었다.

자기 자신을 사용한 프로그램을 만드는 방법을 알려주는 API라니 신선하기도 하면서 무언가 큰 변화가 올 것 같은 느낌을 받았다. 여러모로 뜻깊은 시간이었다.

마무리

오후 9시쯤에 모든 세션이 완료되었고 참가비로 냈던 5천 원으로 주문한 피자를 먹으면서 자유 네트워킹이 시작되었다. 이번에는 분위기 파악을 위해 처음 참여했었던 거라 다른 분들과 따로 이야기는 나눠보지 않았지만 모임 안에서 자주 마주치는지 서로 친하게 인사를 나누는 분들을 볼 수 있었다.

AWS 소모임은 개인적으로 참여했던 다른 세션에 비하면 비교적 자유롭고 생산적인 모임이었다. 반강제로 네트워킹을 강요하지도 않았고 세션 내용도 많은 도움이 되었다. 앞으로 기회가 된다면 자주 참여하고 싶다.

0개의 댓글