|
| 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 | + |
| 30 | + |
| 31 | +`오프라인 모임`에서는 운영진이 출석 정보를 수동으로 정리하는 데 반복적으로 많은 시간과 비용이 소요되어, |
| 32 | +이를 조금이라도 덜어드리고 싶다는 마음이 들었습니다. |
| 33 | + |
| 34 | + |
| 35 | + |
| 36 | +이러한 **불편함과 비효율적인 부분을 개선**하기 위해 **슬랙봇을 개발하여 미션과 출석체크 과정을 간소화하고 자동화**하고자 했습니다. |
| 37 | +이를 통해 SIPE 커뮤니티 활동을 더욱 효율적이고 편리하게 만들고자 하는 마음으로, 사이프톤에 해당 아이디어를 발제하게 되었습니다. |
| 38 | + |
| 39 | +## 팀 빌딩 |
| 40 | + |
| 41 | +저는 슬랙봇을 개발해본 경험이 없었기 때문에, 디자이너와 프론트엔드가 있으면 좋겠다고 싶어서 모집할 때에는 디자이너 1명, 프론트엔드 1명, 백엔드 2명으로 모집 인원을 구성했습니다. |
| 42 | + |
| 43 | +(아래는 사이프톤에 발제했던 아이디어 목록의 초기 화면입니다. 진행 중 아이디어가 일부 수정되어 초기 내용과 다를 수 있습니다) |
| 44 | + |
| 45 | + |
| 46 | + |
| 47 | +하지만 슬랙봇 관련 공식 문서를 살펴보니, 슬랙에서 제공하는 가이드라인이 잘 정리되어 있었고, 디자인 작업이 크게 필요하지 않을 것으로 판단되었습니다. |
| 48 | +그 과정에서 제 아이디어에 관심을 보여주신 분들이 예상보다 많아졌고, 결과적으로 **프론트엔드 2명, 백엔드 3명으로 총 5명**의 팀이 꾸려졌습니다. |
| 49 | + |
| 50 | +사이프톤은 **1월 18일 토요일에 진행**되었으며, 그 전에 팀원들과 온라인 회의를 통해 주제를 구체화하고 역할을 나누는 시간을 가졌습니다. |
| 51 | +또한 사이프톤 당일까지 각자가 공부하고 준비해야 할 부분에 대해 논의했습니다 |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | +기존 아이디어 외에 추가된 기능으로는 `뒷풀이` 기능이 있었습니다. |
| 56 | +SIPE는 오프라인 모임 이후 뒷풀이가 거의 필수적으로 이어지는데, 매번 슬랙 채널에 관련 메시지가 쌓이는 상황이 반복되었습니다. |
| 57 | +이를 개선하기 위해 뒷풀이 관리 기능을 추가하면 좋겠다는 의견이 나왔고, 최종적으로 반영하게 되었습니다. |
| 58 | + |
| 59 | +사이프톤 전부터 팀원들은 열정적으로 참여해주셨고, 각자 필요한 부분을 사전에 공부하고 준비해왔습니다. |
| 60 | +덕분에 저도 큰 자극을 받았고, 더 열심히 노력해야겠다는 다짐을 하게 되었습니다. 아래는 기능 중 하나인 `미션`에 대해 피그마로 간단히 그린 사진입니다. (HJ님 감사합니다 👏) |
| 61 | + |
| 62 | + |
| 63 | + |
| 64 | +## 진행 과정 및 결과 |
| 65 | + |
| 66 | + |
| 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 | + |
| 118 | + |
| 119 | +> 구현 결과물 |
| 120 | +
|
| 121 | +* `미션 관리`: 슬랙에서 미션 공지, 진행 상태 확인, 결과 제출 등의 기능을 자동화. |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | +* `출석체크`: 오프라인 모임에서의 출석 정보를 간편하게 기록 및 관리. |
| 126 | + |
| 127 | + |
| 128 | + |
| 129 | +* `뒷풀이`: 뒷풀이 참여 여부를 슬랙 메시지에서 바로 처리 가능. |
| 130 | + |
| 131 | + |
| 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 | +{: 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/커뮤니티-슬랙-봇-만들기) |
0 commit comments