inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Catalogs Microservice - 기능 구현 ②

@Service 관련 질문 드립니다

195

G General

작성한 질문수 23

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
import com.example.catalogservice.service.CatalogService;
....
public class
CatalogController {
Environment env;
CatalogService catalogService;
...

CatalogController는 생성자로 의존성을 주입받습니다(단, 여기서 import한 CatalogService는 impl이 아닌 인터페이스 자체입니다). 여기서 CatalogService는 @Component 같이 스프링에 알리는 객체로 설정하지 않은 인터페이스 입니다.

@Service
public class CatalogServiceImpl implements CatalogService{

한편 Impl에 @Service 어노테이션이 붙어있고, 또 implements로 CatalogService를 받아오기 때문에, 스프링에서는 CatalogServiceImpl을 알아서 CatalogService로 인식해서 넣어주는건가요? 

그냥 단순하게 생각하면, 컨트롤러에서 CatalogServiceImpl 객체가 주입되어야 된다고 생각되는데(Service 붙은 Bean이 CatalogServiceImpl이기때문에), 스프링에서 어느정도 선까지 알아서 해주는지 감이 안 잡히네요ㅠ

스프링이 서비스로 인식하는 대상은 반드시 Bean객체 어노테이션(@Service, @Component 등)이 붙은 클래스에 의해 상속되는 인터페이스여야 하는건가요?

기존에 다른 언어로 개발하다가 마땅한 마이크로서비스 강의가 없어서 듣고 있는데 스프링 기반 지식이 조금 딸려서 질문 드립니다ㅠ(앞선 로드맵으로 스프링이 어떻게 돌아가는지 대강만 알고있어요ㅠ)

msa Kafka spring-cloud spring-boot architecture JPA

답변 1

0

Dowon Lee

안녕하세요, 이도원입니다. 

자바에서 뿐만 아니라 객체지향 언어에서의 상속은 (interface, class 상속 모두) A is B라고 생각하시면 됩니다. 즉, public class A implements B 라고 가정했을 때, A is B입니다. 위와 같은 경우라면

CatalogServiceImple is Catalog Service

가 됩니다. 따라서 Spring Boot Application 내에서는 CatalogServiceImple이 CatalogService이라고 여겨지고 사용됩니다. 

Spring Boot는 처음 기동 시 선언 된 Bean을 Context에 등록하게 되는 데, 빈을 등록할 때, 고유한 이름을 지정하거나 원하는 타입에 맞는 형식으로 등록시킬 수 있습니다. 그러나, 이러한 것들을 제외하고 등록하게 되면, 같은 type을 가진 빈들끼지 주입을 시켜주게 됩니다. 이때 사용되는 것이 @Autowired 입니다. 따라서 위와 같은 예제에서는 Spring Boot가 기동 시 CatalogServiceImple을 빈으로 등록한 상태이고, Contoller도 역시 빈으로 등록하려고 할 때, 생성자에서 주입하고 있는 CatalogService은 등록된 빈 들중에서 같은 타입을 찾아서 매칭하게 됩니다. 만약 빈을 등록할 때, bean id를 지정했다면, 주입 시 @Qualifier와 같은 주입 방법을 사용할 수도 있습니다. 

감사합니다. 

0

G General

기존에는 @Service나 @Component로 등록된 것들만 사용할 수 있다고 생각했었는데, Init 과정에서 등록되지 않은 UserService라도  일단 등록된 Bean들을 매칭해서 true가 나오기만 하면 쓸 수 있다는 거네요. 감사합니다!

kafka 업데이트 강의 듣고 시포요

0

114

2

강의 교안

0

105

2

마이크로서비스간 통신 시, 인증 처리

0

116

2

api gateway 에서 인증 처리

0

76

1

섹션 19 질문드립니다

0

84

2

강의 자료 업데이트

0

105

2

부하분산 강의 섹션

0

65

1

강의자료는 어디에서?

0

98

2

강의 자료는 어디서 다운 받을 수 있나요?

0

131

2

전체 사용자 조회시 오류

0

65

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

120

2

학습 방향

0

105

2

카프카 커넥터 사용 목적 문의

0

91

2

kafka 강의

0

117

2

서비스 디스커버리 종류

0

90

2

강의 자료에 대해서 궁금해요

0

125

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

94

2

Kafka Source Connect 버전 에러

0

95

2

소스커넥터는 사용안한 거 맞죠?

0

84

2

강의자료 업데이트 문의

0

99

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

63

1

강의 업데이트 계획이 궁금합니다.

0

120

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

168

2

어떤 것이 업데이트 된 건가요?

0

169

2