[Spring Boot] TIL - 10 API 개발과 조회 성능 최적화 (실전! 스프링 부트와 JPA 활용2 - 섹션 1 ~ 3)

하이초·2022년 10월 9일

Spring_Boot

목록 보기
10/11
post-thumbnail

1. API 개발 기본

🥨 @RestController: responsebody + controller 어노테이션 합쳐놓은 것

🥨 @Requestbody: json으로 받아온 것을 매개변수로 자동으로 바꿔줌

🥨 엔티티와 api 스펙이 동일해서 api 스펙이 바뀌도록 하면 안된다!

  • dto를 만들거나 해야 함
  • api 만들때 외부에 엔티티를 노출해서도 안된다!
  • 되도록 api 스펙이 영향받지 않도록!

2. API 개발 고급 - 준비

🍯 허니팁

  • opt + cmd + m: 메소드 추출
  • opt + cmd + p: 매개변수화

3. API 개발 고급 - 지연 로딩과 조회 성능 최적화

🥨 JsonIgnore

  • 양방향 연결에서는 한 쪽을 jsonignore 어노테이션을 달아줘야 무한루프가 발생하지 않는다!

🥨 Lazy 로딩

  • lazy로 연결되어 있을 때 proxy 객체가 생성됨(byteBuddy)
  • 지연 로딩을 해결하기 위해 즉시 로딩으로 바꾸면 안됨! fetch join으로 해결해라!

🥨 API에는 엔티티를 직접 노출하지 말아라!

🥨 list로 반환하지 않고 result로 감싸라..?

  • 이게 그거네! DTO 같은거네 나중에 list만이 아니라 다른 걸 같이 !
    반환해야 할 수도 있는 것처럼, 반환 대상은 달라질 수 있으니까 반환값들을 멤버변수로 가진 객체를 만들어서 언제든 반환값들을 바꿀 수 있도록 하는거네. 올. 참 아주 많은 객체가 생기네.

🥨 jpa로 즉시 dto 가져올 수 있음

  • 리포지터리 재사용성이 떨어짐
  • 코드 상으론 페치 조인이 더 좋은데 성능은 요게 조금 더 나음
  • 다만 성능 차가 웬만하면 그리 크지 않다 데이터가 아주 크지 않은 경우엔,,
  • 쿼리검색용 클래스를 따로 뺴는 것이 좋다

🍯 허니팁

  • 엔티티 -> DTO 변환 먼저 (v2)
  • 필요하면 페치 조인으로 성능 최적화 -> 대부분의 성능 이슈가 해결 (v3)
  • 그래도 안되면 DTO 직접 조회 (v4)
  • 최후, JPA가 제공하는 네이티브 SQL이나 스프링 JDBC template을 사용해서 SQL을 직접 사용

오늘의 미결사항

  1. 지연 로딩 뭐였더라,, 왜 즉시 로딩을 하면 안되는 거였더라,,
    • 필요없는거 가져오는 문제,,?
profile
개발국대가 되는 그 날까지. 지금은 개발 응애.

0개의 댓글