๐Ÿ–ฅ๏ธ Web Development Study/Back-End

[Back-End] ์Šคํ”„๋ง ์ž…๋ฌธ :: ์Šคํ”ผ๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„

ibelieveinme 2025. 1. 23. 13:04
728x90

* ์˜์กด๊ด€๊ณ„ ?

MemberService ๊ฐ€ MemberController ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ณด์—ฌ์ฃผ๊ณ  ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ MemberService ๊ฐ€ MemberController ๋ฅผ ์˜์กดํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.


 

[์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์˜์กด๊ด€๊ณ„ ์„ค์ •ํ•˜๊ธฐ]

ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํšŒ์› ์„œ๋น„์Šค์™€ ํšŒ์› ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์˜์กด๊ด€๊ณ„๋ฅผ ์ค€๋น„ํ•˜์ž.

@Controller
public class MemberController{

	private final MemberService memberService;
    
    @Autowired
    public MemberController(MemberService memberService){
    	this.memberService = memberService;
    }
}
@Service
public class MemberService{
	private final MemeberRepository memberRepository;
    
    @Autowired
    public MemberService(MemeberRepository memberRepository){
    	this.memberRepository = memberRepository;
    }
    
    ...
}

Controller ํด๋ž˜์Šค์— @Controller, Service ํด๋ž˜์Šค์— @Service ์ถ”๊ฐ€.

์ƒ์„ฑ์ž์— @Autowired ๊ฐ€ ์žˆ์œผ๋ฉด ์Šคํ”„๋ง์ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฐพ์•„์„œ ๋„ฃ์–ด์ค€๋‹ค.

MemberController ํด๋ž˜์Šค ์•ˆ์˜ MemberService ์—ฐ๊ฒฐ. MemberService ์•ˆ์˜ MemberRepository ์—ฐ๊ฒฐ.

์ด๋ ‡๊ฒŒ ๊ฐ์ฒด ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์„ DI(Dependency Injection) ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๊ตฌ ํ•œ๋‹ค.

* ํด๋ž˜์Šค ์•ˆ์— ์ƒ์„ฑ์ž๊ฐ€ ๋‹จ 1๊ฐœ ์ด๋ฉด @Autowired ๋ฅผ ์•ˆ์ ์–ด๋„ ๋œ๋‹ค. 

 

์ธํ”„๋Ÿฐ - ์Šคํ”ผ๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ๋‹˜)

Autowired ๊ฐ€ Spring Container ์—์„œ @Service ๊ฐ€ ๋‹ฌ๋ ค ์žˆ๋Š” MemberService ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

 

 

[anotation ์ข…๋ฅ˜]

@Controller

@Autowired

@Service

@Repository

๋“ฑ

--> Controller: ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›๊ณ , Service: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋งŒ๋“ค๊ณ , Repository: ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ . ์š” 3๊ฐœ๊ฐ€ ์ •ํ˜•ํ™”๋œ ํŒจํ„ด์ด๋‹ค.

 

 

[์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€]

 

1. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

@Component๊ฐ€ ์žˆ์œผ๋ฉด Spring bean ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค.

@Controller ๊ฐ€ Spring bean ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ ์ด์œ ๋„ Component ์Šค์บ” ๋•Œ๋ฌธ์ด๋‹ค.

 

์ฐธ๊ณ ) ackage ๋‚ด์— ์žˆ๋Š” anotation ๋งŒ ์Šค์บ”ํ•ด์„œ spring bean ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 Spring ์€ Spring Container ์— Spring bean ์„ ๋“ฑ๋กํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค. ์œ ์ผํ•˜๊ฒŒ ํ•˜๋‚˜๋งŒ ๋“ฑ๋กํ•ด์„œ ๊ณต์œ ! ์ฆ‰, ๊ฐ™์€ Spring bean ์ด๋ฉด ๋ชจ๋‘ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ์ด๋‹ค. ์‹ฑ๊ธ€ํ†ค์ด ์•„๋‹ˆ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ž‘์„ฑ๋œ๋‹ค.

 

2. ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

@Configuration

@Bean

@Configuration
public class SpringConfig {
	@Bean
    public MemberService memberService() {
    	return new MemberService(memberRepository());
    }
    @Bean
    public MemberRepository memberRepository() {
    	return new MemmoryMemberRepository();
    }
}

 

@Controller
public class MemberController{
	
    private MemberService memberService;
    
    // ํ•„๋“œ ์ฃผ์ž…
    //@Autowired private MemberService memberService;
    
    // setter ์ฃผ์ž… <- ์˜์กด๊ด€๊ณ„๊ฐ€ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž… ๊ถŒ์žฅ.
    //@Autowired
    //public void setMemberService(MemberService memberService){
    //	this.memberService = memberService;
    //}
    
    // ์ƒ์„ฑ์ž ์ฃผ์ž… !!! <- ๋งŽ์ด ์”€.
    @Autowired
    public MemberController(MemberService memberService){
    	this.memberService = memberService;
    }
}

 

์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ ์ •ํ˜•ํ™”๋œ Controller, Service, Repository ๊ฐ™์€ ์ฝ”๋“œ๋Š” Component ์Šค์บ”์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ •ํ˜•ํ™”๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉด ์„ค์ •์„ ํ†ตํ•ด Spring bean ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

728x90