
오늘 모임에서 나는 김영한 강사님의 "스프링 입문"강의에서 스프링 빈에 대해 공부했다.
@Controller가 입력되면 스프링 컨테이너에 객체가 생성된다.
@service 를 사용하면 @component 라고 붙어있음
나머지 리포지토리 등등 나머지도 다 @component가 이어져있음
전부 스프링 빈으로 등록시키기 위해 하는 짓이다. -> 스프링빈에 최대한 등록시켜놓는 것이 이득이다. -> 이유는 나중에
컴포넌트 등록은 @srpingbootApplication이 존재하는 패키지에 하위만 컴포넌트 스캔한다.
에노테이션을 이용하지 않고 스프링 빈으로 넣어주는 방법
지금은 xml로 사용하지 않으므로 생략
*DI에는
생성자 주입 : 생성잘를 통해서 멤버 변수를 넣어주는 방법
세터 주입 : 이런게 있다 정도로만.
요즘 권장하는 스타일은 생성자를 통해서 주입하는 방법이다.
실무에서는 컨트롤러, 서비스,~ 컴포넌트 스캔을 사용한다.
정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해햐 하면 설정을 통해 스프링빈으로 등록한다(중요)
메모리 구현체를 바꿀때 아예 다른 코드를 건드리지 않기 위해 빈(@Bean)으로 등록을 시킨다.
스프링 컨테이너에 올라가는 것들만 오토 와이어드가 작동을 한다.
이후 스프링 핵심 원리 강의에서 자세하게 설명한다.
Tomcat 서버의 우선 순위
위 사실을 먼저 복습하고 넘어가자.
1. 컨트롤러 코드
@Controller
public class HomeController {
@GetMapping("/") // 뒤에 키워드가 입력되지 않는다면 매핑된다. default 같은 개념
public String home() {
return "home"; // home.html 파일로 이동
}
}
2. home.html
<div class="container">
<div>
<h1>Hello Spring</h1>
<p>회원 기능</p>
<p>
<a
href="/members/new">회원 가입</a>
<a
href="/members">회원 목록</a>
</p>
</div>
</div> <!-- /container -->
</body>
</html>
3. 웹의 모습

단순하게 html을 반환한 모습이므로 설명은 생략.
다음은 웹을 통해서 사용자가 이름을 입력하여 등록을 할 수 있도록 하는 기능이다.
1. 회원가입 버튼 컨트롤러 코드
@GetMapping(value = "/members/new") // get방식이다.
public String createForm() {
return "members/createMemberForm"; // create 맴버 폼으로 찾아간다. - 템플릿 html의 파일을 찾아간다.
//html 의 form 에서 input이라는 것이 입력한느 곳 name이 key 가 되는 것임
}
2. creatMemberForm.html
html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<form action="/members/new" method="post">
<div
class="form-group">
<label
for="name">이름</label>
<input
type="text" id="name" name="name" placeholder="이름을 입력하세요">
</div>
<button type="submit">등록</button>
</form>
</div> <!-- /container -->
</body>
</html>
##html은 아직 배우지 않았지만 알아야할 정보만 적어보자면
3. 웹의 모습

이제 입력을 하고 받는 인터페이스를 제공했으니 서버에서 회원등록을 해야한다.
4. 웹 등록 화면에서 데이터를 전달 받을 폼 객체
public class MemberForm {
private String name; // 여기에 매칭이 되면서 값이 들어온다.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@PostMapping(value = "/members/new") // <form action="/members/new" method="post">에서 포스트로 넘어올때의 매핑이다.
public String create(MemberForm form) { //html 의 name을 통해서 스프링이 MemberForm의 멤버 변수에 넣어준다.(setname 호출)
Member member = new Member();
member.setName(form.getName()); // form에 저장된 이름을 꺼낸다.
memberService.join(member); // 회원가입할때 join을 통해서 Mapping 시킴
return "redirect:/"; // 다시 home화면으로 이동
}
@GetMapping(value = "/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members); // members의 문자열을 실제 객체로 치환한다는 뜻
return "members/memberList";
}
}
2.memberList.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<table>
<thead>
<tr>
<th>#</th>
<th>이름</th>
</tr>
</thead>
<tbody>
<tr
th:each="member : ${members}">
<td
th:text="${member.id}"></td>
<td
</tr>
</tbody>
</table>
</div>
th:text="${member.name}"></td>
</div> <!-- /container -->
</body>
</html>
3.웹의 모습

"스프링이 보이기 시작했다."
처음 spring 강의를 들을 때는 내가 알던 JAVA랑 아예 다른 언어같아서 이해가 되지 않아서 그냥 포기하고 싶었는데, 오늘도 같이 모각소를 하면서 억지로라도 계획한 웹 공부를 하게 되었다. 결과적으로, 오늘 웹을 통해 회원등록을 하게 되면서, 전체적인 웹의 작동방식이 눈에 들어오게 되어 spring에 거부감이 조금은 줄어든 것 같다.
다른사람과 같이 공부하는 것은 비효율적이라고 생각했는데, 같이 공부를 하기로한 책임감을 느끼게되니 공부를 더 열심히 하게되는 것 같다. 방학이 끝날 때까지 열심히 해보자.