본문 바로가기

카테고리 없음

구름톤 15기 BE 참여 - 우수상 수상 및 후기

 

지원한 이유

지난 8월 쯤에 구름톤 15기를 모집한다는 인스타 광고를 보았다. 이전 구름톤 지원에서 떨어진 이력이 있기도 했고 이미 다른 해커톤을 진행중이었어서 처음에는 생각이 없었다.

 

시간이 지날수록 내 마음 깊은 곳에서 다음과 같은 목소리들이 들려왔다.

- 제주도 간 김에 워케이션 하자! (<- 결론적으로 이 말은 전혀 소용 없게 되었다)
- 새로운 기술적 도전을 해보고 싶다
- 좋은 인적 네트워크를 쌓고 싶다
- 나 홀로 백엔드를 담당하여 중압감을 홀로 감당하는 경험을 해보고 싶다
- 쿠버네티스를 사용해보고 싶다

 

그래, 어차피 저번에도 떨어졌는데 이번도 아쉽지나 않게 지원이나 해보자!

 

그렇게 하루정도를 잡고 지원서를 작성하게 되었다. 

 

자기소개서 항목별 포인트

솔직히 구름톤 백엔드는 단 6명만 뽑기 때문에 운빨이 중요하다. 다만 DB, 인프라, CI/CD 파이프라인 까지 홀로 빠르게 구축할 수 있는 역량정도는 잘 드러내야 될 것 같았다.

 

여전히 구름톤의 자기소개서 항목은 매우매우 많았다. BE 항목별 포인트를 준 부분은 다음과 같았다.

 

가장 자신 있는 언어와 프레임워크를 작성하고 이유를 설명해주세요. (공란 포함 최대 300자)

 

Java와 Spring Boot를 적었다.  우테코에서 Servlet 내부구현을 탐구하고 이해한 경험, 그리고 지금까지 플젝을 하면서 Java&Spring을 사용했기 때문에 태스크 범위 지정 및 구현 리소스를 갸늠하는데 가장 익숙한 언어와 프레임워크임을 강조했다.

 

본인이 설계한 API나 데이터베이스 구조에 대해 설명할 수 있는 예시가 있다면 공유해주세요. (공란 포함 최대 300자)*

 

DB 설계 시 고려한 점을 그대로 쓰기 보다, 그 설계방식을 통해 내가 가지고 있는 DB에 대한 이해도와 역량이 드러나게 했다.

 

자기소개서 원문을 그대로 첨부하겠다.

  1. 토큰 블랙리스트, 리프레시 토큰처럼 조회가 잦은 데이터는 Redis를 통해 관리하였습니다.
  2. 레포지토리의 풀리퀘스트 개수처럼 추가 쿼리 비용이 높은 데이터는 역정규화로 구성하였습니다.
  3. DB락 전파를 피하고자 간접참조를 하되, 외래키 제약조건을 걸지 않았습니다.

 

서버 배포 경험이 있나요? 있다면 어떤 방식(예: AWS, Vercel, Heroku 등)으로 진행했나요? (공란 포함 최대 300자)

 

무중단 배포 구축 경험과 태깅을 통한 배포 롤백 전략에 대해 간단히 서술하였다. 정확히 어떤 플로우를 통해 배포 파이프라인을 구성했는지 서술하였고, 어디까지 고려했는지 서술하였다.

 

동시 접속자 수가 많은 서비스에서 성능 최적화를 해본 경험이 있다면 설명해주세요. (공란 포함 최대 300자)

 

프로젝트에서 응답속도가 느린 AI로 인해 1) 트랜잭션 고갈 2) 느린 응답속도라는 문제를 트랜잭션 분리와 비동기 + 이벤트 리스닝 방식으로 성능 최적화를 한 경험을 서술했다.

 

구름톤 참여 동기를 작성해주세요.(공란 포함 최대 500자)

 

개발은 ‘창의적 아이디어를 실현해 사회에 영향력을 주는 과정’이라 믿었고 그 가치의 실현을 다양한 사이드 프로젝트에서 경험한 바를 서술했다. (ex. 디베이트 타이머 회원 200명 달성 과정 등) 그러나, 취준을 하며 그 초심이 흐려지고 기술에 매몰되고 있음을 느껴 구름톤을 통해 아이디어를 실현하며 느꼈던 열정과 동기를 되찾고자 지원한다고 서술했다.

 

구름톤을 통해 어떤 부분의 '성장'을 기대하고 있는지, 있다면 작성해주세요. (공란 포함 최대 300자)

 

사람, 지식, 경험을 얻고 싶다고 썼다. 다양한 직군과의 소통경험, 쿠버네티스 배포에 대한 관심을 서술하였으나 특별한 내용은 없었던 것 같다.

 

협업 시 지키는 본인만의 규칙이나 전략은 무엇인가요? 갈등 상황이 발생했을 때의 해결 방법도 함께 알려주세요.(공란 포함 최대 500자)

 

모든 팀원이 같은 개념의 서비스 비전을 바라보게 하는 것을 썼다. 이전 해커톤에서 협업시 가장 힘들었던 것이 서로가 같은 단어를 다르게 이해하고 있는 것이었기 때문에 그라운드 룰 설정과 서비스 비전 일치화의 중요성을 어필했다.

 

5-1. 진행하신 프로젝트 중 하나를 선택하여 설명해 주시고, 그 경험으로 인해 얻을 수 있었던 결과를 작성해주세요. (공란 포함 최대 500자)

 

 

디베이트 타이머를 리딩하며 장기간 팀원들과 협업하는 경험을 통한 기술적 결정능력, 그리고 실사용유저 200명을 유치하는 과정에서 얼마나 도메인 중심으로 서비스를 이해하고 리딩해왔는지를 어필했다.

 

 

합격, 그리고 진짜 제주에 가다

 

얼떨결에 합격을 했다. 한 일주일 전에 합격 문자를 주고 바로 비행기 티켓과 숙소 예약을 해야 했다.

 

그리고 진짜 제주에 갔다 ㅋㅋ

 

 

첫째날, 자기소개 - 쿠버네티스 교육

 

자기소개

구름톤에서는 팀빌딩이 자율이다. 그렇기 때문에 첫째날 자기소개가 굉장히 중요하다.

 

나는 다음 3가지를 강조했다

- 백엔드 개발 뿐 아니라 기획적 능력이 있다
- 3번째 해커톤 참여이며, 이전 해커톤에서 수상경험이 있다
- 토론 경험을 기반으로 발표 경력이 많다

 

사실 해커톤은 디자이너 X 기획의 매드무비이기 때문에 백엔드로서 당신들의 아이디어를 안정적으로 시간내에 구현할 수 있다는 확신을 주기 위해 노력했다.

 

쿠버네티스 교육

이후에는 쿠버네티스 및 인프라 교육이 진행되었다.

 

구름톤에서는 쿠버네티스 배포 + Jenkins를 통한 CI + ArgoCD를 활용한 CI/CD 배포를 할 경우 가산점이 주어진다.

사실상 말이 가산점이지 대부분의 팀이 해당 스펙으로 배포하기 때문에, 가이드대로 배포하지 않으면 감점이 된다는 것과 마찬가지이다.

 

문제는 내가 3가지 툴을 모두 사용해본적이 없었다. 그런데 교육은 약 1시간 30분 정도로 스피디하게 진행되었고 노션 가이드 문서를 주셔서 이를 기반으로 개인적인 학습이 필요했다. 물론 쿠버네티스를 활용해볼 수 있는 기회였지만 결과적으론 아쉬운 부분이 있었다.

 

더 정확히 느꼈던 아쉬움은 다음과 같았다.

  • 1시간 30분 안에 핵심을 알려주지만, 쿠버네티스부터 CI/CD까지 깊이 있는 이해를 하기엔 힘들다
  • 가이드 문서가 상세해 이를 따라하면 되지만 에러 발생 시 결국 코치님이나 AI에게 의존해야 한다.
  • 쿠버네티스를 활용해 프론트 배포까지 백엔드가 진행해야 한다. 프론트 프레임워크에 대한 이해가 없는 상황에서 약 4시간이 들었다.
  • 코어 로직 개발에 쓸 시간도 부족한데 인프라에만 약 7-8시간을 할애해야 했다. 오버엔지니어링 느낌을 받았다.

다행히 나는 코치님, 백엔드 팀원분들과 현업자분들의 도움을 받아 어찌저찌 조건을 모두 만족시켰다. 

(구름 누누 코치님, 백엔드 해성님, 수혁님이 아니었다면 진짜 불가능했다.)

 

주제 발표

구름톤은 매번 3가지 키워드를 통해 해커톤이 진행된다. 2가지 키워드는 선공개되며, 한가지 키워드는 해커톤 첫째날에 발표한다.

 

15기의 주제는 이것이었다.

#제주
#클라우드
#제주도민을 위한 생활 인프라 개선

 

 


둘째날, One page Presentation - 팀 빌딩 - 비어 파티

 

One page Presentation

둘째날에는 해당 주제를 가지고 각자 가진 아이디어를 한 장의 페이지로 프레젠이션한다. 

발표는 제출의 역순으로 진행된다. 즉 느리게 제출한 순으로 발표가 진행된다. 나는 채용 지원을 위해 숙소에서 자기소개서를 쓰고 자느라 새벽 4시쯤 제출했는데 내가 발표 중간 순서였다 ㅋㅋㅋㅋ 새벽 4시 이후에 제출한 분들이 절반 가량되었다는 사실에 놀랐다.

 

특히 기획자분들이 힘을 쏟았는데 거의 2-3시간 밖에 안자고 온 분들도 있었다. 지금 생각해보면 2-3시간 밖에 안잔 분들은 해커톤 시작과 동시에 체력적으로 매우 힘들어하셨던 기억이 있다. 나 또한 다시 참여하게 된다면 기획자가 아닌 이상 프레젠테이션에 힘을 크게 쏟지 않고 숙면을 취할 것 같다.

 

나는 약 1시간을 들여 제주도민 맞춤형 교육훈련 메일링 서비스를 기획했고, 결과적으로 이 아이디어로 서비스를 구현하게 되었다 

 

 

 

팀 빌딩

팀 빌딩은 약 30분 내외로 진행된다. '자 30분까지 팀 확정해서 구글 폼 등록하세요~'하고 진짜 전투적으로 서로 팀빌딩이 시작된다.

재밌는 사실은 이미 전날에 슬랙으로 연락해 팀빌딩을 마무리 해둔 사람들도 있었고 시작과 동시에 팀 빌딩을 끝낸 팀들도 많았다. 

 

나는 팀빌딩에 적극적이지 않았는데, 추후 팀원들에게 왜 가만히 있었냐는 질문을 받기도 했다.

지금 생각해보면 다음과 같은 이유로 가만히 앉아있었던 것 같다.

- 기획자들이 낸 아이디어들 중에 내가 기술적 도전을 할 수 있는 아이디어들이 없었다
- 기획자들이 낸 아이디어들의 BM이 내가 생각하기엔 2틀 내에 구현하기에 너무 컸고, 기능도 다양했다 -> 해커톤 안티패턴

 

따라서 기획자 중심으로 팀이 모이기보다 내가 낸 아이디어에 동감하는 분들을 모집하길 원했던 것 같다.

실제로 기획 + 프론트 개발자 2분이 팀을 제안해주셨지만, 아이디어가 마음에 들지 않아 반려했다.

 

기대처럼 디자이너 한분이 아이디어가 마음에 든다며 같이 팀을 하고 싶다고 다가와주셨다.

이후에 프론트 2분과 기획 1분도 여차저차 팀에 합류하여 팀이 완성되었다.

 

비어 파티

 

 

그날 저녁에는 고대하던 비어파티가 시작되었다. 조별로 교류하고 파트별로도 이야기를 나누는 시간이 있었다. 밥은 뷔페식이었는데 해커톤에는 극도의 긴장감으로 음식이 잘 안넘어가는 타입이라 먹는둥 마는둥 했다. 지난 2틀간 약 5시간 정도 밖에 자지 못한 상태로 맥주도 마시지 않았다.

 

좋았던 점은 백엔드 파트원끼리의 교류시간이 있었는데 정말 굉장한 실력자분들이 많았다. 8년차, 7년차, 3년차 현업자 3분이 계셨고 나를 포함한 나머지 3명은 막학기 취준생들이었다. 다들 왜 백엔드 개발자가 되셨는지, 지금껏 개발을 하며 느낀 불안함이나 취준 과정에서 겪었던 문제들에 대해 문답하는 시간이 있었고 깊이 있는 답변을 들을 수 있어서 좋았다.

 

더 정확히는 현업자분들의 답변을 통해 고민이 해결되진 않았다. 그러나, 7-8년차 개발자분들도 지금의 내가 향유하는 고민을 다른 형식으로 하고 계시다는 느낌을 받았고 내가 하고 있는 '어떤 개발자가 되어야 하나?', 'AI는 어느정도 써야 하나?'와 같은 질문들이 시간이나 경험이 해결해주지 않는다는 느낌을 받아 감정적인 위로가 되었다. 실력이나 경험은 차이가 났지만 어쩌면 다 비슷한 상황에서 비슷한 고민을 하는 것 같아 재미있었다.

 

밤 10시정도가 되어서 다른 팀들은 환경 세팅 및 아이디에이션을 위해 먼저 자리를 떴는데 백엔드 파트는 정말 끝까지 남아있었다. 나도 자리를 지키다가 11시 정도가 되어서 해커톤장으로 돌아왔던 것 같다.

 


셋째날, 끝없는 아이디에이션 - 기술적 도전

 

이것보다 더 나은 아이디어는 없다는 암묵적 동의 얻기

 

해커톤이 본격적으로 시작된 셋째날, 가장 문제가 되었던 것은 역시 기획이었다. 내가 제안한 맞춤형 교육훈련 뉴스레터 아이디어에 팀원 전원의 동의를 얻지 못했다. 특히 기획 팀원이 해당 문제에 공감해야 앞으로 기획을 세분화하는 과정에 무리가 없는데, 문제 정의부터 공감하지 못하는 것 같아 우려가 되었다.

 

그래서 아이디에이션 시간을 일부러 길게 가져갔다. 최대한 많은 아이디어들이 탁상에 올라오게 하고 이를 구체화하며 문제점을 논의했다. 약 5시간 동안 아이디에이션을 했다. 그 과정에서 의견충돌이 많았고 서로 지쳐가는 순간도 있었다고 판단했다. 아무리 아이디어를 짜내도 내가 제안한 아이디어보다 나은 것이 없다는 암묵적인 동의가 형성되었고 결국 채택되었다.

 

이 과정이 중요한 이유는 해커톤은 흔들림의 연속이기 때문이다. 기술적으로 막히거나 상을 타지 못하는 결과가 생기면 결국 "아, 그때 이 아이디어가 아니라 이런 거 했으면 좋았을 텐데"라는 마음의 소리가 따라오기 마련이다. 그렇기 때문에 기획에 대한 아쉬움을 남기지 않는게 핵심이라 생각했다.

 

광치기 해변 산책

 

아이디어가 확정된 이후, 팀원 모두가 지쳐있는 것 같아 광치기 해변으로 산책을 제안했다. 새벽녘에 나오니 이제야 제주에 온것 같았다. 광치기 해변과 성산일출봉을 아우른 해무는 너무 예뻤다. 지쳐있는 몸에 조금이나마 마음의 위안이 되었다.

 

빡센 일정인 만큼 다시 나아갈 의지를 주는 아름다운 것들이 있다는 것이 참 좋았다.

 

 

기술적 도전하기

이번 해커톤의 참여 목적 중 하나가 새로운 기술적 도전을 한가지 이상 해가는 것이었다.

그리고 AI 모델의 적극적 활용을 그 목표로 삼았다.

 

 

도전1 - TextRank 모델을 활용한 핵심 키워드 추출

우리 서비스는 제주에서 진행되는 흩어져있는 교육훈련 정보를 모아 구독자가 관심사를 등록해두면 맞춤형 교육훈련 정보들을 모아 뉴스레터 형식으로 발송해주는 서비스였다.

 

이를 위해 먼저 '관심사를 어떻게 분류할 것인지'에 대해 답해야 했다.

기존의 교육훈련 공고를 어떻게 크게 대분류로 나누고, 이를 관심사로 선택해야 할지 논의해야 했다.

 

 

나는 NLP 모델인 TextRank 모델 라이브러리를 써서 이를 해결해냈다. TextRank 모델은 자연어 문맥 중에서 빈도 수 등의 기준을 통해 핵심 키워드를 판별하는 인공지능 모델로 2021-2025년까지의 교육훈련 정보를 GPT를 사용해 3가지 키워드로 축약하고 이 키워드들을 모아 TextRank 모델이 3가지 키워드를 추출하게 하였다 

 

그렇게 해서 '일자리/취업' , '지원금' , '자격증' 이 3가지 교육훈련 키워드를 얻게 되었다.

 

도전2 -  AI RAG 모델을 통한 할루시네이션 방지

 

추천 비즈니스 모델의 핵심은 얼마나 정확하게 추천할 수 있느냐이다. 그렇기 때문에 단순히 GPT에게 '이 데이터 중에 어떤게 가장 적합한지 추천해줘~' 처럼 명령하면 당연히 할루시네이션이 있으리라 판단했다. 그렇다고 정적 기준을 가지고 필터링만 한다면 'AI 기반 추천'이라는 매력적인 키워드가 퇴색되게 되었다.

 

따라서 이전에 인프런 강의에서 찍먹해본적 있는 사이오닉 Open API를 활용한 AI RAG 모델을 도전해보았다.

 

RAG 모델이란 문맥기반 추천기능으로 무조건 자료 기반 출처가 있어야 답변을 생성해낸다. 즉 임의적 판단을 최대한 축약하고 벡터 DB에서 유사하거나 관련된 정보를 추출한 과정을 파일 내에서 출처로 명시할 수 있어야만 답변 내용에 포함시킨다. 만약 자료 내에서 출처로 삼을 만한 리소스가 없다면 응답을 할 수 없다고 응답한다.

 

 

그래서 나는 Rag Model 에 현재 진행중인 교육 훈련 공고를 모두 벡터화하여 넣고 API 호출을 통해 키워드 관련 순으로 나열 및 조회해달라는 요청을 하였다. 이후에 피드백을 통해 해당 RAG Model이 개인 맞춤형으로 더 최적화할 수 있는 파이프라인을 뚫어놓기도 했다.

 

 

셋째날에는 아예 밤을 샜다.  3일간 약 5시간 정도 밖에 못잤기 때문에 에너지 음료를 3개 연속 마셨는데 머리와 배가 계속 아팠다.

 


넷 째날,  정각 제출 - 발표 - 우수상

 

마지막 날 11시까지 제출을 해야하는데 10시 50분쯤 시연영상 녹화를 시작했다.

그리고 10시 58분에 제출을 성공했다 ㅋㅋ

 

PPT도 약 1시간 정도 안에 디자이너 분이 미친속도로 빠르게 만들어주셨다.

 

짧은 시간에 어떻게 이런 퀄을 뽑아내는지.. 역시 디자이너는 다르구나 싶었다.

 

 

제출을 하고는 쓰러졌다. 이게 어느정도였나면 그냥 바닥에 가방을 배고 후드티를 뒤집어 쓰고 잤다. 나중에 내 이름을 모르시는 분들은 '아, 그 벽에 기대어 자고 계셨던 분~'하며 알게 되었다는 후문도 있었다.

 

대망의 발표 그리고, 우수상 수상

 

오후 1시부터 팀별로 발표가 진행되었다. 우리 팀은 6번째로 마지막 발표였다. 

팀별 발표를 듣다보니 구현을 제대로 끝내지 못한 팀들이 많았다. 아무래도 BM이 크거나 개발 과정에서 이슈가 많아서 시간관리에 어려움이 있었던 팀들이 주였다.

 

기획자 분이 발표를 잘 끝내주셨고 결과적으로 3등 - 우수상을 수상했다.

상품으로는 로지텍 무선 마우스를 받아서 지금 이글도 그 마우스를 통해 편집하고 있다.

 

팀원 회식

 

결과발표가 나고는 시청 근처 기획자 재현님이 추천해주신 순대집으로 가 회식을 했다. 소주나 막걸리와 반주를 했는데 나는 너무 지쳐있는 몸에 술을 마시면 몸이 너무 무너질 것 같아 너무 마시고 싶었지만 사양했다.

 

해커톤 내내 긴장감 때문에 음식을 제대로 먹지 못한 탓에 순대와 돔베고기는 정말 꿀맛이었다. 특히 제주순대는 왜이리 담백하고 쫄깃한지.. 정말 순대때문에 다시 가고 싶어질 정도였다. 돔베고기도 말그대로 술이 땡기는 쫀득함이 있었다.


다시 일상으로

해커톤을 마친 당일 집에 와 바로 침대로 직행했다. 눈을 떠보니 다음날 오후 8시였다. 약 20시간 정도를 잤다.

그리고 눈을 떠 카카오 공채 지원을 하고, 프로젝트에서 밀린 업무를 체킹하고, 이 글을 쓰고 있다

 

해커톤에서 느꼈던 여운을 그대로 가져가고파 최대한 빠르게 후기를 남겼다.

 

나는 구름톤에서 무엇을 느꼈을까?

 

먼저 좋은 사람들을 만났다. 자기소개서만으로 어떻게 이런 실력자들을 필터링할 수 있을까 궁금할 정도로 다들 굉장한 실력이 있으셨고 네트워킹 자리에서도 서로 활발히 공유할 수 있어 좋았다. 특히 프론트 엔드 지영님과 원영님은 이슈없이 개발을 모두 완료해주셨고 디자이너인 주현님은 정말 손이 빠르고 다양한 컨셉안을 직접 의견을 물으며 확정해주셨다.

 

좋은 생각들을 만났다. 비어파티에서 이직을 고민하는 분들의 얘기를 들으며 지금의 내가 하는 고민들은 평생 가져가야할 고민이라는 사실을 깨달았다. 해결되지 않아 답답해하기보다 그 고민을 향유하고 있는 나의 태도에 더 집중하고자 했다.

 

좋은 인사이트를 얻었다. 해커톤을 할 때면, 항상 기획을 내가 주도했었기 때문에 기획파트가 정해져있는 이번 해커톤에서 어떤 포지션으로 임해야할지 감이 잡히지 않았다. 특히 우리 팀은 기획의 원천이 기획자가 아닌 나였기 때문에 내가 기획과 백엔드 둘다 주재해야할 일이 많았다. 그러나 기획자 분이 내 아이디어를 존중해주고 점차 구체화해주셨고 셋째날 새벽부터는 새로운 기능 제안까지 점차 날아다니는 모습을 보며 천상 기획자는 정말 따로 있구나 생각했다.

 

좋은 기술적 경험을 했다. 해커톤 목적에 맞게 AI RAG와 Text Rank 모델에 대한 기술적 경험을 주도적으로 진행할 수 있었다. 대충 마무리하는 느낌이 아니라, 그래도 하나는 경험해간다! 느낌이었다. 또 많이 고생하긴 했지만 React 배포를 맡으며 대충 프론트는 어떻게 배포되는지 이해할 수 있었으며 쿠버네티스와 젠킨스의 장점도 이해할 수 있었다.

 

오랜만에 하나의 태스크에 몰입하는 경험을 했다. 3박 4일이 어떻게 지나갔는지 지금도 잘 기억이 나지 않는다.

그래도 이때 느꼈던 감정들과 사람들은 꽤 오랫동안 여운으로 남을 것 같다.

 

마지막으로 부족한 나와 같은 팀을 해준 팀원들,

나의 아이디어를 존중해주고 특유의 서글함으로 팀원들의 페이스를 조율해준 기획자 재현님,

빠른 손으로 다양한 시안 의견을 물어봐주고 캐릭터 디자인까지 해준 디자이너 주현님,

이슈없이 안정적 개발을 물론 더 쉬운 태스크 처리 방안을 제시해 항상 놀라움을 주셨던 프론트엔드 지영님,

뉴스레터 로딩 화면부터 명확한 소통으로 같이 일하고 싶은 사람은 개발자의 표본인 프론트 엔드 원영님

께 감사의 말씀을 올린다.