강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

종혁님의 프로필 이미지
종혁

작성한 질문수

서버개발자 과제전형 완벽가이드 - 1편

API 서버 구현 - 1

NaverBookRepository.class 의 위치에 따른 모듈간의 의존성에 대해 질문드립니다.

작성

·

21

0

학습관련 질문을 남겨주세요! 상세히 작성주시면 더 좋아요 🙂

 

안녕하세요, 강사님 🙂

이번 질문도 혼자 먼저 구현 후, 강사님의 강의를 들으며 리팩토링을 진행하며 궁금증이 하나 생겨 질문 드립니다.

 

저는 search-api 모듈의 com.library.repository의 NaverBookRepository.class 위치를 강사님과 다르게 external:naver-client 에 위치시켰습니다.(NaverBook/KakaoBook은 external 에 종속된 구현체라고 생각)

 

그러다 보니, naver-client 모듈이 search-api 모듈에 있는 BookRepository, PageResponse, SearchResponse 를 알아야 했으며, naver-client 모듈이 search-api 모듈을 implementation('...') 으로 의존?참조? 하게 되었습니다.

// search-api 모듈
public interface BookRepository {
    PageResponse<SearchResponse> search(...);
} 

 

이렇게 external -> search-api 로 흘러가는 의존 방향에 이질감이 듭니다.(외부 API 가 app 을 안다..?)

 

그래서 모듈간 의존 방향이 search-api -> external 되도록 강사님 강의처럼 NaverBookRepository 를 search-api 모듈에 위치 시켜도 NaverClient 때문에 search-api에 feign 종속성이 생긴 다는 것이 모듈간 의존성 격리가 되지 않아서 멀티모듈의 장점이 퇴색되었다고 생각합니다.

 

강사님은 과제가 아닌 실무에서 search-api 와 external 간의 모듈 격리를 어떻게 하시며, 의존 방향을 어떻게 하시는지 궁금합니다.

 

저의 부족한 지식을 확장할 수 있게 강사님의 인사이트 공유해주시면 감사하겠습니다!

퀴즈

RestClient 대신 FeignClient를 사용할 때 얻을 수 있는 주된 이점은 무엇일까요?

동기 호출만 지원한다

XML과 JSON 형식을 모두 처리한다

인터페이스 선언만으로 구현체가 자동 생성된다

별도의 헤더 설정이 필요 없다

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 종혁님,

모듈 간의 의존성과 관련된 좋은 질문 감사합니다. 모듈간 의존성 관리와 그 방향성은 코드의 유지보수성과 확장성 측면에서 매우 중요한 주제입니다.

모듈간의 의존성 설계 방법

  1. 의존성 방향:

    • 일반적으로는 비즈니스 로직을 담고 있는 모듈(ex: search-api)이 외부 API 모듈(ex: external)을 참조하는 것이 자연스러운 의존 방향입니다. 이 방식으로 앱 자체의 비즈니스 로직이 외부 API에 비해 상위 계층에 위치하게 됩니다.
  2. 인터페이스를 통한 해결:

    • 외부 API에 대한 의존성을 강제로 분리하기 위해 인터페이스를 사용하여 내부 모듈에 드러나지 않도록 할 수 있습니다.
    • 예를 들어, external 모듈에서 인터페이스를 정의하고 search-api가 이 인터페이스를 구현하거나 참조하도록 하여 종속성을 역전시키는 방식입니다.
  3. 모듈간 격리:

    • 각 모듈은 자신만의 역할과 책임을 지며 다른 모듈에 최소한의 의존성만 갖도록 구조화하여 설계합니다.
    • search-api 모듈은 비즈니스 로직 중심의 역할을 하고, external 모듈은 외부와의 연동을 처리하여 서로 명확한 경계를 유지하도록 설계합니다.

참고 링크

기존 답변에서는 모듈 간의 관계에 대한 몇 가지 유용한 관점이 제공됩니다. 다음 링크를 통해 확인해 보시면 도움이 될 것입니다.

이런 해결책들이 종혁님의 구조적 고민을 해결하는 데 조금이나마 도움이 되길 바랍니다. 추가 질문이 있다면 언제든지 문의해 주세요. 곧 지식공유자께서 보다 심도 있는 답변을 제공해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

종혁님의 프로필 이미지
종혁

작성한 질문수

질문하기