설정 정보 복사 시 발생한 데이터베이스 연결 문제
1. 문제 발생
2. 문제 분석
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SELECT * FROM scheduler]] with root cause
java.sql.SQLSyntaxErrorException: Table 'memo.scheduler' doesn't exist
에러 메시지의 상단 두 줄은 위와 같습니다.
memo.scheduler 테이블이 존재하지 않는다는 오류가 발생하였습니다.
이 프로젝트는 memo와 관련된 것이 아니므로 데이터베이스 연결 과정에서 오류가 발생했음을 알 수 있습니다.
3. 문제 해결
데이터베이스 연결 설정을 확인한 결과, `application.properties` 파일 내에 `spring.datasource.url`이 아래처럼 잘못 설정되어 있는 것을 확인할 수 있었습니다.
spring.datasource.url=jdbc:mysql://localhost:3306/memo
해당 url을 아래와 같이 올바른 값으로 수정, 즉 알맞은 scheduler 데이터베이스로 연결하여 문제를 해결하였습니다.
spring.datasource.url=jdbc:mysql://localhost:3306/scheduler
4. 회고
설정 정보를 복사할 때, 현재 프로젝트에 적합한 경로와 설정인지 반드시 재확인해야 합니다.
이를 통해 잘못된 설정값으로 발생하는 유사하는 문제를 예방할 수 있습니다.
URI 경로 변수 불일치로 인한 오류 분석
1. 문제 발생
2. 문제 분석
Resolved [org.springframework.web.bind.MissingPathVariableException: Required URI template variable 'id' for method parameter type Long is not present]
에러 메시지에서 확인할 수 있는 `MissingPathVariableException`은 Spring MVC에서 발생하는 에러로, Controller의 메서드가 URI 경로 변수를 요구하는데 실제 요청 URL에 해당 변수가 포함되지 않았을 때 발생합니다.
@PathVariable Long id는 URL 경로에서 id 값을 기대합니다.
하지만 경로에는 {schedulerId}로 명시되어 있어, id와 schedulerId 간의 불일치가 발생합니다.
이로 인해 Spring이 id 경로 변수를 찾지 못하고 MissingPathVariableException을 발생되었습니다.
3. 문제 해결
@PathVariable의 변수 이름과 URL 템플릿의 변수 이름이 일치해야 합니다.
다음과 같이 수정하여, 변수 매핑 문제를 해결하였습니다.
@PutMapping("/{schedulerId}")
public Long updateSchedule(@PathVariable("schedulerId") Long id, @RequestBody ScheduleRequestDto requestDto) {
return schedulerService.updateSchedule(id, requestDto);
}
4. 회고
이번 에러를 통해 URL 경로 변수의 이름 일치의 중요성을 다시 한번 깨달았습니다.
앞으로는 경로 변수와 메서드 파라미터의 이름이 일치하는지 주의 깊게 확인하여 유사한 문제를 방지하도록 하겠습니다.
'🏕 내일배움캠프 > [Assignment] Ch3-1' 카테고리의 다른 글
요구사항 분석, 기능 설계, API 명세서, ERD (0) | 2024.10.02 |
---|