Tech

Dooray! 메신저 인커밍 웹훅 구현기 (Webmethods 사용)

봄의 개발자 2024. 12. 12.
728x90
반응형

들어가며

오늘은 Dooray! 메신저를 통해 웹훅을 구현한 방법에 대해 정리해보려고 한다. 데이터베이스의 테이블 스페이스의 사용률, 남은 공간이 특정 기준을 넘었을 경우 메시지가 전송되는 기능을 구현했다. 

1. 주기적으로 스케줄러를 통해 테이블 스페이스 공간을 확인한다.
2. 만약 90%가 넘을 경우 Dooray! 메신저를 통해 메시지를 전송한다.

우선 웹훅이란 무엇인지, 그리고 Dooray! 메신저로 메시지를 보내는 방법을 차례대로 알아보려 한다.

 

웹훅(Webhook) 이란?

간단히 데이터가 변경되었을 때 실시간으로 알림을 받을 수 있는 기능이다. 특정 이벤트가 발생하면 웹훅이 클라이언트에게 이벤트 데이터를 보낸다.
여기서 특정 이벤트는 db 테이블 스페이스 사용량이 90% 초과하는 경우이고, 클라이언트는 Dooray! 메신저가 된다.

웹훅 전달 과정을 자세하게 알아보면, 클라이언트가 서버에게 웹훅을 받을 유니크한 URL을 제공하고, 받고 싶은 이벤트를 등록한다.
그렇기 때문에 Dooray! 메신저에도 채팅방마다 유니크한 URL을 가진다. 그렇기에 이벤트가 발생하면 해당 URL로 이벤트 데이터를 받을 수 있다. [1]

 

웹훅에는 인커밍 웹훅, 아웃고잉 웹훅 이렇게 두가지 종류가 있다.
가장 큰 차이는 데이터 전달 방향이다. 인커밍의 경우 외부 서비스에서 해당 클라이언트로, 아웃고잉의 경우 해당 클라이언트에서 외부 서비스로 데이터가 전달된다.
간단히 클라이언트 기준 인커밍은 수신, 아웃고잉은 발신이라고 이해하면 된다.

 

그래서 어떻게 구현한건데?

이전에 포스팅한 적이 있었는데, EAI 툴인 Webmethods를 사용해서 구현했다. 
절차적으로 설명하자면, 
1. 테이블 스페이스를 검사하고 싶은 데이터베이스를 검사하는 adapter를 추가한다.
2. db 조회 결과를 통해 만약 사용량이 90%를 초과한다면 dooray! 메신저 URL로  HTTP 플로우 서비스를 통해 이벤트를 전달한다.
3. 해당 HTTP 요청을 받은 Dooray! 메신저 (해당 URL에 매칭되는 채팅방 존재하는 가정 하)로 메시지가 전송된다.
4. 해당 채팅방에 초대된 사람들은 메시지 알림을 받게 된다. 
5. 이 과정을 Webmethods 스케줄러를 통해 하루에 한 번 실행되도록 한다.

 

 

Webmethods 사용해보기

들어가며Software AG사에서 제공하는 Webmethods 사용하는 업무를 하게 되었다. 근데 난생 처음 들어본 툴이고, 구글링해도 자료가 많지 않다. 전용 커뮤니티가 있지만 뭔가 정보를 찾기에 편리하지

ssonzm.tistory.com

 

Webmethods Flow Service 파헤치기

Webmethods에서 flow 서비스에서 사용되는 다양한 ITEM(MAP, BRANCH 등)에 대해 자세히 알아보도록 하겠다.1. MAPflow service에서는 변수 선언 및 데이터 매핑을 MAP을 통해서 연결해야 한다.Transformers를 통해

ssonzm.tistory.com

 

구현 상세

1. 테이블 스페이스 조회 쿼리

  SELECT A.TABLESPACE_NAME,
         100 - ROUND ((FREE / TOTAL) * 100, 0)     USED_RATE,
         TO_CHAR (TOTAL) || 'GB'                   TOTAL_SIZE,
         TO_CHAR (FREE) || 'GB'                    FREE_SIZE
    FROM (  SELECT TABLESPACE_NAME, ROUND (SUM (BYTES) / 1073741824, 1) FREE
              FROM DBA_FREE_SPACE
          GROUP BY TABLESPACE_NAME) A,
         (  SELECT TABLESPACE_NAME, ROUND (SUM (BYTES) / 1073741824, 1) TOTAL
              FROM DBA_DATA_FILES
          GROUP BY TABLESPACE_NAME) B
   WHERE     A.TABLESPACE_NAME = B.TABLESPACE_NAME
         AND A.TABLESPACE_NAME = ?
ORDER BY A.TABLESPACE_NAME


테이블 스페이스의 사용량, 총량, 남은 공간을 조회하는 쿼리이다. 이 결과를 통해서 이벤트가 발생 여부가 결정된다.

 

2. Dooray! 채팅방 URL 확인

https://dooray.com/messenger/orgs

두레이 메신저 사이트에 들어가서 로그인을 하면 채팅방 목록이 보여진다.
아래 채팅 추가 아이콘을 클릭하고 주제 대화 만들기를 클릭한다. 나는 단체 채팅방을 만들 예정이라 이걸 선택했다. 

 

주제 대화 만들기를 클릭하면 대화 주제, 설명을 적는 창이 뜬다. 각자 원하는 주제 및 설명을 작성하면 된다.

그러면 채팅방이 생성된다. 이제 채팅방 URL을 확인해야한다.
우측 상단의 설정 아이콘을 클릭한다.

 

그러면 멤버/설정 메뉴가 우측에 나타난다. 그러고 서비스 연동을 클릭한다.

 

이제 서비스 연동 팝업에서 서비스 추가 탭을 선택하고 Incoming을 추가해준다.
그러면 연동 중인 서비스 탭에서 Incoming 서비스가 추가된 것을 확인할 수 있다.
이제 연동 URL 복사 버튼을 눌러 해당 채팅방의 URL을 복사한다.
이 URL이 웹훅에서 사용되는 클라이언트의 유니크한 URL이 된다.
여기서 언급되는 Incoming은 정확히 Incoming Webhook을 의미한다.

 

3. Webmethods로 트리거 생성

이벤트가 발생하는 시점 즉, 테이블 스페이스를 조회할 때 사용량이 90%를 초과한 그 시점을 트리거로 잡았다.
Webmethods 플로우 서비스의 자세한 구현 과정은 생략하도록 하겠다...ㅎㅎ
Webmethods 사용 방법에 대한 포스팅 글과 중복된다고 생각하기 때문에...!

 

중요한 건 HTTP 요청 보내는 URL에 앞서 설명한 두레이 채팅방 URL을 입력하는 것이다!
또 body 형태가 미리 지정되어 있어 제대로 데이터를 맞춰주는 게 중요하다.

{
    "botName": "두레이 웹훅 테스트", 
    "botIconImage": "https://static.dooray.com/static_images/dooray-bot.png", 
    "text":"테이블 스페이스 사용량 경고 알림",
    "attachments" : [
        {
            "title" : "test",
            "text" : "테이블 스페이스 사용량이 90%를 초과하였습니다.",
            "color" : "red"
        }
    ]
}

 

포스트맨 테스트를 진행해보면 이와 같이 메시지가 오는 것을 확인할 수 있다.
다양한 옵션이 많으니 두레이 공식문서에서 제공하는 body 데이터 형태를 참고하면 좋을 것 같다. [3]

 

 

마치며

이렇게 Dooray 인커밍 웹훅 사용기에 대해 자세히 알아보았다!
Dooray가 사내용으로 주로 쓰여서 이 주제의 글을 찾는 사람이 많지는 않을 거 같지만... 누군가에게는 유용하게 도움이 되길 바라며...

 


 

[1] https://docs.tosspayments.com/resources/glossary/webhook

[2] https://blog.jandi.com/ko/2018/10/19/jandi_connect_story_webhook/

[3] https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2900082102387865530

728x90
반응형

댓글