반응형
문제 1: author_id 외래키 추가 시 오류 발생
발생 상황: author_id를 외래키로 추가하려고 했을 때, 이미 author_id가 schedule 테이블에 존재하여 오류가 발생.
해결 방법: 외래키 제약 조건이 추가되지 않은 상황이었기 때문에 다음과 같은 순서로 해결.
- 기존의 author_id를 제거하려 시도했으나, 외래키 제약이 설정되지 않았음에도 불구하고 제거할 수 없었음.
- ALTER TABLE을 사용해 먼저 외래키 제약을 제거한 후, author_id 컬럼을 삭제하고 다시 추가하면서 외래키 제약을 설정함.
해결 코드:
-- 외래키 제약 조건 제거
ALTER TABLE schedule
DROP FOREIGN KEY fk_author;
-- author_id 컬럼 삭제
ALTER TABLE schedule
DROP COLUMN author_id;
-- author_id 컬럼 다시 추가 및 외래키 설정
ALTER TABLE schedule
ADD COLUMN author_id BIGINT,
ADD CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES author(id) ON DELETE CASCADE;
문제 2: 삭제 시 비밀번호 검증 관련 NullPointerException
발생 상황: 일정을 삭제할 때, 비밀번호가 null이거나 설정되지 않은 일정에서 NullPointerException 오류가 발생.
해결 방법: 비밀번호가 null인 경우에는 검증 로직을 추가하여 예외 처리.
- 비밀번호가 null이거나 일치하지 않을 때 적절한 오류 메시지를 반환하도록 수정.
- 비밀번호가 없을 경우를 처리할 수 있도록 null 체크를 추가.
해결 코드:
if (schedule.getPassword() == null || !schedule.getPassword().equals(password)) {
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "비밀번호가 일치하지 않습니다.");
}
문제 3: 페이지네이션 처리 중 빈 페이지 요청
발생 상황: 페이지네이션을 적용한 후, 데이터가 없는 페이지를 요청했을 때 빈 배열을 반환하지 않고 오류가 발생함.
해결 방법: 빈 페이지에 대해 적절한 응답을 반환할 수 있도록 예외 처리를 추가.
- 페이지 범위를 넘어가는 요청에 대해 빈 배열을 반환하도록 코드 수정.
- 페이지 번호가 데이터 범위를 벗어날 경우 HttpStatus.NOT_FOUND 대신 빈 배열을 반환하도록 변경.
해결 코드:
public List<Schedule> getSchedules(int page, int size) {
Pageable pageable = PageRequest.of(page, size);
List<Schedule> schedules = scheduleRepository.findAll(pageable).getContent();
// 페이지 범위를 넘어서는 요청 처리
if (schedules.isEmpty() && page > 0) {
return Collections.emptyList(); // 빈 배열 반환
}
return schedules;
}
문제 4: Postman을 통한 API 테스트 중 테이블에 데이터가 조회되지 않음
발생 상황: Postman에서 테스트한 데이터가 IntelliJ의 Database 탭에서 확인되지 않음. 데이터베이스가 제대로 연결되지 않았거나 테이블이 선택되지 않은 문제로 추정.
해결 방법:
- application.properties 파일에서 데이터베이스 설정을 확인하여 MySQL이 제대로 연결되어 있는지 확인.
- IntelliJ Database에서 Refresh 버튼을 클릭하여 데이터베이스 상태를 갱신.
해결 코드:
spring.datasource.url=jdbc:mysql://localhost:3306/schedule_db
spring.datasource.username=root
spring.datasource.password=123456789
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
반응형
'스파르타 코딩' 카테고리의 다른 글
Spring 심화 주차 개인 과제 트러블슈팅 (0) | 2024.10.31 |
---|---|
일정 관리 앱 제작 트러블 슈팅 (2) | 2024.10.17 |
자바로 숫자 야구 게임 만들기 과제 트러블슈팅 (6) | 2024.09.24 |
[JAVA] 자바 Project / Package / Class / Methods / Variable 명명 규칙 (0) | 2024.09.19 |
VS Code에서 git 사용법 총정리 (git pull, git push) (0) | 2024.08.30 |