[문제]
열심히 코드를 고치고 나서 실행했더니만, 축하한다는 메시지인 양 APPLICATION FAILED TO START 오류 메시지가 떴다. 일명 순환 참조 오류였다. 화살표가 정말 한 치 오차도 없이 완벽한 각도로 꺾였다.
[원인]
// [1/1] Data Access Layer(Repository Layer)
@Repository
public class JdbcTemplatePlanRepository implements PlanRepository {
private final JdbcTemplate jdbcTemplate;
private final PlanService planService;
/*
[오답] private final PlanService planService;
[정답] 삭제
*/
public JdbcTemplatePlanRepository(DataSource dataSource, PlanService planService) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
this.planService = planService;
/*
[오답]
(1) DataSource dataSource, PlanService planService
(2) this.planService = planService;
[정답]
(1) DataSource dataSource
(2) 삭제
*/
}
}
순환 참조 오류는 리포지토리(Repository)에 service가 남아있어서 발생했다. 서비스 레이어(Service layer)에 해당하는 planService가 있어서 레이어가 무한 굴레에 빠져버렸다. 해결 방법은 간단했다. 속성과 생성자의 매개변수에 있는 planService를 전부 지우면 되었다.
[해결]
도전 단계 과제는 괜히 '도전'이 아니었다. 코드를 몇 줄 작성할 때마다 별의별 오류를 만났다. 별표(*)가 간판처럼 쭉 있으니까 은근히 약 올랐다. 그래도 화살표로 표시까지 해주면서 어디에 문제가 있는지 알려주어 오류는 금방 해결할 수 있었다.
[결과 수치화]
[수정 전] 순환 참조 오류 1건 발생
[수정 후] 순환 참조 오류 0건 발생
'Troubleshooting: 무엇이 문제였는가? > 본캠프 3주 차: 일정 관리 앱 만들기' 카테고리의 다른 글
3단계: "406 Not Acceptable" (0) | 2024.12.12 |
---|---|
3단계: "사용자 Id를 입력했는데 왜 자꾸 0이 나오니?" (0) | 2024.12.12 |
2단계: "PATCH를 두 번 눌러야 수정이 돼요. 왜 이럴까요?" (0) | 2024.12.09 |
1단계: "넌 띄어쓰기를 소중히 하지 않았어" (0) | 2024.12.09 |
1단계: "아무래도 이름(name)이란 체에 구멍이 뻥 뚫렸나 보다." (0) | 2024.12.08 |