본문 바로가기

잡담

인생 첫 해커톤 - 하지톤 후기 (홍익대학교 GDSC X HYPHEN 연합 행사)

반응형

안녕하세요 오랜만에 일상글로 돌아왔습니다.

개발 글 올릴거 진짜 많아서 임시저장도 2개나 해놓았는데 결국 일상글을 가장 먼저 업로드 하네요  ㅎㅎ,, 그래도 해커톤도 어떻게 보면 개발 관련이니까~ 푸하하...    

 

어느 날 인스타를 내리다가 지인이 홍보글 올린걸 보자마자 신청 했습니다. 저는 GDSC도 아니고 하이픈은 더더욱 아니지만 컴공과 학생이면 가입이 가능하다는 말을 듣고 허겁지겁 신청했습니다. 사실 HYPHEN이 유명한건 주위 지인들에게 들어서 알고있었기에 더 흥미로웠어요.

 

자기소개를 적어야 했는데 말이죠 저 혼자만 올리고 한 이틀 동안 아무도 안 올려서 그냥 관종 됨.

해커톤 1주일 전엔 OT를 진행하였는데 저희 팀 구성은 디자이너 2, 프론트1, 백엔드 2 이렇게 구성되었습니다. 

팀원들과 처음으로 아이스브레이킹도 했고 해커톤 당일 자리 선정을 위한 퀴즈 행사도 있었답니다. 저희 팀원분들은 저 빼고 모두 MBTI가 I였는데요, 아니 그냥 이번 행사 약 40명 중에 30명이 I였음. 무슨 몰카 하는 줄 알았어요. 그래서 아이스브레이킹 할 때 쪼금 고생했답니다,,, 아무튼 OT와 해커톤 당일 운영진들 일처리가 매우 깔끔하고 좋았습니다. 준비 많이 하신게 딱 봐도 엄청 느껴지는 행사였어요.

 

팀 이름 정하기가 가장 빡셌는데요... 그냥 전부 아이폰을 쓴다길래 Team....Cook? 어때요 했다가 채택됨. 전 뭔가 옛날부터 이렇게 작명하는 걸 좋아하는 것 같아요 나중에 작명소나 차릴까요? 작명소하니까 무한도전 행쇼 특집 생각나네요

 

퀴즈가 끝나고 이제 기획을 위한 주제 발표를 했는데 주제를 보자마자 좀 당황했답니다;; 이게 도대체 뭐씨여... 

뭔가 난 소소하고 재미있는 기능 만들어야쥐~ 생각하고 왔는데 이거 완전 세상을 구하는 봉사 서비스를 만들어야 될 것만 같은 느낌의 주제였어요.  

한국어 맞냐고

 

많은 이야기가 오갔지만 (그냥 ChatGPT 돌려봄. GPT 유료 구독 만세) 결론적으로 제가 생각해낸 전문가 꿀팁 제공 어플이 채택 됐습니다. 저희 서비스를 한 마디로 설명하자면 '블라인드처럼 분야별 전문가 인증을 한 사람들이 답변해주는 커뮤니티'였습니다. 근데 자꾸 제 의견이 선정되자 살짝 불안해졌습니다. 어라... 자꾸 왜 내 의견이 채택되지...?  이거 조장 될 것 같은데... ?

평소의 저라면 조장 되기를 좋아하는 편이지만 이거 내가 1인분이나 제대로 할 수 있을까란 생각 때문인지 걱정되더라구요... 뭐

결론적으론 조장이라는 역할 자체가 이 행사에 존재하지 않긴 했습니다. 대표로 제비뽑기 하는 역할은 있었죠 ㅋㅋㅋ  

 

저는 기획을 할 때 의견을 좀 쏟아내는 편에 가까웠다면, 나머지 네 분은 그 의견들을 그 아이디어를 구체화 시켜주셨고, 또 기가 막히게 정리해주셨습니다. 저희는 해커톤 전까지 두 번의 회의를 더 했는데, 회의 때마다 디자이너 두 분께서 아이디어를 엄청나게 디벨롭 해오셔서 너무나 감사했습니다.

디자이너 분들의 손이 한 번 움직일 때마다 작품이 탄생한다... 상업 예술 만세...
명찰 사진 찍고 싶다하셔서 제가 아침 되면 서로 서먹해질 수도 있으니 당장 찍자했습니다...

 

사실 팀의 디자이너는 두 명이었는데 프론트엔드가 한 명뿐이었고, 다른 백엔드 팀원분도 개발 경험과 협업 경험이 없으셨기에 허겁지겁 개발을 진행하였습니다. 

 

해커톤 당일까지 공식적인(?) 개발은 금지였지만, 적당한 세팅 정도는 문제가 없겠지 라는 생각에 EC2 인스턴스 + RDS + Docker 환경은 구축을 해 갔습니다. 또 Auth2.0을 이용한 소셜로그인 기능은 지금까지 3번이나 경험을 했기에 기존 소스코드를 참고하여 현장에서 완성하고자 네이버 개발자 센터에서 간단한 세팅만 해갔습니다. 

 

사실 이번 해커톤을 배포를 할 필요가 없다고 공지에 적혀있었습니다만 백엔드 개발자라면 서버 구축과 배포는 필수적으로 할 줄 알아야 한다고 늘 생각했기 때문에 준비를 해갔습니다... 

 

쉽게 흘러갈 줄 알았던 서버 구축은 의외에 지점에서 난관에 부딪쳤습니다. 처음 써본 Docker는 의외로 간단하였으나 이미 수차례 경험해본 AWS 인스턴스에서 문제가 발생하였습니다. 지금까지는 저는 항상 Ubuntu 인스턴스로 생성하였는데, 이번에는 Amazon Linux 2로 생성하였더니 왜인지

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

오류가 발생하면서 MySQL 실행이 안 됐습니다. 구글링 해보니 'mysql.sock 파일이 경로 및 심볼릭링크 정확하지 않아서 발생하는 오류' 라고 하는데 제가 좀 레퍼런스를 무지성으로 따라했더니 설정이 꼬이면서 생긴 문제 같았습니다. 그렇게 약 1시간 가량 끈질기게 사투를 한 끝에 MySQL을 uninstall하고 

sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo usermod -a -G docker ec2-user
sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo yum install mysql80-community-release-el9-1.noarch.rpm -y
sudo yum update -y
sudo yum install mysql-community-server -y
sudo systemctl start mysqld
sudo systemctl enable mysqld

다음과 같은 명령어들로 재설치했더니 해결 됐습니다. 

 

아 카카오 로그인 풀려서 글 날라갔어요... 눈물 난다....내용이 기억 안나...  임시저장을 습관화 합시다

수차례 uninstall과 install 한 끝에 문제를 해결했다는...

 

아무튼 소셜 로그인 기능을 어찌저찌 끝낸 뒤, 서비스의 핵심 기능 중 하나인 전문가 인증 기능 개발을 시작하였습니다. 

저는 두 가지 방식 중 고민을 했는데

1. 메일 인증 방식을 이용한 전문가 인증 

2. 선 사진 업로드 후 심사와 승인

이렇게 두 가지였습니다.

 

다만 첫 번째 방식을 구현하기엔 인증한 메일 주소가 유효한지, 유효하다면 본인이 내부 직원이 맞는지, 직무가 어떻게 되는지 등등 내부적인 정보까지 알 수 있어야 승인이 가능하기에 저희 팀은 두 번째 방식을 선택하였습니다. 또한 https://www.thecompaniesapi.com/ 라는 사이트에 비슷한 APi를 제공하지만 유료이며, 해외 기업들만 나온다는 점에서 배제하게 되었습니다. 실제로 블라인드에서도 회사 이메일이 없는 개인 병원 의사 또는 전문직 종사자들은 자격증 같은 것으로 인증을 하기도 한다는 글을 보아 (확실한건 블라인드 내부 기밀이겠죠?) 2번 또한 나쁘지 않은 방식이라 판단하였습니다.

 

두 번째 방식으로 결정이 난 이상 개발 자체는 오래 걸리지 않았습니다. 사용자가 등록한 이미지들을 AWS S3에 저장하고 해당 URL을 리턴하도록 하였습니다. 그러면 이제 관리자들이 내부 기준에 따라 심사 후 유저 테이블의 expert_field라는 컬럼에 분야를 수기로 작성하는 방식을 사용하였습니다. 사실 시간만 많았더라면 '심사 전', '심사 중', '심사 후' 같는 State를 만들어서 만약 사용자가 심사 중인 상태라면 중복으로 심사 신청을 할 수 없도록 만들고 싶었으나 해커톤 특성상 디테일 한 기능은 구현하지 못했습니다. 

 

전문가 인증 기능까지 만들었을 때 시계를 보니 약 12시였고 남은 시간은 약 6시간 정도였습니다. 서비스 기능 약 6가지 중 이제서야 2가지를 해결하였고 남은 기능들을 혼자 구현하기엔 역부족이라 판단한 저는 subCategory로 글 검색을 하는 기능이나 마이페이지 같은 부가적인 기능보단 우선 글/댓글 작성과 같은 핵심적인 기능 개발을 시작했습니다.  

 

저는 기존에 계획했던대로 글과 댓글을 구분하지 않고 한 테이블로 만든 뒤 is_comment라는 boolean 값으로 구분을 하였습니다. 만약 댓글이라면 원본 글의 참조값이 있어야 하기에 parent_article이라는 column을 만들어줬구요, article_sub_categories는 따로 테이블을 분리해서 저장했습니다. 

 

이제 이 글/댓글 작성 기능의 가장 큰 문제점은 연관 관계가 복잡하다는 거였습니다. 만약 comment_permission이 false면 전문가만 글을 작성할 수 있으며, 전문가 또한 본인의 전문 분야에만 글을 작성할 수 있기에 그 것도 고려해주어야 했습니다. 마이페이지와, 글 노출 순서를 위해 글 스크랩 수와 댓글 좋아요 수 또한 카운트 해주고

......................

...............

...............

 

예 이거 만들다가 시간 끝났습니다...... 한 4시반 부터는 더 집중해도 모자를 판에 집중력도 흐트러지고 아주 죽겠더라구요.. 

 

또 극후반에 도달하니까 백엔드가 할 일이 없어지는 무능력함을 느꼈습니다. 디자이너들와 프론트 개발자는 시연+발표+온보딩 영상을 만드시고 구현 못한 부분을 프론트로 메꾸기에 바쁘신데 전 아침이 다가올 수록 남은 시간 동안 뭐 해야 하지? 라는 생각만 했습니다.  

 

그렇게 절망감을 가지고 발표를 진행하였는데 이게 웬걸? 대부분의 팀들이 백엔드 기능 완성을 못하고 프론트 단에서 재현 정도만 하고 있는걸 확인했습니다. 저는 완성도 못 한 주제에 속으로 안도의 한숨을 내쉬었습니다... 

이 분들의 기획력을 따라가기엔 제 실력이 한참 모자랐습니다. 반성합니다.

 

후기
비록 수상도 못했고, 기능 완성도 못 했지만 디자이너들의 훌륭한 칼춤을 볼 수 있었고, 해커톤이라는 협업 경험 자체가 너무 좋았습니다. 반성을 하자면 해커톤 전에 조금 더 많은 준비를 해갔으면 어땠을까 라는 생각이 듭니다. 사실 저는 다른 팀원들이 구축해놓은 SwaggerUI를 사용하기만 해봤지 직접 만들어보지는 않아 POSTMAN을 사용했는데요 Swagger를 사용했다면 프론트와 조금 더 편하게 소통할 수 있지 않았을까 싶습니다.

여담이지만 해커톤이 시작하고 백엔드를 혼자 맡아야 될 것 같다는 생각은 금방 들었습니다. 다른 팀원을 보니 딱 제 1년 전 모습을 보는 것만 같았거든요. 딱 김영한 교수님 스프링 입문, 핵심, JPA, ORM까지 들었던 제 모습이 말이죠 허허... git 협업이나 ERD 같은건 스프링 강의가 가르쳐주지 않잖아요? 그냥 프로젝트 머리 박으면서 배우는거지. 저 또한 주변 친구들에 비하면 아직도 한~~~~~~~~~~~참 멀었기에 실력을 논하는 것 자체가 진짜 배꼽잡을만큼 웃긴 일입니다 ㅋㅋㅋㅋㅋㅋ 그리고 지난 일이니까 이렇게 쿨한척 하는 거예요,,  친구에게 물어보니 "원래 해커톤은 어느 정도 혼자 캐리 한다는 마음을 가지고 가는거고 가서 잘 하는 사람이 많으면 좋은거다" 라고 하더라고요. 맞는 말입니다. 저도 제 할 일 하느라 진행 상황 자체를 캐치하지 못한 사람이기에 제가 더 잘했더라면? 리더쉽을 가지고 정확히 역할을 부여할 줄 아는 사람이었다면? 하는 아쉬움이 좀 남습니다. 하지만 사람은 부딪히면서 성장하는 거잖아요?  저는 이번 해커톤을 통해 반 발자국 정도 성장한 것 같습니다. 당분간은 지금 하고 있는 일에 조금 더 집중하고, 내년에는 제주도에서 진행하는 구름톤이나 다양한 협업 경험도 해보고 싶습니다. 

 

<쿠키> 

누워서 휴대폰 보고 있는데 갑자기 이런 내용의 메일이 왔습니다. 

엥? 하며 허겁지겁 메일 들어갔더니 

어라라...? 이 무슨 놀라운 제안인가... 안 그래도 누군가를 가르치면 2배로 빨리 배운다는 생각을 가지고 있는 저는 2분기에 스프링 스터디원들을 구한적이 있습니다.... 결국 회사 동료와 진행 중이죠 ㅎㅎ   

 

정말x1000 감사한 제안이지만 페이를 받고 누군가를 가르치는 행위는 내게 너무나 부담스러웠고, 리픽에서도 작업량이 한참 모자를 뿐더러, 회사 때문에 시간도 맞지 않아 아쉽지만 거절 의사를 밝혔습니다... 

비록 거절은 했지만 기분은 왠지 좋았습니다. 만약 나중에 기업에서 포지션 제안이 온다면 그 땐 10배는 더 기분이 좋겠지요?

벌써 가슴이 뜁니다. 더욱 열심히 하겠습니다. 

 

반응형

'잡담' 카테고리의 다른 글

다른 내일을 원한다면 어제보다 더 밀어붙여라  (0) 2024.06.16