개발/스프링

[406 ERROR] Spring boot+ React 연동 시 발생하는 406 에러에 대해

JJ Dev. 2021. 9. 17. 20:24
반응형

 

 

여태까지 공부했던 얕은 지식을 바탕으로 맨 땅에 헤딩을 해보기로 했다. 그 첫번째 프로젝트는 바로 웹 서비스 구현!

 

프론트는 React, 서버는 Spring boot, DB는 MySQL을 이용할 계획이다.

 

프로젝트의 첫번째로 Spring boot와 React를 연동하는 작업에 착수했다.

 

참고한 블로그는 아래 링크에 있다.

https://transferhwang.tistory.com/411

 

[Spring] 스프링 부트 + 리액트 환경 구축 및 연동

오늘 진행할 실습 스프링 부트 환경 구축 리액트 환경 구축 스프링부트와 리액트 연동하기 스프링 부트 환경 구축 먼저 스프링 부트 환경을 구축하도록 하겠습니다. 스프링 부트 환경을 구축하

transferhwang.tistory.com

 

문제가 생겼다. 토씨하나 틀리지 않고 열심히 타이핑 했지만 동작을 하지 않고 406 에러를 내뱉었다.

에러 싫어요...

단순한 문제이겠거니하고 구글링을 시작했지만 좀처럼 감을 잡기가 쉽지 않았다.

 

리액트 문제이지 않을까 하는 마음에 포스트맨으로 POST 요청을 보았는데 정확히 똑같은 406에러를 리턴밭았고, 스프링 문제라는 걸 확신했다.

 

일단 오류의 정의는 다음과 같다. 백엔드(스프링부트) 측에서 응답으로 주는 타입이 클라이언트(리액트) 측의 Http Header에 없기때문에 일어나는 오류이라고 한다. 즉, 서버에서 리턴해주는 User(사용자 정의 객체)가 JSON객체로 제대로 전달되지 않았다 정도로 해석할 수 있었다. 하지만 내 에러의 헤더를 살펴본 결과 두 타입이 일치하므로 문제가 일어날 리가 없는 것이었다. 

Response의 content-type과 Request의 Accept를 보면 application/json이 공통으로 있는 것을 볼 수 있다. 보통 406 에러라면 Response의 타입이 text인 경우가 많다.

대다수 에러는 아래 링크에서처럼 3가지로 축약되는 것 같다. 

https://itcrowd2016.tistory.com/63

 

JSON 응답 구현시 406 Error 해결

스프링 프레임워크를 이용해서 웹 개발시 AJAX를 이용해서 클라이언트 단을 구현하려면 스프링의 컨트롤러에서는 데이터만 JSON응답으로 클라이언트에 넘겨 줘야한다. JSON을 넘겨주기 위한 방법

itcrowd2016.tistory.com

근데 이런 솔루션들은 대게 maven을 기준으로 설명한다. 나는 이미 gradle로 프로젝트를 빌드했고 찾아본 결과 gradle의 경우 jackson 라이브러리가 내장되어있다고 한다. 따라서 3가지 모두 딱히 도움이 되지 않았다.

 

결국 몇 시간을 구글링 한 끝에 찾았던 또 다른 솔루션이 바로 getter를 설정해줘야 한다는 것이었다! (아래 스택 오버플로우 링크)

https://stackoverflow.com/questions/28466207/could-not-find-acceptable-representation-using-spring-boot-starter-web

 

이를 바탕으로 과거 학습했던 것 중 lombok이 생각났고 바아로 @Getter를 붙여줬다.(@Setter는 안 하면 허전해서...)

@Getter @Setter 가 있으므로 따로 get메소드를 만들어줄 필요는 없다고 생각했다.

그러나 여전히 안되는 것이다ㅠㅠㅠㅠ

 

또 한참을 구글링 하다가 설마 하는 마음으로 getter를 손수 작성해보았다. 그리고...

사실 원래 다 하는게 맞는데 요즘은 참 편해진 것 같다

짜잔!!!!! 성공하고 말았다...

 

리스폰스를 화면에 잘 출력되는 것을 볼 수 있다.
json 형식으로 잘 전달받은 것을 볼 수 있다.(console.log(res.data))

 

 

문제는 해결했지만 여전히 찜찜하다. 바로 lombok으로 Getter를 설정하는 게 왜 안 먹혔냐는 것이다. 

이유를 찾는대로 업데이트 해야겠다.

(혹시 이유를 아시는 고수분들, 혹은 이번 경우에 대해 보충설명, 조언을 해주실 분들의 댓글 적극 기다리겠습니다ㅎ)

 

 

반응형

'개발 > 스프링' 카테고리의 다른 글

스프링 @Transactional 사용 팁, 주의 사항  (0) 2024.06.09