[Golang] slack api 연동해서 서버 에러를 캐치해보자

Heedoitdox·2021년 4월 28일
3

Go

목록 보기
1/1

왜 slack api 를 사용하게 되었는지 회고하듯이 적어놓은 글입니다.

🤔 코드를 보기 전에 ...

백엔드 개발자는 프론트 개발자와 배포된 api 에 대해서 커뮤니케이션할 일이 많다.
스타트업에서 백엔드 개발자로 일하고 있는 나는 하루에도 몇번씩 테스트 서버를 up to date 하고 있다.
내가 버그를 발견했든지 프론트 개발자가 테스팅하다가 버그를 발견했든지 간에 말이다.

분명 배포하기전에는 가능한 모든 에러 케이스를 핸들링 했다고 생각했는데 !!!
반드시 꼭 핸들링 하지 못한 버그가 생기기 마련이다.

그럴 때 마다 나는 서버를 배포한 AWS cloud watch 로 가서 해당 api 로그 그룹을 누르고
해당하는 시간대에... 버그가 났을만한 함수를 서치하고...
분명 로그도 나름 보기 쉽게 커스텀을 해놓았는데도...
수많은 health check 로그 중에서 단번에 에러 로그를 찾는 것은 쉽지 않다.

(분명 프론트 개발자가 본 나의 모습은 이랬을 것..)

지금 생각하면 정말 번거로운 작업인데, 개발 일정에 계속 치인 나는 계속 로컬에서 개발만 하기 바빴다.
하지만 내가 지금 개발하고 있는 서버는 user, admin, app 를 각각 담당하고 있는 세명의 개발자에게 api 를 제공 하고 있기 때문에 나중에 동시에 500 에러에 대한 피드백을 요청한다면?! 정말 끝도 없을 것 같았다.


💡 그래서! 슬랙으로 alert! 를 주기로 했지!

왜 슬랙이야?

라고 물으신다면 사내에서 쓰는 메신저가 슬랙이니까 (?) 라고 답을 하겠다.
또한 이전 프로젝트에서 python 으로 slack sdk 를 사용하여 슬랙 채널로 response 를 준 적이 있어서 Go 로도 동일한 방식으로 쉽고 빠르고 간편하게! 구현해 보고자 했다. ☺️


1) slack Bot 만들기

  1. 슬랙 api 홈페이지로 가서 Your Apps 를 누른다. (로그인 부터 해야함!)
    https://api.slack.com/

  2. 새로운 앱을 만든다.

  3. app 이름을 등록하고, 본인의 회사 계정이나 속해있는 그룹 work space 로 등록해준다.
    (알림을 받고싶은 채널의 work space!!)

  4. 앱이 생성되고 리다이렉트 되는 페이지에서 쭉 쭉 내리면 Display Information 이란 곳이 있는데 이곳에 알림을 줄 때 보였으면 하는 프로필 사진을 등록해 준다! (나는 go 캐릭터에 alert! 임을 나타내는 느낌표를 그려서 추가해줬다 ㅎ 귀여움)

그리고 이제 중요한건 아래 사진에 빨간 박스 녀석들...

  1. permissions 로 들어가서 몇가지 scope 을 허용해준다.

나는 요렇게 두개를 추가했다. 각 scope 마다 설명이 잘 되어 있으니 읽어보고 상황에 맞게 추가하면 된다.

  1. 앱 설치를 해준다 (scope 을 하나 이상 지정하고 위로 올라오면 install to Workspace 버튼이 활성화 되어있다.)


(새로 캡쳐하느라 app 이름은 tester 가 되었음)


요로코롬 토큰이 생성된 것을 볼 수 있다.

  1. 슬랙 데스크탑으로 돌아와서 알림을 보내고 싶은 채널에서 만든 앱을 추가해준다!

2) golang code

  1. 구글에 golang slack api 라고 치면 엄청 오피셜한 github 레포가 나온다.
    https://github.com/slack-go/slack


read.md 문서도 잘 되어있다. (golang 캐릭터는 저런식으로 커스텀할 수 있는게 너무 매력적인 것 같다🥰)

  1. 설치
go get -u github.com/slack-go/slack
  1. slack.go
    위의 레포만 보고 하기엔 좀 어려움이 있어서 유투브 영상도 참고했다.
    https://www.youtube.com/watch?v=V8pOzM3uTOg
package utils

import (
	"fmt"

	"github.com/slack-go/slack"
)

func SendMessageToSlack() error {
	s := "[utils/SendMessageToSlack]"
	api := slack.New("os.Getenv("SLACK_BOT_TOKEN")

	channelID, timestamp, err := api.PostMessage(
		os.Getenv("CHANNEL_ID"),
		slack.MsgOptionText("alert! you must fix it!", false),
	)

	if err != nil {
		fmt.Printf("%s %v\n", s, err)
		return err
	}

	fmt.Printf("slack message post successfully %s at %s", channelID, timestamp)
	return nil
}

간단히 확인해 볼 수 있는 방법은 go test 를 쓰면 되는데 이건 다음에 포스팅 할 것!

성공메세지!

깜찍한 gopher 캐릭터가 알림을 주는 것을 볼 수있다.

휴 드디어 실시간으로 알수 없는 에러를 트래킹 할 수 있다!
또한 프로덕션 배포했을 때도 슬랙으로 서버에 에러가 있으면 알림을 받을 수 있다 ~~ !
AWS 에서 아예 서버가 다운될 때도 알림을 줄 수 있을 텐데 이것은 다음 포스팅에...!

profile
Go, Python Developer

0개의 댓글