작성
·
274
0
LAZY는 프록시 객체를 불러오니까 jackson이 초기화를 시켜주는 걸로 알고 있는데
LAZY니까 강제 초기화를 시켜준다고 하는 설명이 있었습니다.
LAZY는 왜 강제 초기화를 시켜줘야 하나요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
이승은님, LAZY 초기화를 강제로 해야 하는 이유에 대해서 문의해주셨군요.
Spring에서 LAZY 초기화란 @Lazy
애너테이션이나 설정을 통해 스프링 빈이 실제로 필요할 때까지 생성을 지연하는 방법입니다. 이는 애플리케이션의 시작 시간을 줄이는 데 도움이 됩니다. 예를 들어 웹 응용 프로그램에서는 HTTP 요청이 수신될 때까지 많은 웹 관련 빈을 초기화하지 않습니다.
그러나 LAZY 초기화는 응용 프로그램의 문제를 발견하는 데 지연을 초래할 수 있습니다. 예를 들어, 잘못 구성된 빈이 LAZY로 초기화되면, 그 문제는 애플리케이션이 시작될 때가 아니라 해당 빈이 초기화될 때만 드러날 것입니다. 따라서 LAZY 초기화를 사용할 때 메모리가 충분한지 확인하는 등 추가적인 조치가 필요할 수 있으며, JVM의 힙 크기를 조정하는 것이 권장됩니다.
특히, JPA/Hibernate와 같은 ORM을 사용할 경우, DB와 관련된 LAZY 로딩은 실제 엔티티가 처음으로 접근될 때까지 데이터베이스에서 엔티티를 가져오는 것을 지연시킵니다. Jackson과 같은 라이브러리가 엔티티를 직렬화할 때 LAZY 로딩된 프록시 객체가 초기화되지 않으면, 직렬화 중에 객체를 로드할 수 없기 때문에 예외가 발생합니다. 이런 경우에 LAZY 로딩된 프록시 객체의 실제 데이터를 로드하기 위해 강제 초기화를 진행해 줄 필요가 있습니다.
LAZY 로딩에 대한 설명과 강제 초기화의 필요성은 다음 문서를 참조해 주세요.
Reference:
- Spring Boot Reference Documentation > 7. Core Features > 7.1. SpringApplication > 7.1.2. Lazy Initialization
Spring Boot Documentation
답변이 이승은님의 질문에 도움이 되었기를 바랍니다.