회고

[ 코드숨 ] 6주차 회고록

코동이 2021. 3. 8. 15:01

dal-lab.com/2019/09/18/today-i-learned/

 

오늘 나는 무엇을 배웠나?

오늘 나는 무엇을 배웠나? 2019년 9월 18일 - 아샬 초기 스타트업을 위한 컨설팅 업체인 thoughtbot이란 곳이 있습니다. Ruby on Rails가 유행하던 시절에 여러 기술을 공유해서 유명한 곳이죠. Active Storage

dal-lab.com

회고를 쓰기 앞서서, TIL ( Today I Leaned)에 대한 내용, 특히 Three FS를 활용하는 방법을 이해해야 합니다.

위의 달랩 홈페이지 아샬님의 글에서 관련된 내용을 확인할 수 있습니다. 

 

 

* 내맘대로 서론

 먼저, 한윤석님 이번주도 고생 많으셨습니다 :) 돌아보니 6주차입니다. 굉장히 시간이 빠르네요, 이번주 또한 치열한 평일을 보냈습니다. 언제는 퇴근과 동시에 카페에서 마감까지 코딩하고, 집가서 코딩하다가 2시에 잠든 적도 있네요..

 

 이전에는 모든 과정이 낯설어서 도대체 어떻게 되가는건지 잘 감이 오지 않았는데, 이번주는 조금씩 큰 그림이 그려지는 느낌이었습니다. 점점 과제를 위해 노트북을 여는 역치값이 낮아지고 있습니다 ㅋㅋ

 

- 저번주 선언 점검!

1. 세세하게 일정 쪼개서 관리하기

=> 알찬 시간관리를 위해서, 과제 시작 전 목표를 세우고 다음 날 일정도 세우면서 지냈습니다. 이참에 주간회고에서 일간회고를 작성으로 바꾸었고 목표에 따라서 좀 더 계획적이고 짜임새 있는 시간을 보낸 성과가 있었습니다.

 

2. 자기전에 운동하기

=> 밤이 늦어질수록,,, 앉아있는 것도 귀찮아서 누워서 코딩한 적도 많았습니다. 날풀리면 꼭 하기...

 

출처 : https://makestudio.tistory.com/40

 

1. Facts(사실, 객관)

- 사용자 조회, 전체조회 추가

- 이메일을 이용한 저장소 조회 추가

- 로그인 REST API 구현 및 유효성 검사

- 토큰 생성 및 해석 구현하기

- 정적 팩토리 메서드 추가하여 Entity <-> Data 유연성 높이기

- @RequiredArgsConstructor 사용에 대한 고민

- 매일 TIL 작성하기

- JWT 공식 문서 읽고 해석 작성하기- 테스트시 any() 사용이유 작성, willThrow() 2가지 차이 작성

- equals에 대한 올바른 재정의 방법과 조건들 공부

- Optional 처리를 위한 filter, map 사용 및 Predicate.Not 이용하기

- 커밋 메세지 추상화시켜서 작성하는 습관 가지기

- 상수를 final에서 static final로 전환하기

2. Feelings(느낌, 주관)

1. JWT 구현이 어려워서 테스트 코드를 먼저 작성하는 것이 힘들었다.

 이상적인 작성 순서는 먼저 테스트 코드를 작성하는 것이었지만, JWT에 대한 내용이 어려워서 테스트 코드를 먼저 작성하지 못했습니다. JWT의 토큰 생성,해석하는 로직을 짜고 이것이 어떻게 흘러가는지 확인하는 것에 급급했습니다. JWT에 대해 다음 과제나 프로젝트에서 사용할 일이 있다면 적용해보면 좋을 것 같습니다.

 

2. 하지만 이제 코드 작성에 대한 전체적인 흐름이 눈에 들어오기 시작한다.

 다양한 테스트 케이스를 작성하다보니, 이제 이 어떤 방식으로 로직이 흘러가야하는지, 예외에 대해 어떻게 검사해야 할지 자연스럽게 사고하게 됩니다. Controller에 요청이 들어오면, 성공하는 경우 이외에 어떤 경우에 실패해야하는지 테스트를 생각해보게 되고, 그렇다면 언제, 어떻게, 어떤 예외가 발생할지에 대해서 고민하게 됩니다. 이후에는 어떤 클래스에 정의하면 좋을지, 리팩토링을 어떻게 하면 좀 더 구조화가 잘 될지 정리하는 것도 계속 돌아봅니다. 꼼꼼히 구조화 하는 것이 견고한 소프트웨어를 만든다는 생각으로 최선의 선택을 위해 고민하고 있습니다.

 

3. 한가지 일 단위를 기준으로 커밋 메세지를 잘 작성하자.

 이번에 한글로 커밋 메세지를 작성하면서, 좀 더 알차게 내용을 적을 수 있었습니다. [이전 상황]-[문제점]-[개선]의 순서대로로 메세지를 작성했습니다. '이전에는 어떻게 구성되어 있었는지' , '그 부분이 어떠한 문제가 있는지', '어떻게 개선을 하였는지' 원인-결과를 분명히 나타내고자 하였습니다. 익숙하지 않아 코드의 구체적인 변경 내용을 설명하려는 경향이 있었지만, 윤석님의 교정과 예시를 통해서 좀 더 추상적인 메세지에 대해 고민하게 됐습니다.

 

 코드를 수정하기 전에 이제 먼저 커밋 제목을 떠올리게 됩니다. "oo을 구현하라", "oo을 수정하라" 라는 도전과제를 스스로 부여함으로써, 동기부여와 동시에 그 일에만 집중할 수 있게 됐습니다. 이전에는 A를 수정했다가, B를 수정했다가 혼란스럽게 일을 해서 스스로 헷갈리기도 했는데, 이제는 명확한 목표를 가지고 집중하게 됩니다. 또한 세세하게 어떤 코드를 고쳤는지 나열하지 않고, 추상화된 표현을 설명하니 한껏 깔끔한 메세지가 됐습니다. 나중에 내 기록물을 돌아보거나, 협업 시 읽는 입장에서도 어떤 일을 하였는지 분명하게 드러나게 되어 훨씬 점검하기 좋을 것입니다.

3. Findings (배운 점)

- JWT에 대한 개념과 사용법을 익혔습니다.

평소 같으면, 한글로 된 블로그를 쭉 살펴보면서 정리를 하던가, 내용을 보았을텐대 이번에는 JJWT 공식 github문서를 확인하는 것으로 시작했습니다. 어떤 방식으로 이루어지는지, 알고리즘은 어떤 것이 있고 주의사항은 무엇인지 등등 하나하나 잘 이해하기 위해 노력했습니다. 덕분에 JJWT를 이용하는 방법은 잘 알았지만, 비밀번호를 Claim에 포함시키는 실수도 저질렀습니다. 그 말은 제가 제대로 JWT를 이해하지 못했다는 뜻입니다. 잠깐 공부해서 알고 있는 것이 전부가 아니라는 생각으로, 겸손하게 공부해야겠습니다.

 

 JJWT 공식 문서를 번역하면서 한글로 작성하니 엄청난 시간이 들었습니다. 다음부터는 좀 더 핵심을 잘 파악해서 빠르게 프로젝트를 진행하고 이후에 살을 붙여나가는 방식을 사용해야겠습니다. 단순한 해석도 좋지만, 이것을 나만의 언어로 바꾸어서 글로 적는 것도 필요한 것 같습니다. 내 언어로 설명하지 못한다면 아직 이해가 깊지 못하다고 생각합니다.

 

- 토큰 생성, 해석 시 예외처리를 어디서 해야 하는가에 대해서도 지속적으로 고민했습니다. 가령 jwtUtil이라는 클래스는 토큰을 인코딩하고 디코딩하는 순수한 클래스로 남겨두는 것이 좋다고 생각이 들었습니다. 자신의 책임에만 충실하게 하도록 두었고, 인증이 유효한지에 대한 검사는 해당 코드를 이용하는 AuthenticationService에서 처리하도록 했습니다. 이 부분에 대해서 윤석님께 질문도 했는데, 멘토님이 어떻게 생각하시는지 답을 들을 수 있어서 좋았습니다. 궁금한 것은 적극적으로 물어보고 피드백을 받으면 훨씬 다양한 공부 주제들과 생각할 부분을 얻게 되서 좋습니다.

 

이 과정에서 Optional의 변환을 위해 filter와 map을 사용했는데, Predicate.Not을 공부하는 계기가 되었고, 람다 스트림처리를 계속 하면서 처음에 외계언어같이 낯설었던 것들이 점차 익숙해지는 경험들을 하고 있습니다. 

 

4. 자기 선언(Affirmation)

- Security에 대한 문서는 나만의 언어로 작성할 것.

JJWT 문서는 그대로 해석을 했는데, 그 방식도 좋았지만 좀 더 이해하고 고민하고 쓸 것

 

- 내 코드에 대한 근거를 짚고 넘어가며, 의심없이 사용했던 것들에 대해 JavaDoc을 꼭 확인할 것

 

5. 마무리... 회사생활과의 병행

- 재택감사합니다.

반응형