[Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (7) - ์˜์กด ๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…

2022. 3. 13. 22:24ยทSpring

๐Ÿ“Œ ๋‹ค์–‘ํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•

โœ… ์ƒ์„ฑ์ž ์ฃผ์ž…

@Component
public class OrderServiceImpl implements OrderService {

     private final MemberRepository memberRepository;
     private final DiscountPolicy discountPolicy;
 
    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
         this.memberRepository = memberRepository;
         this.discountPolicy = discountPolicy;
        }
}
  • ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ๋ฒ•
  • ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋”ฑ 1๊ฐœ ์žˆ์œผ๋ฉด @Autowired๋ฅผ ์ƒ๋žตํ•ด๋„ ์ž๋™ ์ฃผ์ž…๋จ
  • ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ์ ์— ๋”ฑ 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋จ
  • ๋ถˆ๋ณ€, ํ•„์ˆ˜ ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ

 

โœ… ์ˆ˜์ •์ž ์ฃผ์ž…

@Component
public class OrderServiceImpl implements OrderService {

     private MemberRepository memberRepository;
     private DiscountPolicy discountPolicy;

    @Autowired
    public void setMemberRepository(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
    @Autowired
    public void setDiscountPolicy(DiscountPolicy discountPolicy) {
    	this.discountPolicy = discountPolicy;
    }
}
  • setter๋ฅผ ํ†ตํ•ด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์„ ํƒ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ

 

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

public class OrderServiceImpl implements OrderService {

     @Autowired
     private MemberRepository memberRepository;
     @Autowired
     private DiscountPolicy discountPolicy;
}
  • ํ•„๋“œ์— ๋ฐ”๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜์ง€๋งŒ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์„œ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • DI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์ œ ์ฝ”๋“œ์™€ ๊ด€๊ณ„์—†๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋‚˜ ์Šคํ”„๋ง ์„ค์ •์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” @Configuration ๊ฐ™์€ ๊ณณ์—์„œ๋งŒ ํŠน๋ณ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜์ž.

 

๐Ÿ“Œ ์˜ต์…˜ ์ฒ˜๋ฆฌ

์ฃผ์ž…ํ•  ์Šคํ”„๋ง ๋นˆ์ด ์—†์–ด๋„ ๋™์ž‘ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ @Autowired๋งŒ ์‚ฌ์šฉํ•˜๋ฉด required ์˜ต์…˜์˜ ๊ธฐ๋ณธ๊ฐ’์ด true๋กœ ๋˜์–ด ์žˆ์–ด์„œ ์ž๋™ ์ฃผ์ž… ๋Œ€์ƒ์ด ์—†์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

โœ… ์ž๋™ ์ฃผ์ž… ๋Œ€์ƒ์„ ์˜ต์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ

//ํ˜ธ์ถœ ์ž์ฒด๊ฐ€ ์•ˆ๋จ
@Autowired(required = false)
public void setNoBean1(Member member) {
	System.out.println("setNoBean1 = " + member);
}

//null ํ˜ธ์ถœ
@Autowired
public void setNoBean2(@Nullable Member member) {
	System.out.println("setNoBean2 = " + member);
}

//Optional.empty ํ˜ธ์ถœ
@Autowired(required = false)
public void setNoBean3(Optional<Member> member) {
	System.out.println("setNoBean3 = " + member);
}
  • @Autowired(required=false) : ์ž๋™ ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†์œผ๋ฉด ์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ ์ž์ฒด๊ฐ€ ํ˜ธ์ถœ์ด ๋˜์ง€ ์•Š์Œ
  • org.springframework.lang.@Nullable : ์ž๋™ ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†์œผ๋ฉด null์ด ์ž…๋ ฅ๋œ๋‹ค.
  • Optional<> : ์ž๋™ ์ฃผ์ž…ํ•  ๋Œ€์ƒ์ด ์—†์œผ๋ฉด Optional.empty๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.

 

๐Ÿ“Œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ž

โœ… ๋ถˆ๋ณ€

  • ๋Œ€๋ถ€๋ถ„์˜ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์€ ํ•œ๋ฒˆ ์ผ์–ด๋‚˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ์ ๊นŒ์ง€ ์˜์กด๊ด€๊ณ„๊ฐ€ ๋ณ€ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ์ˆ˜์ •์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด setter๋ฅผ public์œผ๋กœ ์—ด์–ด๋‘์–ด์•ผ ํ•œ๋‹ค.
  • ๋ˆ„๊ตฐ๊ฐ€ ์‹ค์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ  ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์—ด์–ด๋‘๋Š” ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„ ๋ฐฉ์‹์ด ์•„๋‹˜
  • ์ƒ์„ฑ์ž ์ฃผ์ž…์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ์ดํ›„์— ํ˜ธ์ถœ๋˜๋Š” ์ผ์ด ์—†๋‹ค. ์ฆ‰ ๋ถˆ๋ณ€ํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… ๋ˆ„๋ฝ

  • final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์„ ์„ ์–ธ๊ณผ ๋™์‹œ์— ํ• ๋‹นํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ƒ์„ฑ์ž์—์„œ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
  • final ๋ณ€์ˆ˜์— ๊ฐ’์ด ๋ˆ„๋ฝ๋˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…์˜ ๋ˆ„๋ฝ์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

→ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๊ณ , ํ•„์ˆ˜ ๊ฐ’์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์ˆ˜์ •์ž ์ฃผ์ž… ๋ฐฉ์‹์„ ์˜ต์…˜์œผ๋กœ ๋ถ€์—ฌํ•˜์ž. ํ•„๋“œ ์ฃผ์ž…์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๐Ÿ“Œ ๋กฌ๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ตœ์‹  ํŠธ๋ Œ๋“œ

  • ๋กฌ๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” @RequiredArgsConstructor ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด final์ด ๋ถ™์€ ํ•„๋“œ๋ฅผ ๋ชจ์•„์„œ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ์ตœ๊ทผ์—๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋”ฑ 1๊ฐœ ๋‘๊ณ , @Autowired๋ฅผ ์ƒ๋žตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์— Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ @RequiredArgConstructor๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋Šฅ์€ ๋‹ค ์ œ๊ณตํ•˜๋ฉด์„œ ์ฝ”๋“œ๋Š” ๊น”๋”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋กฌ๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ dependencies์—์„œ ์ถ”๊ฐ€ํ•ด ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

 dependencies {
 ...
	compileOnly 'org.projectlombok:lombok'
 	annotationProcessor 'org.projectlombok:lombok'

	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
 ...
 }

 

๐Ÿ“Œ ์กฐํšŒ ๋นˆ์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ ๋ฌธ์ œ

  • @Autowired๋Š” ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•œ๋‹ค. -> ac.getBean(DiscountPolicy.class)์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘
  • ๊ฐ™์€ ํƒ€์ž…์˜ ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋ก(RateDiscountPolicy, FixDiscountPolicy)ํ•˜๊ณ  ์ƒ์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด(DiscountPolicy)์— ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ์‹คํ–‰ํ•˜๋ฉด NoUniqueBeanDefinitionException์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

โœ… @Autowired ํ•„๋“œ ๋ช…

@Autowired
private DiscountPolicy rateDiscountPolicy
  • @Autowired๋Š” ๋จผ์ € ํƒ€์ž… ๋งค์นญ์„ ์‹œ๋„ํ•˜๊ณ , ์ด๋•Œ ์—ฌ๋Ÿฌ ๋นˆ์ด ์žˆ์œผ๋ฉด ํ•„๋“œ ์ด๋ฆ„, ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋นˆ ์ด๋ฆ„์„ ์ถ”๊ฐ€ ๋งค์นญํ•œ๋‹ค.

 

โœ… @Qualifier ์‚ฌ์šฉ

๋นˆ ๋“ฑ๋ก
@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {}
์ƒ์„ฑ์ž ์ž๋™ ์ฃผ์ž… ์˜ˆ์‹œ
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
    this.memberRepository = memberRepository;
    this.discountPolicy = discountPolicy;
}
  • ์ถ”๊ฐ€ ๊ตฌ๋ถ„์ž๋ฅผ ๋ถ™์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋นˆ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์•„๋‹˜
  • ๋งŒ์•ฝ @Qualifier("mainDiscountPolicy")๋ฅผ ๋ชป์ฐพ์œผ๋ฉด mainDiscountPolicy๋ผ๋Š” ์ด๋ฆ„์˜ ์Šคํ”„๋ง ๋นˆ์„ ์ถ”๊ฐ€๋กœ ์ฐพ์Œ

 

โœ… @Primary ์‚ฌ์šฉ

@Component
@Primary
public class RateDiscountPolicy implements DiscountPolicy {}

@Component
public class FixDiscountPolicy implements DiscountPolicy {}
  • ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์—ฌ๋Ÿฌ ๋นˆ์ด ๋งค์นญ๋˜๋ฉด @Primary๊ฐ€ ์šฐ์„ ๊ถŒ์„ ๊ฐ€์ง
  • ์‚ฌ์šฉ ์˜ˆ> ๋ฉ”์ธ DB์™€ ๋ณด์กฐ DB๊ฐ€ ์žˆ์„ ๋•Œ, ๋ฉ”์ธDB์— @Primary๋ฅผ ๊ฑธ์–ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋จ

 

โœ… @Primary vs @Qualifier

  • @Qualifier๋Š” ๋ชจ๋“  ์ฝ”๋“œ์— ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•ด์„œ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • ๋ฉ”์ธ์œผ๋กœ ์‚ฌ์šฉ๋  ๋นˆ์€ @Primary๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ๋ณธ์œผ๋กœ ์กฐํšŒํ•˜๊ณ  ์„œ๋ธŒ๋กœ ์‚ฌ์šฉ๋  ๋นˆ์€ @Qualifier๋ฅผ ์ง€์ •ํ•ด์„œ ํ•„์š”ํ• ๋•Œ๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ํš๋“ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํ”„๋ง์€ ์ž๋™๋ณด๋‹ค ์ˆ˜๋™์ด, ๋„“์€ ๋ฒ”์œ„์˜ ์„ ํƒ๊ถŒ๋ณด๋‹ค๋Š” ์ข์€ ์„ ํƒ๊ถŒ์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Œ
  • @Qualifier > @Primary

 

๐Ÿ“Œ ์กฐํšŒํ•  ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ

์˜๋„์ ์œผ๋กœ ํ•ด๋‹น ํƒ€์ž…์˜ ์Šคํ”„๋ง ๋นˆ์ด ๋‹ค ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์ฃผ์ž…๋ฐ›์„ ๊ฐ์ฒด๋ฅผ Map ๋˜๋Š” List๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ์ฃผ์ž…๋œ๋‹ค.

  • Map<String, Class> : map์˜ ํ‚ค์— ์Šคํ”„๋ง ๋นˆ์˜ ์ด๋ฆ„์„ ๋„ฃ์–ด์ฃผ๊ณ  ๊ทธ ๊ฐ’์œผ๋กœ ํ•ด๋‹น ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•œ ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ๋‹ด์•„์ค€๋‹ค.
  • List<Class> : ํ•ด๋‹น ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•œ ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ๋‹ด์•„์ค€๋‹ค.

 

๐Ÿ“Œ ์ž๋™, ์ˆ˜๋™์˜ ์˜ฌ๋ฐ”๋ฅธ ์‹ค๋ฌด ์šด์˜ ๊ธฐ๋Šฅ

  • ํŽธ๋ฆฌํ•œ ์ž๋™ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ
    • ์Šคํ”„๋ง์ด ๋‚˜์˜ค๊ณ  ์‹œ๊ฐ„์ด ๊ฐˆ ์ˆ˜๋ก ์ž๋™์„ ์„ ํ˜ธํ•˜๋Š” ์ถ”์„ธ์ด๋‹ค.
    • ์Šคํ”„๋ง์€ @Component๋ฟ๋งŒ ์•„๋‹ˆ๋ผ @Controller, @Service, @Repository์ฒ˜๋Ÿผ ๊ณ„์ธต์— ๋งž์ถ”์–ด ์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ž๋™์œผ๋กœ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.
    • ์ž๋™ ๋นˆ ๋“ฑ๋ก์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์ • ์ •๋ณด๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ด ์ค„์–ด๋“ค๊ณ , ์„ค์ • ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ OCP, DIP๋„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก์€?
    • ์—…๋ฌด ๋กœ์ง ๋นˆ : ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋“ฑ์ด ๋ชจ๋‘ ์—…๋ฌด ๋กœ์ง์ด๋ฉฐ ๋ณดํ†ต ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋จ
    • ๊ธฐ์ˆ  ์ง€์›๋นˆ : ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋‚˜ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ(AOP)๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ
    • ์—…๋ฌด ๋กœ์ง์˜ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ์‹œ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ฒ˜๋Ÿผ ์–ด๋А์ •๋„ ์œ ์‚ฌํ•œ ํŒจํ„ด์ด ์žˆ์œผ๋ฏ€๋กœ ์ž๋™ ๊ธฐ๋Šฅ์„ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • ๋ฐ˜๋ฉด ๊ธฐ์ˆ  ์ง€์› ๋กœ์ง์€ ์ˆ˜๊ฐ€ ๋งค์šฐ ์ ๊ณ , ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ์œ„์น˜๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋ฏ€๋กœ ๊ฐ€๊ธ‰์  ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก์„ ์‚ฌ์šฉํ•ด์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Œ
    • ๋˜ํ•œ ์ฝ”๋“œ๋งŒ ๋ณด๊ณ  ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋ ์ง€ ์•Œ๊ธฐ ํž˜๋“ค๋•Œ ํŒจํ‚ค์ง€๋กœ ๋ฌถ์–ด๋†“๊ฑฐ๋‚˜ ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก์„ ์‚ฌ์šฉํ•œ๋‹ค.

 


๊ฐ•์˜ ๋งํฌ

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (8) - ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ  (0) 2022.03.14
[Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (6) - ์ปดํฌ๋„ŒํŠธ ์Šค์บ”  (0) 2022.03.13
[Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (5) - ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ  (0) 2022.03.13
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (9) - ๋นˆ ์Šค์ฝ”ํ”„
  • [Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (8) - ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ
  • [Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (6) - ์ปดํฌ๋„ŒํŠธ ์Šค์บ”
  • [Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (5) - ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ
Sue
Sue
๊ฐœ๋ฐœ ๊ณต๋ถ€ ๋กœ๊ทธ
  • Sue
    Sue's devlog
    Sue
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Sue
[Spring] ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ (7) - ์˜์กด ๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”