devFancy BE Developer

SIPE 커뮤니티를 위한 슬랙 봇 만들기 (feat. 사이프톤)

2025-01-19
devFancy

Prologue

SIPE는 개발자들이 함께 교류하며 성장하는 IT 커뮤니티입니다. 이곳에서는 다양한 활동이 이루어지며, 그중 하나인 사이프톤SIPE 구성원들과 외부 참여자가 하루 동안 함께 진행하는 해커톤입니다.

저는 이번 SIPE 3기의 사이프톤에서 커뮤니티에 작은 기여를 하고자 슬랙봇 개발을 주제로 참여하게 되었습니다. 이번 글에서는 슬랙봇을 개발하게 된 이유와 진행 과정, 그리고 사이프톤을 마치고 난 느낌을 기록하고자 이 글을 작성하게 되었습니다.

슬랙봇을 만드게 된 이유

SIPE 3기 활동에서는 6주 단위로 진행되는 1차 및 2차 미션이 있으며, 2주마다 오프라인 모임도 진행됩니다. 현재 SIPE에서는 미션 공지, 아이디어 발제, 진행 과정 및 제출, 결과 확인 등의 모든 과정을 슬랙 채널 메시지와 구글폼을 통해 이루어지고 있으며, 오프라인 모임에서는 출석체크를 운영진이 액셀 시트에 수작업으로 기록하고 관리하고 있습니다.

하지만 이런 방식에는 몇 가지 아쉬운 점이 있었습니다.

미션과 관련해서는 참가자들이 슬랙 채널의 메시지를 일일이 스크롤하며 필요한 정보를 찾아야 하는 번거로움이 있었고, 슬랙의 무료 요금제 제한으로 3개월이 지나면 과거 메시지를 확인할 수 없는 문제도 있었습니다.

오프라인 모임에서는 운영진이 출석 정보를 수동으로 정리하는 데 반복적으로 많은 시간과 비용이 소요되어, 이를 조금이라도 덜어드리고 싶다는 마음이 들었습니다.

이러한 불편함과 비효율적인 부분을 개선하기 위해 슬랙봇을 개발하여 미션과 출석체크 과정을 간소화하고 자동화하고자 했습니다. 이를 통해 SIPE 커뮤니티 활동을 더욱 효율적이고 편리하게 만들고자 하는 마음으로, 사이프톤에 해당 아이디어를 발제하게 되었습니다.

팀 빌딩

저는 슬랙봇을 개발해본 경험이 없었기 때문에, 디자이너와 프론트엔드가 있으면 좋겠다고 싶어서 모집할 때에는 디자이너 1명, 프론트엔드 1명, 백엔드 2명으로 모집 인원을 구성했습니다.

(아래는 사이프톤에 발제했던 아이디어 목록의 초기 화면입니다. 진행 중 아이디어가 일부 수정되어 초기 내용과 다를 수 있습니다)

하지만 슬랙봇 관련 공식 문서를 살펴보니, 슬랙에서 제공하는 가이드라인이 잘 정리되어 있었고, 디자인 작업이 크게 필요하지 않을 것으로 판단되었습니다. 그 과정에서 제 아이디어에 관심을 보여주신 분들이 예상보다 많아졌고, 결과적으로 프론트엔드 2명, 백엔드 3명으로 총 5명의 팀이 꾸려졌습니다.

사이프톤은 1월 18일 토요일에 진행되었으며, 그 전에 팀원들과 온라인 회의를 통해 주제를 구체화하고 역할을 나누는 시간을 가졌습니다. 또한 사이프톤 당일까지 각자가 공부하고 준비해야 할 부분에 대해 논의했습니다

기존 아이디어 외에 추가된 기능으로는 뒷풀이 기능이 있었습니다. SIPE는 오프라인 모임 이후 뒷풀이가 거의 필수적으로 이어지는데, 매번 슬랙 채널에 관련 메시지가 쌓이는 상황이 반복되었습니다. 이를 개선하기 위해 뒷풀이 관리 기능을 추가하면 좋겠다는 의견이 나왔고, 최종적으로 반영하게 되었습니다.

사이프톤 전부터 팀원들은 열정적으로 참여해주셨고, 각자 필요한 부분을 사전에 공부하고 준비해왔습니다. 덕분에 저도 큰 자극을 받았고, 더 열심히 노력해야겠다는 다짐을 하게 되었습니다. 아래는 기능 중 하나인 미션에 대해 피그마로 간단히 그린 사진입니다. (HJ님 감사합니다 👏)

진행 과정 및 결과

사이프톤 당일, 저희는 엘리스Lab 성수점에서 오전 8시 30분부터 오후 10시 30분까지 개발과 발표를 진행했습니다.

이곳에서 작업하는 것은 처음이었는데, 깔끔한 환경과 편안한 책상과 의자가 해커톤에 최적화된 장소라는 생각이 들었습니다. 또한 운영진 및 TF 분들께서 과자, 음료수, 저녁 식사까지 준비해주신 덕분에 더 편안하게 집중할 수 있었습니다. 정말 고생많으셨고 감사했습니다. 👏👏

팀 구성과 역할 분담

우리 팀명은 헬핑(Helping) 으로, 도움을 주는 봇이라는 의미와 “사랑의 하츄핑”에서 영감을 받아 이름을 지었습니다.

팀이 구현해야 할 주요 기능은 미션 관리, 출석체크, 뒷풀이로 나뉘었으며, 이를 슬랙 공식문서를 참고하여 구체적으로 설계하기로 했습니다.

다행히 슬랙의 개발자 도구 가 Java, JavaScript, Python 등 다양한 언어를 지원했기 때문에 팀원들이 각자 익숙한 언어를 활용할 수 있었습니다.

  • 프론트엔드: 미션 관리 - JavaScript

  • 백엔드: 출석체크, 뒷풀이 - Java

사이프톤의 특성상, 당일 안에 개발부터 발표까지 모두 준비해야 했기 때문에 시간이 매우 제한적이었습니다. 게다가 팀원 모두가 슬랙봇 개발 경험이 없었기에, 완벽한 구현보다는 필수 기능을 중심으로 작업을 점진적으로 확장해 나가기로 했습니다. 작업 중에 기획이나 기술적인 문제로 도움이 필요한 경우에는 서로 적극적으로 협력하기로 했습니다.

기술 선택과 개발 방식

슬랙봇 개발 경험이 처음이었지만, 참고 자료와 공식 문서가 큰 도움이 되었습니다. 특히 인프런의 커뮤니티에서 바로 써먹는 슬랙 봇 만들기 강의를 활용하여 슬랙 설정과 기본적인 기능 구현 방법을 학습했습니다. 해당 강의는 Python 기반이지만, 슬랙 공식 문서에서 Java와 JavaScript 관련 설명도 잘 제공되었기에 팀원들이 각자 익숙한 언어로 개발을 진행할 수 있었습니다.

슬랙봇 개발에는 Socket ModeHTTP 엔드포인트 방식이 있는데, 저희는 Socket Mode를 선택했습니다. 이유를 정리하면 아래와 같습니다.

  • 웹 소켓을 통해 슬랙 서버와 직접 연결하여 실시간으로 이벤트를 수신할 수 있습니다.

  • HTTP 설정이 필요 없어 간편하고, 코드를 실행만 하면 어디서든 바로 동작합니다.

  • 그렇기 때문에, Spring Boot 프레임 워크 없이 순수 Java 언어로 개발할 수 있어서 관리해야할 요소가 줄어듭니다.

  • 단, 봇을 외부에 공개 배포하는 경우에는 부적합하기 때문에, 추후 HTTP 엔드포인트로 변경해야 하는 점이 있습니다.

이번 사이프톤에서는 제한된 시간과 팀원들의 경험을 고려해 Socket Mode로 진행했고, 이후 운영진이 슬랙봇을 실제로 사용하게 된다면 HTTP 엔드포인트 방식으로 전환하기로 결정했습니다.

진행 결과

오전 8시 30분에 시작해 오후 6시까지 구현해야 할 기능을 모두 완성했습니다. 그 후, 오후 8시 30분까지는 기획의 세부적인 부분과 예외 처리를 개선했고, 마지막 30분 동안 발표 자료를 준비했습니다.

개발 목표를 모두 달성한 점이 뿌듯했고, 팀원들 모두 긴 시간 동안 페이스를 유지하며 집중해서 작업에 임해준 덕분에 성공적으로 마무리할 수 있었습니다. (우리팀 모두 하루 동안 정말 고생 많으셨어요. 😌)

발표는 3분이라는 제한 시간 안에 최대한 깔끔하게 진행하려고 노력했으며, 약간의 재미 요소도 추가해 보았습니다. 하지만 역시 발표는 매번 쉽지 않다고 느꼈습니다.

구현 결과물

  • 미션 관리: 슬랙에서 미션 공지, 진행 상태 확인, 결과 제출 등의 기능을 자동화.

  • 출석체크: 오프라인 모임에서의 출석 정보를 간편하게 기록 및 관리.

  • 뒷풀이: 뒷풀이 참여 여부를 슬랙 메시지에서 바로 처리 가능.

더 자세한 시연 영상 및 발표 자료는 Github 링크 에서 확인하실 수 있습니다. 해당 README.md 파일에는 구현한 기능의 시연 영상과 관련 코드가 포함되어 있으니 참고 부탁드립니다. (시간 제약 속에서 빠르게 작업한 만큼, 코드의 완성도를 높일 여지가 있습니다)

발표가 끝난 후 다른 팀들의 결과물을 보며 많은 걸 느꼈습니다. 특히 디자이너가 포함된 팀의 결과물이 돋보였는데, 하루 만에 나온 결과물이라고 믿기 어려울 정도로 퀄리티가 좋았습니다. 예상대로 그 팀이 우수상을 받게 되었고, 저희도 다음에는 더 세밀하고 완성도 높은 결과물을 만들어보고 싶다는 다짐을 하게 되었습니다.

사이프톤 후기

사이프톤을 진행하면서 운영진과 TF 분들이 준비해주신 스트레칭 시간, 퀴즈 타임, 그리고 무료 저녁 식사가 있었습니다. 참여자가 대략 50명 정도였는데, 다 같이 스트레칭을 하는 모습이 저에겐 신선하면서도 재밌었고 덕분에 스트레칭을 해서 몸도 조금 뻐근했던 부분이 풀렸습니다.

저녁 전에 진행된 퀴즈 타임도 머리를 식히면서 리프레시할 수 있는 시간이 되어 좋았습니다. 덕분에 긴 시간 동안 집중해서 참여할 수 있었던 것 같습니다. 저녁 식사는 크라이치즈버거였는데, 크라이치즈버거 측 직원분들이 직접 작성해준 메시지와 함께 음식을 제공해주셨던 점이 기억에 남습니다. 저녁 식사 때가 사이프톤 막바지에 접어들 즈음이었고 아직 해야할 부분이 남아있기 때문에 식사와 작업을 동시에 했던 상황이, 지금 생각해 보면 웃기기도 하고 약간 슬프기도 했습니다.

마지막으로, 사이프톤을 기획하시고 당일 늦은 시간까지 세심하게 챙겨주신 운영진과 TF 분들께 진심으로 감사드립니다. 덕분에 하루 동안 정말 즐겁고 보람찬 시간을 보낼 수 있었습니다. 정말 고생 많으셨습니다! 😊

슬랙봇에 대한 아쉬운 점과 개선할 점

사이프톤 당일에는 제한된 시간 내에 기능 구현에 집중하다 보니, 코드의 퀄리티를 충분히 신경 쓰지 못한 점이 아쉽습니다. 코드 퀄리티와 예외 처리를 조금 더 다듬을 여지가 있었다고 느꼈습니다.

또한, 작업을 로컬 환경에서만 진행한 점도 아쉬운 부분 중 하나입니다. 외부에 공개 배포하기에는 부적합하므로, 추후 HTTP 엔드포인트 방식으로 전환할 계획입니다. 만약 SIPE 운영진 분들께서 해당 슬랙봇을 실제로 사용해보고 싶다는 제안을 주신다면, 헬핑팀과 다시 논의하여 어떻게 발전시킬지 고민해볼 생각입니다.

현재는 미션 관리, 출석체크, 뒷풀이라는 세 가지 기능을 구현했지만, 앞으로 SIPE 커뮤니티 활동에 필요한 자동화 기능이 있다면 이를 추가 개발해보고 싶습니다.

더 나은 슬랙봇을 만들기 위한 좋은 아이디어가 있다면, 언제든 SIPE 커뮤니티 슬랙 채널이나 운영진 분들께 공유해 주시면 감사하겠습니다!

함께 발전시키며 더 나은 슬랙봇을 만들어 가는 것도 흥미로운 도전이 될 것 같습니다.

Reference


Index