본문 바로가기
나는 이렇게 논다/글또 슬랙 봇 개발기

Slack Bolt에서 view Dict를 View 객체로 변경해보자

by daco2020 2024. 8. 20.

Slack 앱을 개발하면서, 모달을 띄우는 view dict 대신 View 객체를 사용하도록 리팩토링을 진행했습니다.

 

사실 저는 얼마전까지만 해도 slack sdk 가 View 객체를 제공하는지 모르고 있었습니다. 그래서 매번 view 를 dict 로 작성했었는데요. 이번 글에서는 view Dict 를 View 객체로 바꾸는 과정을 공유하고, View 객체를 사용함으로써 얻은 이점에 대해 이야기하려고 합니다.

 

 

 

Dict 를 사용한 기존 코드

처음 Slack 앱을 개발할 때는, Slack의 모달이나 메시지 레이아웃을 정의할 때 주로 딕셔너리(dict)를 사용했습니다. 예를 들어, 유저의 예치금 상태를 보여주는 모달을 열 때 다음과 같이 작성했습니다.

await client.views_open(
    trigger_id=body["trigger_id"],
    view={
        "type": "modal",
        "title": {
            "type": "plain_text",
            "text": f"{user.name}님의 예치금 현황",
        },
        "blocks": [
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": text,
                },
            },
        ],
    },
)

 

이 코드는 기능적으로는 문제가 없지만, 블록이나 뷰의 구조가 복잡해질수록 딕셔너리를 직접 조작하는 것이 불편해지고, 실수하기 쉽다는 단점이 있었습니다. 특히, 코드 라인이 많아지기 때문에 주요 로직들을 한 눈에 파악하기는 더 어려워지죠.

 

 

 

View 객체로 리팩터링

Slack Bolt는 slack_sdk의 Block 과 View 를 위한 객체 모델을 제공합니다. 이를 활용하면 코드의 가독성과 유지보수성을 크게 개선할 수 있습니다. 그래서 기존의 딕셔너리 기반 코드를 객체 기반으로 리팩토링했습니다.

 

리팩토링 후의 코드는 다음과 같습니다.

from slack_sdk.models.blocks import SectionBlock, DividerBlock
from slack_sdk.models.views import View

await client.views_open(
    trigger_id=body["trigger_id"],
    view=View(
        type="modal",
        title=f"{user.name}님의 예치금 현황",
        close="닫기",
        blocks=[SectionBlock(text=text)],
    ),
)

 

코드가 훨씬 단순해지고 한 눈에 파악하기도 쉬워졌습니다.

 

 

 

View 객체 사용의 장점

1. 가독성 향상: 객체를 사용하면 코드가 훨씬 더 읽기 쉽고 명확해집니다. 특히, 복잡한 레이아웃을 구성할 때 블록과 뷰를 명확하게 구분할 수 있습니다.

2. 타입 안전성
: 딕셔너리를 사용하면 키와 값의 형태를 잘못 지정해도 오류가 발생할 수 있습니다. 반면, 객체를 사용하면 IDE의 자동 완성 기능을 활용할 수 있고, 코드 작성 중에 실수를 줄일 수 있습니다.

3. 유지보수 용이성
: 블록이나 뷰의 구조가 변경될 때, 객체 모델을 사용하면 필요한 부분만 쉽게 수정할 수 있습니다. 딕셔너리의 중첩된 구조를 모두 파악하며 수정하는 것보다 훨씬 간편합니다.

 

 

 

마무리

Slack 앱 개발에서 Block 과 View 객체 사용은 코드의 품질을 높여줍니다. 특히, 협업 환경에서 코드의 가독성을 높여주죠. Slack Bolt가 제공하는 타입과 객체를 적극 활용하여 보다 쉬운 슬랙 봇 개발을 하시기 바랍니다.