Troubleshooting: 무엇이 문제였는가?/본캠프 3주 차: 일정 관리 앱 만들기

3단계: "순환 참조 오류라니, 돌아가는 각도가 예술이군요."

writingforever162 2024. 12. 12. 15:14

[문제]

열심히 코드를 고치고 나서 실행했더니만, 축하한다는 메시지인 양 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건 발생