[SOPT] #4 - 2년만에 돌아온 SOPKATHON, 솝커톤은 "기세"와 "왔당"이었다.

2023. 12. 9. 12:21Experience Story

 

[28th SOPT] #3 - 16시간의 기억, 명함 서비스 나다 NADA

2021.05.22 - 05.23 28기 솝트 회고에서 세 번째로 다룰 내용은 '솝커톤'이다. 솝커톤은 솝트와 해커톤의 합성어로, 4주차 동안 iOS 파트 세미나에서 배운 내용을 바탕으로 기수 후반기에 진행되는 자체

mini-min-dev.tistory.com

2023.11.25 - 11.26

33기 솝트 회고에서는 OB 지원 후기글보다 먼저 솝트 자체 무박 2일 해커톤인 "솝커톤" 글부터 써보려고 한다.
위에 올려놓은 링크에서도 볼 수 있는 것처럼, 28기 YB로 활동할 당시에도 솝커톤에 참여해서 "나다 NADA"라는 서비스를 개발했었고,
그 프로젝트가 지금까지도 이어져 업데이트가 계속 진행중이다.
지난 솝커톤에서의 좋은 기억이 남아있던 탓일까. 무슨 일이 있어도 33기에서 솝커톤은 참여하고 싶었고, 몇초만에 마감되는 높은 경쟁률을 뚫고 2년만에 국내 최대 IT 벤처 창업 동아리인 솝트의 해커톤 행사에 참여하게 된다.

iOS 개발자 중 막내로 참여했던 지난 솝커톤과는 다르게 이번 솝커톤은 당당히(?) iOS 리드 개발자로 참여해 더 나에게 감회가 남달랐다.
오히려 인생 첫 해커톤은 실력적으로 부족했던 것을 알았기에, "1인분만 하자!"라고 생각하며 두근되는 마음으로 참여했더라면,
이번에는 성장한 나의 실력을 증명함과 동시에, iOS를 대표하여 다른 아요 YB 팀원들도 책임져야 한다는 긴장 + 주어진 프로덕트를 완성해야한다는 부담감에 비장함까지 가지고 참여했던 솝커톤이었다.
킥오프부터 마지막 팀 회고까지. 이번 33기 솝커톤의 기록을 따라가보자 ^___^
 

 

1️⃣ 킥오프!  그라운드룰과 팀이름/구호 그리고 식당까지 정해보자

토요일 솝커톤 행사가 시작하기 전, 화요일에 팀빌딩 결과가 공지되었다.
팀은 솝커톤 신청인원을 바탕으로 운영진분들이 짜주시고, 앱과 웹으로 나뉘는 앱잼과는 다르게 iOS, 안드, 웹 3파트로 나누어서 팀이 만들어졌다. (이번 솝커톤은 아요 안드 각 4팀, 웹 5팀으로 총 13팀이 구성되었다.)
팀당 인원은 기획 2명, 디자인 2명, 서버 2명, 클라이언트 3~4명 (웹은 3명, 앱은 팀당 4명씩!)으로 이루어지게 된다.

나는 아요 3조로 편성됨과 동시에, 팀 리드에 의해 톡방이 개설되고,
토요일 솝커톤 행사 전까지 필요한 부분을 준비하기 위한 가이드라인 공지를 함께 올려주셔서 수월하게 준비를 할 수 있었다.

💡 솝커톤 행사 전까지 준비해야 할게 뭐가 있냐고?
    : 협업을 위한 노션 페이지와 피그마, 깃허브가 공유돼야 한다.
      또, 서로가 누군지를 알기 위한 자기소개는 필수.
      추가로 협업 시 지켜야 하는 규칙 (그라운드룰)과 행사 전에 저녁으로 먹을 메뉴, 식당(든든한 거 강추.)까지 정해야 한다!

솝커톤 때 바로 만나는 것보다는, 사전에 어느정도 서로에 대해서 알고 참여하는 것이 더 좋기에 가볍게 킥오프를 진행하기도 했다.
킥오프는 디스코드와 피그잼을 통해 한시간 정도 되는 시간동안 진행되었다.
먼저 같은 팀원과 친해질 겸, 팀이름과 구호를 정했다!
3조였던 우리는 보람삼조....라는 팀이름을 골랐고, 정확하게는 기억나지 않는데 "기세"와 관련된 구호를 정했던 것 같다.
(처음 팀 노션을 만들었을 때부터 쓰여있던 "솝커톤은 기세다"라는 말이 너무 인상 깊었던...)
팀 그라운드룰도 같이 정했다.
각자가 원하는 협업 방식을 한 번씩 돌아가면서 발표하고 여기서 공통적으로 나왔던 내용을 그라운드룰로 가져가기로 했는데, 대부분 둥글둥글하고 적극적인 소통, 서로 으쌰으쌰하며 응원해주는 팀 분위기를 갖자는 의견에 동의했던 것 같다. 
아무래도 밤을 새우고 작업에 몰두하다 보면, 예민할 수밖에 없어지는 상황인 데다가 + 좋은 추억과 낭만을 얻기 위해 솝커톤을 신청한 것이었기에.
또, 각자의 포부나 솝커톤에서 얻어가고 싶은 점도 돌아가면서 한번씩 발표했다.
부끄럽지만, 피그잼에 써놨던 포부이자 내가 솝커톤에서 얻어가고 싶었던 점도 여기에 다시 정리해서 써보겠다.

"33기 솝커톤을 되돌아보았을 때, '우리 조가 진짜 레전드였지..'라고 기억될 수 있었으면 좋겠다"가 내 이번 솝커톤의 목표였다.
대상이나 인기상 같은 것들을 수상하는 것도 좋겠지만, 그것보다는 더 소중한 경험과 추억들을 얻어가고 싶었다.

+ 물론, 첫 클라이언트 리드의 부담감으로 "디자이너 서버 선생님들이 만들어주신 소중한 결과물들을 무조건 프로덕트로 완성시키기."가 더 머릿속 깊게 자리하고 있던 (차마 입 밖으로 꺼내지 못했던) 내 0번 목표였다.

아직 얼굴도 모르는 어색...했던 사이였지만 서로 스티커 많이 붙여주며 진행했던 우리조의 킥오프~~!

 

2️⃣ 드디어 대망의 솝커톤 당일.

대망의 솝커톤 당일이 다가왔다.
솝커톤은 토요일 세미나 이후에 진행되기에 2시간 일찍 시작했던 6차 세미나를 파트별로 먼저 듣고 난 다음, 솝커톤 팀원이 함께 만나고, (이때 같이하는 팀원들의 얼굴을 처음 본 거다.) 킥오프에서 정했던 식당에서 저녁 식사를 든든하게 하고, 행사장으로 같이 들어갔다.
행사장 입구부터 붙여져 있는 솝커톤 포스터와 개인별로 지급되는 명찰, 그리고 기념 스티커까지.
진짜 내가 솝커톤에 온게 맞구나를 실감하게 되는 기분 좋은 순간이었다.

"DO SOPT와 함께한지 63일"이라는 이번 솝커톤 컨셉과 디자인도 너무 이쁘고 귀여웠다구요....

보통 저녁식사를 하고 행사장까지 가는 길에, 팀별로 밤을 새우면서 먹게 될 간단한 간식거리나 커피, 몬스터 등을 사들고 간다.
하지만, 이번 솝커톤은 그럴 필요가 없었던 것이.
임원진분들께서 정말 센스 있게 준비해주신 간식꾸러미와 레드볼 협찬음료가 행사장 내에 준비되어 있었다. (진짜 스케일 대박.....⭐️)

두번 자랑. 세번 자랑하고 싶었던 우리 33기 솝커톤 행사 준비 수준.

 

3️⃣ 아이데이션을 해보🍎아요🍎 - 그래서 Unlearn이 뭔데?

본격적인 공식행사가 시작되고, 주제가 공개되었다.
이번 솝커톤의 주제는 "Unlearn: 당연해보이지만 당연하지 않은 것"이었다.
대부분 당연하다고 생각했던 것들, 주어진 것이라고 받아들이고 있었던 것들에 대해 모두 잊어버리고 "왜"라는 의문과 함께 과거의 관습을 배움의 역방향으로 생각하는 것을 Unlearn이라고 부른다고 한다.
나중에 돌이켜 생각했을 때, "63rd Anniversary: 두솝과 함께한지 63일"이라고 했던 이번 솝커톤 테마에도 기념일에 관한 기존 관념적 의미(100일, 1년 같은 날만을 중요하게 생각하는)를 Unlearn이라는 주제에 맞게 풀어낸 내용이 들어있었다는 것을 깨달을 수 있었다.
아무튼. 주제가 공개되었을 때, 쉬워 보이지 않은 주제에 나 말고도 많은 사람들이 "엥?" "헐?" 했던 것 같다.

주제가 어려워도?
"결국 우리는 하나의 서비스를 만들어야 한다."는 목표 아래.
각자의 노트북을 들고 앉아있던 자리에서 내려와, 바닥에 옹기종기 모든 팀원이 둘러앉아 아이데이션을 시작했다.

저때 엄청 머리 쥐어뜯었을걸...?

킥오프를 했을 때와 마찬가지로 피그잼을 이용해 아이데이션을 진행했다.
5분 정도 각자 생각했던 아이디어를 돌아가면서 발표하고, 이를 다시 5분 동안 구체적으로 생각해서 발표하고,,, 계속 반복의 과정이었다.
아이데이션이 원래 어렵다는 것은 알고 있었지만, 특히 이번 솝커톤은 아래와 같은 이유로 하나의 아이디어로 확정하기가 더 어려웠던 것 같다.

1) 재미있고 신박한 아이디어가 떠올랐을 때 -> 아이디어가 추상적이어서 어떤 식으로 짧은 시간 내에 구현으로 연관짓기가 어려웠다.
2) 추상적인 내용을 구체적으로 생각해 봤을 때 -> 본질적으로, Unlearn이라는 주제에 벗어나는 내용까지 확장되기 일쑤. 또한, 솝커톤에서는 시간 내에 구현하기 어려운 기능으로 생각되었다.
3) 구체적이고 구현이 어렵지 않은 아이디어가 떠올랐을 때 -> 어디서 한 번쯤은 경험해 봤던 서비스의 느낌, 솝커톤에서 다른 팀의 이목을 이끌기에는 주목도가 떨어질 것 같은 우려가 들었다.

정말 좋은 아이디어가 많아서 더 결정하기가 어려웠던 보람삼조의 아이데이션

그래도 어떻게든 아이디어를 추리고 추려. 두 개의 아이디어로 구체화되었다.
"일상에서 당연하다고 느끼는 것들이 사라졌을 때를 미리 경험하며 나를 알아간다."는 의미를 지닌 기록 아카이빙 서비스와,
"여행은 왜 꼭 거창해야 하는 걸까? 우리가 일상에서 타는 지하철로 여행의 의미를 재정의할 수 있지 않을까?"라는 의미에 여행 서비스일지 지하철 서비스일지 모르는 아이디어 하나.
첫 번째 아이디어가 위에서 말한 3번의 느낌이었고, 두 번째 아이디어가 1번의 느낌이어서 끝까지 많은 고민을 했던 것 같다.

하지만, 여기서 팀의 PM이 존재하는 이유를 깨달을 수 있었다.
추상적이어서 구현으로 연관 짓기 어려웠던 두 번째 아이디어보다는, 조금 식상할 수도 있을 것 같았던 첫 번째 아이디어를 흥미로운 아이디어와 함께 연관 지어 진행하기로 확정해주셨고, 그 뒤로 10분 만에 와이어프레임까지 뚝딱뚝딱 나오게 된 것이다.
(아마 여기서 더 시간이 늦어졌더라면 최종 완성이 더 어려워졌을 것이라 생각이 든다.)
 

4️⃣ 아요 파트 1차 과제, 우리네 아요 팀원끼리 협업 방식 정하기

솝커톤은 신기하게 파트별, 시간대별로 과제도 주어진다.
보통 솝커톤 중간중간마다 파트별 경과를 추적하거나, 서비스의 구현도를 확인할 수 있는 파일을 제출하는 것이 과제의 주된 내용이다.
이 과제 수행여부가 수상을 결정짓는 요인중 거의 대부분을 차지할만큼 중요하게 영향을 미치기 때문에 시간에 맞춰서 과제를 제출하는 것은 매우 중요하다.
클라이언트 파트에서는 아이디어가 확정되고, 디자인이 배포되고, 서버 명세서가 날아오기 전까지 할 수 있는 일이 그리 많지가 않다.

파트별로 과제가 존재하는 솝커톤, 그리고 2번의 과제가 존재했던 우리 아요 파트

그럼 그 시간동안 노냐고? No.
보통 아이디어가 밤 10시 정도에 확정되고, 1시 정도는 되어야 구체화된 디자인이 개발자에게 넘어와 작업을 시작하는 것이 일반적이기 때문에
1시에 제출해야하는 iOS 파트의 1차 과제도 개발 내용보다는 협업시에 필요한 규칙을 정해 리드미를 작성하는 것이 주된 내용이다.
와이어프레임을 바탕으로 각자 담당할 뷰 역할을 분담하고,
깃 컨벤션(flow 전략과 commit message), 프로젝트 폴더링 컨벤션, 코딩 컨벤션과 같은 협업 규칙을 정했다.

특히, 지난 솝커톤의 교훈으로 "깃은 절대 터지면 안된다"를 마음속으로 되뇌었던 나.
깃 Conflict를 절대 방지하고, 잘못된 파일이 올라가는 불상사를 절대 막기 위해
애초에 프로젝트 파일을 뷰 별로 분리해서 미리 생성하고, 사전에 공통으로 건드려야 하는 부분은 최대한 미리 설정해 뒀다.
또, 무리해서라도 fork 전략을 선택해서 파일을 예비로 하나 더 남겨두고, 내가 확인하고 merge를 할 수 있도록 했다. 나중에, 이 영향으로 솝커톤에서 이번에는 Git이 꼬이지 않는 성공적인 결과를 얻었으니 만족스러웠다. ^___^

이렇게 정했어도 바쁜 상황 속에서 git message와 coding convention을 정확하게 지키기는 어려운 일이었다.

 

5️⃣ 다른 파트와의 소통이 정말 중요했다. (클라 입장에서 기획, 디자인, 서버와 전달해야할 내용들)

이번 솝커톤에서 가장 많이 배운 점이 무엇이냐고 누가 나에게 질문한다면, 나는 "다른 파트 팀원들과의 커뮤니케이션 스킬"이라고 말할 것이다.
솝커톤을 한번 경험을 해본 OB로써, 이번에는 제한된 시간 속에서 기능적으로 챌린지가 될 만한 것들을 도전하기보다.
(기능적으로 챌린지를 도전해보지 못한 것은 지금 생각했을 때 아쉬운 부분이기도 하지만, 사실 다시 돌아간다해도 쉽지 않을 것이다. 앱잼때 하는걸로...)
어떠한 기능들이 시간 내에 구현이 가능/불가능할지를 판단해주고, 팀원별 역할을 분배해주고, 대표로 다른 파트와의 의사소통을 하면서 다른 YB 팀원들에게 경과를 전달해주는 역할을 주로 맡았던 것 같다.
자꾸 의사소통, 커뮤니케이션 어쩌고라고 하는 것만 같아서,
아래에서 구체적으로 iOS 개발자의 입장에서 솝커톤에서는 각 파트별 팀원들과 어떤 내용을 주고받았는지 기록해 보겠다.

우리 팀은 이렇게 시간대별로 파트별로 짧게나마 스크럼을 통해, 현재 작업이 어디까지 진행되었는지 공유했다.

기획 팀원과는 1차 와이어프레임이 나왔을 때 주로 이야기를 나누었다.
주로, 구현에서 어려움이 있는 사항을 전달하거나, 구현에 어려움이 있는 기능들을 다른 어떤 방식으로 구현할 수 있는지를 제시해주는 내용이다.
핵심은 어려운 전문 개발 용어를 사용하지 않고, 내가 아요를 아무것도 모르는 상황이었을 때를 생각하며 "왜 이 부분은 구현이 어려운지" "왜 이런 식의 수정이 필요한지"를 구체적인 근거를 들어 이야기를 해야 한다는 것이었다.
몇 가지 소통이 필요했던 이슈들을 어떤 식으로 소통했는지 아래에서 확인해볼 수 있다.

#1.
최초 아카이빙 뷰에서 삭제하기를 구현하지 않기로 정했기에, 질문에 대한 답변이 누적될수록 스크롤이 무한으로 늘어날 수밖에 없는 구조였다. 여기서 구현의 난이도로나 플로우 측면에서 보았을 때, 기획적으로 답변 아카이빙 개수의 제한이 필요할 것 같다는 의견을 전달했다.

#2.
#1에서 발생한 이슈로 아카이빙의 개수를 기능적으로 제한시키게 된다면, 아카이빙 서비스에서 내가 쓴 답변을 다시 볼 수 없다는 역설적인 상황이 발생한다는 문제가 존재하게 된다고 생각했다.
이 문제를 해결하기 위해 뷰를 추가하는 것 또한 감수 가능하고, 혹은 랜덤하게 답변을 표출하여 사용자에게 재미를 주는 요소를 추가하는 것도 괜찮을 것 같다고 아이디어를 제시했다. (후자의 아이디어로 가기로 결정!)

#3. 
마지막 타인 답변을 랜덤하게 볼 수 있는 횟수를 제한두는 기능이 서버 통신과 데이터 전달 측면에서 시간 내에 구현하기 쉽지 않을 수도 있겠다고 생각이 되었다.
랜덤으로 볼 수 있는 횟수의 제한을 없애고, 대신 우리 아요 막내가 구현해보겠다고 한 이미지 캡처기능을 추가해서 내 답변을 보관할 수 있도록 하는 것은 어떨지 아이디어를 전달했다. (먼저 아이디어를 제시해준 아요 막내나 긍정적으로 받아준 기획 모두 짱짱이었다👍🏻)

디자인 팀원과는 주로 (너무나 당연하지만) 레이아웃 수정사항이나 확인사항, 따로 분리시켜야 하는 뷰에 대해 요청하는 내용이 대부분이다.
디자이너와 소통할 때 중요한 점이 있다면, "이런 것도 물어봐야 할까?" 하는 사항까지 물어볼 수 있는 꼼꼼함이 필요하다는 것이다.
생각지도 못하게 의외로 고려해야했던 디테일한 사항들은 이런 내용들이 있었다.
이 외에도 레이아웃과 관련한 많은 사소한 내용들이 있었기 때문에 적극적으로 소통하는 자세의 중요성을 다시 한번 느낄 수 있었다.

#1. 화면이 전환될 때 present-dismiss / push-pop 중에서 어떤 방식을 선택하는 게 좋을 것인지.
#2. 애니메이션이 없는 스플래시 화면 혹은 버튼이 없는 Alert 화면의 표출 시간은 어느 정도가 좋을지. (Alert 화면에 있는 메시지의 길이도 있어 사용자가 읽을 수 있는 시간을 고려해야 할 필요가 있을 것 같다는 의견 전달 -> 버튼 추가하는 것으로 변경)
#3. 사용자가 입력하는 TextView에서 키보드 표출 시 레이아웃이 변경되는지. 혹은 키보드를 항상 표출하도록 설정할 것인지

서버 팀원과는 크게 두 번 정도 이야기를 주고받게 되었다.
아래 첫 번째 내용은 합동 세미나에서도 해본 익숙한 소통 내용이었기에 크게 고려할 사항은 없었고,
두 번째 내용이 중요하다고 할 수 있는데. 해당 내용에서 중요한 점은 서버의 에러일 수도 있지만 클라이언트의 에러일 가능성도 있기 때문에 반드시 확인 후에 요청을 해야한다는 것이었다.

#1. 와이어프레임이 나오게 되고 난 직후에 어떤 화면에서 어떤 방식과 자료형으로 데이터를 넘겨주면 될지에 대한 큼직한 내용.
#2. 서버가 배포된 이후 프로젝트에 서버를 연결하며 발생하는 오류들에 대해서 확인을 요청하는 내용.

그리고 여기에 전해받은 내용을 같은 아요 팀원들에게 전달하는 과정까지 리드로써 포함되었다.
위 네 파트와의 의사소통을 요리조리 옮겨 다니면서 전달 해야하다 보니 (기획과 나눈 얘기를 디자이너한테 가서 전달하고, 아요 팀원들한테도 전달하고 이런... 과정의 반복), 조금만 정신을 차리지 않으면 바로 혼이 나갈 수밖에 없던 순간이었다.
맨날 소통소통 이러다가 "왜 커뮤니케이션을 잘하는 개발자가 중요하다"라고 여기저기서 말하는지를 채감 할 수 있었던 순간이었다.
 

6️⃣ 새벽 1시 반 경. 이제 본격적으로 개발할 시간.

어느정도 정해야 할 내용이 정해지고,
피그마로 디자이너 선생님들이 만들어주신 화면이 넘어오면서 본격적인 아요의 업무도 시작이 되었다.

어질러진 책상만큼, 내 머릿속도 어질러질 것만 같았다.

개발은 생각보다 순조롭게(?) 진행되었다.
다만 내가 담당하는 뷰 작업을 하면서, 아요 질문도 받아주면서, 다른 파트 팀원들이 해주는 질문들에 답변도 해주면서, 멘토님들의 답도 들어야 하는.
거의 몇 개의 업무가 동시에 우다다닥 진행되는 느낌이어서 정신이 없긴 했다.
내 작업에만 집중을 하는 것이 거의 불가능했기 때문에, 이런 상황에서도 좋은 코드를 짤 수 있는 개발적인 성장이 더 필요하다고 느꼈고, 또한 다른 팀원들의 질문에 대해 내가 예전에 써놓은 블로그 글로 설명을 더 자세하게 할 수 있다는 점에서 블로그의 중요성도 느끼게된것 같다.

우리 귀여운 아요 팀원 사진은 진짜 안넣을 수가 없었다.

기술적으로 구현했던 내용은 나중에 차차 블로그 글에 올라오는 것으로 확인할 수 있을 것이니
회고 글에는 따로 포함하지 않도록 하겠다 ^__^
 

7️⃣ 최종발표, 그리고 iOS 부문 대상 수상팀은 "왔당"

8시반. 모든 최종 과제를 제출하고 난 이후에는 팀별 발표가 이루어졌다.
각 조별 조장의 발표 순서가 되면, 힘내라고 구호를 외쳐주는 것이 국룰(?)이었는데 우리 조는 "솝커톤은 기세다~~!"라고 외치면서 힘을 실어 주었다. (사실, 이때 너무 지친 상태여서 거의 대부분 눈이 반 감긴 상태로 행사를 진행하고 구호를 외친다.)

16시간 솝커톤 동안 만들어진 우리들의 13개 서비스

그리고 바로 이어진 시상식.
이번 솝커톤에서는 각 파트별로 최우수상 1팀과 대상 1팀, 그리고 단체 투표를 통해 결정되는 인기상을 시상했다. (인기상이 탐났다는...)
iOS 부분 대상! 수상팀은 바로 우리 "왔당"이었다!🎉🎉🎉🎉🎉🎉🎉

헐? 우리가 대상이라고? 왜지? 어머 아무튼 잘된 일이다~~!!

애초에 수상을 목표로 참여한 것은 아니었지만, 예상치 못한 결과까지 얻게 되어서 두배 세배 더 뿌듯했던 것 같다!
나 혼자가 아니라 보람삼조라는 팀으로 참여했던 솝커톤이었기에 가능했던 일이었다고 생각한다.
팀 분위기를 이끌고 그 누구보다 걱정 많았을 기획, 멋진 도전정신과 말만하면 뚝딱 나오던 놀라운 실력의 디자인, 끝까지 책임있는 자세로 결국 목표를 달성해낸 서버, 그리고 배울 점이 정말정말 많았던 멋있는 우리 아요까지. 
누구 한 명이 잘해서가 아니라, 좋은 팀 분위기 속에 각각의 능력 하나하나가 모두 합쳐져서 좋은 결말로 이어질 수 있었던 것이다!
여기까지 33기 솝커톤 회고 끝~~! (이제 받은 상금으로 회식해야지....?)

우리의 회고! 첫 킥오프 피그잼에 비교하면, 훨씬 화려한 반응과 친해진 우리조라는게 느껴진다.