늦은 프로그래밍 이야기
230117 TIL (팀프로젝트) 본문
팀프로젝트
Interface 구현
이번 프로젝트에 Service단에 Interface를 구현하여 controller에 service를 주입할 때 interface를 주입해 주어 controller와 service의 의존관계를 느슨하게 하는 아키텍쳐로 설계해 보았다.
인터페이스를 처음 써봤는데 그동안 왜 사용을 안했을까 싶을 정도로 크게 어려운 점은 없었다. 하지만 팀원들이 겪었던 문제가 두가지 있었는데 화면공유로 보고 바로 캐치하지 못해서 언젠가는 나도 같은 실수를 할 수 있겠다고 생각이 들었다.
Interface를 구현한 class에 컴파일 에러가 발생하는 문제
팀원 중 한분이 각자 맡은 부분은 작업하다가 잘 되지 않는다며 화면공유로 문제를 공유해 주었다. 메소드 하나를 구현하는데 컴파일 에러가 뜨면서 문제가 해결이 되지 않는다는 내용이었다. 화면공유로 보는데 처음에는 무엇이 문제인지 바로 캐치하지 못했다. 다른 팀원의 도움을 받아 Interface에 구현된 모든 메소드를 ServiceImpl 클래스에 구현하지 않아서 발생한 컴파일 에러였다.
실행이 되지 않고 bean circular dependencies (빈 순환 참조) 에러가 발생하는 문제
또 하나의 문제는 팀원 중 한분이 실행이 되지 않는다고 화면공유를 통해 문제점을 공유해 주었는데, 컴파일 에러는 뜨지 않는데 실행을 하면 실행이 되지 않고 아래와 같은 에러가 콘솔창에 출력 되었다.
the dependencies of some of the beans in the application context form a cycle:
┌─────┐
| UserServiceImpl defined in file
└─────┘
일단 UserServiceImpl을 살펴 보았지만 특별히 문제가 될만한 것이 눈에 띄지 않았다. 해당 메시지를 구글로 검색해보니 순환 참조 문제라는 것을 알게 되었고 해당 출력문을 보니 UserServiceImpl 내에서 빈이 순환 참조 되고 있는 것 같아서 위쪽을 보니, Interface로 구현한 UserService를 의존성 주입해 준 것이 눈에 들어왔다. UserServiceImpl이 UserService를 호출하면서 계속해서 순환 참조 되고 있던 것 같다. 해당 코드를 제거해주니 정상적으로 작동하였다.
'내일배움캠프 > TIL, WIL' 카테고리의 다른 글
| 230119 TIL (팀프로젝트) (0) | 2023.01.19 |
|---|---|
| 230118 TIL (팀프로젝트) (0) | 2023.01.19 |
| 230116 TIL (팀프로젝트) (0) | 2023.01.16 |
| 11주차 WIL (0) | 2023.01.15 |
| 230113 TIL (소수찾기, 리팩토링) (0) | 2023.01.13 |