[일정 관리 앱] Spring Framework 파라미터 인식 오류

2024. 9. 30. 15:18내일배움캠프/Schedule Management

 생성한 '일정' 을 조회하는 기능을 프로젝트에 추가한 후 'Postman' 을 통해 '특정 일정 조회' 에 대한 API 테스트를 진행하던 도중 아래와 같은 에러가 발생했다(이미지를 클릭하면 크게 볼 수 있다). '일정' 을 조회하는 기능을 추가한 코드는 여기서 확인할 수 있다.

일정 조회 API 테스트 도중 발생한 에러

 

간략하게 말하면 파라미터를 식별(인식)할 수 없다는 내용의 에러이다. 분명 방금 '전체 일정 조회' 에 대한 API 테스트는 정상적으로 완료했는데, 왜 '특정 일정 조회' 에 대한 API 테스트에선 이러한 문제가 발생했을까?

 

0. '전체 일정 조회' 와 '특정 일정 조회' 의 차이

ScheduleController 클래스의 조회 메서드들

 

 현재 'ScheduleController' 클래스에는 일정을 조회하기 위한 메서드가 2개 존재한다.

  • findAllSchedule(RequestFindAllSchedul request) : 조건에 해당하는 전체 일정을 조회하는 메서드
  • findScheduleById(int scheduleId) : 'schedule' 테이블의 'id' 로 특정 일정을 조회하는 메서드

여기서 주의 깊게 봐야하는 것은 메서드들의 '파라미터(매개변수)' 인데, 'findAllSchedule(전체 일정 조회)' 의 경우 '조회 조건 정보' 를 전달하는 DTO 객체를 파라미터로 받지만, 'findScheduleById(특정 일정 조회)' 의 경우 URL 의 'scheduleId' 값을 파라미터로 전달 받는다.

 

그래서 발생한 에러의 내용과 두 메서드간 차이점을 봤을 때, 'findScheduleById()' 메서드에서 '@PathVariable' 을 통해 URL 의 값(scheduleId)을 파라미터로 인식하는데 문제가 있는 것이 아닌가하는 추측을 할 수 있었다.

 

 

1. 원인 파악

 찾아보니 'Spring Framework 6.1 이상' 부터 발생하는 오류임을 알 수 있었다. 원인은 'LocalVariableParameterDiscoverer' 를 '6.1' 버전에서 제거했기 때문이라고 한다. 그래서 '@PathVariable' 를 사용했을 때 제대로 파라미터를 인식하지 못하는 문제가 발생한 것이다.

 

※ 참고 : 위의 내용은 아래의 참고 문서를 통해 파악했으니 더 자세한 내용을 원한다면 확인해 볼 것을 추천한다.

 

 

2. 문제 해결 과정

 참고 문서를 통해 아래와 같은 과정을 통해 '파라미터 인식' 에 대한 문제를 해결할 수 있음을 확인했다.

 

2-1. build.gradle 에 아래의 코드 추가 (Groovy  DSL)

trasks.withType(JavaCompile).configureEach {
    options.compilerArgs.add("-parameters")
}

build.gradle 에 위의 코드 추가

 

2-2. 프로젝트 세팅 수정

'Settings → Build, Execution, Deployment → Compiler → Java Compiler' 에 위치한 'Additional command line parameters' 항목(= 아래의 빨간 박스 영역)에 "-parameters" 입력 후 'Apply → OK' 버튼을 누른다. 혹시 모르니 IntelliJ 를 재실행해 준다.

프로젝트 설정 수정

 

※ 참고 : 만약 프로젝트를 한 번이라도 실행했다면 'out' 패키지를 삭제 후 IntelliJ 를 재실행 해주도록 하자!

 

 

3. 문제 해결 결과

'특정 일정 조회' API 테스트 결과

 

 Spring Framework 의 파라미터 인식 문제를 해결해 '특정 일정을 조회' 하는 API 테스트가 성공했다.


참고 문서