주니어 개발자가 말아주는 간식 구매 요청 자동화

2024. 1. 27. 15:07·프로그래밍/파이썬

사용 기술

Slack API

Slack API를 사용하여 간단한 명령어, 예를 들어 /간식구매요청 과 같은 것들을 처리합니다. 이는 사용자가 Slack을 통해 쉽게 요청을 할 수 있게 해줍니다.

AWS Lambda

AWS Lambda는 이러한 Slack 명령어에 대한 반응을 처리하는 서버의 역할을 합니다. 우리는 많은 종류의 요청을 처리할 필요가 없기 때문에, 간단하고 효율적인 AWS Lambda를 선택했습니다.

AWS API Gateway

AWS ApiGateway는 Lambda와 연결되어, 사용자의 요청을 Lambda로 전달하는 역할을 합니다. 이를 통해 사용자의 요청을 쉽게 처리할 수 있습니다.

추가적으로, 구글 스프레드 시트를 조작하거나 웹에서 정보를 수집하기 위해 파이썬의 gspread 패키지와 bs4라는 도구를 사용했습니다.

자동화 하게 된 계기

기존 업무 프로세스는 그림과 같습니다.

위 워크플로의 단점은 요청자가 많아지면, 이를 모두 처리하기가 어려워집니다. 이 문제를 해결하기 위해 자동화 시스템을 도입하기로 결정했습니다.

간식 구매요청 자동화 아키텍쳐

사용자가 "/간식구매요청" 명령어를 입력하면, Slack API가 이를 감지하고 설정된 API 주소로 요청을 보냅니다. 이 주소는 API Gateway에 설정되어 있으며, Gateway는 이 요청을 받아 Lambda 함수를 실행시킵니다.

Lambda 함수는 요청을 처리하고 결과를 Slack으로 다시 보냅니다.

간식 구매요청 자동화 과정에서 만난 문제

  1. API Gateway로 사용자가 요청한 /간식구매요청 에 해당하는 커맨드값을 가져오는 과정에서, 요청 데이터를 제대로 처리하지 못하는 문제가 발생.

문제 파악
Slack Slash Command 공식문서를 살펴보니 다음과 같은 내용이 있었습니다.

token=gIkuvaNzQIHg97ATvDxqgjtO
&team_id=T0001
&team_domain=example
&enterprise_id=E0001
&enterprise_name=Globular%20Construct%20Inc
&channel_id=C2147483705
&channel_name=test
&user_id=U2147483697
&user_name=Steve
&command=/weather
&text=94070
&response_url=https://hooks.slack.com/commands/1234/5678
&trigger_id=13345224609.738474920.8088930838d88f008e0
&api_app_id=A123456

This data will be sent with a Content-type header set as application/x-www-form-urlencoded.

/간식구매요청 명령어로 요청을 보내면 해당 요청을 처리하는 URL로 위와 같은 x-www-form-urlencoded형식의 form data형식이 보내지게 됩니다.

이 데이터 형식을 API Gateway에서 Lambda로 처리할 때, 매핑 템플릿 이라는 걸 설정해줘야 합니다

_매핑 템플릿_이란 Velocity Template Language(VTL)로 표현된 스크립트로, JSONPath를 사용하여 페이로드에 적용됩니다.

매핑 템플릿을 설정해주게 되면 원하는 데이터를

def lambda_handler(event,context):
    #TODO implement

    option = event['text']
    command = event['command']
    response_url = event['response_url']

위와 같은 식으로 사용할 수 있습니다.

  1. Slack Command의 짧은 응답 시간제한으로 인한 "operation_timeout"이 발생하는 문제


위 그림은 기존에 구현했던 워크플로우 입니다. 문제점은 슬랙에서는 요청을 보낸 후 3초 이내에 응답을 보내주지 않으면 에러를 반환하게 됩니다. https://api.slack.com/interactivity/slash-commands#:~:text=This%20confirmation%20must,ignore%20the%20request

operation_timeout이 반환되지만 실제 응답은 정상적으로 처리되었기에, 사용자 입장에서 혼란이 생길 수 있다 판단에 해당 문제를 해결하고자 했습니다.

위와 같이, API Gateway 요청이 들어오면 1번 함수에서 실제 작업이 진행될 2번 람다 함수를 실행 시킵니다. 그 후 바로 slack으로 응답을 반환시켜 해당 문제를 해결 했습니다.

 

실제로는 아래 그림과 같이 동작합니다

 

간단한 자동화 과정이지만, 이번 작업한 내용을 토대로 추후에 새로운 기능들을 계속해서 추가하고 기존 기능을 고도화 하는등의 작업을 진행하며 Slack Command를 활용한 ChatOps를 만들어보려 합니다.

'프로그래밍 > 파이썬' 카테고리의 다른 글

HTML 텍스트 처리과정에서 발생하는 공백발생문제해결  (1) 2023.12.15
'프로그래밍/파이썬' 카테고리의 다른 글
  • HTML 텍스트 처리과정에서 발생하는 공백발생문제해결
황심지
황심지
  • 황심지
    꾸준함이 진리다
    황심지
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • 프로그래밍 (12)
        • 운영체제 (0)
        • Spring (4)
        • Java (10)
        • SQL (0)
        • HTTP (2)
        • 회고 (2)
        • Network (0)
        • 프로젝트 (12)
        • Infra (2)
        • 데이터베이스 (3)
        • TIL (1)
        • 파이썬 (2)
      • 운동 (0)
        • 거인화 루틴 일지 (0)
        • 과부하 훈련 일지 (0)
        • 운동 관련 이모저모 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    python
    에프랩 후기
    F-Lab 후기
    개인성장
    쿼리 성능
    CAP 이론
    레디스 세션
    에프랩 후기 자바 백엔드
    1년회고록
    Java
    한번에끝내는코딩테스트369Java편초격차패키지Online
    position argument
    2023년회고
    직장인인강
    개인회고록
    webflux
    패스트캠퍼스
    세션
    패스트캠퍼스후기
    배포 방식
    에프랩 후기 자바 백엔드 부트캠프
    spring
    그런 RESTAPI로 괜찮은가?
    CAP Theorem
    django orm
    페이징 최적화
    직장인자기계발
    패캠챌린지
    대용량 트래픽
    chatops
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
황심지
주니어 개발자가 말아주는 간식 구매 요청 자동화
상단으로

티스토리툴바