Published on

[회고] - 졸업 작품만 2회차

두 번의 졸업 작품

전문 학사과정 3년이 끝날 때쯤, 주변에서 학사를 권유하는 지인들이 몇몇 있었다.

4년제 출신은 연봉이 더 높다~

야간에 진행하므로 주간에 직장에 다니거나 공부를 하면 된다~

긍정적인 요소들만 보였고 하지 않을 이유가 없었다. 그렇게 일사천리로 나의 4학년이 시작되었다. 같은 학교지만 3학년을 졸업하고 4학년으로 다시 편입했기 때문에 졸업과 졸업 작품을 두 번 하게 되었다. 앞서 언급하지는 않았지만, 졸업 작품 프로젝트가 편입을 망설였던 가장 큰 원인이었다. 매주 진행 상황 발표와 작성할 문서가 있기 때문에 생각보다 신경 써야 할 부분이 많았고 프로젝트 주제 선정 또한 큰 고민거리였다. 하지만 졸업작품 때문에 포기하기에는 수지 타산이 맞지 않다고 판단했고 그렇게 결국 한 번 더 하게 되었다.

3학년 졸업 작품 "COMMA" 때는 React는커녕 기본적인 HTML, CSS, JS도 잘 다루지 못했다. 간단한 계산기, 키오스크만 만들어봤던 나에게 알려주는 것 하나 없이 프로젝트를 진행해야 되는 이 상황이 막막하고 두려움이 가득했었다. 심지어 같은 프론트엔드 팀원이 있었지만, 혼자서 개발을 진행해야 하는 상황이었기 때문에 더 그랬던 것 같다. 그에 비해 이번 프로젝트는 시작부터 비교적 수월하게 진행됐다. 친분이 두터운 동기들과 팀을 구성했고 기술적으로는 지난 프로젝트 이후 배운 것들과 혼자서 진행했던 토이 프로젝트가 큰 도움이 되었다. 역시 비록 한 번이지만 경험의 중요성을 몸소 체감할 수 있었다.

image

프로젝트 소개

나의 일정을 친구, 동료들과 공유하고 관리할 수 있는 플랫폼으로 기업회원의 경우 서로의 일정 조회를 통해 더욱 수월하게 미팅을 잡을 수 있다. 미팅 날짜가 확정되면 해당 날짜와 시간에 대여 가능한 회의실을 예약할 수 있고 회의 내용을 음성인식으로 녹음하는 기록 서비스를 제공한다. 이 플랫폼 하나로 개인과 기업 회원 모두 일정을 관리하고 공유 오피스를 대여할 수 있는 서비스를 구현한다.


나름 풀스택 개발자가 되었다

프로젝트 진행 초기(3~5월)에는 Nest 프레임워크를 사용하는 백엔드를 메인으로, 프론트엔드를 서브로 담당하며 개발을 시작하게 되었다.

Q. 프론트엔드 개발자라면서 왜 갑자기 Nest 이야기가 나오나요?🤷‍♂️

  • 3학년 때 프론트엔드를 담당한 프로젝트가 끝난 시점에서부터 백엔드 분야를 공부해 보고 싶다는 마음이 있었다. Java 기반 Spring 프레임워크를 사용하기에는 어려움이 많았고 흥미 또한 느끼지 못했다. JS 기반 Nest 프레임워크가 과거 JS를 공부했던 경력을 살려 접근성이 더 높다고 판단했고 Express에 비해 끌리는 부분이 있었다. 그렇게 귀여운 고양이 로고에 현혹되어 Nest 공부를 시작하게 됐다. 더 효과적인 학습을 위해 프로젝트가 필요했고 졸업 작품 프로젝트를 데뷔전으로 결정했다.
  • 프론트엔드를 담당하는 팀원들이 React를 사용해 본 경험이 없었기 때문에 원활한 진행을 위해 프론트엔드도 서브로 담당하게 되었다.

Nest를 백엔드 기술 스택으로 정식 채택한 뒤에 인프런에서 강의와 NestJS로 배우는 백엔드 프로그래밍 책을 가장 많이 참고했던 기억이 난다. 처음 Nest를 접했을 때 MVC 패턴, repository 패턴, DI, TS 등 생소하고 이해하기 어려웠던 개념들 때문에 한동안은 이론적인 부분을 공부하는데 전념하게 되었다.

4월 무렵이 돼서야 본격적으로 CRUD와 이메일 인증 등 나름대로 기본적인 기능들을 구현했고 로컬에서 혼자 백엔드와 프론트엔드 작업을 동시에 진행할 수 있게 되었다. Heroku, S3 등의 서비스를 연동하고 테스트 및 적용하는 과정에서 정말 재미를 많이 느끼며 빠른 속도로 프로젝트를 진행해 나아갔다. 이때 Heroku를 처음 사용해 봤는데, AWS EC2만 이용해서 프로젝트를 배포해 봤던 나에게는 간편하게 모든 환경을 자동으로 구축해주는 Heroku는 구세주 같은 존재가 되어주었다.

하지만 점차 프로젝트 외에 여러 일들을 병행하게 되며 온전히 집중하는데 제약이 생겼고 한동안 프로젝트에 소홀하게 되었다. 사실 조금씩이라도 진행이 가능했지만, 11월까지 많은 기간이 남았다고 판단해 안일하게 생각했던 것 같다. 이후 다시 프로젝트 개발이 재개되고 프론트엔드와 연동 작업을 준비했으나 계획한 것처럼 일이 쉽게만 풀리지는 않았다.


돌고 돌아 프론트엔드로

프론트엔드에서 문제가 발생했다. 프론트엔드 담당 팀원들의 경우 단순히 졸업만을 목표로 하고 있었고, 개발자가 아닌 다른 직업을 생각하고 있는 상태였다. 자연스럽게 개발에 대한 의지와 실력이 부족했기 때문에 이를 대비해 서브로 프론트엔드를 담당하며 서포트 하고 있었지만, 내가 진행한 부분 외에는 거의 진전이 없는 상황이었다. 정확히 파트를 분배해 주고 최대한 도움을 주려 했지만 큰 변화는 없었고 오히려 어설프게 작성된 코드들이 합쳐져 흔히 말하는 스파게티 코드가 되었다. 이 코드를 리팩토링 하는 과정에서 많은 고생을 했고 기존 프론트엔드 팀원들을 개발에서 제외하기로 결정했다. 결국 작년과 같이 혼자서 개발을 하게 됐다.. 여러 이해관계가 맞물려 어쩔 수 없이 내린 결정이지만 지금 생각해도 최선의 선택이라고 생각한다.

일련의 과정을 계기로 프론트엔드 위주로 개발을 이어나가게 되었고 자연스럽게 관련 지식 위주로 공부하게 되었다. 저번 프로젝트와 조금 다른 점이 있다면, 이번에는 단순하게 완성을 위해서 코드가 아닌 원리를 최대한 이해하고 적용하며 만드는 과정에 조금 더 중점을 두고 코드 로직을 작성하기 위해 노력했다. 프로젝트를 진행하며 많은 생각을 하게 되었다. 어느 순간부터 백엔드 분야에는 거의 시간을 투자하지 않게 되었고 프론트엔드 파트에만 몰두하고 있었다. 어중간하게 여러 분야를 공부하느니 한 분야를 확실하게 하자는 생각을 했다. 단순히 이번 프로젝트에서만이 아닌 앞으로의 방향성도 포함되는 결정이 필요했다. 결정을 위해 기준으로 두 가지 요소를 고민했다.

  • 무엇을 할 때 가장 즐거운가
  • 무엇을 할 때 잘할 수 있을까

충분한 고민 뒤에 나는 프론트엔드를 선택했다. 프론트엔드 파트에서 개발을 진행할 때 더 수월하고 열정적으로 임했던 것 같고 더 성취감이 있었다. 단순히 백엔드보다 그나마 더 해봤던 프론트엔드 경험이 영향을 미쳤을 수도 있지만 이것 또한 선택의 요소가 될 수 있다고 생각하고 무엇보다 눈에 보이는 결과물을 만들 수 있다는 부분이 가장 좋았다.

생각 정리는 끝났고 과감하게 지금껏 진행했던 백엔드를 포기했다. 아쉬운 마음도 들었지만 이번 과정을 계기로 많은 것을 배울 수 있었다. 이후 협의 끝에 백엔드 프레임워크를 다른 팀원이 스프링으로 대체하고 나를 포한 세 명이 프론트엔드를 담당하게 되었다. 사실상 혼자서 프론트엔드를, 남은 두 명은 발표, 자료 정리와 같은 기타 업무를 담당하게 되었다.


+

  • 같이 백엔드를 담당한 팀원은 원래 스프링을 메인으로 사용했고 학습을 목표로 Nest를 공부했으나 협의 끝에 변경되었다.
  • 기존 Nest 백엔드 프로젝트는 혼자서 개발을 진행한 상태였고, 차후 스프링 셋팅 전까지 백엔드를 담당했다.

좋았던 점 😀

  • 최종 발표 기한 안에 목표했던 모든 기능을 구현했다.
  • React-Query, Suspense를 공부하고 직접 프로젝트에 적용해 볼 수 있었다.
  • 백엔드 분야에 대한 기본적인 지식을 알게 되었고 개발 과정에서 큰 도움이 되었다. 그리고 이때 만들었던 프로젝트를 가끔 API 관련 코드를 작성할 때 유용하게 사용하고 있다.
  • 간단한 최적화 작업(코듭 분할 및 번들, 청크 크기 축소)을 통해 새로운 지식을 얻고 적용하는 경험을 할 수 있었다. 테스트를 위해 간단하게 만든 프로젝트로는 성능을 측정하기에 큰 편차가 없어서 아쉬웠지만 이번 프로젝트에 적용함으로써 변화를 체감하기에 더 적합했던 것 같다.
  • 부족한 결과물이지만 그래도 경진대회에서 최우수상을 수상했다.

📌 전반적으로 기술적으로 새로운 기술을 배우거나 적용하는 경험에서 얻은 것들이 많았고 이번 프로젝트를 진행하며 더 나은 코드를 작성하고 싶다는 욕심을 가지게 됐다.


아쉬웠던 점, 부족한 점 😅

  • 시간을 비효율적으로 사용했던 것 같다. 약 8개월이라는 개발 기간 동안 꾸준함이 부족했다. 이로 인해 발표 기간이 다가왔을 때 몰아서 개발을 진행하게 됐다. 급박하게 개발을 진행하다 보니 코드의 퀄리티도 떨어지고 체력적으로도 많은 부담이 되었다.
  • 초기에는 피그마를 사용하기는 했지만 후반기에는 거의 사용하지 못했다. 탄탄한 설계가 부족했다.
  • API 명세서를 노션으로 관리하기는 했지만, 그 외에 프로젝트를 진행하며 문서를 남기거나 다양한 툴을 사용하지 않았기 때문에 체계를 처음부터 잘 잡지 못한 부분이 아쉬웠다. ( 기한 안에 완성한다는 마음에만 너무 집중했다.. )
  • 아직 컴포넌트를 분리하는 데 있어서 부족함을 많이 느꼈고 이로 인해 복잡한 코드 로직이 만들어졌다.
  • 일단 만들고 나중에 수정하는 마음으로 코드를 짜고 나중에 후회하며 리팩토링했던 경험이 많았다. 특히 React-Query를 사용해 회의실 검색을 진행할 때 모든 회의실 API, 검색 결과 API, 지역 분류 결과 API 데이터를 useQuery로 어떻게 처리해야 할지에 대해서는 아직 확실하게 해결하지 못했다. 공식문서를 다시 정독할 필요가 있다.
  • 백엔드 팀원 외에 협업 경험을 쌓지 못한 부분이 가장 아쉽다.

배운 점 🤔

  • 처음부터 기획 및 설계를 탄탄하게 잡아야 한다는 교훈을 몸소 깨달았다. 일단 개발하며 방향성을 잡고 필요한 소요가 발생하면 그때마다 유동적으로 해결하려던 생각으로 인해 시간을 더 소모하게 된 것 같다.
  • 결국 남는 것은 기록이었다. 여러 이슈 혹은 개발에 기록을 남겨놓으면 이력서, 보고서 등 다양한 분야에서 사용할 수 있고 큰 도움이 된다는 것을 이력서를 수정 및 블로그에 글을 쓰며 느꼈다.
  • 조금이지만 백엔드 관련된 기본적인 지식을 익혔던 경험이 프로젝트를 진행하며 많은 도움이 되었다. 앞으로 프론트엔드 개발자를 목표로 하고 있지만 앞으로도 틈틈이 기본적인 백엔드 지식을 숙지할 계획이다.
  • 다른 팀원이 작성한 코드를 보며 어려움을 겪었던 경험이 있었다. 내 코드 또한 타인이 이해하기에는 어려움이 많을 것이다. 따라서 주석을 작성하거나 커밋과 커밋 메시지를 더 신경 써서 남겨야겠다.
  • AWS Amplify 서비스와 Vercel을 이용해 배포를 진행해 보는 경험을 할 수 있었다. 최종적으로는 비용이 발생하지 않는 Vercel을 이용해 배포를 선택하게 되었다.

앞으로 바라는 것 👊

  • 다음 프로젝트 때는 사용해 보지 못한 라이브러리들을 사용해 보고 싶다. 특히 Recoil을 사용해 볼 계획이다.
  • 프로젝트를 진행하며 발생하는 이슈를 노션이나 블로그에 꾸준히 작성하는 습관을 가지고 싶다. 이번 프로젝트 때는 과거에 비해서는 상대적으로 많이 기록을 남겼지만 앞으로 더 많은 시도와 실패를 기록할 수 있는 내가 되었으면 좋겠다.
  • 많은 사람들과 협업하는 기회가 있었으면 좋겠고 더 체계적으로 프로젝트를 진행하는 경험을 해보고 싶다. 두 번의 프로젝트에서 협업 경험이 부족한 점이 압박으로 다가오는 것 같다.
  • 이번에 아쉬웠던 점과 부족했던 점을 보완해서 다음 회고 때는 같은 내용을 보완할 부분에 기록하는 일은 없었으면 좋겠다. 같은 실수는 최대한 반복하지 말자.



마치며

이번 회고를 적으며 작년에 진행했던 프로젝트가 많이 오버랩 됐다. 지금도 많은 어려움에 직면하고 부족함이 많지만 당시에는 정말 암울했었다. (참고 - COMMA 회고) GPT와 구글 검색의 도움을 많이 받기는 했지만 과거보다 조금은 성장했음이 느껴졌다. 가장 큰 차이점을 꼽아보자면 GPT가 있겠지만, 문제 상황이나 개발 진행 방향에 대해 자체적으로 파악하고 판단할 수 있는 능력 향상인 것 같다. 비록 적은 경험이지만 이 작은 경험에서 발휘된 부분이라고 생각하고 앞으로도 많은 경험을 쌓되, 그 경험이 옳바른 경험이 될 수 있도록 신경 쓸 필요성이 있다. 이번 프로젝트 때는 특히 공부한 내용을 최대한 반영하기 위해 노력했다. 최적의 방법으로 적용하지 못했을 수도 있지만 앞으로도 더 효율적인 방법을 알아내거나, 적용해 보고 싶은 기술이 있다면 언제든 수정할 계획이다.

프로젝트를 진행할 때마다 여러 문제 상황에 직면하고는 한다. 이번 프로젝트 또한 마찬가지였다. 기술적인 문제, 의견 충돌 등 다양하고 필연적으로 발생하며 이 과정은 동시에 팀, 개인의 성장, 결과물을 위해 필요한 것들이기도 하다. 앞으로도 프로젝트를 진행하며 실력을 쌓고 어려운 상황에 직면했을 때 지혜롭게 헤쳐 나가고, 의견 충돌이 발생했을 때 수용, 중재, 종합하는 능력을 적재적소에 발휘하는 사람으로 성장하는 것이 나의 목표다. 그 목표에 한 걸음 더 도달하기 위해 앞으로도 기록하고 회고하는 습관을 유지하도록 하자. 🔥