Spring

Spring [์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ / ํšŒ์› ์„œ๋น„์Šค ์Šคํ”„๋ง๋นˆ ๋“ฑ๋ก]

DAHLIA CHOI 2021. 6. 25. 18:56

์˜ค๋Š˜์€ ์˜์กด๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ ๋ฐฐ์› ๋‹ค!

 

์–ผ๋ฅธ ๋‹ค์Œ์ฃผ ์•ˆ์— ์ง€๊ธˆ ๋“ฃ๊ณ  ์žˆ๋Š” ์ž…๋ฌธ ๊ฐ•์˜๋ฅผ ๋๋‚ด์•ผ๊ฒ ๋‹ค,,,๏ฝก๏พŸ(๏พŸ´ω`๏พŸ)๏พŸ๏ฝก

 


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

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

์Šคํ”„๋ง๋นˆ์€ ์‰ฝ๊ฒŒ๋งํ•ด์„œ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ด์•ผ๊ธฐ ํ•œ๋‹ค. 

 

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

 

1. ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ

package hello.hellospring.controller;

import hello.hellospring.domain.Member;
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๊ฐ€ ์žˆ๋‹ค๋ฉด ์Šคํ”„๋ง์ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด์ค€๋‹ค. 

์ฆ‰, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋œฐ ๋•Œ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ƒ์„ฑ์ž์˜ @Autowired๋ผ๊ณ  ์“ฐ์—ฌ์žˆ์œผ๋ฉด ๋ฉค๋ฒ„์„œ๋น„์Šค๋ฅผ ์Šคํ”„๋ง์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๋ฉค๋ฒ„์„œ๋น„์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์—ฐ๊ฒฐ์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.  

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

 

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

 

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

 

@Autowired๊ฐ€ ๋˜์–ด์žˆ์œผ๋ฉด ์Šคํ”„๋ง์ด ๋”ฑ ์ƒ์„ฑ์„ ํ•  ๋•Œ, @service๋ฅผ ๋ณด๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก์„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋•Œ @Autowired๊ฐ€ ์žˆ์œผ๋ฉด ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์„ ์•Œ์•„์ฑ„๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. (๊ตฌํ˜„์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„œ๋น„์Šค์— ์ฃผ์ž…ํ•ด์ค€๋‹ค)

 

 

์Šคํ”„๋ง๋นˆ์ด ์ž˜ ๋“ฑ๋ก ๋˜์—ˆ๋‹ค๋ฉด 

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ


memberController   --->  memberService ---> memberRepository

์ด๋ ‡๊ฒŒ ๋ฉค๋ฒ„์„œ๋น„์Šค์™€ ๋ฉค๋ฒ„๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋‹ค!

 

๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„๋•Œ ํ†ฐ์บฃ8080์ด ์ž˜ ๋œฌ๋‹ค๋ฉด ์Šคํ”„๋ง์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ฌธ์ œ๊ฐ€ ์—†์ด ์ž˜ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!

 

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

 

** ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๊ธฐ ์ „์— ์ „์— ์ž‘์„ฑํ–ˆ๋˜ @Service, @Autowired, @Repository๋ฅผ ์ œ๊ฑฐํ•ด์•ผ๋œ๋‹ค. **

 

1. service์— SpringConfig ์ž๋ฐ” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

package hello.hellospring.service;

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 // spring bean์„ ๋“ฑ๋กํ• ๊ฑฐ์•ผ!
    public  MemberService memberService(){
        return new MemberService(memberRepository());
    }

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

 

์•ž์„œ ํ–ˆ๋˜ ๋ฐฉ๋ฒ•๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ด๋ฒˆ ๋ฐฉ๋ฒ•์€ ๊ทธ๋ƒฅ ํ•œ ์ž๋ฐ” ํŒŒ์ผ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค!

 

๋ฉค๋ฒ„ ์„œ๋น„์Šค์™€ ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‘˜ ๋‹ค ์Šคํ”„๋ง ๋นˆ์— ๋“ฑ๋กํ•˜๊ณ , ์Šคํ”„๋ง๋นˆ์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ๋ฉค๋ฒ„๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ฉค๋ฒ„์„œ๋น„์Šค์— ๋„ฃ์–ด์ค€๋‹ค.

 

์Šคํ”„๋ง์ด ์˜ฌ๋ผ์˜ฌ ๋•Œ ๋น„์„ ๋ณด๊ณ  ์Šคํ”„๋ง๋นˆ์— ๋‘˜ ๋‹ค ์˜ฌ๋ ค์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋Š” ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•œ๋‹ค. ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ „์— ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์Šคํ”„๋ง๋นˆ์— ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

 

 

 


DI์—๋Š” ํ•„๋“œ ์ฃผ์ž…, ์ƒ์„ฑ์ž ์ฃผ์ž…, setter ์ฃผ์ž…์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

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

ex)  @Autowired private MemberService memberService; ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ”๋กœ ์ฃผ์ž…์„ ํ•ด์ฃผ๋Š” ๊ฑด๋ฐ ๋ณ„๋กœ ์ข‹์ง€ ์•Š๋‹ค๊ณ  ํ•œ๋‹ค.

 

- ์ƒ์„ฑ์ž ์ฃผ์ž… (์ง€๊ธˆ ์“ฐ๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•)

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

 

- setter ์ฃผ์ž…

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

 

setter ์ฃผ์ž…์˜ ๋‹จ์  : setter์ฃผ์ž…์€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์ด๊ฒŒ ํผ๋ธ”๋ฆญ์œผ๋กœ ์—ด๋ ค์žˆ์–ด์•ผ๋œ๋‹ค. ๋ฉค๋ฒ„์„œ๋น„์Šค๋ฅผ ์ค‘๊ฐ„์— ๋ฐ”๊ฟ”์น˜๊ธฐ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š”๋ฐ ์ด๊ฒŒ ํผ๋ธ”๋ฆญํ•˜๊ฒŒ ๋…ธ์ถœ์ด ๋œ๋‹ค. ์ด๊ฑธ ์ค‘๊ฐ„์— ๋ฐ”๊พธ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. 

ํ•œ๋ฒˆ ์„ธํŒ…์ด ๋œ ๊ฑด ๋ฐ”๊ฟ€์ผ์ด ๊ฑฐ์˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— setter์‚ฌ์šฉ์„ ์ž˜ ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 


spring ๊ด€๋ จ ํฌ์ŠคํŒ…์€ ๋Œ€๋ถ€๋ถ„ ์ธํ”„๋Ÿฐ์˜ ๊น€์˜ํ•œ ๊ฐ•์‚ฌ๋‹˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•˜๋Š” ๊ธ€์ด๋‹ค!!

์ด๋ฒˆ์— ๊ฐ•์˜๊ฐ€ ๋˜ ์ƒˆ๋กœ ์˜ฌ๋ผ์™”๋‹ค. ์–ผ๋ฅธ ๊ฒฐ์ œํ•ด์•ผ์ง€!!! ๊ทธ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ ค๋ฉด ํ•œ์ฐธ ๋‚จ์•˜์ง€๋งŒ...ํ™”์ดํŒ…์ด๋‹คูฉฬ‹(หŠ•อˆ ๊‡ด •อˆห‹)ูˆ