[우아한테크코스] LV2 - 웹 장바구니 미션 Step2 회고
들어가면서
웹 장바구니 step2 미션은 사용자 인증 기능과 등록된 상품을 사용자 별로 선택해서 담을 수 있는 장바구니 기능을 구현하는 것이었다. step1 머지는 빨리된 편이었어서 step2도 최대한 빠르게 진행하고 마무리하고 싶었으나 중간에 여러 고민들을 하면서 많이 헤매서 결국 예상보다 2~3일은 더 걸리고 말았다. 어떤 점들 때문에 미션 진행 속도가 더뎌졌었는지, 고민하다가 헤맨 부분은 어떤 것이었는지, 반드시 필요한 고민이었는지 돌아보고자 한다.
그리고 이번 주 내내 미션을 진행하면서 굉장히 무기력함을 느꼈다. 미션을 하면서 새롭게 알게 되는 것은 없고 쌓인 숙제하듯이 미션을 하고 있는 것 같아 더 힘들고 오래걸렸던 것 같다. 이 부분에 대해서도 왜 이런 감정을 느꼈는지, 어떻게 앞으로 해결할 수 있을지 생각해보고자 한다.
공부한 개념들
스프링의 예외처리 과정 및 처리 방법에 대하여 (1)
스프링의 예외처리 과정 및 처리 방법에 대하여 (2)
셀프 회고
[요구사항 분석 & 기능 설계]
이번 미션을 진행했던 과정을 돌이켜 보니 목표를 잃고 멍 때리거나 방황하는 시간이 너무 많았다는 생각이 들었다. 심지어 구현을 하다가 어떤 것을 구현하려고 했었는지 까먹고 다시 원상 복귀하는 웃픈 경험도 겪었다. 그 원인은 미션 요구사항에 대해 생각하고 설계하는 것이 너무 부족했다는 것에 있었다. 처음 요구사항 및 기능 명세를 작성할 때 어떤 기능을 구현할 지 확실하게 정리하지 않고 항목화가 굉장히 빈약하게 설계되었던 것 같다.
더군다나 웹 서비스를 개발하는 레벨2로 넘어오면서 비즈니스적인 요구사항이 거의 없음에도 프로젝트 규모가 훨씬 커졌다. 그렇다 보니 그냥 막연하게 기능을 적어두면 각 계층에서 어떤 역할을 수행해야 하는지가 명확하게 떨어지지 않아서 방황했던 순간이 많았다. step1에서도 요구사항 명세와 관련된 고민을 했었는데 아직 해결이 안된 것 같다. 이를 해결하기 위해 대략적인 요구사항 분석 및 기능 설계 절차를 다시 간략하게 정리해보고자 한다.
1. 요구사항 및 비즈니스 로직 분석 + 구현 기능 항목화
2. 기능에 따른 도메인 설계
3. api 명세 (HTTPMethod + URI + Paramter + Body 형식)
4. 도메인 설계에 따라 요구되는 Persistence 기능 명세
특히 중요한 부분 : 도메인을 가장 먼저 설계하자. 그렇지 않으면 도메인이 전체 구조에 맞춰지게 된다. 전체 구조를 도메인에게 맞출 수 있도록 하자.
[무기력]
이번 미션을 한 주 내내 진행하는 중 무기력함을 굉장히 많이 느꼈다. 미션을 진행하는 평일 중에는 몰랐는데 회고를 진행하며 생각해보니 미션 진행 속도나 효율도 많이 좋지 못했고 굉장히 피곤했었다. 그 이유를 개인적으로 생각해봤을 때 공부를 하지 못해서 였다고 생각이 든다. 미션을 평일 내내 했는데 왜 공부했다는 생각이 들지 않았을까?
이번 미션을 진행하면서 요구사항들을 구현하는 것은 사실 새로운 지식이 필요한 것은 아니었다. 그래서 빠르게 1차 구현을 완료하고자 하는 목표를 위해 바로 미션에 뛰어들었다. 중간에 인증과 Spring MVC Configuration 학습 테스트 강의도 있었지만 수업만 듣고 개인적으로 공부하는 것을 미션을 1차 제출한 이후로 미뤘다. 이 부분이 미션을 진행하면서 무기력함을 느낀 것 중 하나이지 않을까 싶었다. 이미 알고 있는 지식 선에서 미션을 빠르게 마무리하고자 하다보니 얻는 것도 없었고 새로운 것을 알아가는 재미도 없었기에 무기력함을 느꼈던 것 같다.
이를 우플비 스터디를 하면서 직접 깨닫게 되었다. 이번 우플비 스터디에서 학습 테스트의 레퍼런스로 주어졌던 Spring MVC Configuration, Interceptor, ArgumentResolver에 대한 Baeldung 글을 공부했다. 한 시간 남짓한 시간이었지만 지난 몇 일간 스스로가 무기력함을 느끼고 있었음을 체감하기에는 충분했다. Baeldung 글들을 학습하면서 지난 몇 일간 느껴왔던 새로운 지식 습득에 대한 갈증을 많이 해소할 수 있었다. 결국 무기력함의 원인은 학습을 하지 않고 미션만 진행했던 것에 있었다.
뿐만 아니라 레벨1때 행해왔던 공부 습관들 중 안하고 있는 것들이 눈에 들어왔다. 미션을 진행하면서 궁금한 점들을 따로 적어두는 것, 작더라도 새롭게 알게된 내용이 있으면 나의 언어로 바꿔서 정리해두는 것 등 어느새인가 멀어져있는 습관들이 되어버렸다.
이 부분들은 예전에도 자주 느꼈던 문제이기 때문에 해결책을 스스로 잘 알고 있다. 한 종류의 task를 일정 시간 이상 지속하지 않는 것이다. 여러 task를 일정 시간마다 컨텍스트 스위칭을 하며 돌릴 수 있도록 하자. 이렇게 하면 미션을 진행하는 효율도 올릴 수 있고, 새로운 지식을 학습할 시간도 확보할 수 있게될 것이다. 또한 스프링의 사용법을 익히는 것을 생각하며 공부하다보니 기록을 잘 안하게 되는데 그 안에서 느끼는 순간 순간의 고민들을 그냥 넘겨버리지 말고 잘 적어둬야 겠다고 생각했다. 예전에 분명히 같은 문제를 겪었었고 같은 결론을 내렸었는데 같은 실수를 반복하고 있었다. 이제 다시 깨달았으니 바로 실천하도록 해야겠다.