강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

daust05님의 프로필 이미지
daust05

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

LazyInitializationException 관련 질문

작성

·

312

1

강사님 덕분에 강의 열심히 들으면서 방학을 알차게 보내고 있습니다!

다만 이번 강의는 좀 어려웠던지 오류가 발생해서 처음으로 질문드립니다.

다른 질문도 찾아보고 구글링을 해서 왜 오류가 생기는지는 알았는데 정확하게 어떻게 해결하고 방지해야할지 몰라서 질문드려요.

강의 : 주문목록 조회 및 취소 

발생상황: orders를 조회 후 템플릿에 넘기는 상황

오류메시지:

오류 원인 추정(디버깅): Transacitonal인 서비스에서 객체가 Lazy 객체는 따로 조회하지 않아 해당 값은 null또는 지연연결로 인해 값이 없어서 나타나는 현상이라고 이해했습니다. 구글링 검색으로는 컨트롤러에서는 transactional이 걸려있지 않아 서비스에서 섹션이 종료되어  컨트롤러에서는 따로 영속성객체를 조회할수 없다고 이해했는데 맞는지는 잘 모르겠습니다 ㅜㅜ

질문

1. 제 짧은 소견으로는 엔티티 구성상 당연하게 LazyInitializationException이 나타날 수 밖에 없게 설계가 된 것같은데 강사님은 예제에서 이런 오류가 안나오더라구요. 왜 제 파일에서는 이러한 예외가 나왔는지 알고싶습니다.

2. LazyInitializationException의 해결방법(설계 지향점)을 알고싶습니다.

3. 제가 뭘 빼놓고 적은줄 알고 소스파일을 싹다 예제파일로 바꿨는데도 오류가 났는데 이상하게 리소스파일을 전부 바꾸니까 정상 작동했습니다.  위에 나온 디버깅상황에서는 설계 구성상 미스인줄 알았는데 템플릿파일에서 문제가 있는 것처럼 나오니까 뭐가 맞는지 잘 모르겠습니다. ㅜㅜ

여태 들은 강의는 Spring 핵심 기본 / MVC 1편 / 실용 JPA 1편 들었습니다.

답변 1

0

안녕하세요. daust05님, 공식 서포터즈 OMG입니다.

질문 1,2,3은 모두 동일한 문제로 인해 발생하는 상황입니다.

3번 질문에 대한 예상으로는

resources 폴더를 강의에서 제공하는 것으로 교체하였을 때 동작한다 하여 open-in-view 설정으로 인한 것으로 보입니다.

해당 내용은

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화OSIV와 성능 최적화

, 영한님의 JPA책에서 자세히 설명해주십니다.

다음과 같은 키워드로 검색하면 많은 자료들이 나옵니다.

문제 상황 발생 이해도, 문제 해결을 위해 이 방법, 저 방법 시도해보신 것과 질문을 꼼꼼히 남겨주신 것으로 보아 관련하여 학습하시면 충분히 질문에 답을 하실 수 있으리라 생각하며

https://www.inflearn.com/questions/227574

위 게시글의 질문과 답변을 참고하셔도 도움 되리라 생각합니다.

 

감사합니다. 

daust05님의 프로필 이미지
daust05
질문자

답변 정말 감사드립니다!!

아무리 찾아봐도 이유를 모르겠어서 나중에 배우다 보면 나오겠지 생각하다가 찝찝해서 질문드렸는데 정말 명쾌하게 해결되었습니다.

스프링 부트 실행시에 WARN 메시지로 OPEN-IN-VIEW 설정이 되있다고 나오길레 false로 해둔 것이 원인이였네요! 저는 이게 단순하게 그냥 필요없는 설정이라 WARN 메시지가 나온다 생각했는데 스프링부트에서 이러한 설정이 Default로 잡혀있다는 것을 알려주는 메시지였군요..

덕분에 검색해서 osiv 패턴에 대해서 이해하게 되었습니다 나중에 실전 2편을 들을때 해당 파트는 수월하게 들을 것같아요! 

감사합니다!

역시 키워드만 알려드리면 혼자서도 해결하실 수 있는 분이셨군요^^!

osiv는 해당 강의에서 30분정도로 영한님 강좌의 어떤 한 강의보다 분량이 상당한데 

이해하셨다니.. 대단하세요 ㅎㅎ

강의 수강 중 문제 발생하면 질문글 남겨주세요!

열공하세요~!

daust05님의 프로필 이미지
daust05

작성한 질문수

질문하기