숙명여대 SW중심대학과 AWS의 협업으로 2023년 12월 ~ 2023년 2월까지 약 3개월간 진행한 AWS winter camp에 참여하였습니다. 긴 캠프의 기간동안 배운 내용들과 프로젝트 1등 수상까지의 후기를 담아보려 합니다.
AWS winter camp
AWS winter camp는 클라우딩 컴퓨팅에 대한 기술을 배우는 것을 목표로 특히 AWS 클라우드 컴퓨팅 교육과 Elastic Search에 대한 교육이 진행되는 교육 캠프였습니다.
일주일 정도 오프라인으로 Elastic Search에 주력한 교육을 받은 후 2달 간 프로젝트를 진행하는 형식이었습니다.
지원 동기
저는 백엔드 개발자(SpringBoot)를 희망하여 이와 관련된 프로젝트을 다수 진행해본 경험이 있습니다. 아무래도 사이드 프로젝트이다 보니 주로 백엔드 파트가 인프라 파트까지 맡게 되어 서버 구축과 배포, DB 설계 등을 진행하였습니다. 이 경험에서 제 AWS 지식이 부족하다 느꼈고 이에 대해 해소하기 위해 이번 AWS Winter Camp에 지원하게 되었습니다. 그동안의 배포 과정에서 있었던 어려움과 고민거리들을 풀어나가기를 기대하며 지원하였습니다.
교육 과정
오프라인 교육은 5일로 아래와 같은 주제가 진행되었습니다. 주로 AWS와 Elastic Search 활용 방법에 대한 교육을 받았습니다.
- Elastic Search 소개, Logstash & Metricbeat 실습
- 데이터 전처리/색인/관리/시각화
- Elastic Search 쿼리
- Elastic Search NLP
- AWS, 클라우드 기초
교육을 받으면서 Elastic Search에 대해 알고 활용하는 방법에 대해 학습할 수 있었습니다.
5일간의 교육 이후에는 팀별 프로젝트가 진행되었습니다. AWS와 ElasticSearch를 활용한 프로젝트로 주제는 자유롭게 선정이 가능했습니다.
프로젝트 과정 - 아이데이션
이번 대회에서는 아이데이션에 큰 힘을 쏟았습니다. 제가 아이데이션 과정에서 고민한 것들은 아래와 같습니다.
우선 평소 사용해보지 않았던 ElasticSearch를 접목시킬 수 있는 도메인이나 아이템이 무엇일까에 대한 고민이 많았습니다. 시장에 있는 여러 서비스들을 조사하다보니 데이터를 다루어 사용자에게 편의성이나 이득을 제공해주려면 기업 대상 서비스가 더 적합하다고 판단하였습니다. 이를 통해 처음 제가 생각하였던 아이디어는 여러 메세징 앱에 쏟아지는 질문과 답변들을 모아주는 서비스였습니다. 기타 다른 곳에 정리를 하더라도 일일히 찾아보기에는 어려움이 있어 다시 유사한 질문을 손쉽게 찾을 수 있거나 유사한 질문에 자동으로 답변을 달아주는 서비스를 생각하게 되었습니다.
하지만 어떤 메세지들을 대상으로 할지, ES와는 어떻게 접목할지에 대한 구체화가 필요했고 다른 팀원분의 아이디어를 통해 개발 관련 이슈들을 검색하는 서비스로 우리 팀의 서비스를 결정하게 되었습니다.
이후 개발 진행 전에 이 아이디어가 정말 실용성이 있을지 궁금하여 실제 현직자분들께 기업 내에 자체적인 stackoverflow나 트러블 슈팅 Tool이 있는지 여쭤보며 간단한 사용자 조사를 진행하였습니다. 주로 현직자분들도 기업 내 slack에서 자신에게 발생한 개발 이슈를 찾아본다는 점에서 착안하여 우리 서비스는 slack 봇 위주의 컨셉을 잡게 되었습니다.
또한 교육 동안 진행되는 AWS Slack에서도 질문 전용 채널이 있는데 검색 시에 스레드, 댓글 상관없이 많은 답변들이 쏟아져 나오는 상황을 목격하였습니다. 이를 통해 이 서비스가 다수의 사용자의 편의성을 증진시켜줄 수 있을 것이라 생각하였습니다.
서비스 기능
저희 "흰머리오목눈이"팀이 최종적으로 결정한 서비스는 "ES를 활용한 사내 이슈 검색 시스템 ISSUE TREE" 이었습니다.
구체적인 서비스 플로우와 기능은 아래와 같습니다.
① 이슈 저장 기능
- Slack의 이슈 관련 채널에서 발생한 이슈(스택, 버전, 이슈)를 등록한다.
- 이슈에 대해 스레드의 댓글로 논의한다.
- 발생한 이슈가 해결되면 SlackBot을 호출한다.
- 해결된 스레드의 이슈 정보와 댓글로 나눈 정보들을 ES에 저장한다.
② 이슈 검색 기능
- Streamlit 페이지에 오류 메세지를 검색한다.
- 문서화된 이슈 중 내용 > 날짜 > 버전을 우선적으로 검색 결과를 나타낸다.
③ 이슈 확인 기능
- Streamlit 페이지에 ES 대시보드를 탑재하여 그동안 발생한 이슈의 통계적인 추이를 손쉽게 확인한다.
- 예시: 최다 이슈 스택, 최다 이슈 버전, 일별 이슈 요청 추이, 문서화된 이슈의 수치
④ 도움 요청 기능
- Streamlit에 검색하여 해결하지 못한 이슈의 에러 메세지를 파싱한다.
- 에러 경로와 에러 위치를 통해 Github 상의 마지막 수정자의 아이디를 불러온다.
- Github 아이디를 통해 Slack의 해당 담당자를 찾는다.
- Slack봇이 담당자의 DM과 팀 채널에 해당 이슈에 대한 내용을 전송한다.
이슈 저장 기능
이 중에서 제가 맡은 기능은 이슈 저장 기능이었습니다. 이 기능의 핵심은 사용자 사이에 대화로 오고 간 이슈에 대한 해결책들이 아주 손쉽게 문서화가 되어야 한다는 점이었습니다.
이 기능을 구현하기 위해 Slack API 공식 문서 탭을 10개씩 열어두며.. 어떤 API를 사용해야 효율적이고 확실하게 데이터를 받아올 수 있을까 고민을 많이 하였습니다.
1. 이슈 등록 워크플로우
우선 질문자가 이슈를 채널에 등록할 때 사용자 친화적으로 등록할 수 있게 하기 위해 Slack의 워크플로우 기능을 사용하였습니다. 아래와 같이 질문 채널에서 이슈트리 워크플로🌳를 선택하면 에러 해결 요청을 할 수 있습니다.
워크플로우를 설정하면서 스택과 버전이 질문자마다 작성하는 기법이 다를 것 같아 옵션으로 삽입하거나 예시를 들어주도록 워크플로우를 커스터마이징 하였습니다. 또한 내용에 에러코드 전문을 첨부하도록 안내하여 이후 이슈 문서화와 검색에 용이하도록 하였습니다. 가장 우려되었던 부분은 보안인데 특히 민감 정보가 워크플로우에 입력되지 않도록 경고 문구를 작성하였습니다.
2. 이슈 해결 처리
이후 여러 개발자들이 스레드 댓글로 해결책에 대해 논의한 후 이 과정을 어떤 트리거를 거쳐 ES에 저장하도록 알고리즘을 구축할 것인지에 대해 엄청 많은 고민을 하였습니다.
이슈가 해결되면 워크플로우에 작성된 내용과 실제 스레드에서 논의된 댓글들의 내용을 모두 서버로 끌고 가야 했습니다. 하지만 '이슈가 해결된 것을 서버가 어떻게 알지?' 부터 난관에 부딪혔습니다.
첫 번째 시도는 SlackBot 이용이었습니다.
본래는 Slack 내 스레드에서 댓글로 이슈에 대한 논의가 끝나고 이슈가 해결되면 SlackBot을 호출하는 식으로 ES에 데이터를 저장하고자 하였습니다.
😨 하지만 가장 큰 문제점.. 스레드의 댓글에서는 Slash Command가 발동하지 않는다는 사실이었습니다.
이후 이것저것 SlackAPI의 다른 기능들을 대입하여 고민하던 중 Event Subscription를 알게 되었습니다. 이벤트를 탐지해주는 기능인데 채널 생성, 메세지 등록, 프로필 변경 등 다양한 이벤트를 감지하는 기능이었습니다. 저는 이중 아래 메세지 게시에 관련된 두 이벤트를 구독하였습니다.
즉 워크플로우라는 메세지가 게시되고 해결 후에 한 번 더 댓글이 아닌 메세지가 게시되어야 그 이슈가 해결되었다는 것을 Slack Bot이, 서버가 감지를 할 수 있었습니다.
😨이미 게시된 워크플로우 메세지를 어떻게 "메세지 게시 이벤트"로 만들 수 있을까 고민하던 중 버튼을 생각하게 되었습니다.
💡아래와 같이 워크플로우에 버튼을 생성하고 해결 이후 이 버튼을 클릭하면 메세지가 수정되어 "메세지 게시 이벤트" 트리거에 걸린다는 사실을 여러 번의 테스트 끝에 알게 되었습니다. 또한 워크플로우는 다른 방식으로는 메세지가 수정되지 않는다는 것 또한 알게 되었습니다. 이 해결 버튼을 통해 이 기능의 핵심이었던 사용자에게 쉽고 빠른 데이터 저장 목표까지 달성할 수 있었습니다.
이를 통해 서버에 게시된 메세지에 대한 Payload가 전송되게 되었고 이 데이터를 검증하고 파싱하여 정확히 "이슈와 해결이 이루어진 메세지"만 서버에서 데이터가 처리되도록 로직을 구축하였습니다. 제가 구축한 로직은 아래 사진과 같습니다.
로직을 간단하게 설명하면 아래와 같습니다.
- 서버에 넘어온 Payload가 이벤트 감지로 넘어온 것인지, 해결 버튼이 눌려진 것인지 확인하여 메세지의 고유 ID 값을 추출
- 메세지 고유 ID 값으로 해당 워크플로우 내용을 ConversationReplies API를 통해 불러옴
- 워크플로우의 스택, 버전, 이슈내용, 질문자, 논의 내용을 모두 파싱
- 질문자와 답변자의 ID 값으로 Slack 에서의 이름을 UserInfo API를 통해 불러옴
- 이슈에 대한 해결책 내용을 ChatGPT API를 통해 요약함
- 최종적으로 스택, 버전, 이슈 내용, 질문자 이름, 요약된 논의 과정과 참여한 사람들을 모두 ES에 저장
이 기능을 구현하며 정말 많은 Slack API를 들여다 보고, 여러 경우에 따른 로직을 생각해보고, 어떤 로직이 가장 효율적이고 자원 낭비가 없을지 많은 고민을 하였습니다. 이 부분에 대한 실제 코드와 구현 로직은 다른 글에서 공개할 예정입니다.
CI/CD
저희 팀은 빠른 개발과 배포를 위해 개발 이전에 CI/CD 구축을 진행하였습니다. 이 CI/CD 구축을 제가 맡게 되었습니다. CI/CD 로직은 아래 사진과 같습니다.
사용하던 AWS와 ES 계정이 모두 주최측 소유라 많은 권한 이슈가 있었지만 다른 팀원분의 도움으로 끝까지 완성할 수 있었습니다.
최종 발표
최종 발표를 위해 PPT 작업을 팀원들과 진행하였는데 서로의 의견에 여과없이 다른 의견을 덧붙여 멋있게 완성시킬 수 있었습니다. 이 과정에서 서비스에 있던 허점도 보완할 수 있었고 어떻게 하면 우리 서비스에 사람들이 깊이 공감해줄 수 있을지에 대한 부분을 많이 고민하여 담아내고자 하였습니다. 이 발표 자료를 준비하면서 다른 팀원들한테 디자인, 배치, 내용 등 많은 점을 배울 수 있었습니다.🥰🥰🥰 저희 발표 자료는 아래 링크에서 확인해보실 수 있습니다.
이번 발표에 대한 평가 지표는 아래와 같았습니다.
🎉🎉🎉 결과적으로 너무 감사하게도 1등을 수상하게 되었습니다. 🎉🎉🎉
심사평을 빌려 써보자면.. 발표를 너무 잘하셔서 (Thanks to 팀장님) 귀에 쏙쏙 들어왔고 개발을 한다면 실제로 정말 쓰고 싶은 툴이라는 심사평을 들었습니다. 그리고 무엇보다 모든 심사위원에게 평가지표 만점을 받아 무척 기뻤던 수상이었습니다.
소감
처음 Camp를 통해 교육을 진행하면서 새로운 ElsticSearch 라는 기술을 배우게 되어 뜻깊었습니다. 앞으로 어떤 서비스의 기술을 생각할 때 제 시야를 넓혀줄 수 있는 기회라고 생각했습니다. 실제로 이후 다른 사이드 프로젝트에서 검색 엔진으로서 ElasticSearch를 활용할지에 대해 논의를 하였고 이런 과정이 모두 Camp를 통해 ElasticSearch를 접해보았기 때문이라고 생각합니다. 제가 이전에 경험해보지 못한 새로운 시각을 배울 수 있었습니다. 특히 Camp의 멘토님들과 실습을 진행하며 안되는 기능 하나하나 살펴보는 과정에서 오류의 원인으로 무엇을 떠올려봐야 할지 등 많은 것들을 배울 수 있었습니다.
프로젝트에서는 제 특기인 SpringBoot를 이용해 멋진 서비스를 만들게 되어 영광이었던 2달이었습니다. 그 과정에서도 처음 Slack API를 다루어 많은 레퍼런스와 공식문서를 찾고 고민하여야 했는데 그런 과정 끝에 완성도 있는 결과물을 낸 것에 대한 뿌듯함과 개발에 대한 즐거움을 느낄 수 있었습니다. 또한 처음 CI/CD 구축을 하며 권한 문제에 많이 부딪혔는데 AWS 측 멘토분께서 권한에 대한 내용을 많이 말씀해주셔 많은 것을 배울 수 있었습니다.
그리고 무엇보다 어쩜 그렇게 발표를 잘하고, 매번 좋은 피드백과 아이디어를 내고, 급히 추가되는 부분도 뚝딱뚝딱 만들어내고, 자신의 일이 아니어도 발 벗고 나서서 도와주는지~~ 정말 최고의 팀원분들이 있어 찬란했던 2달이 아니었나 싶습니다. 💙💙💙
'Review' 카테고리의 다른 글
[동아리] 모바일 앱 프로그래밍 동아리 "APPS" 운영진(회장) 후기 (0) | 2024.01.27 |
---|---|
[행사] 2023 Dev Chat" 컨퍼런스 후기 (0) | 2024.01.23 |
[해커톤] "SW중심대학 공동해커톤 2023" 참여 후기 (0) | 2024.01.19 |
[IT/SW 서포터즈] "스타트업 서포터즈 잇다(IT다)" 4기 활동 후기 (0) | 2024.01.18 |
[부트캠프] comento(코멘토) "데이터엔지니어 직무부트캠프" 수료 후기 (1) | 2024.01.18 |