늦은 프로그래밍 이야기

221221 TIL 본문

내일배움캠프/TIL, WIL

221221 TIL

한정규 2022. 12. 22. 01:31

TIL

오늘 배운 내용 정리

Spring

 - 그동안 알게 되었던 키워드들을 하나씩 차근차근 정리해 나가고 있다.

2022.12.21 - [내일배움캠프/Spring] - IoC 컨테이너

 

IoC 컨테이너

IoC (Inversion of Control) IoC : Inversion of Control , 제어의 역전이란 뜻. 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다. 컴포넌트 의존관계 설정(Component dependen

jk891113.tistory.com

 

개인과제 리뷰

스프링 숙련 강의 2레벨 개인과제 리뷰를 내가 쓴 코드로 진행을 하였다.

리팩토링 해야할 부분들을 피드백 받았고, 내가 직접 쓴 코드로 과제리뷰를 진행하여서 도움이 많이 되었다.

 - Restful

  • url에는 명사(복수형)을 넣어야한다. 동사는 Restful하지 않다.
  • 백엔드 입장에서는 API가 다른 팀들과 소통하는 창구이다.
  • 댓글 Controller의 URL은 "/posts/{postId}/comments"가 Restful하다.

 - JWT 인증관련

  • 항상 '필요한 것들만 넘겨야한다. 객체를 그대로 넘기면 안된다.' 그러한 맥락에서 우리가 Dto를 사용하는 것이다.
  • JWT 인증 관련하여 코드들이 중복된다. 이에 대한 해결책으로 또 다른 서비스(인증을 전담해주는 JwtService)를 만드는 것이 있다.
  • 꼭 필요한 값들만 넘겨줘야 의존성을 낮출 수 있다.(변경사항 발생시 부가적으로 따라오는 리소스들을 절약할 수 있다.)
  • 컨트롤러 단의 JWT 토큰을 또 다른 DTO에 담아서 필요한 정보만 넘겨라
  • JWT를 사용하는 이유는 DB access를 안해도 되기 때문이다.(DB access는 굉장히 리소스가 큰 작업) (userRole은 이미 JWT에 담겨있으므로 JWT에서 꺼내 쓰면 된다.)(userDB에서 user.userRole을 꺼내오면 JWT를 쓰는 보람이 없다.)

 - Util 관련

  • Util은 static을 붙여서 사용한다.
  • 사실상 jwtUtil은 @Component를 붙여서 사용한다는 점에서 사실상 Service라고 보는 것이 적절하다.

 - 테이블관계

  • JPA는 우리가 작성한 코드를 기준으로 DB의 구조를 유추하는 것이다. (명확하게 DB구조를 알지는 못한다.)
  • annotation을 통해서 우리가 '적어줘야' JPA가 DB구조를 올바르게 유추할 수 있다. (그래서 @ManyToOne, @JoinColumn과 같은 것들로 DB구조 가이드를 해준다.)
  • 게시글에 User객체를 넣어주는 이유에는 User에 만들어둔 기능(method)를 재사용하기 위한 측면도 있다.
  • 그러나 게시글에 들어가는 username은 사실 Writer로서 들어가는 것이다. (그렇다는건 User라는 것은 게시물의 관심사가 아니다. -> 굳이 User객체를 넣어줄 필요 없이 username만 Writer라는 변수에 넣어주면 된다.)
  • User 객체를 넣어주면 실제로 쓰지도 않는 user.password같은 값들도 다 가지게 된다. -> 필요 이상으로 정보를 가진다(역할 이상의 책임을 가지게 되어버린다)
  • 객체 간의 연관관계를 맺을 때는 '이게 필요한가?'라는 생각을 꼭 해보고 신중하게 해야한다.

 - FetchType.EAGER

  • N+1 문제가 발생한다. (getAllPost 해버리면 전체 게시물 사이즈만큼 쿼리를 날려버린다.)
  • LAZY로 할 경우 실제 User를 쓰기 전까지 쿼리가 날아가지 않아서 DB access를 최소화&최적화 할 수 있다.

 - 순환참조가 왜 생겼는지 원인설명

  • @Getter X, jackson 때문에 발생한다.(직렬화, 역직렬화 과정에서 잭슨이 getter를 사용하면서 발생한다.)
  • List<Comment>는 게시글을 get하고, 게시글은 또 그 안에서 List<Comment>를 get하고, List<Comment>는 게시글을 get하고...... 무한반복(순환참조)
  • CommentResponseDto를 사용한다면? 만나지 않을 수 있다.

 - 컨트롤러에서 url로 ADMIN/USER를 분리하자

  • 서비스단에서 userRole에 따라 ifelse로 구분해서 하는 admin/user에 따라 다른 로직을 실행하는 방식은 '인가'를 서비스단에서 처리하는 것이다.' (인증/인가는 컨트롤러단에서 끝내자)
  • 서비스 단의 역할은 생성, 수정, 삭제만 하는 것이다.

오늘 배운 것

 - 그동안 스프링 관련 자바관련 키워드들을 받은 것들을 하나하나 차근히 정리하면서 그동안 비어있던 것들이 채워지는 느낌이 들었고, 직접 해보고 이론적인 것들을 정리하는 것도 나쁘지 않다는 것을 알게 되었다. 미리 봤으면 이해하지 못할 내용인 것도 직접 실습해보며 겪어봐서 이론을 읽으면서 머릿속으로 그림이 그려지는 느낌이었다. 앞으로 꾸준히 키워드들을 정리하며 블로그를 채워 나가야겠다.

 

 - 개인과제 코드리뷰를 하였는데 많은 수강생들 중에 내가 쓴 코드가 선택 되었고, 직접적인 피드백을 받을 수 있어서 좋은 기회였던 것 같다. 많은 피드백을 받았고 이제 심화 강의를 들으면서 리팩토링을 하나씩 해보아야겠다. 


'내일배움캠프 > TIL, WIL' 카테고리의 다른 글

221223 TIL (개인과제 리팩토링)  (0) 2022.12.23
221222 TIL  (0) 2022.12.23
221220 TIL (@OrderBy)  (0) 2022.12.21
221219 TIL (알고리즘, 개인과제)  (0) 2022.12.20
7주차 WIL  (0) 2022.12.18
Comments