๐Ÿ–‹๏ธ study/spring

[Spring Intro] Section 04. ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„_์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •, ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

๊ธฐ๋ฎจ์ง€ 2023. 1. 23. 02:54

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

 

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

์ง€๋‚œ Section3์—์„œ ๊ตฌ์ถ•ํ–ˆ๋˜ ๋ฐฑ์—”๋“œ ๊ธฐ๋Šฅ์— ํ™”๋ฉด์„ ๋ถ™์—ฌ๋ณด์ž.

ํ™”๋ฉด ๊ตฌ์ถ•์„ ์œ„ํ•ด์„œ๋Š” Controller์™€ View Template์ด ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋Ÿฌ๋ ค๋ฉด MemberController๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ,

MemberController๋Š” MemberService๋ฅผ ํ†ตํ•ด์„œ ํšŒ์›๊ฐ€์ž…๊ณผ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋ฅผ 'MemberController๊ฐ€ MemberService์— ์˜์กดํ•œ๋‹ค'๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

@Controller : ์Šคํ”„๋ง์ด ์ฒ˜์Œ์— ๋œฐ ๋•Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ,

์ด๋•Œ @Controller๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ์ฒด(์—ฌ๊ธฐ์—์„œ๋Š” MemberController)๋ฅผ ์ƒ์„ฑํ•ด์„œ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด ๋‘ . ์ด๋ ‡๊ฒŒ ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด๋‘๋ฉด ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๊ฒŒ ๋จ.

์ด ๊ณผ์ •์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์Šคํ”„๋ง ๋นˆ์ด ๊ด€๋ฆฌ๋œ๋‹ค ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

์•„๋ž˜ ์‚ฌ์ง„์„ ํ†ตํ•ด ์ข€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ฝฉ ๋ชจ์–‘ ์ดˆ๋ก์ƒ‰ ์›์˜ ์ปจํŠธ๋กค๋Ÿฌ(์Šคํ”„๋ง ๋นˆ)๊ฐ€ ์žˆ๋‹ค

 

 

# ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ์— ์˜์กด๊ด€๊ณ„ ์ถ”๊ฐ€

 

ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ

src/main/java/hello.hellospring/controller/MemberController.java

package hello.hellospring.controller;

import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

์ƒ์„ฑ์ž์— @Autowired๊ฐ€ ์žˆ์œผ๋ฉด ์Šคํ”„๋ง์ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฐพ์•„์„œ ๋„ฃ์–ด์ค€๋‹ค.
์ด๋ ‡๊ฒŒ ๊ฐ์ฒด ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์„ DI(Dependency Injection), ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ ํ•œ๋‹ค.
์ด์ „ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฃผ์ž…ํ–ˆ๊ณ , ์—ฌ๊ธฐ์„œ๋Š” @Autowired์— ์˜ํ•ด ์Šคํ”„๋ง์ด ์ฃผ์ž…ํ•ด์ค€๋‹ค.

 

 

# ์˜ค๋ฅ˜ ๋ฐœ์ƒ

Consider defining a bean of type 'hello.hellospring.service.MemberService' in your configuration.

๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด, @Autowired๋ฅผ ์‚ฌ์šฉํ–ˆ์Œ์—๋„ ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

memberService๊ฐ€ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ์˜ค๋ฅ˜์ธ๋ฐ, ๊ทธ ์ด์œ ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž.

 

์ฐธ๊ณ 
helloController๋Š” ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—ฌ์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค.
@Controller๊ฐ€ ์žˆ์–ด๋„ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค.

 

MemberController์˜ @Autowired๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ memberService๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š”๋ฐ,

MemberController๋Š” annotation์„ ๊ฑธ์–ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ ๋“ฑ๋ก๋˜์ง€๋งŒ

memberService๋Š” ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง์ด ์ด๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

 

MemberService / MemoryMemberRepository

์ด๋•Œ, MemberService์—์„œ @Service๋ฅผ ์„ ์–ธํ•˜๊ณ ,

MemoryMemberRepository์— @Repository๋ฅผ ์„ ์–ธํ•˜๋ฉด

๊ฐ๊ฐ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ๋‹ค.

 

 


# ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •
  • ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

# ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์›๋ฆฌ

  • @Component ์• ๋…ธํ…Œ์ด์…˜์ด ์žˆ์œผ๋ฉด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค.
  • @Controller ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ ์ด์œ ๋„ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋•Œ๋ฌธ์ด๋‹ค.
  • @Component๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹ค์Œ ์• ๋…ธํ…Œ์ด์…˜๋„ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค.
    • @Controller
    • @Service
    • @Repository

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

 

 

# ํšŒ์› ์„œ๋น„์Šค ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก

java/hello/hellospring/service/MemberService.java

@Service
public class MemberService {
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
}

์ฐธ๊ณ : ์ƒ์„ฑ์ž์— @Autowired๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ์ ์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•ด๋‹น ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•œ๋‹ค.

(์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์œผ๋ฉด @Autowired๋Š” ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.)

 

 

# ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก

java/hello/hellospring/repository/MemoryMemberRepositoryTest.java

@Repository
public class MemoryMemberRepository implements MemberRepository {}

 

 

# ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก ์ด๋ฏธ์ง€

> ์ด๋ ‡๊ฒŒ memberService์™€ memberRepository๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋‹ค.
์œ„ ๊ณผ์ •๋“ค์ด ๊ฐ์ฒด ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๋„ฃ์–ด์ฃผ๋Š” DI(Dependency Injection), ์˜์กด์„ฑ ์ฃผ์ž…์ด๋‹ค.

 

 

# ์ฃผ์˜

์šฐ๋ฆฌ๋Š” HelloSpringApplication์„ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

hello.hellospring ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํ•˜์œ„ ์š”์†Œ๋“ค์€

์Šคํ”„๋ง์ด ์ „๋ถ€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‹คํ–‰ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ทธ ์ด์™ธ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

(์œ„ ์‚ฌ์ง„์—์„œ demo ์œ„์น˜์˜ ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ์š”์†Œ์ธ demo.java์—

@Service์™€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋„ฃ์–ด๋„ ์Šค์บ”์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.)

 

 

# ์‹ฑ๊ธ€ํ†ค์— ๋Œ€ํ•ด

์Šคํ”„๋ง์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ, ๊ธฐ๋ณธ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค(์œ ์ผํ•˜๊ฒŒ ํ•˜๋‚˜๋งŒ ๋“ฑ๋กํ•ด์„œ ๊ณต์œ ํ•œ๋‹ค).
๋”ฐ๋ผ์„œ ๊ฐ™์€ ์Šคํ”„๋ง ๋นˆ์ด๋ฉด ๋ชจ๋‘ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋‹ค.
์„ค์ •์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์ด ์•„๋‹ˆ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ์‹ฑ๊ธ€ํ†ค์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

ex ) ์œ„ ์Šคํ”„๋ฆฐ ๋นˆ ๋“ฑ๋ก ์ด๋ฏธ์ง€์˜ ์ƒํƒœ์—์„œ
orderService๊ฐ€ @Autowired๋ฅผ ํ†ตํ•ด memberRepository๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•˜๋ฉด ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

(์„ค์ •์œผ๋กœ memberRepository๋ฅผ @Autowired ํ•  ๋•Œ ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„ฃ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ)

 


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

์‹œ์ž‘ํ•˜๊ธฐ ์ด์ „์— ์•ž์„œ ์ž‘์„ฑํ–ˆ๋˜ ํšŒ์› ์„œ๋น„์Šค์™€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜
@Service, @Repository, @Autowired ์• ๋…ธํ…Œ์ด์…˜์„ ์ œ๊ฑฐํ•˜๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.

!! MemberController์˜ @Autowired๋Š” ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์ž. !!

 

# ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก

java/hello.hellospring/SpringConfig.java

package hello.hellospring;

import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

@Bean์„ ํ†ตํ•ด memberService์™€ memberRepository๋ฅผ ๊ฐ๊ฐ ์Šคํ”„๋ง ๋นˆ์— ๋“ฑ๋กํ•˜๊ณ 

return new MemberService(memberRepository())์—์„œ
์Šคํ”„๋ง ๋นˆ์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” memberRepository๋ฅผ memberService์— ๋„ฃ์–ด์ค€๋‹ค. (@Autowired์™€ ๊ฐ™์€ ํšจ๊ณผ)

 

 

์™„๋ฃŒํ•˜๋ฉด ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก์œผ๋กœ ์ด์ „ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

 


์ปดํฌ๋„ŒํŠธ ์Šค์บ”์œผ๋กœ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ • vs ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก

 

โœ”๏ธ XML๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ์ง€๋งŒ ์ตœ๊ทผ์—๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒ๋žตํ•œ๋‹ค.

 

โœ”๏ธ DI์—๋Š” ํ•„๋“œ ์ฃผ์ž…, setter ์ฃผ์ž…, ์ƒ์„ฑ์ž ์ฃผ์ž…์˜ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 


# ํ•„๋“œ ์ฃผ์ž…

@Controller
public class MemberController {

    @Autowired private MemberService memberService;
    
...

> ๋ณ€ํ˜•์„ ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

 

# setter ์ฃผ์ž…

@Controller
public class MemberController {
    private MemberService memberService;

    public void setMemberService(MemberService memberService) {
        this.memberService = memberService;
    }
}

> ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ MemberController๋ฅผ ํ˜ธ์ถœํ–ˆ์„๋•Œ setMemberService๊ฐ€ public์œผ๋กœ ์—ด๋ ค์žˆ์–ด์•ผ ํ•จ

setMemberService๋Š” ํ•œ๋ฒˆ ์„ธํŒ…๋˜๋ฉด ์ž˜ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋ฐ publicํ•˜๊ฒŒ ๋…ธ์ถœ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

 

# ์ƒ์„ฑ์ž ์ฃผ์ž…

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

> ์กฐ๋ฆฝ ์‹œ์ ์— ์ƒ์„ฑ์ž๋กœ ํ•œ ๋ฒˆ๋งŒ ์กฐ๋ฆฝํ•ด๋†“๊ณ  ์ดํ›„๋กœ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•จ

์˜์กด๊ด€๊ณ„๊ฐ€ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๊ถŒ์žฅํ•œ๋‹ค.


 

โœ”๏ธ ์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ ์ •ํ˜•ํ™”๋œ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•œ๋‹ค.
     
๊ทธ๋ฆฌ๊ณ  ์ •ํ˜•ํ™” ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉด ์„ค์ •์„ ํ†ตํ•ด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

  • ์šฐ๋ฆฌ๋Š” ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์œผ๋ฏ€๋กœ
    ์ดํ›„์— ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•จ.
    ์ด๋•Œ ๊ธฐ์กด์— ์šด์˜ ์ค‘์ธ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด
    ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋ฐฉ์‹ ๋Œ€์‹  ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ์„ค์ •ํ•œ๋‹ค.

    -> SpringConfig ํŒŒ์ผ์˜ memberRepository์—์„œ return new MemoryMemberRepository()๋ฅผ
         ์ดํ›„์— return new dbMemberRepository()๋กœ๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค! ์•„์ฃผ ์‰ฌ์›€.

 

โœ”๏ธ ์ฃผ์˜ : @Autowired๋ฅผ ํ†ตํ•œ DI๋Š” helloController , memberService ๋“ฑ๊ณผ ๊ฐ™์ด ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.
               ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜์ง€ ์•Š๊ณ  ๋‚ด๊ฐ€ ์ง์ ‘ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

โœ”๏ธ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ, DI ๊ด€๋ จ๋œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ ๊ฐ•์˜์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

 

 

 

 

๋‚ด์šฉ ๋ฐ ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : ๊น€์˜ํ•œ์˜ ์Šคํ”„๋ง ์ž…๋ฌธ