Open ahnbang opened 2 years ago
[해결 방안]
목적 : 상호참조를 하는 로직간의 관계를 재정립한다.
우선 로직들의 의존 필요성에 대해 다시 살펴 봐야 한다. 갑자기 많은 로직들의 관계가 정립된 만큼 필요없는 의존 관계를 갖는 로직들이 있을 가능성이 있다.
로직간 의존관계가 불가피하다면, 의존성 방향을 단방향으로 명확하게 통제하자. 이때 VIEW-DB 방향으로 로직의 수직적 관계를 정립하고 레벨을 구분하여 의존성 방향을 통제하자. 예로 DB에 가까울 수록 하위 로직으로 판단한다.
만약 상호참조를 야기하는 로직들이 동일 레벨이라면, 로직내 메서드등을 한쪽으로 몰아주어 상호참조를 방지하는것도 방법이다. 단, 이 경우 특정 로직단이 비대화되어 유지 보수가 어려워질 것도 고려해야할 것 같다.
수직적 관계가 정립되지 않는다면, 로직간 의존관계를 관리하는 또 다른 로직을 설계해보는것도 방법일 것 같다.
[About Circular Dependency]
상호참조와 관련된 자료를 찾아보면서 순환 구조의 의존관계가 갖는 다양한 문제점에 대해 알게되었다.
순환구조의 의존관계는 구조적 이유로 무한 재귀, 무한 루프를 야기할 가능성이 있다.
순환구조의 의존관계는 로직간의 강한 결합을 발생시키기 떄문에, 단일 로직으로써 재사용하기 힘들며, 한쪽의 변화가 반드시 다른쪽에 영향을 준다는 리스크를 갖는다.
역시 소프트웨어 설계 관점에서 강한 결합이 존재하는 로직들, 의존도가 높은 로직들일 수록 유지보수 측면에 좋을게 없기에 독립적인 로직 설계를 지향해야하는것 같다.
[문제 상황] 주문관련 기능을 개발중에, 관련된 비지니스 로직간의 관계가 급격히 복잡해짐에 따라 상호참조를 하는 로직들이 발생할 가능성을 인지, 로직간의 상관관계, 의존성 방향 정립이 필요함.