프로젝트용 노션 레이아웃 만들기
오늘 실습 내용 커밋 완료
enum의 핵심은 상수를 단순히 정수로 치부하지말고 객체 지향적으로 객체화해서 관리하자는 취지이다.
JAVA의 enum은 인터페이스와 같이 독립된 특수한 클래스로 구분한다. 즉, 일종의 객체이기 때문에 힙(heap) 메모리에 저장되며 각 enum 상수들은 별개의 메모리 주소값을 가짐으로써 완벽히 독립된 상수를 구성할 수 있는 것이다.
스프링 시큐리티 공부하면서 enum 클래스를 정말 오랜만에 쓰게 됐는데 (자바 공부할 때 배웠는데 그 이후로 처음 써본다...) 기억이 잘 안나서 검색해보다 정말 잘 정리가 되어있는 글이 있었다! -> enum에 대해서 알아보자 👻
예를 들어서 91번 movie에 해당하는 리뷰를 찾아오는 메서드가 있다. 이런 경우(Review 클래스의 Member에 대한 Fetch 방식이 LAZY으로 되어있다.) 실행하면
한 번에 Review객체와 Member 객체를 조회할 수 없기 때문에 이러한 오류가 발생한다.
@Transactional을 적용한다해도 각 Review 객체의 getMember().getEmail()을 처리할 때마다 Member 객체를 로딩하는 문제가 발생한다.
이런 경우에는
1. @Query를 이용해서 조인 처리를 하거나
2. @EntityGraph를 이용해서 review 객체를 가져올 때 Member 객체를 로딩하는 방법이 있다.
@EntityGraph
: 엔티티의 특정한 속성을 같이 로딩하도록 표시하는 어노테이션이다. 기본적으로 JPA를 이용하는 경우 연관 관계의 FATCH 속성값을 LAZY로 지정하는 것이 일반적인데 @EntityGraph는 이러한 상황에서 특정 기능을 수행할 때만 EAGER 로딩을 하도록 지정할 수 있다.
ReviewRepository 인터페이스로 가서 @EntityGraph를 적용해 Member도 같이 로딩할 수 있도록 변경하면
이렇게 자동으로 조인 처리를 해 영화 91번에 대한 리뷰들을 가지고 온다!