๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ์›น(Web)/์Šคํ”„๋ง

์ปจํŠธ๋กค๋Ÿฌ๋Š” @Bean์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด ์•ˆ๋˜๋‚˜์š”?

by bekki 2025. 4. 20.
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 ๊ธฐ๋Šฅ์„ ํฌ๊ธฐํ•˜๋Š” ๊ฑฐ๋ผ์„œ ์ปจํŠธ๋กค๋Ÿฌ์—์„  ์“ฐ์ง€ ๋งˆ์„ธ์š”.