inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

@JsonIgnore가 실무에서 쓰이는 경우가 있나요?

135

haisley

작성한 질문수 1

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
안녕하세요. 주문 조회 (/api/v1/simple-orders/api/v1/orders) api 학습하면서 궁금한 점이 생겼습니다.

강의를 들으며 postman으로 request 했을 때, v1 코드에서 쿼리를 날릴 시 양방향 연관관계에서 문제가 발생할 수 있다는 것을 배웠습니다. 예를 들어, order list를 return했을 때, memberdelivery에 대한 프록시 객체로부터 필드를 조회해서 영속 상태의 객체를 반환하도록 구성한다면 v1에서는 @JsonIgnore로 양방향 연관관계에 대한 처리 코드를 작성해주어야만 이 문제가 해결되는 것으로 이해했습니다. 그런데 Dto를 만들어 반환하게 되면 @JsonIgnore을 없애도 이러한 문제가 사라지니, 사실상 @JsonIgnore을 실무에서 사용하는 일은 없지 않을까라는 생각이 들었습니다. 또한, 실무에서 양방향 매핑보다는 단방향 매핑을 선호하는 것으로 알고 있어 질문드립니다. 실무에서 이런 코드(@JsonIgnore)를 작성할 일이 있다면, 어떠한 경우인 지 예시가 있을까요?

java spring spring-boot jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. haisley님

@JsonIgnore에 관한 질문에 대해 설명드리겠습니다.

@JsonIgnore는 주로 양방향 관계를 가진 엔티티를 JSON으로 변환할 때 순환 참조 문제를 방지하기 위해 사용됩니다. 예를 들어, Order 엔티티가 Member 엔티티와 양방향 관계를 가질 때, JSON 변환 시 서로 참조하기 시작하면 무한 루프에 빠질 수 있습니다. 이때 @JsonIgnore를 사용하여 어느 한쪽의 참조를 JSON 변환에서 제외함으로써 문제를 해결할 수 있습니다.

실무에서는 데이터 전송 객체(DTO)를 사용하여 엔티티를 반환하는 경우가 많지만, 다음과 같은 상황에서는 여전히 @JsonIgnore를 사용할 수 있습니다:

  1. 간단한 API 개발 시: 빠르게 API를 개발하고자 할 때, 간단하게 @JsonIgnore를 통해 순환 참조 문제를 해결할 수 있습니다.

  2. 관리 및 테스트 목적: DTO를 만드는 것이 지나치게 복잡할 경우, 특히 내부적인 API에서 빠르게 테스트하고자 할 때 임시로 사용할 수 있습니다.

  3. 단위 테스트: 레거시 시스템에서 엔티티 자체를 테스트하고 싶을 때 빠르게 순환 참조를 피하기 위해 사용될 수 있습니다.

결론적으로, 실무에서는 주로 DTO를 활용하여 이러한 문제를 우회하지만, 특정 상황에서는 여전히 @JsonIgnore가 유용하게 쓰일 수 있습니다.

관련하여 자세한 내용을 다룬 기존 답변들을 확인하실 수 있습니다:
- @JsonIgnore 는 엔티티에서 안붙여도 되는걸까요??
- 간단한 주문 조회 V1:엔티티 직접 노출

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

강의 관련 외 질문입니다.

0

80

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

1

97

1

BeanCreationException

0

96

3

Update 후 UpdateMemberResponse 매핑할 때

0

56

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

102

2

페이징 + 검색조건 관련해서 질문드립니다.

0

74

1

Query Dsl Q파일 질문입니다.

0

86

1

루트 쿼리라는것은

0

62

1

메서드를 분리하는 기준

0

70

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

116

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

92

2

fetch join과 영속화와 OSIV의 관계

0

90

2

Distinct 사용 전 결과에 대한 의문

0

118

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

62

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

79

2

dto 필드 속 엔티티 여부

0

63

1

뷰템플릿 사용 시

0

82

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

88

1

DTO 대신 Form 사용은 안되나요?

0

140

1

OSIV ON 상태일 때

0

99

1

fetch join VS fetch join 페이징 궁금증

0

189

2

양방향 연관관계 알아보는 법?

0

109

1

16강 17강 간단 정리 이게 맞을까요 ?

0

168

2