코드로 우주평화

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

나는 이렇게 논다/글또 슬랙 봇 개발기

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

daco2020 2024. 8. 20. 22:41
반응형

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가 제공하는 타입과 객체를 적극 활용하여 보다 쉬운 슬랙 봇 개발을 하시기 바랍니다.

반응형