어느덧 2022년이 2일 뒤면 끝나게 된다. 돌이켜보면 정말 힘들면 힘들었고 쉴 틈 없이 바쁘게 달려왔던 것 같다. 개발이라는 분야에 대해 본격적으로 마주 했던 1년 이었으며, 있었던 일 하루하루가 의미있는 순간들이었던 것 같다.
결과적으로 생각해보면 리액트와 Next.js 그리고 타입스크립트을 사용하여 프로젝트를 경험할 수 있었으며 전액 장학금 까진 아니어도 반액 장학금을 받을 정도의 성적(3/54)을 받았고, 학교에서 절대 얻을 수 없었던 GDSC 동아리에서의 스터디들과 여러 활동이 나를 강하게 만들 수 있었고 좋은 습관들을 얻을 수 있게 동기부여 됬던 것 같다.
분기 별로 나누어 지난 1년간 어떤 일들이 있었는지에 대해 이야기를 해보려고 한다.
1분기엔 마침 종강을 한 시점이었다. 전과를 한 첫 학기를 마친 시기였는데, 열심히 한 것에 비해 성적이 나오지 않았던 시기여서 자존감이 많이 안좋을 시기 였다.
4년만에 복학이었고, 군대에서도 독서이외엔 딱히 공부라는 것과 벽 쌓고 살았으며 군 제대 이후 1년간의 휴학 기간에도 전공과는 다른 삶을 살아왔기에 정말 많이 힘들었던 시기기도 했다.
프론트엔드보단 학업에 집중하자고 다짐했었어서 부족했던 JAVA 실력을 다듬기 위해 자바의 정석을 방학동안 2회독을 하게 되었다.(이때 했던 자바와 OOP를 통해 1학기를 수월하게 할 수 있었던 원동력이었던 것 같다.)
지난 학기 때 배웠던 OOP가 정말 어려웠었지만 다시 한번 학습하면서 여러번 반복 학습이 효과가 있다는 것도 이 시기에 알게 되었던 거 같다. 이 때의 깨달음이 많은 것들을 할 수 있게 된 원동력이 되었던 것 같다.
많은 것을 바꾸게 해주었던 GDSC 지원공고가 이 시기 쯤 올라왔었다.
프론트엔드 개발자가 될거라고 충동적으로 전과를 했지만 막상 들어와 보니 내가 생각한 것과 다른 것들을 배우고 있었어서 정체성에 혼란이 오던 찰나 개발 동아리에서 내가 뭘 좋아하는지 알기 위해 지원해야겠다는 생각이 들었고 그렇게 자소서와 면접을 준비하게 되었다.
그 때 면접 보시던 분들이 나에게 이렇게 물어봤었다. "어떤 개발 분야에 흥미를 가지고 계신가요?" 였는데 얼버무리며 백엔드 개발자가 되고싶다고 말했던 나는 그렇게 GDSC의 1.5기 멤버가 되었다.
그 때 면접 보시던 분들은 모두 프론트를 희망하던 분들이었는데 이는 내가 프론트엔드를 준비하는데 큰 영향을 끼치게 되었다. 왜냐하면 프론트와 백엔드 사이에서 어떤 것을 해볼지 고민했던 것도 학교에선 백엔드 과정이니까 당연히 백엔드를 준비하는 것이 효율적이라고 생각했던 나 였지만, 다들 하고싶은 공부를 하며 개발 진로를 정하는 것을 보고 진로에 확신을 가지게 되었던 것 같다.
그래도 이 시기에 학점이 많이 낮았던 탓에 스터디 위주의 공부를 하게 되었다. 지금 생각해보면 어떻게 살았을까 싶었을 정도로 공부에 많은 시간을 할애하게 되었다. 스터디 카페도 이 때 부터 기간권으로 끊기 시작했고 글을 쓰고 있는 지금까지 단 한번도 스터디 카페를 안간 날이 없다. 정말 열심히 공부했다. 예습, 학교 수업, 복습 모두 철저히 하게 되었다. 그래서 학교 수업을 가는 날은 모르는게 없을 정도로 공부를 했었다. 잠도 정말 안 자서 맨날 아침 9시에 일어나서 최소 새벽 2시 늦으면 4시에 집 간날도 허다했다.
그렇게 열심히 한 결과 열심히 한 만큼의 보람을 느낄 수 있었다. 하지만 더 이상 이렇게 할 수 없을거라고도 느꼈다. 2학기 기말고사가 시작하기 얼마 남지 않은 시점에서 엄청난 번아웃에 시달렸고, 팀 프로젝트를 하면서 팀원들과도 맞지 않았는데, 해야할 일들을 제대로 해오지 않아 정말 많이 스트레스 받았었기 때문이다. 또한, 스터디와 병행하면서 하다보니 이 때 부터 조금씩 건강이 안 좋아졌던 것 같다.
무엇보다 가장 컷던 이유는 하고 싶지 않은 공부를 하고 있다는 생각이 강하게 들었다. gdsc 내에서 스터디를 할 땐 하고싶은 공부를 하다보니 정말 몰입도 있고 효율적인 공부를 할 수 있었는데, 수업을 들을 때와 시험 공부를 할 때의 나는 항상 3가지 의문을 가졌던 것 같다.
"왜 이런 기술을 배워야하지? 이걸 사용하면 더 효율적으로 할 수 있는데", "왜 대체 지금 시기에 이런 것들을 배워야할까? 이건 나중에 내가 필요할 때 공부하면 될 거 같은데", "교수님들은 왜 이런 방식으로 수업을 하실까? 진짜 집중도 안되고 몰입도 떨어져서 흥미가 안 생기네"등의 이유 말이다. 나중에 다루겠지만 이 시기가 지나고 나는 학교 성적보다는 내가 하고싶은 공부에 집중하게 된다.
한편, GDSC 내에서는 자바스크립트와 Vue를 스터디 했었는데, 자바스크립트를 책으로 공부한 적도, Vue를 공부한 적도 처음이었기에 정말 따라가려고 미친듯이 노력했던 것 같다.
JS의 경우 내가 발표하는 시기가 되면 노션으로 한번 정리하고, 피피티 만들면서 다시 정리하고 발표하기 전 정리하는 식으로 정리했던 것 같다. 또한, 팀원 분들이 정말 열정적이었어서 스터디를 10시에 시작하면 새벽 2시에 마칠 정도로 열심히 공부하고 실습했던 것 같다.
이 때, 역시 하고싶은 공부를 할 때 몰입도와 집중력이 아닐 때와 정말 많은 차이가 난다는 것을 느꼈으며 정말 열정적으로 스터디를 진행할 수 있었다. (스터디원, 팀장님께 정말 감사하단 생각이다!)
Vue를 통해서 TodoList 만드는 경험을 가질 수 있었다. 처음으로 ui를 만들어보고, 서버와 api 통신을 해보았으며, 검색, 모달 등등 많은 기능을 다뤄볼 수 있었다.
Vue를 하면서 느꼈던 건 난 개발이 재밌어서 공부하는 것 보단 역시 취업을 위해서 공부를 하고 있다는 생각이 들었다. 그래서 많은 사람들이 사용하고 취업에도 유리한 리액트 공부가 너무 하고 싶어졌다. 그래도 Vue 자체도 리액트와 비슷한 성격의 UI 라이브러리니까 Vue를 해놓으면 리액트를 할 때 도움이 될 거라는 생각으로 계속 공부했던 기억이 난다.
그렇게 GDSC 내에서 vue 스터디를 끝내고 성과공유회를 진행했으며, 종강을 하게 되었다.
전과를 했던 탓에 학점이 정말 많이 모자랐었다. 조금이나마 부족한 학점을 메꾸고자 계절학기를 했고 스프링 부트의 타임리프 템플릿과 html css js를 연동해서 캡스톤 프로젝트를 개발(결국 완성은 못해서 프로토타입 버전으로 제출했다.)하게 되었다.
1학기에는 jsp로 웹 프로젝트를 계절 학기 때는 html, css, js로 프로젝트를 진행하며 왜 이런 기술을 안 쓰고 이런 기술을 사용하는지 이해할 수 있었다. (jsp와 바닐라 js로 개발하는 건 정말 나랑 안 맞는 것도 알게되었다.)
계절학기를 끝내고 방학 안에 리액트를 어떻게든 마스터하고 싶었던 나는 코딩애플 강의를 구매하게 되었다. 취업 때문인지는 모르겠지만 Vue보다는 리액트가 좀 더 내 취향이었고, 양 방향 데이터 바인딩 보다는 단 방향 데이터 바인딩의 React의 구조가 더 보기 쉬웠던 것 같다.
강사님 수업 스타일도 잘 맞았기 때문에 CRA 설치 ~ redux toolkit까지 그 많은 강의를 1주일 만에 정리 까지 다 해버리게 된다.
더 욕심을 가지게 되었고, 리액트와 타입스크립트 그리고 다른 기술들을 배울 수 있다는 설레임에 나는 노마드 코더의 리액트 마스터클래스 강의 까지 구매해버린다.
타입스크립트를 적용한 리액트는 정말 신세계였지만 처음 타입스크립트의 인터페이스가 너무 와닿지 않아 노마드 코더의 타입스크립트 강의까지 병행하며 챌린지까지 같이 하게 되었다. 즉, 하루에 리액트 강의 + JS 스터디 + 타입스크립트 강의 + 리액트 챌린지까지 하는 무리수를 던져버리게 된다.
정말 24시간이 모자랐고, 1달 동안 거의 기본 새벽 4시에 집에 들어갔던 것 같다. 힘들지만 재미있다는 생각이 이 시기에 들게 되었다.
정말 잠을 줄여가면서 개발 및 정리에 매진한 결과 타입스크립트, 리액트 모두 챌린지 합격을 하여 뱃지를 받을 수 있었다.
리액트를 하며 느꼈던 건 물론 챌린지 통과를 했지만 배운 리액트 지식을 적용하고 싶었고 배운 기술(recoil, react-query, react, typescript, styled-compoenents framer-motion)을 적용할 필요성을 느끼게 되었다.
이때 만들었던 것이 Urkunde라는 자가 진단 앱이었다. 사이드 프로젝트를 어떤 것을 할지 다른 사이트를 찾아보며 고민하였고 프로젝트를 진행하게 되었다.
이때, 안 써본 자바스크립트 메서드들을 사용해보고 배웠던 기술들을 직접 적용해보며 많은 것들을 배울 수 있었다. 진행했던 내용들은 모두 Velog에 기록 해 두었다.
Urkunde를 준비하며, 완벽하지는 않았지만 처음으로 어떤 문제를 해결하고 싶어 이 앱을 만들게 됬고, 어떤 기술을 선택했으며, 디자인을 직접 만들지는 않았지만 레퍼런스를 참고하며 UI들을 만들어내고, 만드는 과정에서 어떤 문제점이 있어서 어떻게 해결했는지의 과정을 기록하며 프로젝트를 만들어낸 것에 의의를 두게 되었다.
프로젝트를 마치고 리액트를 공부하며 서버사이드 렌더링을 지원하며 리액트를 더 효율적으로 사용할 수 있는 프레임 워크인 Next.js에 관심이 가게 되었다. 클라이언트 사이드 렌더링에 대해 어느 정도 이해를 했다 생각했기에, SSR, ISR, SSG를 지원하는 Next가 너무 궁금했다. 그래서 노마드 코더의 Next.js 시작하기, 당근 마켓 강의를 구매하여 수업을 듣게 되었다.
하지만 도저히 내가 따라가기엔 아직 버거운 레벨이었고 도중에 포기하게 되었다. 너무 아쉬웠지만 아직은 내 수준에 맞지 않는 레벨이라고 생각했고, 배울 시기가 다시 올 때 다시 도전해봐야겠다고 다짐했던 것 같다.
그러고 난 후 GDSC의 해커톤 참가자 모집을 했는데, 포트폴리오에 적을 내용도 모자랐고 마침 배운 리액트르 적용할 겸, 협업 경험도 필요한 시기였기 때문에 지원을 하게 된다.
하지만 이 때 해커톤은 나에게 해커톤 트라우마를 낳게 된다. 프2, 백2이었는데, 일단 다른 프론트 분이 개발을 시작한지 얼마 되지 않은 분과 매칭이 되었기 때문에 사실상 프론트 개발은 나 혼자하게 하게 되었고, 혼자 waka 21시간을 찍게 된다.
즉, 아무것도 하지 않은채 정말 개발에만 집중했었다.
물론 완성을 했으면 더 좋았겠지만, 아쉽게도 완성은 하지 못했다. 클라이언트 개발은 어찌어찌 끝냈고 백엔드 연결도 끝냈지만 배포 과정에서 cors 이슈가 생겨버렸고 결국 해결하지 못했다.
그 때, 다른 팀원들이 분명 할 일이 있었음에도 불구하고 정신없이 개발하는 나에게 계속 할 일을 물어보는 것과 디자인 지적으로 인해, 정말 스트레스와 피로감이 역대급을 찍는 상황에서 그런 상황이 벌어지니 해탈 할 수 밖에 없었고 그래도 프론트 - 서버를 따로 배포하거나 nginx에 대해서 몇 시간 동안 구글링하며 어떻게든 해결하려 노력했지만 다들 포기하는 분위기라서 나도 그만 포기해버리고 말았다.
정말 분하고 짜증났으며, 불가능은 없을 거라고 생각했는데, 더 붙잡으면 정말 건강이 심하게 나빠질 거 같아 포기할 수 밖에 없었던 것 같다. 실제로 이 해커톤이 끝나고 나는 3~4일 간 앓아눕게 된다. 그래도 이 시기에 파일 업로드, swagger 보는 연습, 전반적인 react C.R.U.D 메커니즘과 상태 관리를 이해하게 된 계기가 되었다.
이게 끝나고 개인 사이드 프로젝트에 대해 백엔드 친구가 "이거 api 개발해도 되겠냐"고 물어보길래 다시 한번 개발을 하게 되었다. 기존에는 데이터를 recoil-persist를 통해 로컬 스토리지에 저장하는 형태로 개발이 이루어졌었는데, 백엔드와 함께 진행하며 요구 사항도 많이 변경되었다. 그리고 api response 값을 서로 조율하고 swagger로 소통하는 과정에서 많이 성장할 수 있었다.
9월에는 GDSC 코어 멤버 지원을 하게 되었다. 이때, 면접 때 사용하기 위한 대본을 첨삭 받아가며 정말 열심히 1주일 동안 준비했던 거 같다. 결과는 당연히 합격이었다.
하지만 꽤 빠른 시기인 11월 달에 그만두게 되었다. 이유는 개인 사정이라 언급하지 않겠지만 코어 멤버로 활동하는 동안 많이 답답했고 계획 한 대로 일이 잘 진행 되지 않았을 뿐 아니라, 고쳐질 기미가 보이지 않아 그만두게 되었다. 코어 멤버분들에겐 정말 미안했지만 멘탈적으로 정말 약해졌기에 어쩔 수 없는 선택이었다.
그래도 코어 멤버로 활동하면서 일하는 동료들과 함께 업무 개선서(공문서)로 작성 해보고, GDSC 명찰도 직접 시안을 짜서 제품의 형태로 만들어내는 경험을 할 수 있어서 그것 만큼은 의미 있었고 소중했던 경험으로 남을거 같다.
GDSC 내에선 스터디 장으로써 리액트 스터디를 이끌게 되었다. 처음 스터디 장으로써 스터디 원을 이끄는 역할을 맡았기에 매우 부담되었고, 긴장되었다. 하지만 많은 인원들이 지원을 해주었고, 용기를 내어 스터디를 진행하게 되었다.
아직 진행중인 상태지만 만족하며 스터디를 하고 있다. Q&A 페이지를 만들어 팀원들의 모르는 것들을 해결하며, 스터디 진행 시 팀원들의 발표가 끝나면 추가적인 코드 리팩토링 및 필요한 개념 설명들을 하며 팀장으로써의 역할을 충실히 하려 노력했기 때문이다.
덕분에 나도 함께 스터디를 진행하며 팀원들에게 알려줄 내용을 카테고리로 따로 분류하여 내용을 정리하는 등의 생각들을 할 수 있었고, 최대한 자세하게 알려주기 위한 고민들을 할 수 있었던 시간들이었고, 앞으로도 그렇게 진행할 거 같다.
AWS 스터디는 팀원으로써 진행하며, AWS S3, Cloudfront, route 53, acm 등에 대해 공부를 하게 되었고 저번 프로젝트에 직접 도메인을 구매하여 해당 프로젝트를 aws로 배포 까지 진행했으며 더 나아가 github actions로 ci/cd까지 진행하여 아키텍처를 블로그에 정리할 수 있었다.
AWS에 대해 막연한 두려움이 있었는데, 이번 스터디를 통해서 생각보단 어렵지 않다는 생각을 가지게 됬고, 새로운 스터디 방식 속에 적응하며 신선한 사고방식을 기를 수 있었다.
그 밖에도 oop 스터디, 타입 챌린지 스터디도 함께 했지만, 개인 사정으로 그만두게 되었다. oop도 6장까지 진행하며 객체 지향적인 사고에 대해 많은 것을 배울 수 있었고, 1시간 동안 발표도 진행하여 "이렇게 깊게 발표 할 수 있구나"라는 생각도 가지게 되었던 거 같다. 공부할 때도 그랬지만 OOP 준비할 땐 학교 수업을 포기할 정도로 열심히 했고 최소 하루 6시간 이상은 투자했던 것 같다.
그리고 정말 공들여서 만들었던 블로그 프로젝트이다. 블로그를 만든 이유 는 여기서 확인할 수 있지만 가장 컸던 이유는 Next.js의 배움에 대한 의지였다. 지난 여름에 포기할 수 밖에 없었던 Next를 다시 한 번 도전해보고자 하는 마음이 정말 컸기 때문이었고 마침 학교에서 개발 관련 과제가 없었기에 시간이 나름 넉넉했었다. 그래서 꼭 이번 기회에 deep dive까진 아니더라도 ssg, ssr, csr, isr에 대해 완벽히 이해하려 했다.
관련 레퍼런스에 기록해두긴 했지만 해당 프로젝트를 완성하기 위해 정말 많이 찾아보고 정리하고 공부했던 것 같다. 물론 Next에 대한 전반적인 이해(다이나믹 라우팅,
Prefetching, SSG & SSR & ISR, SEO 최적화 등)도 포함되지만 전반적인 블로그 만드는 방법 부터, 스토리북 튜토리얼, mdx 플러그인, 정말 많이 마주쳤던 버그들에 대응하기 위해 밤낮 가리지 않고 만들었던 것 같다.
무엇 보다 이 프로젝트에 만족했던 것은 Next를 사용했다는 것도 있지만, 보다 컴포넌트 적으로 생각하려 했고(피그마로 퍼블리싱, 컴포넌트 트리, 스토리북 사용을 통한 컴포넌트 문서화) issue 생성을 통해 기능 별로 쪼개어 github flow 방식으로 진행했다는 점이다. 이 프로젝트를 통해서 개발 외적으로 찾아보고 살펴보면서 많이 배울 수 있었던 것 같다.
12월에는 DND에 지원하게 되었다. DND를 지원했던 가장 큰 이유는 "협업" 이었다. 물론 학교 내에도 많은 잘하는 분들이 계시지만, 프론트엔드를 희망하는 나로썬 배울 점이 있는 사람들과 함께 프로젝트를 해보고 싶었다. 그 동안 프로젝트를 해보긴 했지만 스스로 "제대로 된 협업"은 한번도 경험해보지 못했던 거 같았기 때문이다. 서울에서 하기엔 자금적, 시간적 여유가 없었으며 DND의 가치관을 읽으며 DND가 가장 나에게 적합하다고 생각들었고, 자소서를 정말 열심히 적었다.
면접을 보지 않기 때문에 자소서가 정말 많이 중요할 거라고 생각했고, 문항당 1300자 넘게 적었던 것 같다. 어떤 자소서보다 꼼꼼히, 섬세하게 적으려고 애썻던 것 같다. 그래서 정말 많이 다시 봤고, 오타도 꼼꼼히 검사하여 자소서를 제출하게 되었다.
몇 일 후에 발표가 나게 되는데, 꼭 DND에 합류해서 좋은 사람들과 멋있는 프로젝트를 진행해보고 싶다.
마지막으로 시험 기간에 넘블 챌린지를 진행하게 되었다. DND를 만약 붙게 되면 디자이너와 백엔드 개발자와 협업을 하게 될텐데, 아직 협업에 익숙하지 않기도 했고 마침 넘블 측에서 화면 개발서 및 GUI 가이드를 제공해준다고 하여 이걸 보며 개발하게 되면 나중에 협업할 때 큰 도움이 될거라고 생각했으며 jwt로 로그인 프로젝트를 사전에 해보긴 했지만 제대로 했다는 생각이 들지 않았던 참인데, jwt를 활용한 프로젝트라고 되있어 시험 기간은 안중에도 두지 않고 시작하게 되었다.
진행 내용은 인스타 그램 클론코딩이었는데, 단순 클론 코딩이면 다행인데, 생각보다 내가 해보지 못했던 것들이 많이 있어 정말 시간이 오래 걸렸던 것 같고, 무엇보다 jwt로 회원가입 & 로그인 및 인증 처리를 이번 프로젝트를 통해 많이 배울 수 있었던 것 같다.
input과 textarea, select에 대해 client에서 처리하는 방법에 대해 익숙하지 않아 useRef에 대해 정말 많이 찾아봤고 로그인 & 회원 가입 과정에서의 실무적인 input, textarea, select 처리를 배울 수 있었던 거 같다.
또한, 환경변수로 무언가를 처리해볼 생각을 안하고 있었는데, 엔드포인트를 환경 변수로 처리해야 할 일이 생겼다. 구글링 하며 해결할 수 있었고, 이 과정에서 실무에선 어떻게 api call을 하는지 살펴볼 수 있었다.
이 밖에 수 많은 장점들이 있었다. (반응형 디자인, 카카오 로그인, 다중 파일 업로드, 파이어 베이스 사용, 화면 설계서에 대한 이해, 순수 리덕스으로 전반적인 개발 진행, 무한 스크롤 구현 등)
물론 5단계 중 4단계까지 진행했지만, 나에겐 값진 2주 였고 후회하지 않는다. 상위 3명안에 들면 대면 피드백을 받을 수 있다는데, 꼭 3등안에 들어서 내 코드에 대한 전반적인 피드백을 들어보며 더 나은 코드로 개선하기 위한 방법들을 들어본 후 다시 리팩토링 해보고 싶다.
당장 회고하는데 정말 성의 껏 적으려고 애써서 기억이 나지 않는다. 나중에 수정하던가 해야겠다.
리액트 쿼리를 혼자서 정말 많이 공부했는데(우아한 테크 세미나, 개인적인 공부 및 정리) 그럼에도 불구하고 mutation이나 custom hook을 통한 쿼리들의 모듈화 하는 것들이 아직 어렵고, 모르는 기능들이 생각 보다 많은 거 같아 부족하다고 생각이 들었다. 그래서 이번에 유데미에서 강의가 있길래 결제했고 열심히 공부할 생각이다.
또한, 뷰와 비즈니스 로직의 분리 및 전반적인 코드의 가독성이 내 프로젝트들에서 많이 떨어진다고 생각이 들었다. UI 개발은 어찌저찌 하는데, 나중에 다시 유지보수하라고 하면 쉽게 할 수 있을지 의문이 들 정도였다. 서칭하던 중 리액트에도 디자인 패턴이 있는 것을 알게 되었다. 디자인 패턴들을 하나씩 공부하며 정리하고 프로젝트에 디자인 패턴을 적용하여 코드의 가독성을 위해 신경 쓸 예정이며 현재 진행하고 있다.
또한 react 18에 등장한 suspense & errorboundary, server compoenents, useTransition 등의 기능들과 잘 모르거나 어려운 개념들(lazy-loading, 렌더링 최적화, 테스팅)에 좀 더 익숙해지는 것이 목표이다.
Next도 아직은 높은 숙련도가 아니기 때문에 듣지 못했던 carrot-market 강의를 들을 계획이다.
그리고 졸작이 끝나면 다시 휴학할 생각인데, 부스트 캠프에 지원하기 위함이다. 가장 큰 이유는 회사에 입사하기 전 정말 제대로 된 교육을 받고 회사에서 제대로 된 일을 해보고 싶었기 때문이다. 아직 부족한게 느껴지고 더 잘하고 싶었기 때문에 지원할 계획이다.
현재 프로그래머스 고득점 kit, 인프런 알고리즘 강의를 통해 알고리즘에 대비하고 있는 상태이다. 6개월 동안 열심히 알고리즘 및 자소서 준비를 해서 캠퍼분들, 마스터 님들과 함께 부스트 캠프 과정을 진행하고 싶다.