들어가면서
요즘 인프라 관련해서 여러 가지 만들어보는 중이다. 팀 단위로 CI/CD를 구축했다고 치자.
팀원들은 각자 통합 및 배포 타이밍이 다를 것이다. 이를 팀 전체에게 실시간 알람으로 보낸다면 프로젝트 진행에 큰 도움이 될 것이다.
`개발하면서 발생하는 이벤트에 대한 정보`를 실시간 알람으로 보내도록 구현해 보자.
이번 포스팅에서는 배포 알람 전 단계로서, 수동으로 알람을 보낼 수 있도록 구현한다.
이번 포스팅은 인프런에서 `이준형 강사님의: 안정적인 서비스 배포를 위한 배포 전략과 팁`
강의를 보며 실습하는 내용이다.
슬랙 알람이 필요한 이유
이 글에서 소개할 `Slack`이라는 업무 플랫폼으로 특정 이벤트 발생 시 알람을 보내도록 구현할 수 있다.
아래에서는 `배포`라는 이벤트에서 슬랙 알람이 필요한 이유를 설명한다.
1. 배포 상황을 실시간으로 모니터링
배포 도중에 문제가 발생하면 몇 분 몇 초라도 빠르게 대응하는 게 중요하다. 슬랙 알람을 통해서 배포의 시작/진행 과정/완료 여부/오류 정보 등의 정보를 받으면 실시간으로 모니터링하지 않아도 모니터링하는 효과가 발생하는 것이다.
모니터링하지 않아도 되어 남는 시간에는 다른 생산적인 작업을 할 수 있다.
2. 배포 상황을 연관된 서비스를 담당하는 팀원들에게 자연스럽게 공유
현대의 개발팀은 개발자, QA, 운영팀과 같은 다양한 역할의 멤버들로 구성되어 있다.
예를 들어 서비스의 백엔드 배포 직후에 프론트엔드나 데이터 분석 팀에서도 관련된 변경 사항이 반영되어야 하는 경우, 이 배포 정보에 대해서 슬랙 알람으로 받아보고 같이 대응해 줄 수 있을 것이다.
3. 히스토리가 관리되어 문제 해결에 용이
어떤 배포는 즉시 문제를 일으키지 않고, 먼 미래에 문제가 발생할 수 있다. 이런 문제는 특히 데이터의 정합성이 깨지는 경우 볼 수 있다.
예를 들어, 몇 주 전에 배포한 변경 사항이 데이터베이스의 특정 필드를 잘못 업데이트하고 있다고 가정해 보자.
그런데 이 문제를 즉시 눈치채지 못하고 한참이 지나서 데이터 통계를 내는 과정에서 이상하다는 걸 알게 된 것이다. 이런 상황에서는 데이터의 정합성을 다시 맞춰야 할 것이다. 이 경우 배포 히스토리가 있다면 어느 시점부터 어느 정도 범위까지 잘못된 것인지 파악하고 복구 액션을 취할 수 있을 것이다.
데이터 정합성(Data Consistency)
어떤 데이터들이 값이 서로 일치하는 상태를 의미한다.
슬랙 봇 만들어보기
1. 슬랙 워크스페이스 생성
워크스페이스를 만드는 자세한 과정은 생략하겠다.
무료 버전으로 워크스페이스를 하나 만들고, test 같은 이름으로 채널을 하나 만들어 준다.
2. Slack App 생성 및 권한 설정
Bot을 슬랙에서는 Application으로 표현한다.
구글에서 `Slack API: Applications`를 검색해서 방문하자.
우선 Slack API 페이지에서 앱을 생성한다. `From a manifest`를 선택하자.
App을 추가할 워크스페이스를 선택하자. (방금 만든)
JSON 설정에서 App의 이름만 변경해주자. 디폴트 네임은 식상하다.
그 후 Next, Create 한다.
만들어진 App을 클릭해서 권한을 설정해주자.
OAuth & Permissions -> Scopes -> Bot Token Scopes에서 chat:write 권한을 추가한다.
3. OAuth 설치
다음으로는 OAuth Token에서 Bot Token을 발급받자.
App의 워크스페이스에 대한 액세스 권한을 허용해 준다.
이제 워크스페이스로 가보면, 앱에 내가 만든 Deploy Bot이 추가되어 있음을 볼 수 있다.
메시지 전송
이제 Postman으로 Slack API에 요청을 보낼 것이다.
`Deploy Bot이 test 채널로 메시지를 보내는 요청`을 보내보자.
`https://slack.com/api/chat/postMessage` 로 `POST` 요청을 한다.
그다음 헤더의 `Key`로 Authorization를 추가하고,
`Value`로는 Deploy Bot의 Bot User OAuth Token을 넣어주자.
이때 반드시 `Bearer `를 토큰 앞에 추가한다.
Bearer 토큰을 통한 인증 방식이기 때문이다.
그다음 요청 Body에는 전송할 채널명에 #을 붙여서 넣어주고, 전송할 메시지를 넣는다.
이제 요청을 보내기 전 마지막 단계이다.
메시지를 전송할 채널에서 `/invite @Deploy Bot`을 해주자.
이제 요청을 보내면, 200 OK로 성공했음을 응답받는다.
test 채널에 가보면 App이 메시지를 보내놓았다.
마지막
다음으로는 `Jenkins 스크립트` 내에
`(요청 주소) + (Header 정보) + (Body 정보)`를 작성해 주어
슬랙봇이 배포 때마다 자동으로 알람을 보내도록 구현해 보겠다.
'Infra' 카테고리의 다른 글
불필요한 에러 로그는 이제 그만 – Docker Compose 환경에서 의존성을 보장하는 법 (0) | 2025.03.31 |
---|---|
[Docker + MySQL] DBeaver에서 Access Denied 문제 해결기 (0) | 2025.02.16 |