답수실Log | 230126 | 토이 프로젝트 계획 중. 어떤 기술 스택을 사용해야 할지 고민 중(사실 답정너...?)
올해 세운 계획 중 하나는 데브옵스, 웹 서버, WAS, DB, 프론트 등 혼자서 모든 범위를 아우르는 개발을 처음부터 끝까지 구현해 보는 것이다(진정한 풀스택...!).
프로젝트의 계기는 크게 두 가지 이유가 있다.
토이 프로젝트 계기 및 취지 1: 개발 역량 향상
작년에 개발자로 취업하고 실무를 하면서 취업 이전보다 확실히 많이 성장한 것이 느껴진다. 특히 vue.js(nuxt)같은 프론트 영역은 1도 몰랐는데, 이제는 전체 웹사이트의 일부 페이지들을 직접 만들어서 배포까지 하고 있고, mongoDB도 예전보다 다양한 기능들을 활용하면서 DB활용 능력 범위가 꽤 많이 확장되었다. 그러나 SW정글을 통해 체득한 좋은 개발자에 대한 개념은 평생 학습할 수 있는 능력을 갖춘 개발자이고, 나 역시 좋은 개발자가 되기 위해 지금보다 더 많은 시간을 개발 역량을 끌어올리는데 할애해야 한다고 생각했다. 이를 실현하기 위한 방법으로 토이 프로젝트 진행을 선택했다.
현재 나는 풀스택 개발자로 일하면서 웹에 대한 전반적인 이해도를 가져가고 있지만, 장기적으로는 백엔드 개발자로 커리어를 쌓고 싶다. 즉 T자형 개발자가 되고 싶고, 그 깊이가 있어야 하는 중심 역량이 백엔드 기술이길 희망한다. 지금 일하는 것에 만족하지 않고 업무 외 시간에 백엔드와 관련된 지식들을 학습하고, 체득해야 한다. 그러기 위해서 직접 프로젝트를 설계하고 프로그래밍하면서 장애물들을 극복하는 경험이 최선이라고 생각한다. 이와 관련해서 영감 받았던 호돌맨님의 블로그도 추천!!
"여러개의 기술을 담당 하니깐 경쟁력이 떨어지는 것 같아요"
작은 스타트업에서 프론트, 백엔드, 인프라를 담당하고 있습니다. 백엔드만 개발하는 사람에 비해 이직시 경쟁력이 떨어지는것 같아요. 어떻게 해야 좋을까요? 이런 질문을 몇 번 받았다. 그럴
hodolman.com
토이 프로젝트 계기 및 취지 2: 기록 및 시간 트래킹하는 툴 제작을 통한 시간 효율 개선
나는 계획하고 움직이는 것에 매우 편--안함을 느끼는 파워 계획형 인간이다(MZ식 표현으로 극J형 인간). 매일 하루의 시간을 쪼개고 쪼개서 업무 시간에는 어떤 일들을 해야 하는지, 업무 외 시간에는 자기개발을 어떻게 할지 등 매우 구체적으로 계획하고, 그 계획에 맞게 시간을 보냈었다.
위의 사진들은 스타트업할 때 메모했던 기록들이다. 지금 보니 뭔가 창피하긴 하지만... 아무튼 하루를 쪼개고 그 시간에 무엇을 할지 플랜을 세우고, 실제로 해당 시간에 어떤 행동을 했는지 기록했었고, 잠들기 전 하루를 리뷰하면서 마무리했었다.
하지만 개발자로 커리어전환하기로 한 후 운이 좋게 SW사관학교 정글에 입학하게 되면서부터 이 습관을 없앴다. 아니 없앴다기보다는 없어진 것이 맞겠다. 왜냐하면 정글에서 계획이라는 것은 매우 사치였기 때문에... 정글에서는 밥먹고 자는 시간 외 대부분 시간을 노트북 앞을 지키는데 사용했었고, 자는 시간도 테스트를 언제 통과하냐에 따라 달라졌기 때문에 계획이라는 것이 무의미했었다...

아직도 RB tree, pintOS 악몽 가끔씩 꾼다...
이때 계획에 맞게 자원을 활용하는 것도 중요하지만 막무가내로 될 때까지 시간, 에너지를 다 태워버리는 것도 꽤 의미있는 행동이라는 것을 체감했었다. 그래서 정글 수료 이후에는 간단한 하루 목표 정도만 설정했었고, 어떻게든 그 목표를 달성하기 위해서 시간을 보냈었다.
그러나 역시... 나는 벼린 칼로 예리하게 시간을 나누고 계획한대로 움직이는 것이 더 잘 맞는 것 같다. 22년도 분명히 나름 열심히 살아왔고, 원하는 개발자 취업도 성취했지만 뭔가 많이 아쉽다. 이 미련은 결국 시간을 더 효율적으로 활용하지 못한 경험에서 나오는 것 같다.
여하튼!!!! 다시 프로젝트 얘기로 돌아와서!!! 나는 기록을 통해 효율적으로 시간을 활용해보고 싶은데 이 욕구를 만족시킬만한 툴을 본 적이 없다. 여기서 아이디어를 착안해서 커스터마이징이 가능한 플래너 툴을 만들어보려고 하고, 이 툴을 통해 내 시간도 내가 원하는대로 관리해보려고 한다.
그래서 기술 스택은?
원래 기술스택은 현재 회사에서 사용하고 있는 기술들을 토대로 사용하려고 했었다. 경력이 짧은 입장에서 많은 언어들을 접하는 것 보다는 지금 사용하고 있는 기술에 딥다이브하는 것이 더 중요하다고 생각하기 때문이다.
하지만 이 결정의 틀을 깨는 이슈들이 생겼다. 첫 번째는 향로님의 회고글이다. 나는 프로젝트의 백엔드 기술로 NestJS를 선택했고, 인프런 강의와 공식문서를 보면서 학습하고 있었다. NestJS가 기존 node.js에 비해 아키텍처 설계하는 방식이나 OOP요소를 효율적으로 사용하는 것을 보고 혁신이다...!라고 감탄했었는데, 반면에 향로님은 네스트에 실망적이고 회의적이라고 하셨다. 향로님은 nest.js를 사용하면서 "굳이 스프링같은 프레임워크를...?" 이라는 생각이 들었다고 한다. 즉 TS로 된 Spring MVC라고 표현하셨다. 노드 진영에서 그동안 스프링 등 기존의 프레임워크들이 고수하던 방식을 선택하지 않았던 이유는 다른 방향의 좋은 해결책을 고민하는 것이라고 믿었었는데, 그 믿음에 대한 기대가 흐려졌기 때문에 부정적인 감정을 느끼신 것 같다. 나는 웹개발 하는데 있어서 node만 사용해봤기 때문에 다른 프레임워크의 방식에 대해서 잘 알지 못했고, 여기서 나오는 짬(?) 차이 때문에 향로님과 매우 다른 평을 가지게 된 것이다(내가 사용하는 MVC와는 뭔가가 달라...).
두 번째는 토비님의 스프링 부트 인프런 강의이다. 나는 카톡 오픈 채팅방 개발바닥 털보방... 아니 1사로 방에 들어와있다(200명대 부터 있었다 후훗..). 설 연휴 때 자바 개발자 토비님의 스프링부트 강의가 인프런에 올라왔다는 소식과 함께 한동안 방이 엄청 뜨거웠고, 많은 개발자분들이 강의를 구매한 것을 인증하기도 했다. 나는 자바와는 일면식이 일도 없는 사람이다보니 조금 의아했었지만, 연휴 동안 심심하니까 한 번 들어보자~는 가벼운 마음으로 강의를 구매했다(회사 계정 매우 감사합니다욥...!). 심지어 향로님도 인프런의 백엔드팀도 다 이 강의를 보기로 했다고 하고(인프런 역시 NestJS를 사용한다), 이 강의를 본다면 네스트에 대한 이해도도 같이 올라갈 것을 기대한다고 하셨다.
물론 강의 전체를 보진 않았지만, 강의를 보면서 확실하게 느낀점은 정.저.지.와. 였다. 눈 뜬 장님이 바로 나였구나...! 물론 평생 JS세계에서만 있을 생각도 없었지만, 다른 언어로 눈을 돌릴 생각조차 안했던 것도 사실이다. 당연히 지금 하고 있는 것부터 제대로 할 줄 알아야 한다고 생각했기 때문에 당연하게 nest.js를 선택했던 것이다. 세상에 당연한 것은 없는데...! 물론 지금 당장 자바를 익히고, 새로운 프레임워크를 학습하는 것도 비효율적일 수 있겠지만 적어도 내가 사용할 기술들을 선정하는데 있어서 지금보다는 더 명확한 이유가 필요하다고 본다.
아무튼 이것저것 따져보면서 내린 결론은 결국 NestJS다..! 선정 이유는 크게 두 가지다.
- Node.js 사용에 대해 익숙하기 때문에 자원 활용에 유리함
- 빠르게 다양한 feature와 기능들을 추가하는데 있어서 스크립트 언어로써 가지는 장점
첫 번째는 있는 말그대로 내가 노드를 사용하는 개발자이기 때문에 프로젝트를 진행하는데 있어서 시간과 에너지를 더 효율적으로 사용할 수 있다는 장점이고, 두 번째는 프로젝트에 질리고 지치기 전에 빨리 많은 피쳐들을 넣으면서 장작불이라는 프로젝트에 계속 불씨를 살릴 수 있도록 하는데 있어서 nestJS가 더 유리할 것 같다는 것이다. 또한 매우 복잡한 웹사이트를 만들 계획이 아니기 때문에 다른 언어, 프레임워크를 사용하는 것이 나에게 있어서 얼마나 도움이 될지도 의문스럽다(만약 웹 애플리케이션 뒤편의 동작 원리 등 더 깊은 기술들을 이해하는 것이 목표였더라면 스프링 부트 / 스프링, 혹은 GO 언어을 선택했을 것 같다).
이외에도 DB는 MongoDB를, 프론트는 Nuxt였지만 nuxt3가 개똥같아서 next로 할지 고민 중이다.. 이외에도 인프라도 고려해보면서 탄탄한 프로젝트가 될 수 있도록 신경써야겠다. 오늘 기록 끄읏.