이제 우리는 서비스를 화면에 띄우고 싶다.
이를 위해 MemberController 을 만들어야 하는데 이 컨트롤러는 전에 만든 MemberService를 통해 회원 가입, 데이터 조회 등이 가능해야한다. 이를 컨트롤러가 MemberService를 의존한다고 표현한다.
위와 같이 main -> java -> com.example.hellospringboot -> controller 에 MemberController 라는 Class를 만들어준다.
이 클래스에 위와 같은 코드 틀을 작성한다.
Spring을 실행하면 스프링 컨테이너가 생기는데 이 때 @Controller 어노테이션이 있으면 해당 클래스의 객체를 생성하여 컨테이너에 넣어둔 후 Spring이 이를 관리한다. 이를 흔히 컨테이너에서 스프링 빈이 관리된다고 표현한다.
MemberController는 MemberService를 가져다 써야하므로
private final MemberService memberService=new MemberService();
과 같이 해주었다.
그런데 여러 컨트롤러가 MemberService를 가져다 써야한다 하면 매번 new로 해서 새로운 객체를 생성해내는 것은 좋은 방법이 아니다.
위와 같은 코드로 바꾸어주자.
@Autowired 는 해당 클래스에 컨테이너에 올라와 있는 특정 객체를 연결시켜준다.
근데 현재 memberService에 빨간 밑줄이 쳐져있는 것을 확인할 수 있는데. 이는 memberService가 컨테이너에 등록되지 않았기 때문이다(컨테이너에서 가져올 수 없음).
이를 해결하려면 MemberService에 @Service 라는 어노테이션을 추가해주면 이를 읽고 Spring이 컨테이너에 MemberService를 등록해준다.
MemberRepository에도 @Repository 라는 어노테이션을 추가하여 컨테이너에 등록할 수 있다.
이제 MemberController에서 컨테이너에 등록되어 있는 MemberService를 가져다 쓰는 것을 확인할 수 있다!
이를 Dependencey Injection(DI) 라고 한다.
이와 같이 컴포넌트 스캔(@Controller, @Service, @Repository는 @Component를 포함) 과 자동 의존관계 설정을 통한 스프링 빈 등록 방법에 대해 알아보았다.
다음에는 자바 코드를 통해 직접 스프링 빈을 등록하는 방법에 대해 공부해보자!!
'BackEnd > Spring Boot' 카테고리의 다른 글
회원 웹 기능 - 홈 화면 추가하기 (0) | 2022.10.19 |
---|---|
자바 코드로 직접 스프링 빈 등록하기 (0) | 2022.10.18 |
회원 Service 테스트하기 (2) | 2022.10.13 |
회원 Service 만들기 (0) | 2022.10.11 |
회원 Repository 테스트 케이스 작성하기 (2) | 2022.10.08 |