@JsonIgnore 사용기

서태욱·2022년 11월 11일
1

문제점

회사에서 자원 요청 기능을 개발하던 도중에 발생한 에러다.

POST http://localhost:8080/api/resource-requests/save 500
send @ jquery.min.js:2
ajax @ jquery.min.js:2
saveResourceRequest @ resource-request-1178a40f2dadfad83b70b62e664e02f6.js:246
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
VM619:1 Uncaught SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
    at JSON.parse (<anonymous>)
    at Object.<anonymous> (resource-request-1178a40f2dadfad83b70b62e664e02f6.js:262:21)
    at c (jquery.min.js:2:28327)
    at Object.fireWith [as rejectWith] (jquery.min.js:2:29072)
    at l (jquery.min.js:2:79926)
    at XMLHttpRequest.<anonymous> (jquery.min.js:2:82355)

modal창을 띄워서 필요한 정보를 기입한 후에 저장 버튼을 누르면 '자원 요청'이 저장되도록 하는데,
JSON으로 변환할 수가 없다는 에러가 반복 됐다.

해결 과정

아래와 같은 에러 로그를 구글 창에 몇번 복붙해봤지만 큰 도움이 안됐다.
Uncaught SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

이건 사실 원인이 매우 다양한 가운데 발생할 수 있는 넓은 의미의 에러인 것이어서 그런 거 같다.

디버깅 모드로 breaking point를 찍고 계속 step over로 넘어가면서 값들이 어떻게 찍히는지
세세하게 살펴봤다.

DispatcherService 부분에 이르러서 문제 해결 실마리를 발견할 수 있었는데,
넘겨준 데이터가 특정 entity의 한 필드에 멈춰버린 내용이 떴기 때문이다.

그 필드들은 책임님과 함께 개발이 진행되면서 그분이 추가하신 것들이었다.
당장 필요한 값이라기보다 필요한 정보들을 불러와서 약간의 가공이 이루어지는 필드, 메소드 들이었는데,
넘겨주는 jsonEnvelope에는-당연하게도- 그 값이 없으니까 JSON으로 파싱할 수 없다는
메시지가 뜬 것이었다.

그래서 직접 form으로 넘기지 않는 부분은 모두 @JsonIgnore annotation을 붙여주니 말끔히 해결 되었다.

JsonIgnore란 무엇인가?

Jackson library를 통해 사용할 수 있는 어노테이션으로, JSON을 직렬화, 역직렬화 하는데 쓴다.

@JsonIgnore는 클래스의 속성(필드, 멤버변수) 수준에서 사용되며
필드의 데이터 값이 JSON으로 담길 때 무시할 속성을 지정해준다.
아울러 @JsonIgnoreProperties 어노테이션은 클래스 수준(클래스 선언 바로 위에)에 사용되며,
@JsonIgnoreType 어노테이션은 클래스 수준에서 사용되며 전체 클래스를 무시한다.

느낀 점

이제는 단순히 기능이 되게 하는 데 목적이 있는 개발이 아니라, 정말로 왜 그렇게 되는지에 대해서
이유를 꼼꼼히 따지고 분석하는 가운데 개발해 나가는 태도가 필요하겠다.

이제 입사 7개월차가 되어 가는데, 성장 속도가 더딘 것 같은 느낌도..든다.
그렇게 급하다고 문제 해결 자체에만 급급하면 원인도 이유도 모른채 임시방편만 돌려막다가
개발 인생이 끝날지도 모른다.

아주 기본인 것들인데 최근에서야 그 기본을 잘해야 한다고 다짐하게 된다.

profile
re:START

0개의 댓글