Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

Golang(Go) 순환참조 문제(import cycle not allowed) 발생

GOLANG, 20212 min read

배경

  1. serviceA 에서 다른 serviceB 의 함수를 호출하려고 한다.
  2. serviceB에서 이미 serviceA를 호출하고 있다.
  3. 코드가 실행되지 않는다.

결국 serviceA에 함수를 serviceB에 옮기고 사용했다

이럴경우 어떻게 해야 할까?

계속...이런 문제가 발생하니..(2-3년 해보니) 계속 늘어나니까 처음부터 개발시 해당 내용을 논의하고 방향을 정해놓고 해보고 싶다는 생각이 들었다

  • 공통으로 자주쓰는 회원 서비스를 다른 서비스에서 부르는 구조
  • ex) 기부영수증에서는 기부정보를 자주 불러와서 조회가 필요함 기부영수증 -> 기부
  • 정말 어려운 경우는 야매로..repository 불러서 해결했음

golang 에서 순환참조 발생하는 경우

__________ __________
| |<---- | |
|packageA | |packageB|
| | ---->| |
__________ __________
packageA
↗ ↘
packageC ← packageB

패키지의 순환참조?

관련 현상을 검색해보니 이 현상은 golang 은 패키지의 순환 참조는 지원하지 않아서 발생한다고 한다 찾아보니 다른 언어에서도 발생하는데...

ex)자바에서 순환 의존 관계 때문에 순환참조의 고리를 끊는다... 스프링에서 권항하는 방법은 설계변경 ...변경 불가시 @Lazy 어노테이션 사용,스프링 의존성 주입?
https://keichee.tistory.com/446

참고

https://medium.com/daangn/how-to-write-a-testable-golang-code-4c0e67612bb8 https://www.popit.kr/%EC%9E%90%EB%B0%94-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-go-%EC%9E%A0%EA%B9%90-%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%B4%A4%EC%8A%B5%EB%8B%88%EB%8B%A42/

© 2024 by GwiyeomGo Tech Blog. All rights reserved.