Contents
에러메시지
JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
어제의 문제를 여전히 해결하지 못한 나는.. 포스트맨이 정상적으로 작동하는 프로젝트 팀장님의 코드를 살펴봤다.
가장 큰 차이점은 나는 mapper를 썼고 팀장님은 builder를 썼다는 점.. 그래서 내가 짠 코드에서 POST기능이 builder를 사용하게 만들었다. 그러자... 갑자기?? 포스트맨에 정상 요청/응답을 받을 수 있었다....ㅎㅎ
둘의 차이점을 열심히 비교하던 중 같은 문제를 겪던 팀원분이 해결한 것 같다며 연락을 줬다...
---
해결 방법
mapper가 안 됐던 이유는 build.gradle
설정 때문이었다...ㅎㅎㅎㅎㅎㅎㅎㅎ
implementation "org.mapstruct:mapstruct:1.5.3.Final"
compileOnly "org.projectlombok:lombok:1.18.24"
annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.2.0"
build.gradle 파일에서 dependencies에 위의 의존성을 추가하면, mapper가 사용된 코드들이 정상적으로 작동한다.
오류가 발생했던 이유?
1. Mapstruct와 Lombok
Mapstruct
객체 간의 매핑에 대해 코드를 자동으로 생성해주는 매핑 라이브러리Lombok
메서드 작성 코드를 줄여주는 자동 코드 생성 라이브러리
2. 같이 사용한다면?
Lombok의 @Getter, @Setter를 사용할 때, Mapstruct의 @Mapper를 사용하면 자동으로 코드를 생성하는데 제대로 생성되지 않음.
3. Lombok을 사용하면 build.gradle 의존성의 순서가 중요
gradle은 초기화 - 설정 - 실행의 순서로 동작된다.
의존성의 순서가 달라진다면 동작 순서가 바뀌기 때문에 생성되는 코드가 달라진다.
설정 단계에서 dependencies의 순서가 lombok이 먼저라면
Lombok이 Getter, Setter로 만들어 놓은 것을 Mapper가 사용해서 코드생성하기 때문에 Setter 코드가 바로 생성된다.
그 다음에 Lombok이 builder를 생성하더라도 이미 Mapper는 코드를 생성했기 때문에 변하지 않는다.
따라서 dependencies에서 Mapstruct가 Lombok보다 위에 있어야 된다.
4. 함께 사용하기 위해 최소 버전
lombok 1.16.14 이상
MapStruct 1.2.0 이상
5. lombok-mapstruct-binding을 사용
Mapstruct 제작자의 홈페이지에서 가져온 글이다. lombok-mapstruct-binding을 의존성해 추가하면 순서와 상관없이 정상적으로 코드가 작동한다.
'Error' 카테고리의 다른 글
[Spring] 순환 참조 실수.. Infinite recursion (StackOverfolwError) (0) | 2022.11.03 |
---|---|
[H2] 진짜 다 제대로 했는데 테이블이 생성 안 된 이유 (0) | 2022.10.31 |
[IntelliJ] 커뮤니티 버전으로 인한 yml 파일 오류 (0) | 2022.10.31 |
[Postman] null 응답 2 (0) | 2022.10.31 |
[Postman] null 응답 (0) | 2022.10.31 |
댓글