Skip to content

Commit b893f33

Browse files
committed
Write E.T.C Post " SIPE 커뮤니티를 위한 슬랙 봇 만들기 (feat. 사이프톤) "
1 parent 441bfba commit b893f33

13 files changed

Lines changed: 176 additions & 1 deletion

_posts/2025-01-01-2025-DevHistory.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ author: devFancy
1616

1717
## Plan
1818

19-
* [2024 Plan Note](https://gist.github.com/devFancy/69dd0f78f039f8ee2fb6fdfde88c959f)
19+
* [2025 Plan Note](https://gist.github.com/devFancy/cb98297a5fee3445805f08c5d590ddb1)
2020

2121
<script src="https://gist.github.com/devFancy/cb98297a5fee3445805f08c5d590ddb1.js"></script>
2222

@@ -30,3 +30,4 @@ author: devFancy
3030

3131
## A Weekly Record
3232

33+
* [SIPE 커뮤니티를 위한 슬랙 봇 만들기 (feat. 사이프톤)](https://github.com/devFancy/ETC-Sipethon-Slackbot/)
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
---
2+
layout: post
3+
title: " SIPE 커뮤니티를 위한 슬랙 봇 만들기 (feat. 사이프톤) "
4+
categories: E.T.C
5+
author: devFancy
6+
---
7+
* content
8+
{:toc}
9+
10+
## Prologue
11+
12+
[SIPE](https://sipe.team/)는 개발자들이 함께 교류하며 성장하는 IT 커뮤니티입니다.
13+
이곳에서는 다양한 활동이 이루어지며, 그중 하나인 `사이프톤`**SIPE 구성원들과 외부 참여자가 하루 동안 함께 진행하는 해커톤**입니다.
14+
15+
저는 이번 SIPE 3기의 사이프톤에서 커뮤니티에 작은 기여를 하고자 `슬랙봇` 개발을 주제로 참여하게 되었습니다.
16+
이번 글에서는 슬랙봇을 개발하게 된 이유와 진행 과정, 그리고 사이프톤을 마치고 난 느낌을 기록하고자 이 글을 작성하게 되었습니다.
17+
18+
## 슬랙봇을 만드게 된 이유
19+
20+
SIPE 3기 활동에서는 6주 단위로 진행되는 1차 및 2차 미션이 있으며, 2주마다 오프라인 모임도 진행됩니다.
21+
현재 SIPE에서는 미션 공지, 아이디어 발제, 진행 과정 및 제출, 결과 확인 등의 모든 과정을 슬랙 채널 메시지와 구글폼을 통해 이루어지고 있으며,
22+
오프라인 모임에서는 `출석체크`를 운영진이 액셀 시트에 수작업으로 기록하고 관리하고 있습니다.
23+
24+
하지만 이런 방식에는 몇 가지 아쉬운 점이 있었습니다.
25+
26+
`미션`과 관련해서는 참가자들이 슬랙 채널의 메시지를 일일이 스크롤하며 필요한 정보를 찾아야 하는 번거로움이 있었고,
27+
슬랙의 무료 요금제 제한으로 3개월이 지나면 과거 메시지를 확인할 수 없는 문제도 있었습니다.
28+
29+
![](/assets/img/sipe/Sipe_Mission_Example.png)
30+
31+
`오프라인 모임`에서는 운영진이 출석 정보를 수동으로 정리하는 데 반복적으로 많은 시간과 비용이 소요되어,
32+
이를 조금이라도 덜어드리고 싶다는 마음이 들었습니다.
33+
34+
![](/assets/img/sipe/Sipe_Attendance_Excel.png)
35+
36+
이러한 **불편함과 비효율적인 부분을 개선**하기 위해 **슬랙봇을 개발하여 미션과 출석체크 과정을 간소화하고 자동화**하고자 했습니다.
37+
이를 통해 SIPE 커뮤니티 활동을 더욱 효율적이고 편리하게 만들고자 하는 마음으로, 사이프톤에 해당 아이디어를 발제하게 되었습니다.
38+
39+
## 팀 빌딩
40+
41+
저는 슬랙봇을 개발해본 경험이 없었기 때문에, 디자이너와 프론트엔드가 있으면 좋겠다고 싶어서 모집할 때에는 디자이너 1명, 프론트엔드 1명, 백엔드 2명으로 모집 인원을 구성했습니다.
42+
43+
(아래는 사이프톤에 발제했던 아이디어 목록의 초기 화면입니다. 진행 중 아이디어가 일부 수정되어 초기 내용과 다를 수 있습니다)
44+
45+
![](/assets/img/sipe/Sipethon_Idea_List.png)
46+
47+
하지만 슬랙봇 관련 공식 문서를 살펴보니, 슬랙에서 제공하는 가이드라인이 잘 정리되어 있었고, 디자인 작업이 크게 필요하지 않을 것으로 판단되었습니다.
48+
그 과정에서 제 아이디어에 관심을 보여주신 분들이 예상보다 많아졌고, 결과적으로 **프론트엔드 2명, 백엔드 3명으로 총 5명**의 팀이 꾸려졌습니다.
49+
50+
사이프톤은 **1월 18일 토요일에 진행**되었으며, 그 전에 팀원들과 온라인 회의를 통해 주제를 구체화하고 역할을 나누는 시간을 가졌습니다.
51+
또한 사이프톤 당일까지 각자가 공부하고 준비해야 할 부분에 대해 논의했습니다
52+
53+
![](/assets/img/sipe/Sipethon_Team3_Meeting.png)
54+
55+
기존 아이디어 외에 추가된 기능으로는 `뒷풀이` 기능이 있었습니다.
56+
SIPE는 오프라인 모임 이후 뒷풀이가 거의 필수적으로 이어지는데, 매번 슬랙 채널에 관련 메시지가 쌓이는 상황이 반복되었습니다.
57+
이를 개선하기 위해 뒷풀이 관리 기능을 추가하면 좋겠다는 의견이 나왔고, 최종적으로 반영하게 되었습니다.
58+
59+
사이프톤 전부터 팀원들은 열정적으로 참여해주셨고, 각자 필요한 부분을 사전에 공부하고 준비해왔습니다.
60+
덕분에 저도 큰 자극을 받았고, 더 열심히 노력해야겠다는 다짐을 하게 되었습니다. 아래는 기능 중 하나인 `미션`에 대해 피그마로 간단히 그린 사진입니다. (HJ님 감사합니다 👏)
61+
62+
![](/assets/img/sipe/Sipethon_Team3_Mission_PreWork.png)
63+
64+
## 진행 과정 및 결과
65+
66+
![](/assets/img/sipe/Sipethon_Elice.png)
67+
68+
사이프톤 당일, 저희는 `엘리스Lab 성수점`에서 오전 8시 30분부터 오후 10시 30분까지 개발과 발표를 진행했습니다.
69+
70+
이곳에서 작업하는 것은 처음이었는데, 깔끔한 환경과 편안한 책상과 의자가 해커톤에 최적화된 장소라는 생각이 들었습니다.
71+
또한 운영진 및 TF 분들께서 과자, 음료수, 저녁 식사까지 준비해주신 덕분에 더 편안하게 집중할 수 있었습니다. 정말 고생많으셨고 감사했습니다. 👏👏
72+
73+
### 팀 구성과 역할 분담
74+
75+
우리 팀명은 **헬핑(Helping)** 으로, 도움을 주는 봇이라는 의미와 "사랑의 하츄핑"에서 영감을 받아 이름을 지었습니다.
76+
77+
팀이 구현해야 할 주요 기능은 **미션 관리, 출석체크, 뒷풀이**로 나뉘었으며, 이를 슬랙 공식문서를 참고하여 구체적으로 설계하기로 했습니다.
78+
79+
다행히 슬랙의 [개발자 도구](https://tools.slack.dev/) 가 Java, JavaScript, Python 등 다양한 언어를 지원했기 때문에 팀원들이 각자 익숙한 언어를 활용할 수 있었습니다.
80+
81+
* 프론트엔드: 미션 관리 - JavaScript
82+
83+
* 백엔드: 출석체크, 뒷풀이 - Java
84+
85+
사이프톤의 특성상, 당일 안에 개발부터 발표까지 모두 준비해야 했기 때문에 시간이 매우 제한적이었습니다.
86+
게다가 팀원 모두가 슬랙봇 개발 경험이 없었기에, 완벽한 구현보다는 **필수 기능을 중심으로 작업을 점진적으로 확장**해 나가기로 했습니다.
87+
작업 중에 기획이나 기술적인 문제로 도움이 필요한 경우에는 서로 적극적으로 협력하기로 했습니다.
88+
89+
### 기술 선택과 개발 방식
90+
91+
슬랙봇 개발 경험이 처음이었지만, 참고 자료와 공식 문서가 큰 도움이 되었습니다.
92+
특히 인프런의 [커뮤니티에서 바로 써먹는 슬랙 봇 만들기](https://www.inflearn.com/course/커뮤니티-슬랙-봇-만들기) 강의를 활용하여 슬랙 설정과 기본적인 기능 구현 방법을 학습했습니다.
93+
해당 강의는 Python 기반이지만, 슬랙 공식 문서에서 Java와 JavaScript 관련 설명도 잘 제공되었기에 팀원들이 각자 익숙한 언어로 개발을 진행할 수 있었습니다.
94+
95+
슬랙봇 개발에는 `Socket Mode``HTTP 엔드포인트` 방식이 있는데, 저희는 Socket Mode를 선택했습니다. 이유를 정리하면 아래와 같습니다.
96+
97+
* 웹 소켓을 통해 슬랙 서버와 직접 연결하여 실시간으로 이벤트를 수신할 수 있습니다.
98+
99+
* HTTP 설정이 필요 없어 간편하고, 코드를 실행만 하면 어디서든 바로 동작합니다.
100+
101+
* 그렇기 때문에, Spring Boot 프레임 워크 없이 순수 Java 언어로 개발할 수 있어서 관리해야할 요소가 줄어듭니다.
102+
103+
* 단, 봇을 외부에 공개 배포하는 경우에는 부적합하기 때문에, 추후 HTTP 엔드포인트로 변경해야 하는 점이 있습니다.
104+
105+
이번 사이프톤에서는 제한된 시간과 팀원들의 경험을 고려해 `Socket Mode`로 진행했고, 이후 운영진이 슬랙봇을 실제로 사용하게 된다면 `HTTP 엔드포인트` 방식으로 전환하기로 결정했습니다.
106+
107+
### 진행 결과
108+
109+
오전 8시 30분에 시작해 오후 6시까지 구현해야 할 기능을 모두 완성했습니다.
110+
그 후, 오후 8시 30분까지는 기획의 세부적인 부분과 예외 처리를 개선했고, 마지막 30분 동안 발표 자료를 준비했습니다.
111+
112+
개발 목표를 모두 달성한 점이 뿌듯했고, 팀원들 모두 긴 시간 동안 페이스를 유지하며 집중해서 작업에 임해준 덕분에 성공적으로 마무리할 수 있었습니다.
113+
(우리팀 모두 하루 동안 정말 고생 많으셨어요. 😌)
114+
115+
발표는 3분이라는 제한 시간 안에 최대한 깔끔하게 진행하려고 노력했으며, 약간의 재미 요소도 추가해 보았습니다. 하지만 역시 발표는 매번 쉽지 않다고 느꼈습니다.
116+
117+
![](/assets/img/sipe/Sipethon_Presentation.png)
118+
119+
> 구현 결과물
120+
121+
* `미션 관리`: 슬랙에서 미션 공지, 진행 상태 확인, 결과 제출 등의 기능을 자동화.
122+
123+
![](/assets/img/sipe/Sipethon_SlackBot_Result_1.png)
124+
125+
* `출석체크`: 오프라인 모임에서의 출석 정보를 간편하게 기록 및 관리.
126+
127+
![](/assets/img/sipe/Sipethon_SlackBot_Result_2.png)
128+
129+
* `뒷풀이`: 뒷풀이 참여 여부를 슬랙 메시지에서 바로 처리 가능.
130+
131+
![](/assets/img/sipe/Sipethon_SlackBot_Result_3.png)
132+
133+
더 자세한 시연 영상 및 발표 자료는 [Github 링크](https://github.com/sipe-team/sipethon-3_3_helpingbot) 에서 확인하실 수 있습니다.
134+
해당 `README.md` 파일에는 구현한 기능의 시연 영상과 관련 코드가 포함되어 있으니 참고 부탁드립니다. (시간 제약 속에서 빠르게 작업한 만큼, 코드의 완성도를 높일 여지가 있습니다)
135+
136+
발표가 끝난 후 다른 팀들의 결과물을 보며 많은 걸 느꼈습니다.
137+
특히 디자이너가 포함된 팀의 결과물이 돋보였는데, 하루 만에 나온 결과물이라고 믿기 어려울 정도로 퀄리티가 좋았습니다.
138+
예상대로 그 팀이 우수상을 받게 되었고, 저희도 다음에는 더 세밀하고 완성도 높은 결과물을 만들어보고 싶다는 다짐을 하게 되었습니다.
139+
140+
## 사이프톤 후기
141+
142+
사이프톤을 진행하면서 운영진과 TF 분들이 준비해주신 스트레칭 시간, 퀴즈 타임, 그리고 무료 저녁 식사가 있었습니다.
143+
참여자가 대략 50명 정도였는데, 다 같이 스트레칭을 하는 모습이 저에겐 신선하면서도 재밌었고 덕분에 스트레칭을 해서 몸도 조금 뻐근했던 부분이 풀렸습니다.
144+
145+
저녁 전에 진행된 퀴즈 타임도 머리를 식히면서 리프레시할 수 있는 시간이 되어 좋았습니다. 덕분에 긴 시간 동안 집중해서 참여할 수 있었던 것 같습니다.
146+
저녁 식사는 크라이치즈버거였는데, 크라이치즈버거 측 직원분들이 직접 작성해준 메시지와 함께 음식을 제공해주셨던 점이 기억에 남습니다.
147+
저녁 식사 때가 사이프톤 막바지에 접어들 즈음이었고 아직 해야할 부분이 남아있기 때문에 식사와 작업을 동시에 했던 상황이, 지금 생각해 보면 웃기기도 하고 약간 슬프기도 했습니다.
148+
149+
![](/assets/img/sipe/Sipethon_crycheeseburger.png){: width="400"}
150+
151+
마지막으로, 사이프톤을 기획하시고 당일 늦은 시간까지 세심하게 챙겨주신 운영진과 TF 분들께 진심으로 감사드립니다.
152+
덕분에 하루 동안 정말 즐겁고 보람찬 시간을 보낼 수 있었습니다. 정말 고생 많으셨습니다! 😊
153+
154+
## 슬랙봇에 대한 아쉬운 점과 개선할 점
155+
156+
사이프톤 당일에는 제한된 시간 내에 기능 구현에 집중하다 보니, 코드의 퀄리티를 충분히 신경 쓰지 못한 점이 아쉽습니다.
157+
코드 퀄리티와 예외 처리를 조금 더 다듬을 여지가 있었다고 느꼈습니다.
158+
159+
또한, 작업을 로컬 환경에서만 진행한 점도 아쉬운 부분 중 하나입니다. 외부에 공개 배포하기에는 부적합하므로, **추후 HTTP 엔드포인트 방식으로 전환할 계획**입니다.
160+
만약 **SIPE 운영진 분들께서 해당 슬랙봇을 실제로 사용해보고 싶다는 제안을 주신다면**, 헬핑팀과 다시 논의하여 어떻게 발전시킬지 고민해볼 생각입니다.
161+
162+
현재는 미션 관리, 출석체크, 뒷풀이라는 세 가지 기능을 구현했지만, 앞으로 SIPE 커뮤니티 활동에 필요한 자동화 기능이 있다면 이를 추가 개발해보고 싶습니다.
163+
164+
**더 나은 슬랙봇을 만들기 위한 좋은 아이디어가 있다면, 언제든 SIPE 커뮤니티 슬랙 채널이나 운영진 분들께 공유해 주시면 감사하겠습니다!**
165+
166+
함께 발전시키며 더 나은 슬랙봇을 만들어 가는 것도 흥미로운 도전이 될 것 같습니다.
167+
168+
## Reference
169+
170+
* [[공식문서] slack-developer-tools](https://tools.slack.dev/)
171+
172+
* [[공식문서] slack api](https://api.slack.com/docs)
173+
174+
* [인프런 강의(무료): 커뮤니티에서 바로 써먹는 슬랙 봇 만들기](https://www.inflearn.com/course/커뮤니티-슬랙-봇-만들기)
596 KB
Loading
706 KB
Loading

assets/img/sipe/Sipethon_Elice.png

3.06 MB
Loading
540 KB
Loading
1.68 MB
Loading
386 KB
Loading
517 KB
Loading
609 KB
Loading

0 commit comments

Comments
 (0)