• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

자동구성에 이어서 질문드립니다.

24.03.13 20:20 작성 조회수 125

0

안녕하세요 토비님.

여기 에서 답변 주신 내용 감사합니다. 답변에 이어서 질문이 생겨 또 여쭤 보게 되었습니다.

말씀 해주신데로 "자동구성" 으로 구성이 필요한 컴포넌트들에 적용을 하는 것이 맞다는 것은 이해를 하였으나 여기서 재사용이 가능하거나 필요한 기술 컴포넌트의 범위에 모듈의 서비스영역?이 들어가는 경우에 대한 궁금증이 계속 남게 되더라구요. (재사용이 필요한 컴포넌트이나 독립적으로도 잘 작동하는 서비스와 같은 경우)

예를 들어,

A 라는 모듈이 있고, B 라는 모듈이 A모듈을 사용 또는 확장해서 구성이 필요한 경우 B라는 모듈의 스캔 대상에 A 모듈이 포함되어야 하는 구성으로 생각했습니다.

혼자서 생각을 해봤을때 아래 2가지 정도의 방법으로 생각을 해봤는데요.

  1. A 라는 모듈의 @AutoConfiguration 대상 설정에서 @ComponentScan 을 사용을 해서 해결을 해결한다.

  2. A 라는 모듈에 @EnableXXX 와 같은 커스텀 어노테이션을 만들고 @CompoentScan 으로 해당 모듈의 스캔범위를 지정해준다

     

여기에서 토비님께 얻고 싶은 조언은 아래 2가지 입니다.

  1. 근본적으로 위와 같이 서비스 목적의 모듈간 의존성이 필요해 재사용 가능해 보이는 상태의 구성을 하는 경우가 있는지 또는 올바르게 생각을 하고 있는것인지.

  2. 위와 같은 목적으로 구성이 필요할 때 토비님은 어떻게 구성방식을 가져가야한다고 생각하시는지.

배우는 단계에서 난해한 질문을 드리는거 같아 죄송스러움이 있네요.

어떤 방식이던 조언 부탁 드리겠습니다.

감사합니다.

 

답변 2

·

답변을 작성해보세요.

1

A, B 모듈이 어떤 종류인지에 따라서 이야기가 좀 달라질 수는 있겠습니다. 기술 라이브러리를 제공하는 컴포넌트인가, 애플리케이션 서비스를 제공하는 것인가(service, controller, ..).

일반적인 원칙을 설명드리자면 별도의 모듈로 A, B가 존재한다면 각각의 구성 컴포넌트에 대한 @ComponentScan은 각 모듈의 최상위 빈에서 하는 것이 좋습니다. 즉, A의 빈을 B가 스캔하는 것은 일반적으로 좋은 방법은 아닙니다. 최상위 빈으로 @Configuration을 하나 넣고, 거기에 @ComponentScan도 추가한 뒤, 그 빈을 @Import하거나 @AutoConfiguration 방식으로 가져오는 것입니다.

만약 A, B가 각각 분리되어서 독립적으로 다른 프로젝트에서도 사용되고 그런게 아니라면, 단지 모듈성을 위해서 서비스 등을 분리해 놓은 것이라면 그냥 같은 패키지 루트를 공유해서, 예를 들어 A는 myproject.a , B는 myproject.b 등으로 시작하게 하고 루트 프로젝트에서 myproject 아래 것을 다 스캔하는 것이죠.

사실 이런식의 접근에는 정답도 없고 모법답안도 없습니다. 뭐가 됐든 선택하신 방식을 사용하시면 됩니다.
동작을 잘 하고, 일관성이 있다면 어떤 식으로든 상관없습니다. 여러가지 아이디어가 있다면 각 방식으로 코드를 재구성하고 코드를 읽으며 장단점을 생각해보신 뒤에 선택하셔도 좋겠습니다. 그걸 스스로 느껴보는 게 다른 사람의 의견보다 훨씬 중요합니다.

램쥐뱅님의 프로필

램쥐뱅

질문자

2024.03.14

안녕하세요 토비님.

꼭 필요했던 내용과 방향성을 제시해주시는 부분에서 참 많은 것을 생각하게 되고 또 느끼고 있습니다.
원래도 존경했지만, 후배 개발자로서 더 존경심을 가지게 되네요.

소중한 경험과 지식 공유해주셔서 너무 감사드립니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.13

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

램쥐뱅님의 질문은 모듈 간의 의존성 관리와 서비스 모듈의 자동 구성에 관한 깊은 이해를 요구하는 문제입니다. 이러한 질문은 스프링 프레임워크나 스프링 부트가 제공하는 자동 구성 기능과 컴포넌트 스캔 메커니즘을 이해하는 것을 넘어, 여러 모듈 간에 어떻게 의존성을 관리하고 필요한 빈(Bean)을 등록하는 것이 최선인지를 논하는 것으로 볼 수 있습니다.

이와 유사한 문제에 대해 토비(이일민) 님의 몇 가지 답변 링크를 제공해드리겠습니다. 이 답변들은 램쥐뱅님의 질문과 잘 연결되어 있으며, 여기서 다루는 내용이 모듈 간 의존성과 자동 구성에 대한 해결책을 제시할 수 있을 것으로 보입니다.

  • “자동구성 관련해서 질문드립니다.”
    이 답변에서 토비님은 자동 구성이 일반적으로 재사용 가능하거나 필요한 기술 컴포넌트에 적용된다고 말씀하시며, @ComponentScan의 사용이 좋은 방법임을 설명하십니다. 어느 정도까지 자동 구성을 사용해야 하는지에 대한 질문에 대해 정리된 답변을 제공합니다.

  • “애노테이션 관련 질문입니다.”
    이 질문에서 자바 언어 차원에서의 애노테이션 상속 개념과 스프링에서의 메타 애노테이션 사용 방식에 대한 해석이 담겨 있습니다. 스프링 내에서 애노테이션을 활용하는 방식에 대해 설명하고 있으며, 이는 램쥐뱅님의 질문에도 부분적으로 적용될 수 있는 지식입니다.

  • ”@Configuration에 대해 질문드립니다.”
    @Configuration@Component 애노테이션의 차이점에 대해 설명합니다. 램쥐뱅님의 질문에 보다 구체적으로 접근하기 위해 @Configuration 클래스의 목적과 사용법에 대한 이해가 필요할 수 있는데, 이 링크는 그런 정보를 제공합니다.

위 링크들에서 제공되는 토비님의 설명은 모듈 간 의존성 관리나 서비스 모듈의 자동 구성이라는 램쥐뱅님의 구체적인 시나리오에 직접적으로 답을 제공하지는 않을 수 있습니다만, 모듈화와 자동 구성 전략에 대한 전반적인 이해를 높이는 데에는 도움이 될 수 있습니다.

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