들어가며
우아한테크코스 3주 차 과제를 무사히 완주하고, 드디어 4주 차가 되었다.
4주 차 과제는 오픈 미션으로 이번 기수에 처음으로 도입된 미션이다. 오픈 미션은 본인이 스스로 도전하고 싶은 목표를 실천하고, 그 목표를 달성하고자 노력하여 결과물을 도출해야 한다. 이번 기수의 주제가 "도전"인 만큼 문제 해결력뿐만 아니라, 주도적으로 문제를 정의하고 도전하는 정신을 보는 것 같았다.
이번 글에서는 평소에 내가 도전해보고 싶었던 것을 주제로 하여, 목표를 설정하게 된 과정을 기록하고자 한다.
오픈 미션
우선, 오픈 미션은 3가지의 대표적인 방식이 있다.
- 낯선 도구 해커톤: 난이도는 평범하나 평소에 잘 사용하지 않는 개발 도구나 언어(예: Rust, Kotlin, WebAssembly, 하드웨어 보드 등)로 문제를 해결한다.
- 고난도 문제 해커톤: 평소에 익숙한 기술을 사용하여 난이도가 높은 문제를 해결한다.
- 제한 협업 미션:2~3명이 한 팀이 되어 처음 보는 사람과 협업한다.
위 3가지의 방식 중, 어떤 방식으로 오픈 미션을 진행할지, 정말 고민이 많았다. 협업 미션의 경우에는 일정 문제로 인해 팀원에게 민폐가 될 것을 우려하여 고려하지 않았다. 그러면 낯선 도구 해커톤 혹은 고난도 문제 해커톤을 수행해야 하는데, 나는 난이도 높은 문제를 해결하는 것을 좋아한다. 물론 낯선 도구를 사용하여 평범한 난이도의 문제를 해결하는 것 또한 낯선 도구라는 제약으로 인해 난이도 높은 문제라고 할 수 있다. 그래서 나는 낯선 도구 해커톤을 선택하고, 내가 해본 적 없는 경험 중 가장 하고 싶었던 경험을 도전해보기로 했다.
목표 설정
어떤 도전을 할 것인가?
낯선 도구 해커톤 관련으로 설정한 도전은 바로 백엔드 개발이다. "너무 뻔한 도전이 아닌가?" 라고 생각할 수 있지만, 백엔드에 도전하고 싶은 마음은 진심이다. 대학 시절 프론트엔드 개발만 경험해 왔기에, 백엔드에서 무엇을 어떻게 처리하는지, 성능 최적화를 위해 무슨 작업을 하는지 자세히 알지 못했다. 실제로 프로젝트를 진행하면서, 백엔드가 데이터베이스에서 데이터를 어떻게 가져오는지 이해하지 못해, 비효율적으로 API를 호출했던 경험이 있다. 또한, 백엔드에서 사용하는 용어를 이해하지 못해 소통의 제약이 생겨 불편한 점이 많았다. 이는 명백히 백엔드 지식이 부족해서 발생한 문제였다. 이러한 문제를 방치하면 추후에 진행할 프로젝트에서도 소통의 문제가 발생할 것이라고 생각했다. 그래서 나는 직접 백엔드 지식과 경험을 얻어가고자 백엔드 개발을 도전하기로 했다. 이 도전으로 인해 프론트엔드와 백엔드의 기술을 이해하고, 앞으로 진행할 프로젝트에서 더욱 효율적인 작업을 이끌어내는 것으로 기대된다.
오픈 미션에서 도전이라는 기회가 주어진만큼, 내가 정말 하고싶고, 나에게 필요하다고 생각하는 도전을 해볼 것이다.
계획 수립
백엔드 개발의 결과물을 도출하기 위해 프론트엔드 개발을 겸비한 풀스택 개발을 진행하기로 했다. 백엔드 개발을 무사히 완료하는 것이 주된 목표이기에 프론트엔드 개발은 그나마 익숙한 React 기반의 Next를 사용하기로 했다. 백엔드 개발은 Spring을 고려했으나, Java와 Spring을 학습하면서 풀스택 개발을 진행하기에 2주는 너무 짧은 기간이라고 생각했다. 언어와 프레임워크에 대한 학습기간이 길어지면, 백엔드 개발에 대해 고민해 보는 시간이 없을 것이라고 생각했다. 이에 따라, TypeScript를 사용하는 Nest.js를 선택하게 되었다. Express.js를 선택할 수도 있겠지만, Nest.js에 비해 매우 단순한 구조로, 도전의 의미가 크게 없는 것 같아서 고려하지 않았다. 이에 따른 최종 기술 스택은 다음과 같다.
- 프론트엔드
- 언어: TypeScript
- 프레임워크: Next.js v16
- 스타일링: tailwind
- 패키지 매니저: pnpm
- 백엔드
- 언어: TypeScript
- 프레임워크: Nest.js v11
- 패키지 매니저: pnpm
- 데이터베이스: PostgreSQL
"어떤 프로젝트를 해야 짧은 시간에 많은 도메인을 접할 수 있을까?" 라는 고민을 오랫동안 했던 것 같다. 이에 대한 결론은 프리코스 과제에서 힌트를 얻었다. 8기가 아닌 6기에서 진행했던 과제 중, 숫자 야구라는 과제가 있었는데, 이를 활용하면 재밌는 프로젝트를 할 수 있을 것 같았다. 단순히 숫자 입력에 대한 결과를 출력하는 것이 아닌, 온라인으로 1대1 대결을 할 수 있는 온라인 숫자 야구 대결 프로젝트를 진행하기로 했다. 이 프로젝트라면 CRUD, 실시간 통신, 데이터베이스 등 다양한 기술을 사용할 수 있을 것 같았다.
마무리
지금까지 백엔드 개발 첫 도전이자 풀스택 개발 첫 도전을 위한 계획 수립 과정을 작성해봤다. 앞으로는 온라인 숫자 야구 대결의 백엔드 개발에 대한 이야기를 포스팅 하도록 하겠다.