05AM

Error : 순환 참조 → facade 패턴 본문

Error Traceback

Error : 순환 참조 → facade 패턴

_05AM 2023. 7. 21. 23:46

에러

The dependencies of some of the beans in the application context form a cycle

순환 참조 에러 콘솔창

순환참조 문제란 A 클래스가 B 클래스의 Bean 을 주입받고, B 클래스가 A 클래스의 Bean 을 주입받는 상황처럼 서로 순환되어 참조할 경우 발생하는 문제이다.

참조에 사이클이 발생하여 주입 받을 수 없을 때 발생한다.

 

방법 1

순환 참조가 일어나는 로직을 찾아 수정한다.

ex) 클래스의 분리

 

방법 2

소프트웨어 디자인 패턴 중 하나인 Facade 패턴을 프로젝트에 적용한다.

 

Facade pattern이란?

서브 시스템들을 더 쉽게 사용할 수 있도록 간단한 인터페이스를 제공하는 구조를 갖추는 패턴

주로 복잡한 시스템의 내부를 단순화하여 외부에 노출되는 API를 단순화하고, 시스템과 클라이언트 간의 결합도를 낮추는데 사용된다.

 

Springboot에서 Facade 패턴 구현 방법

  1. 서브 시스템 Facade 패턴을 적용하려는 복잡한 시스템 내의 다양한 서브 시스템을 구현한다. 예를 들어, 데이터베이스 접근, 비즈니스 로직, 외부 API 호출 등의 작업을 수행하는 여러 서브시스템이 있을 수 있다.
  2. ex) service, provider, repository 등
  3. Facade 클래스 Facade 클래스는 클라이언트와 서브 시스템 간의 중간 인터페이스 역할을 한다. 클라이언트는 복잡한 시스템 내의 다양한 서브 시스템을 직접 사용하는 대신 Facade 클래스의 단순화된 인터페이스를 호출한다.
  4. Facade 클래스 구현 Facade 클래스는 서브 시스템에 대한 인스턴스를 생성하고, 클라이언트가 사용하기 쉬운 단순화된 인터페이스를 제공합니다. 이 클래스는 클라이언트 요청에 따라 해당 서브시스템의 메서드를 호출하고 결과를 반환합니다.

 

요약

Entity마다 service, provider 등의 서브 시스템을 구현하고, 각 Domain마다 통일된 Facade 클래스를 만들어 서브 시스템의 인스턴스를 생성하고 로직을 구현한다.

Comments