package hello.hello_spring.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import hello.hello_spring.domain.Member;
import hello.hello_spring.service.MemberService;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/members/new")
public String createForm() {
return "members/createMemberForm";
}
@PostMapping("/members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
}
์ปจํธ๋กค๋ฌ ์ฝ๋.
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
์ปจํธ๋กค๋ฌ๋ ์ด๋ฐ ์์ผ๋ก @Bean ์ด์ฉํด์ ์๋ ๋ฑ๋กํ๋ฉด ์๋๋์? ์๋๋ค๋ฉด ์ด์ ๋ ๋ฌด์์ผ๊น์? ์์๋ด ์๋ค.
โ MemberController๋ @Bean์ผ๋ก ๋ฑ๋กํ๋ฉด ์ ๋จ.
์ด์ ๋ฅผ ๋ ์์ธํ ์ค๋ช ํ์๋ฉด:
1. @Controller๋ ์คํ๋ง์ด ์๋์ผ๋ก ๊ด๋ฆฌ
@Controller๋ ๋ด๋ถ์ ์ผ๋ก @Component๋ฅผ ํฌํจํ๊ณ ์์ด์ ์ปดํฌ๋ํธ ์ค์บ ๋์์ด ๋ผ์. ๋ณดํต @SpringBootApplication ์์ @ComponentScan์ด ํฌํจ๋ผ ์์ด์, MemberController๊ฐ ์๋์ผ๋ก ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ผ์.
@Controller
public class MemberController {
...
}
2. @Bean์ ์ผ๋ฐ์ ์ผ๋ก ์ค์ ํด๋์ค์์ ์ฌ์ฉ
@Bean์ @Configuration ํด๋์ค ์์์ ํน์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๋น์ผ๋ก ๋ฑ๋กํ ๋ ์จ์. ์:
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
์ด ๋ฐฉ์์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ๋ด๊ฐ ์ง์ ์์ ๋ชป ํ๋ ํด๋์ค๋ ๋ณต์กํ ์ด๊ธฐํ๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉํด์.
๊ฐ๋ฅ์ ํจ
MemberController๋ ๊ทธ๋ฅ ์๋ฐ ํด๋์ค๋๊น, ์๋์ฒ๋ผ ์๋์ผ๋ก @Bean ๋ฑ๋กํ ์ ์์ด์:
@Configuration
public class SpringConfig {
private final MemberService memberService;
public SpringConfig(MemberService memberService) {
this.memberService = memberService;
}
@Bean
public MemberController memberController() {
return new MemberController(memberService);
}
}
์ด๋ ๊ฒ ํ๋ฉด ์คํ๋ง์ด MemberController๋ฅผ ๋น์ผ๋ก ์ธ์ํ๊ณ ์์ฑํด ์ค๋๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ์๊ธธ ์ ์์
์คํ๋ง MVC์์ ์ปจํธ๋กค๋ฌ๋ก ์ธ์ ์ ํจ
- @Controller๋ ๋ด๋ถ์ ์ผ๋ก @Component ์ญํ ๋ ํ๊ณ ,
- ๋์์ ์คํ๋ง MVC๊ฐ ์ด ํด๋์ค๋ฅผ HTTP ์์ฒญ ์ฒ๋ฆฌ์ฉ์ผ๋ก ์ธ์ํ๋๋ก ํด์ฃผ๋ ์ญํ ๋ ํด์.
์ฆ, ๋จ์ํ @Bean์ผ๋ก ๋ฑ๋กํ๋ฉด HTTP ์์ฒญ์ ๋งคํํ๋ ๊ธฐ๋ฅ(@GetMapping, @PostMapping)์ด ๋์ํ์ง ์์ ์ ์์ด์.
- DispatcherServlet์ด ์์ฒญ์ @RequestMapping, @GetMapping์ ์ฐ๊ฒฐํด์ฃผ๋ ค๋ฉด ์ด ํด๋์ค๊ฐ @Controller (ํน์ @RestController)๋ก ๋ฑ๋ก๋์ด ์์ด์ผ ํด์.
โ ๊ฒฐ๋ก
๐ MemberController๋ @Controller๋ก ๋ฑ๋กํด์ผ HTTP ์์ฒญ ์ฒ๋ฆฌ๊ฐ ์ ์ ๋์ํฉ๋๋ค.
๐ @Bean๋ง ์ฐ๋ ๊ฑด MVC ๊ธฐ๋ฅ์ ํฌ๊ธฐํ๋ ๊ฑฐ๋ผ์ ์ปจํธ๋กค๋ฌ์์ ์ฐ์ง ๋ง์ธ์.
'๐ฅ๏ธ ์น(Web) > ์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์คํ๋ง setName (0) | 2025.04.19 |
|---|---|
| Repository ์ธํฐํ์ด์ค (0) | 2025.04.19 |
| ์คํ๋ง Controller ์ฝ๋์์ Model์ ์ถ์ฒ์ ์ญํ (0) | 2025.04.18 |
| DTO, Entity, Mapper (0) | 2025.04.18 |
| ์คํ๋ง ๋ ์ด์ด ๊ตฌ์กฐ (0) | 2025.04.18 |