๋ฐฑ์—”๋“œ(Back-End) ๊ฐœ๋ฐœ/SpringBoot

[SpringBoot] 4_์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„

rabo93 2025. 2. 25. 23:16
์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ , ์˜์กด๊ด€๊ณ„ ์„ค์ •ํ•˜๊ธฐ

 

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

package hello.hello_spring.controller;

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

@Controller
public class MemberController {
    private final MemberService memberService;

    //์ƒ์„ฑ์ž ์ƒ์„ฑ ๋‹จ์ถ•ํ‚ค : alt + Insertํ‚ค
    @Autowired // ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }

}

 

์ด์ „์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ new ..ํ•ด์„œ ์ฃผ์ž…ํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” @Autowired์— ์˜ํ•ด ์Šคํ”„๋ง์ด ์ฃผ์ž…ํ•ด์ค€๋‹ค.

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

 

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

@Service
public class MemberService {
   
    private final MemberRepository memberRepository;

    @Autowired //์˜์กด๊ด€๊ณ„ ์ฃผ์ž…
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
    
   ....์ƒ๋žต...
   }

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

 

 

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

@Repository
public class MemoryMemberRepository implements MemberRepository{ //alt+Enter ๋ˆŒ๋Ÿฌ์„œ ์ž๋™์œผ๋กœ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;

...์ƒ๋žต...
}

 

์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก ๊ณผ์ •
memberController > memberService > memberRepository

"memberService ์™€ memberRepository ๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋‹ค."

 


์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•
  1. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ • (์œ„์—์„œ ํ•œ ๋ฐฉ๋ฒ•) : @Component๋Š” @Controller,@Service..๋“ฑ์— ๋‚ดํฌ๋˜์–ด์žˆ๋‹ค.
  2. ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

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

 

* ํšŒ์› ์„œ๋น„์Šค์™€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ @Service, @Repository, @Autowired ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ ํ›„ ์ง„ํ–‰

package hello.hello_spring;

import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
import hello.hello_spring.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();
    }

}

 

 


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

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

@Controller
public class MemberController {

    // ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(ํ•„๋“œ ์ฃผ์ž…)
//    @Autowired private MemberService memberService;
    private MemberService memberService;

    @Autowired // ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(์ƒ์„ฑ์ž ์ฃผ์ž…)
    public MemberController(MemberService memberService) { //์ƒ์„ฑ์ž ์ƒ์„ฑ ๋‹จ์ถ•ํ‚ค : alt + Insertํ‚ค
        this.memberService = memberService;
    }

}

 

 

*** ์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ ์ •ํ˜•ํ™”๋œ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•œ๋‹ค.

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

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

    @Bean
    public MemberRepository memberRepository() {
        //return new MemoryMemberRepository();
        return new DBMemberRepository(); // ๋‚˜์ค‘์— DB ์—ฐ๊ฒฐ ํ–ˆ์„๋•Œ ์—ฌ๊ธฐ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋จ.
    }

}