본 게시글은 하단 강의를 듣고 학습한 내용을 제 생각으로 요약, 정리한 글입니다.
목차
1. 컴포넌트 스캔과 자동 의존관계 설정
1) 스프링 빈 등록과 의존관계 설정
- 지금까지 한 것
- 멤버 서비스, 멤버 리포지토리, 멤버 객체 만듦
- 서비스 통해서 멤버 가입해 리포지토리에 저장될 수 있고, 리포지토리에서 꺼내올 수 있음
- 이번 시간에 할 일
- 화면 붙이기: 컨트롤러와 뷰 템플릿 필요
- 회원 가입하고, 회원 가입한 결과를 html로 뿌려주는 것들 하려 함
- 멤버 컨트롤러 만들기
- 멤버 서비스 통해서 회원 가입하고, 멤버 서비스를 통해서 데이터를 조회할 수 있어야 함.
- 이를 서로 의존 관계가 있다고 표현함.
- 멤버 컨트롤러가 멤버 서비스에 의존한다.
2) 멤버 컨트롤러 만들기
- MemberController.java 생성 → @Controller의 역할: 스프링 빈 등록
- controller패키지에 new class 생성
- @Controller 입력
- 스프링 컨테이너가 스프링 창에 뜰 때 스프링 컨테이너라는 스프링 통이 생김.
- 코드에서 @Controller가 있으면 스프링이 MemberController 객체를 생성해서 스프링 통에 넣어두고 관리함.
- 이전에 HelloController의 기능들이 동작했던 이유
- @Controller 보고서 스프링이 뜰 때 HelloController 객체를 생성해서 스프링이 들고 있음
- 이를 스프링 컨테이너에서 스프링 빈이 관리된다고 표현함
- 스프링 부트 안에 스프링 컨테이너와 내장 톰캣 서버가 있음
- 스프링 컨테이너에 helloController (빈) 가 있음.
src/main/java/hello.hellospring.controller/MemberController.java
위와 같은 Controller 만들면 생기는 일
그림으로 살펴보기

- MemberController가 MemberService 가져다 쓸 수 있게 MemberService객체 생성(스프링 컨테이너에 등록)
- 스프링이 관리하게 되면 다 스프링 컨테이너에 등록하고서 스프링 컨테이너에서 받아서 쓰도록 바꿔야 함.
- 그 이유는 MemberController말고 다른 여러 컨트롤러들이 MemberService를 가져다 쓸 텐데, 객체를 new로 생성하고 보면, 별 기능이 없기에 여러 개 생성할 필요가 없기 떄문임.
- 하나만 생성해두고 공용으로 쓰면 됨
- 이렇게(new로 객체 생성하는 방법) 해도 되지만 다른 방법(스프링 컨테이너에 등록하고 쓰는 방법)이 더 나음

![[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의](https://www.notion.so/image/https%3A%2F%2Fcdn.inflearn.com%2Fpublic%2Fcourses%2F325630%2Fcover%2F56f635a3-3a44-4096-a16b-453ea1696b1a%2F325630-eng.png?table=block&id=33ea27c7-bca1-4c03-a276-7f4093031e61&cache=v2)