Bibi's DevLog ๐Ÿค“๐ŸŽ

[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ : ์ปดํฌ๋„ŒํŠธ ์Šค์บ”, ์˜์กด๊ด€๊ณ„, DI, ์Šคํ”„๋ง ๋นˆ ์ง์ ‘ ๋“ฑ๋กํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Spring ์Šคํ”„๋ง

[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ : ์ปดํฌ๋„ŒํŠธ ์Šค์บ”, ์˜์กด๊ด€๊ณ„, DI, ์Šคํ”„๋ง ๋นˆ ์ง์ ‘ ๋“ฑ๋กํ•˜๊ธฐ

๋น„๋น„ bibi 2021. 3. 4. 23:59

์ด ๊ธ€์€ ์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ ๋‹˜์˜ ์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜ ๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„

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

๋งŒ๋“  ์„œ๋น„์Šค๋ฅผ ํ™”๋ฉด์— ๋ถ™์ด๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค๋Ÿฌ์™€ Viewํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์›๊ฐ€์ž…์„ ํ•˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HTML๋กœ ํ™”๋ฉด์— ๋ฟŒ๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ๊ฒƒ.

๋จผ์ € Member์˜ Controller๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

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

Controller๋Š” Service๋ฅผ ํ†ตํ•ด ํšŒ์›๊ฐ€์ž…์„ ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ.

์ด๋ฅผ '์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์„œ๋น„์Šค์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค'๊ณ  ํ‘œํ˜„ํ•˜๋ฉฐ, '์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค'๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

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

@Controller ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๋ฉด,

์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๋‹น '์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด'๋ฅผ ์ƒ์„ฑํ•ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด ๋‘๋ฉฐ ํ•ด๋‹น ๊ฐ์ฒด๋Š” ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€์ƒ์ด ๋œ๋‹ค.

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

์Šคํ”„๋ง์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋„๋ก ํ•˜๋ ค๋ฉด, ๊ทธ ๋Œ€์ƒ์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•ด์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉํ•  ๋•Œ๋„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์„œ ์“ฐ๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰, ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ new๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ณด๋‹ค, ํ•œ ๋ฒˆ๋งŒ ๋งŒ๋“ค์–ด์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•ด ๋‘๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋‹ค.

๋˜, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•ด ๋‘๋ฉด ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ƒฅ @Autowired๋ฅผ ์„ ์–ธํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

์™œ? ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋Œ€์ƒ์€ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ.

๋”ฐ๋ผ์„œ ํšŒ์› ์„œ๋น„์Šค MemberService ํด๋ž˜์Šค์—๋„ @Service์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

ํšŒ์› ์ €์žฅ์†Œ์˜ ๊ตฌํ˜„์ฒด MemoryMemberRepositoryํด๋ž˜์Šค์—๋„ @Repository ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

''์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ''

์ด ์„ธ ์š”์†Œ๋Š” ์ •ํ˜•ํ™”๋œ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ณตํ•œ๋‹ค.

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

ํ˜„์žฌ ์ƒํ™ฉ์—์„œ MemberController๋Š” MemberService์—, MemberService๋Š” MemberRepository์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.

์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ๋งŒ๋“  ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 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;
        }
    }
    
  • MemberService.java

    package hello.hellospring.service;
    
    import hello.hellospring.domain.Member;
    import hello.hellospring.repository.MemberRepository;
    import hello.hellospring.repository.MemoryMemberRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    import java.util.Optional;
    
    @Service
    public class MemberService {
        private final MemberRepository memberRepository;
    
        @Autowired
        public MemberService(MemberRepository memberRepository) {
            this.memberRepository = memberRepository;
        }
        // codes ...
    }
  • MemoryMemberRepository.java (MemberRepository์˜ ๊ตฌํ˜„์ฒด)

    package hello.hellospring.repository;
    
    import hello.hellospring.domain.Member;
    import org.springframework.stereotype.Repository;
    
    import java.util.*;
    
    @Repository
    public class MemoryMemberRepository implements MemberRepository{
        // codes ...
    }

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

์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์›ฌ๋งŒํ•œ ๊ฐ์ฒด๋Š” ์ „๋ถ€ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋งŒ๋“ค์–ด ๋“ฑ๋กํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์™œ? ๊ทธ๋ ‡๊ฒŒ ํ–ˆ์„ ๋•Œ ์–ป๋Š” ์ด์ ์ด ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ.

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

โœ” ์Šคํ”„๋ง์ด ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ํ•  ๋•Œ๋Š” ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค( @SpringBootApplication)์˜ ํŒจํ‚ค์ง€ ๋ฐ ํ•˜์œ„ ํŒจํ‚ค์ง€ ์˜ ํŒŒ์ผ๋“ค๋งŒ ์Šค์บ”ํ•œ๋‹ค. ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ํŒŒ์ผ์€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

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

(ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ณ„๋„ ์„ค์ •์„ ํ†ตํ•ด ์‹ฑ๊ธ€ํ†ค์ด ์•„๋‹ˆ๊ฒŒ ๋“ฑ๋ก๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.)

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

์ €๋ฒˆ ์‹œ๊ฐ„๊ณผ ๋‹ค๋ฅด๊ฒŒ, ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.

@Controller, @Service, @Repository ๋ฐ @Autowired ์—†์ด ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

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

์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋“ค์„ ์•„์šฐ๋ฅด๋Š” ํŒจํ‚ค์ง€์— SpringConfig.java๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ @Configuration์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋“ฑ๋กํ•  ์ธ์Šคํ„ด์Šค๋ฅผ @Bean์œผ๋กœ ์„ ์–ธํ•ด ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•œ๋‹ค.

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();
    }
}
  • ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด ๊ฐ์ฒด๋“ค์ด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ๋‹ค.

  • new MemberService(memberRepository())

    MemberService์˜ ๊ฒฝ์šฐ memberRepository()์—์„œ ๋“ฑ๋ก๋œ MemoryMemberRepository๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    ์ฆ‰, ์Šคํ”„๋ง ๋นˆ์— ๋“ฑ๋ก๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ @Autowired์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘ ๋“ฑ๋กํ•˜๊ธฐ๋ณด๋‹ค @Component์™€ @Autowired๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.

(์ฐธ๊ณ ) ๊ณผ๊ฑฐ์—๋Š” ์Šคํ”„๋ง ๋นˆ์„ xml๋ฌธ์„œ๋กœ ์„ค์ •ํ–ˆ์œผ๋‚˜, ์ง€๊ธˆ์€ ๊ฑฐ์˜ ์ž๋ฐ” ์ฝ”๋“œ๋กœ๋งŒ ์„ค์ •ํ•˜๋ฏ€๋กœ ์„ค๋ช…์„ ์ƒ๋žตํ•œ๋‹ค.

DI ๋ฐฉ์‹

DI (์˜์กด๊ด€๊ณ„ ์ฃผ์ž…)์—๋Š” ''ํ•„๋“œ ์ฃผ์ž…, setter ์ฃผ์ž…, ์ƒ์„ฑ์ž ์ฃผ์ž…'' ์˜ 3๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

@Controller
public class MemberController {
    // ํ•„๋“œ ์ฃผ์ž… ๋ฐฉ์‹
    @Autowired private final MemberService memberService;

    // setter ์ฃผ์ž… ๋ฐฉ์‹
    @Autowired
    public void setMemberService(MemberService memberService) {
        this.memberService = memberService
    }

    // ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹
    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}
  • ํ•„๋“œ ์ฃผ์ž… ๋ฐฉ์‹
    • ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • setter ์ฃผ์ž… ๋ฐฉ์‹
    • setter๊ฐ€ public์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ํŠน์ง• ๋•Œ๋ฌธ์— ์™ธ๋ถ€์— ๋…ธ์ถœ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์กฐ๋ฆฝ๋˜๋Š” ์‹œ์ ์—, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ ํ•œ ๋ฒˆ ์ฃผ์ž…ํ•œ๋‹ค.
    • ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ์  ์ด์™ธ์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๋ก  : DI์—๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์‚ฌ์šฉํ•˜๊ธฐ vs ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

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

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

      (๋‚˜์ค‘์— ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜๋ฉด ๊ทธ ๋ถ€๋ถ„์˜ ์„ค์ •ํŒŒ์ผ๋งŒ ๋ฐ”๊พธ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ)

  • @Autowired๋ฅผ ํ†ตํ•œ DI๋Š” ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.

    • = ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋งŒ @Autowired๊ฐ€ ๋™์ž‘ํ•œ๋‹ค.

'๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ > Spring ์Šคํ”„๋ง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์Šคํ”„๋ง DB ์ ‘๊ทผ๊ธฐ์ˆ  : H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜  (0) 2021.03.05
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ์›น MVC ๊ฐœ๋ฐœ(ํšŒ์›๊ด€๋ฆฌ ์˜ˆ์ œ) : ํšŒ์› ๋“ฑ๋ก ๋ฐ ์กฐํšŒ  (0) 2021.03.05
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ:๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ, ํšŒ์› ๋„๋ฉ”์ธ/๋ฆฌํฌ์ง€ํ† ๋ฆฌ/์„œ๋น„์Šค ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ž‘์„ฑ  (0) 2021.03.04
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ๋นŒ๋“œ ๋ฐ ์‹คํ–‰, ์ •์  ์ปจํ…์ธ /MVC์™€ ํ…œํ”Œ๋ฆฟ์—”์ง„/API  (0) 2021.03.04
[Spring] ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ์ž…๋ฌธ(๊น€์˜ํ•œ ๋‹˜) - ๊ฐ•์˜ ์†Œ๊ฐœ, ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ, Viewํ™˜๊ฒฝ์„ค์ •  (0) 2021.03.02