Spring MVC & JSP 환경에서 백엔드와 프론트엔드 연결이 안 될때 troubleshooting

bestKimEver·어제
0

프론트에서 보낸 요청이 적절한 엔드포인트롤 타고 Controller의 메소드와 연결되는 과정에 문제가 발생하거나 예상했던 것과 다른 결과가 나올 경우 원인을 찾기 힘들 때가 많다. 200 응답을 받았는데도 실제로는 아예 목표 엔드포인트를 타지 않거나 오류 메시지조차 제대로 출력되지 않는 경우가 있기 때문이다. 다음은 내가 문제의 원인을 탐색하는 일반적인 순서이다.

  1. 프론트에서 정상적인 주소를 호출했는지 확인

    • 로컬 환경에서 실행할 경우 포트 번호 확인
    • Run/Debug Configurations > Deployment 탭 > Application context:/ 외에 별도로 설정된 경로가 있으면 도메인 주소 뒤에 해당 경로를 붙여주어야 한다.
  2. Controller Method의 Annotation을 제대로 붙였는지 확인

  1. 프론트에서 넘겨받은 parameter/payload가 매핑될 자바 객체 필드의 자료형 확인

    • 프론트에서 넘겨주는 parameter/payload가 문제를 일으키는 유력한 범인 후보일 경우, 넘겨주는 필드를 모두 제거한 후 하나씩 추가해보는 식으로 정확히 문제가 되는 부분을 찾을 수도 있다
    • int, boolean, char과 같은 primitive type은 null값을 받을 수 없다. 이런 자료형의 필드로 null값이 들어갈 경우 오류 메시지도 뱉지 않고 목표 엔드포인트를 타지 않는다
      • null값이 들어갈 수도 있는 필드의 경우 대신 대응되는 Object type(예: int -> Integer)을 사용하거나, 프론트에서 해당 값이 null로 들어가지 못하게 검사하거나, 적절한 디폴트 값을 넣어주자
    • 프론트에서 넘어온 파라미터에 매핑되는 백엔드 DTO 객체 필드 내에 일부 필드가 누락되어, 넘어온 파라미터에 매핑될 필드가 없는 것은 의외로 문제가 되지 않았다
  2. view name을 string 형식으로 반환할 경우 해당 view 이름과 경로를 올바르게 작성했는지 점검한다

    • 다른 곳들에서도 동일한 문제가 발생했다면 spring.mvc.view.suffixUrlBasedViewResolver 등지에 제대로 view resolver 관련 설정이 되어있지 않아 문제가 발생하는 것일수도 있다.
      예 01)
      <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="2"
            p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"
            p:viewClass="org.springframework.web.servlet.view.JstlView"/>
      예 02)
      spring:
        mvc:
          view:
            prefix: /WEB-INF/jsp/
            suffix: .jsp    
  3. 프론트에서 넘겨받은 parameter/payload가 매핑될 자바 객체 필드의 Validation annotation 확인(사용할 시)

profile
이제 3년차 개발새발자. 제가 보려고 정리해놓는 글이기 때문에 다소 미흡한 내용이 많습니다.

0개의 댓글