멤버십 4주차를 마쳤다. 학습 스프린트가 마무리되었다.
챌린지와 비교해서 4주가 정말 빠르게 갔던 것 같다.
하나의 프로젝트가 마무리되었으니 어떤 것들을 시도해보았고, 배우고 느꼈는지 써볼 생각이다.
시도해본 것들
사실 처음 시도해본 것들 투성이다.
사실 클라이언트 코드를 바닐라 코드로 이렇게 제대로 구조를 잡아본 것조차 처음이다.
하지만, 다른 프로젝트와 다르게 스프린트는 학습을 목표로 한다는 점에서달랐다.
덕분에 스프린트 과정을 하나의 샌드박스로 인식하고, 많은 새로운 시도들을 해볼 수 있었다.
프론트엔드
컴포넌트간 관리하기
일단 어떻게 컴포넌트를 만들지부터 생각했다. 더 깔끔한 방식을 찾기위해서 처음에는 클래스로 해보고, 이후에는 싹다 갈아엎어서 함수형으로 변경해보기도 했다.
이후에는 어떻게 컴포넌트의 상태를 관리하고, 컴포넌트간 상태를 공유하게 할까? 라는 고민을 했던 것 같다.
이 과정에서 전역 상태로 할지, 아니면 옵저버 패턴과 같은 패턴을 활용해 볼지 고민해볼 수 있었다.
전역 상태를 선택했는데, 어떻게 하면 전역상태가 안꼬일지, 안전하게 사용할 수 있을지를 클로저를 활용해보면서 고민할 수 있었다. 다음번에는 옵저버 패턴을 사용해서 상태관리를 해볼 생각이다.
프론트엔드 테스트코드 작성
항상 화면 테스트(HTML,CSS)에 대해서는 테스트코드 쓰기가 어렵다는 생각을 갖고 있었는데, 이번에 과감하게 도전하면서 이부분을 해결했다. jest의 jsdom환경에 대해서도 알게되었고, 다양한 테스팅 라이브러리가 있다는 것도 알게되었다.
캔버스 사용하기
항상 캔버스는 어렵다는 생각을 갖고있었고, 뛰어들기가 두려웠는데, 이번 기회를 통해서 제대로 학습할 수 있었고 애니메이션까지 구현해보면서 실력을 향상시킬 수 있었다. reqeustAnimationFrame은 정말 처음 사용해봤는데, 여기서 재귀적인 비동기 순서제어를 하면서 다시 한번 비동기에 대한 이해도를 높힐 수 있었다.
함수 추상화하기
함수가 그 기능은 비슷하지만, 기능으로 인해서 나타나는 효과는 조금씩 다를때, 이부분을 추상화하는데에 성공했다.
예를들어 select dropdown과 버튼 토글은 아예 다른 기능처럼 보이지만 본질적으로는 눌렀을때 번갈아가면서 다른 기능이 수행되어야한다는 공통점이 있다.
이런 부분들을 하나의 추상화된 함수로 묶어내면서 조금더 깔끔한 코드를 작성해볼 수 있었고, 과정이 너무 즐거웠다.
백엔드
테스트코드를 먼저 작성해보기
항상 기능구현이 끝나고, 시간이 남으면 테스트코드를 작성했었는데 이번 기회를 통해서 일부분이나마 테스트코드를 먼저 작성하고, 기능을 구현했다. 진정한 TDD를 경험해 볼 수 있었던 것이다! 사실 진정한 이라기에는 많이 부족하지만, 다들 이렇게 시작하는 것이 아닐까?
또한 테스트코드를 작성함에 따라 한번 더 내 구조가 옳은 것인지 고민할 수 있었던 것 같다.
DTO와 TS
DTO에 대한 이해도가 굉장히 부족했는데, 사용하는 이유를 제대로 알지 못했기때문이다.
이번 기회를 통해 사용하는 이유를 제대로 알게 되었다.
처음에는 요청에 대한 인자들을 서비스로직으로 넘길때 인자 하나하나를 ts타입으로 맞춰서 서비스단으로 내려줬다.
하지만, ts는 런타임에서는 아무 의미가 없다는 것을 세션 시간에 인지하게 되었고, 이걸 런타임에서 명확하게 해줘야 서버가 안정적으로 구성될 것 같다는 생각이 들었다.
또한 혹시나 객체가 변경될 수 있으므로, getter만을 작성해서 안전한 DTO를 만들어 볼 수 있었다.
공통
제대로 학습하기
Nodejs자체에 대한 것들(블로킹, 논블로킹), 그리고 쿠키-세션방식으로 인증인가를 구현해보면서 HTTP에 대해서도 공식문서를 통해서 제대로 학습할 수 있었다.
처음엔 생각하지 못했던 이런 개념이 왜 필요할까?를 계속해서 생각하면서 학습에 임했던 것 같다.
이렇게 하자 정말 웹을 처음 배울때는 제대로 읽히지도 않았던 것들이 어느순간부터 술술 읽히기 시작했다.
심지어 제대로 학습을 해나가는 그 과정이 너무 재밌었다.
이건 다른 이야기지만, 그런 REST api로 괜찮은가 라는 영상을 학습과정에 잠시 봐야겠다 싶어서 틀었는데, 넷플릭스 드라마 한편도 보기 힘들어 하는 내가, 정말 한번도 끊지않고 그 자리에서 너무 재미있게 봤었다.
내가 나에게 잘 맞는 길로 가고 있구나 확신했다.
https://www.youtube.com/watch?v=RP_f5dMoHFc
깔끔하고, 안전한 코드를 작성하기
리팩터링 책을 읽으면서 미션을 진행했는데, 덕분에 조금 더 깔끔한 코드를 작성하고 리팩터링하는 주기가 짧아질 수 있었던 것 같다.
또한 중간에 안전하지 않은 코드, 읽기 힘든 코드를 작성했을때에 손해를 보는 것은 결국 미래의 나라는걸 깨달아버렸고, 그래서 최대한 안전하고 깔끔하게 작성하려고했다.
setter를 없애고, 불변객체를 내보내고, 함수를 순수함수로 만들려고 노력했다.
어떻게? 보다는 무엇을 하는 코드인지를 쓰려고 했다. 주석이 필요해보이면 함수로 분리하고 이름을 붙여줬다.
아쉬운점
디자인패턴 지식 부족
여러 디자인 패턴들이 있는데 이부분을 제대로 알지 못해서 더 깔끔하고 변경과 기능추가에 강한 코드를 작성할 수 있었을 것 같은데, 디자인패턴을 제대로 학습한 경험이 없어서 이 부분이 부족했다고 생각한다.
이 부분을 제대로 이해하고, 다음 미션부터는 적용해볼 것이다.
중간중간의 계획 세우기
4주간 미션을 진행했는데, 첫주차에는 정말 심혈을 기울여서 계획을 짰다면, 이후 주차에서는 그만큼은 못했던 것 같다. 그래서 계속해서 계획이 변경되고 잘 따르지 못하게 되는 부분이 있었는데 이 부분은 분명하게 개선이 필요하다.
개인프로젝트라서 여파가 거의 없었지만, 이게 팀프로젝트라면 정말 힘들어지게 될 것이다.
기능에 대한 계획과 설계에 조금더 힘을 쓸 필요가 있다.
느낀점
4주가 엄청 빠르게 지나가긴 했으나, 결코 지나간 시간은 아니었다.
배운 지식이 많고, 그저 양이 많은게 아니라 깊은 지식들을 습득할 수 있었다.
또 지식에 그치는 것이 아니라 직접 사용하고 적용시켜 보면서 코드와 연결시켜나갈 수 있었다.
과정에 있었던 수많은 고민들이 결코 헛되지 않았음을 알게 됐다.
이후의 미션도 일반적인 프로젝트라기보다는 학습을 위한 프로젝트이므로 샌드박스라는 마음을 갖고 맘편히 많은 시도들을 해볼 생각이다.
앞으로도 화이팅!