일상/Kernel360

[Kernel360] 부트캠프 해커톤 후기

Emil :) 2023. 10. 26. 00:50
728x90
반응형
이 글은 Notion에서 작성 후 재편집한 포스트입니다.


서론


패스트캠퍼스에서 주관하는 백엔드 부트캠프인 Kernel360 을 수강중이다.

경력이 있음에도 불구하고 부캠을 한 이유는 다음과 같다.

  1. 자바로만 업무를 진행해서 자바 생태계 백엔드로써 필수 덕목인 스프링 역량 부족과 관련 프로젝트 경험 부족
  2. 지금까지 살아온 개발자로서의 삶과 서비스 기업에서 일하는 '찐 개발자'의 삶을 비교해보고 싶었음
  3. Redis, Kafka, Docker 등과 같은 Spring 이외에 서비스기업에서 필요로하는 미들웨어 역량도 강화가 필요했음
  4. 1과 같은 이유로, 관련 프로젝트를 진행하며 코드 품질을 높이는데 집중, 이를 통해 서비스 기업으로 이직 성공이 목표

본 부트캠프는 세가지가 없다고 한다. 경쟁, 교육, 정답.
실제로 부캠의 커리큘럼이 모두 프로젝트로 이루어져 있으며, 이는 각각 Boot-up, 해커톤, E2E, Final 로 이루어져있다.
프로젝트를 수행하기 위한 이론적인 학습은 일과 외 시간으로 충당을 해야해서, 굉장히 빡빡한.. 삶을 보내고 있다.

아무튼, 프로젝트에 대해 간략하게 소개하자면
Boot-up은 코딩은안하고 기획만 하는거고, 해커톤은 말그대로 MVP를 뽑아내는 프로젝트이다.
현재 해커톤까지 완료되었고, 5주짜리 프로젝트인 E2E 프로젝트를 진행중이다.

본 포스팅에선 4일간 진행한 해커톤 프로젝트의 후기를 남기고자 하니, 추후 2기 수강생들이 본..다면 참고가 될지도..
(이벤트 때문은 아니고?)

본론


1일차 - 경험은 독이 든 성배였나


첫째 날은 프로젝트 주제 선정, 아이디어 및 유즈케이스 구체화, ERD 작성을 진행했다.
프로젝트 주제는 클라이밍 관련 커뮤니티고, 최종목표는 회원가입, 로그인 및 게시글, 댓글 crud 기능 구현이었다.
그냥 게시판임.

참고로 커널360의 프로젝트는 프로젝트를 발표하고, 크루들이 투표를 통해 총 6개의 프로젝트가 선정되면 프로젝트에 참여하고싶은 크루들이 해당 프로젝트로 가서 팀을 이루는 방식이다.
다행히도 내 프로젝트가 6개의 프로젝트에 선정되어서 내가 팀장으로 진행을 하게 되었다.

일단 설계단계에선 차질없이 진행되었다. 팀원이 4명이었는데, 각각 유즈케이스(1), 와이어프레임(2), erd 작성(나)을 진행했다.
지금 시점에 와서 보면 단점으로 느껴지는 점은, 이전 회사에선 대부분의 컬럼 타입이 Varchar로 되어있었다.
이렇게 구현된 DB에서 값을 가져오고, 자바단에서 후처리 하는 방식으로 많이 진행했다.
JPA를 안썼기 때문에, 쿼리프로그래밍의 정수를... 느낄 수 있었다.

아무튼, 이러한 경험의 여파로 이번에도 마찬가지로 PK(주로 ID값), Boolean타입(~~여부 같은거) 들을 Varchar로 선언하고 작업을 진행했는데...

무식하면 용감하다

3일차에 뭔가 단단히 잘못됐음을 느끼게 된다. 이에 관한 내용은 3일차에..

아무튼 이렇게 작성된 ERD를 기반으로, Spring 고수셨던 팀원중 한분이 초기 프로젝트 세팅이랑, JPA 및 DB연동, security를 활용한 로그인까지 작성된 프로토타입을 공유해주셨다.
스프링을 모르는 상태에서 이걸 보니까 진짜 이해가 단 1도 되지않았다. 이 어노테이션이 의미하는건 뭐고, 어떤식으로 돌아가고, 어떻게 JPA가 돌아가는건지 전혀 모르니.. 너무 답답했다.

그래서 첫날은 ERD를 작성하고 강의만 주구장창 봤던거같다.

2일차 - 나는 말하는 감자


둘째 날은 팀원별로 기능을 담당하고, 이를 구현하는 업무를 진행하기로 했다. 전 날 본 강의가 있어서, 나는 게시글을 CRUD하는 작업을 담당했다.

그런데 문제가 발생했다. Spring Security 쪽에서 로그인을 하지 못하면, 다른 API가 아예 호출이 안되는 것이었다.
여기서 안되는게 있으면 시간이 없으니 그냥 시큐리티를 안쓰고 로그인하는 방식으로 구현하고, 바로 다음 작업으로 넘어갔어야 했는데... 문제는 이걸 뚫어보겠다고 3일차까지 붙들고 있었다. 해커톤을 시작하기 전에, 이민석 헤드디렉터님이 남기신 전언이 떠오르는 순간이었다.

해커톤 하면 로그인 구현하는데만 3일씩 걸리고 그러거든요? 그러지마세요~

 

그게 이런거였구나.. 솔직히 배경지식 없어도 구글링만 어케어케 잘 하면 될거라고 생각했는데, 매우 큰 오산이었다.
1일차에 수강한 강의를 기반으로 게시글을 작성하는 API를 일단은 작성했다. 그런데 테스트를 못하는 상황..
이날 하루는 로그인을 계속 붙들고 있었던 것 같다. 하지만 끝내 해결은 못했고 아웃풋 없이 하루 일과를 마무리했다.

Kernel360의 해커톤은 3일차에 팀원이 바뀐다. 즉, 기존에 설계해둔 기획과 코드 내용들을 팀원들에게 설명해줘야 한다.
하지만 앞서 말했듯.. 나는 Spring 관련 지식이 매우 부족한 상황이다. 팀원들이 작성한 코드를 이해를 못하는 수준인데.. 내일 어떡하지..? 하면서.. 강의를 들으며 2일을 보내게 된다..

3일차 - 여기가 프로젝트 맛집인가요?


환영합니다, 근데.. 저도몰라요

 3일차엔 팀원이 바뀌게 되었다. 이러한 이유는 실제로 회사에서 사람이 오고가면 인수인계를 해야하는데, 이러한 훈련을 하기 위함이라고 한다. 근데 그걸 굳이 해커톤에서 했어야했나요..?

아무튼 나는 팀장이고, 우리가 지금까지 진행한 프로젝트의 진행도, ERD, 유즈케이스 등을 새로 온 팀원들에게 소개해줬다.
그런데 문제는.. 이전 팀원이 짠 코드를 내가 이해를 할 수가 없었다..
팀원이 코드를 못짠게 아니라, 내가 스프링을 전혀 모르기 때문에 이를 이해할 수가 없던 것.

내가 이해를 해야 남들에게 알려주던 말던 하는데 말이다..
일단 기능을 구현해야 했으니 하는 수 없이 기존 코드를 주석처리하고, 강의에서 배운 내용을 토대로 우리 프로젝트에 맞게 코드를 작성했다.

그리고 1일차에 작성했던 ERD의 자료형 문제.. 우리는 JPA를 썼는데, JPA의 @id 어노테이션을 활용하려면 보통 Long 타입으로 선언하는게 국룰이라고 한다. 그리고 IS_DELETED 같은 boolean형 자료형들도 다 VARCHAR로 선언되어 있는 상태.. JPA는 객체지향 ORM이기 때문에, 데이터를 가져온 뒤에 후처리를 하지 않기 위함이 JPA의 핵심이다.
하지만 이렇게 자료형이 달라버리면 결국 후처리를 해야하고, JPA를 쓰는 의미가 퇴색되어 버린것.

그래서 부랴부랴 자료형을 다시 바꾸기 시작했다.. id는 long으로, boolean형 데이터 컬럼들은 tinyint로.. 이것부터 시간을 엄청 많이 잡아먹혔다.

그렇게 어찌저찌 게시글을 crud 하는 api를 만들었는데.. 문제는 2일차의 핵심 문제였던 로그인 뚫기부터 다시 막혀버렸다.
이걸 뚫어야 다른 API를 호출하든말든 하는데.. 말이다.
구글링과 chatGPT의 힘을 빌려 계속 뚫어보려고 했는데, Spring Security는 태산과도 같았다.
지금 진행중인 5주짜리 E2E 프로젝트도 로그인을 구현하고 있는데, 우리 팀을 비롯한 다른팀들도 로그인이 구현이 안되서 애를 먹고있다. 이런걸 4일안에 하려고했으니..

Security쪽은 원체 악명이 자자했어서 알고는 있었지만, 이론적인 지식이 기반이 되지 않는다면 쉽게 사용할 수 없는 프레임워크인 것 같다. 아무튼 이렇게 소중한 3일차도 로그인을 뚫다가 지나버렸다.

4일차 - "네 분수를 알라"


어떻게든 구현을 하려고 막차 시간까지 붙들고 있다가 집으로 돌아가길 4일째. 나는 그제서야 깨달을 수 있었다.

"애초에 이렇게 했으면 안됐구나"

진짜로.

내가 잘 모르는 프레임워크를 이론 학습 없이 구글링으로만 따라하다보면 되겠지? 라는 생각에 계속 뚫어보려고 했는데,
생각보다 쉽지 않은 일이었다.
그건 시간이 어느정도 있는 프로젝트에서나 가능한거지, 나같이 노베이스인 사람한테는 턱없이 부족한 시간이었다.

게다가 프론트도 구현해야 되는데, 프론트에 데이터 맵핑은 또 어떻게 할건지? 이제 7시간남았는데? 어떡하지?
차라리 혼자했으면 오히려 가능했을지도 모른다. 하지만 개발은 협업이기 때문에.. 남들이 쓴 코드에 내 코드를 맞추는 것이 굉장히 중요하다. 이게 핵심인 것 같다.

그렇게 목표는 자연스럽게 API만 구현하자. 로 귀결됐고.. Security쪽 코드를 싹 다 지워버린 다음에서야 내가 기존에 짜둔 코드를 테스트 할 수 있었다...
그렇게 게시물 crud 작업물만 든 채로.. 뻘쭘히 발표를 했고, 프론트도 구현한 다른팀들을 보며 정말 갈 길이 한참 멀었다 라는 것을 다시금 느꼈다.

기존 회사에선 이렇게 새로운걸 만드는 프로젝트도 없었거니와, 있더라도 기존 코드를 복붙복붙 하는게 일상이었기 때문에.. 정말 개발자로서 역량은 많이 부족하구나.. 라는것을 상기시키는 시간이 됐다.
사실 이 생각은 평소에도 갖고 있었는데, 이렇게 적나라하게 내 자신에게 보여진 적은 처음이었다.

이렇게 4일간의 해커톤 대장정(?) 은 막을 내리게 되었다. 전형적인 실패 경험이지만, 그래도 얻을 수 있는건 명확했다.

  1. 짧은 시간안에 구현해야 하는건 기능구현을 최우선으로 하자. 특히 결과물만 보고 평가하는 해커톤 같은건.
  2. 다른 사람과 코딩 컨벤션을 맞춘다고 맞췄지만, 정작 잘 지켜지지 않았다. 이를 교훈삼아 현재 진행중인 E2E 프로젝트는 꽤나 잘 지켜지고 있다. 이부분은 정말 만족.
  3. 사소한거라도 반드시 팀원과 공유해야 한다. 팀원들이 미리 작성해둔 코드를 수정해야 하는 추가적인 노동이 발생할까봐 말을 안하고 있으면, 결국 코드의 품질을 떨어뜨리고 중복코드가 발생해버리는 일로 귀결된다.
  4. 설계 단계에서 좀 더 심혈을 기울이자. 예를 들면 엔티티를 모두 같이 짠다던가.
  5. 강의 더 열심히 들어야겠다..!!
     

마치며


4일간의 대장정을 끝내고, 인생에서 처음으로 해커톤을 겪어봤다.
비록 공식적인 대회는 아니었지만, 충분히 값진 경험이라고 생각한다.

지금은 열심히 E2E 프로젝트를 진행 중이다. 비록 몸은 힘들지만, "실제 서비스기업에선 이렇게 일을 하는구나!" 를 간접적으로 체험할 수 있어서 매일매일이 즐겁다.
사실 지금까진 "개발이 나한테 안맞는것같다.." 라는 생각을 계속 해왔는데, 이는 단순반복적인 업무를 그렇게 진행해와서 그런 생각이 들었던 게 아닐까 싶다.

팀원들과 적극적으로 소통하고, 더 나은 코드를 위해 서로 피드백하고 노력하는 모습이 보기 좋은 요즘이다.
언젠간 나도 "찐 개발자"의 영역에 들어서기를 바라며..

구독 및 하트는 정보 포스팅 제작에 큰 힘이됩니다♡

728x90
반응형