목록도도하게 개발하자 (97)
도도한 개발자
🐈⬛ 오늘 공부한 내용 우리 카페인 팀 블로그 읽기 🐾 느낀 점 & 배운 점 도커, Github Action, self-hosted, flyway, 트랜잭션 등 모르는 것 투성이다. 근데 우리 프로젝트는 이것들을 도입했고 누군가 나에게 질문 했을 때 명확하게 답변을 못하는 상태다. 그게 너무 싫었고 또 알고싶기도 해서 우선은 우리 팀 블로그부터 차근차근 읽기로 했다. 당장 알고리즘 문제 하나 더 푸는 것보다 나에겐 우리 프로젝트에서 뭘 하고 있는지 파악하고 어떤 개선이 필요한지를 깨닫는 게 더 중요하다고 생각했기 때문이다. 💭 감정회고 저번에 사겼던 일본인 친구랑 오늘 만나서 놀았다. 과자를 잔뜩 사왔는데 하나하나 손편지를 써줘서 감동했댜..★ 한 여섯시간을 일본어로만 얘기하니까 취할 겨를이 없었다. ..
🐈⬛ 오늘 공부한 내용 JwtException Reflection @PageableDefault()의 default size 부모클래스 필드까지 build하기 -> super()와 @Builder Fixture 바꾸지 않기 🐾 느낀 점 & 배운 점 우리는 프로젝트에 일찍이 JWT를 도입했다. 토큰이 들어오면 디스패처 서블릿으로 가기 전 필터(Filter)에서 해당 토큰이 유효한 지 아닌 지 걸러준다. 필터는 인증 확인과 토큰의 유효성을 동시에 검증했다. 그런데 토큰을 검증하는 부분이 인증에 있는 것보단 토큰을 관리하는 클래스에서 하는 것이 좋을 것 같다고 해서 로직을 수정했다. 토큰에서 claims를 가져오는 과정에서 발생할 수 있는 예외를 다음과 같이 잡아줬다. public Long extract(S..
🐾 배경 설명 @Test void 인증된_멤버일_경우_정상_응답한다() { //given 댓글을_등록한다(요청, 토큰, 충전소); // when var patch응답 = 댓글을_수정한다(수정_요청_1개, 토큰, 리뷰); var 해당_댓글 = 해당_댓글을_가져온다(); // then SoftAssertions.assertSoftly(softly -> { 상태_코드를_검증한다(patch응답, NO_CONTENT); 값이_같은지_비교한다(해당_댓글.ratings(), 수정_요청_1개.ratings()); 값이_같은지_비교한다(해당_댓글.content(), 수정_요청_1개.content()); }); } 댓글 수정이 정상적으로 동작하는지 검증하는 테스트코드입니다. 먼저 댓글을 등록하고, 수정을 한 후 해당 댓글..
🐈⬛ 오늘 공부한 내용 인수테스트 쌈빡하게 하기 Page 의 isLast() ok와 noContent 🐾 느낀 점 & 배운 점 어제 하루종일 리팩터링하고 새벽까지 하다가 중간에 팀원들 코드가 머지된걸 발견. 오늘 아침에 그거 rebase 해보려고 이것 저것 눌러보고 push 해보니까 충돌파티. 새로운 마음으로 다시 시작하고픈 마음이 턱끝까지 차올라 PR 날리고 브랜치 날림. (그래도 기존의 리뷰는 거의 다 반영한..것 같기도?) 암튼 날 힘들게 하던 컨트롤러 테스트와 RestDocs, 인수테스트를 깔끔하게 잘(?) 짜고 PR. 내 코드를 리뷰하는데서 기쁨을 느끼는 박스터에게 또.. 많은 리뷰를 받았다. 좋긴한데 저 답글 기능 해야되거든요.. 그래도 많이 배워서 좋다. 리뷰를 조회할 때 다음 페이지가 ..
🐈⬛ 오늘 공부한 내용 리뷰 댓글 리팩터링 + ignoringFieldsOfTypes() 🐾 느낀 점 & 배운 점 오늘 계획 한 것 : 댓글 기능 머지하고 답글 기능 구현하기, 쿠팡 이력서 작성하기, 블로그 쓰기 오늘 한 것 : 댓글 기능 리팩터링하기 + 생각해보니까 배운 게 있긴 하네. ignoringFieldsOfTypes() 얘때문에도 한시간 쏟았는데 박스터한테 물어보니까 1분만에 해결. 객체의 생성일과 수정일이 LocalDateTime으로 되어 있는데 Fixture와 DB에서 꺼내온 객체에서 날짜를 비교하려니 맞지 않았다. ignoringFields()로 점도 찍어보고 와일드카드도 써보고 배열도 써보고 다 했는데 저거 하나로 해결이 됐다니. 여기서 좀 머리를 망치로 맞은 것 같았다. 💭 감정회고..
🐈⬛ 오늘 공부한 내용 [스프링 핵심 원리] 컴포넌트 스캔 리뷰 CRUD 기능 구현 @AutoConfigureRestDocs RestDocs에 울다 웃어서 엉덩이에 뿔나기 🐾 느낀 점 & 배운 점 Configuration 클래스에 @Configuration 어노테이션 붙이면 스프링이 해당 클래스를 상속받아서 자체적으로 CGLIB클래스를 만드는데 이 친구가 바이트 코드를 조작해서 싱글톤을 보장한다. 강의를 들으면서 스프링을 왜 쓰는지, 어떤 불편함 때문에 스프링이 등장했는지를 납득하고 있다. 리뷰 기능 중 댓글의 CRUD 기능을 구현했다. 레포지토리 테스트와 서비스 테스트는 익숙하니까 빨리빨리 작성했는데 컨트롤러 테스트가 내 발목을 잡았다. 우선 mockMvc 테스트 하는 법을 잘 모를 뿐더러 기존에 팀..
🐈⬛ 오늘 공부한 내용 카페인 리뷰 기능 API 명세 [스프링 핵심 원리] 싱글톤 컨테이너 🐾 느낀 점 & 배운 점 이번 리뷰 기능은 가브리엘과 함께 만든다. 둘이서 API 명세하니까 빨리빨리 결정하고 좋다. 초반과 달리 우리의 기능에 많이 익숙해져있고 서로 개발에 (약간의) 자신감이 붙어서 재밌게 회의한 것 같다. 그런데 그만큼 놓치고 있는 부분이 있을 수 있어서 걱정이지만 그것을 고쳐나가는 것 또한 개발의 묘미...니까. 왔다갔다 하는 시간엔 스프링 공부하고 여기와선 JPA 공부하고 알차다 알차. 💭 감정회고 어...오늘 저녁 삼겹살 맛있겠다.
🐈⬛ 오늘 공부한 내용 [스프링 핵심 원리] 섹션3 ~ 섹션4 @CreatedDate, @LastModifiedDate @EnableJpaAuditing @MockBean(JpaMetamodelMappingContext.class) 🐾 느낀 점 & 배운 점 아침에 지하철에서부터 캠퍼스 도착해서 밥 먹을 때까지 김영한의 스프링 핵심 원리 강의를 계속 들었다. 레벨2때 다 들었어야 했던건데 이미 지난 일이니 별 수 있나. 오늘이 앞으로의 인생에서 가장 젊은날이니 지금부터 해도 안늦었다고 생각한다. 일단 뭐라도 하는게 중요하니까. 3차 데모데이 발표때 구구가 우리 프로젝트 ERD 보면서 테이블에 생성일이랑 수정일이 없다는 부분을 지적해주셨다. 지적과 동시에 왜 이 컬럼들이 필요한지에 대해서도 말씀해주셔서 바..