์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[์ธํ”„๋Ÿฐ/SPRING] ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„โ˜…

merryna 2022. 8. 27. 23:31
๋ฐ˜์‘ํ˜•

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

 

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

: ์Šคํ”„๋ง ์‹คํ–‰ ์‹œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ํ†ต์ด ์ƒ๊ธฐ๋Š”๋ฐ @Controller๊ฐ€ ์žˆ์œผ๋ฉด ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด ์ƒ์„ฑํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด๋‘๊ณ  ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•จ. (์Šคํ”„๋ง Bean ์ƒ์„ฑ)

@Controller
public class MemberController {

    private MemberService memberService;

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

๐Ÿ’ฅ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ์ฒด ์—ฌ๋Ÿฌ๋ฒˆ ์ƒ์„ฑํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค.

 

private final MemberService memberService = new MemberService();

 

๐ŸŽˆ๐ŸŽˆDI (Dependency Injection), ์˜์กด์„ฑ ์ฃผ์ž… : ๊ฐ์ฒด ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ

 ์ƒ์„ฑ์ž์— @Autowired ๊ฐ€ ์žˆ์œผ๋ฉด ์Šคํ”„๋ง์ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฐพ์•„์„œ ๋„ฃ์–ด์ค€๋‹ค.

(์ด์ „ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฃผ์ž…ํ–ˆ๊ณ , ์—ฌ๊ธฐ์„œ๋Š” @Autowired์— ์˜ํ•ด ์Šคํ”„๋ง์ด ์ฃผ์ž…ํ•ด์ค€๋‹ค.)

 

>> ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์ƒ์„ฑ > ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ > ์ƒ์„ฑ์ž์— @Autowired๋ผ๊ณ  ๋˜์–ด์žˆ์œผ๋ฉด ์Šคํ”„๋ง์ด ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๋ฉค๋ฒ„์„œ๋น„์Šค์— ์—ฐ๊ฒฐ์‹œ์ผœ์คŒ

 

 


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

1. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”(์•„๋ž˜์˜ ์–ด๋…ธํ…Œ์ด์…˜์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ทผ๋ณธ)๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

์‹คํ–‰ ์‹œ, @Component์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ์œผ๋ฉด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค

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

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

ex) OrderService๊ฐ€ memberRepository๋ฅผ @Autowired ํ–ˆ์„ ๊ฒฝ์šฐ, memberService์™€ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„ฃ์–ด์คŒ. ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ!

 

 

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

@Configuration
public class SpringConfig {

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

    @Bean
    public MemberRepository memberRepository(){
        //new ํ‚ค์›Œ๋“œ ๋’ค์— ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค
        return new MemoryMemberRepository();
    }
}

@Bean๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก์„ ํ•˜๊ณ  @Autowired ๋Œ€์‹  ๋ฆฌํ„ด ๊ฐ’์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—ฐ๊ฒฐ

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

์ฐธ๊ณ : DI์—๋Š” ํ•„๋“œ ์ฃผ์ž…, setter ์ฃผ์ž…, ์ƒ์„ฑ์ž ์ฃผ์ž… ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์˜์กด๊ด€๊ณ„๊ฐ€ ์‹คํ–‰์ค‘์—๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๊ถŒ์žฅํ•œ๋‹ค.

//ํ•„๋“œ ์ฃผ์ž… - ์ฃผ์˜! ์Šคํ”„๋ง ์‹คํ–‰ํ•  ๋•Œ๋งŒ ๋„ฃ์–ด์ฃผ๊ณ  ์ค‘๊ฐ„์— ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์—†๋‹ค..! ๊ถŒ์žฅX
@Autowired
private MemberService memberService;

//์ƒ์„ฑ์ž ์ฃผ์ž… - ์กฐ๋ฆฝ ์‹œ์ ์— ์ƒ์„ฑ์ž๋กœ ์กฐ๋ฆฝํ•ด๋‘๊ณ  ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋„๋ก ๋ง‰์•„๋ฒ„๋ฆฌ๊ธฐ
private final MemberService memberService;

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

//setter ์ฃผ์ž… - publicํ•˜๊ฒŒ ๋…ธ์ถœ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ. ํ•œ๋ฒˆ ์„ธํŒ…์ด ๋˜๋ฉด ๋ฐ”๊ฟ€ ์ผ์ด ์—†์œผ๋‹ˆ ์œ„ํ—˜.
// memeberService.setMemberService(); ์ฝ”๋“œ ์ ์–ด์•ผํ•จ 
private MemberService memberService;
    
@Autowired
public void setMemberService(MemberService memberService) {
    this.memberService = memberService;
}

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

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

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

 

 


๋ฉด์ ‘์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ๋ฐ›์€ ์ ์ด ์žˆ๋‹ค. ํ•œ๋ฒˆ๋„ ํƒ€์ธ์—๊ฒŒ ์„ค๋ช…ํ•ด๋ณธ ์ ์ด ์—†์–ด์„œ ๋‹นํ™ฉํ•˜๋ฉฐ Controller, Service์— ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ฒŒ ๋„์™€์ค€๋‹ค๊ณ  ๋‹ต๋ณ€ํ–ˆ์—ˆ๋‹ค. Spring Bean๋ฅผ ๋ง๋ถ™์—ฌ์„œ ๋งํ•˜๊ธด ํ–ˆ๋Š”๋ฐ ์–ผ์ถ” ๋งž๊ธด ํ–ˆ๋‹ค..

 

๋‚ด๊ฐ€ ์•„๋Š”๊ฑด ๋”ฑ ์—ฌ๊ธฐ๊นŒ์ง€๊ณ (@Autowired๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฃผ์ž…์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ๊นŒ์ง€?) ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์›๋ฆฌ๋ฅผ ์•Œ๊ฒŒ ๋˜์–ด ๋ต~ํ–ˆ๋‹ค. ์Šคํ”„๋ง์„ ๋ฐฐ์šธ ๋•Œ ์Šคํ”„๋ง ๋นˆ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์ถ”์ƒ์ ์ด๊ณ  ์™€๋‹ฟ์ง€๊ฐ€ ์•Š์•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ตฌ๊ธ€๋งํ•  ๋•Œ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์“ฐ๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ง์ ‘ Config๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘˜ ๋‹ค ์žˆ์œผ๋‹ˆ ์ œ๋Œ€๋กœ ์ดํ•ด๋ฅผ ๋ชปํ•˜๊ณ  ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๊ธ‰๊ธ‰ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. (๋ถ„๋ช…,,์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์žฅ์ ์ด ์ง์ ‘ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค์ •์•ˆํ•ด๋„ ๋œ๋‹ค๋Š”๊ฑฐ์˜€๋Š”๋ฐ,,๋ญ์ง€? ํ˜ผ๋ž€์— ๋น ์กŒ์—ˆ๋‹ค.) ํ›„ํ›„ ์Šคํ”„๋ง์„ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฐ์ฒด ์ƒ์„ฑํ•  ๋•Œ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๋Š”๊ตฌ๋‚˜! 

๊ฐ•์˜ ๋“ค์œผ๋ฉด์„œ ์ƒ์„ฑ์ž ์ฃผ์ž…์œผ๋กœ ์‹ค์Šต์„ ํ•˜๋‹ค๋ณด๋‹ˆ ๋‚ด๊ฐ€ ์ด๋•Œ๊นŒ์ง€ ํ•œ๊ฑด ๋ญ์ง€..?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋Š”๋ฐ DI์— ๋Œ€ํ•œ ์ข…๋ฅ˜๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ทธ์ € ๊ฐ์‚ฌํ–ˆ๋‹ค. ๋‚˜๋Š” ๊ณ„์† ํ•„๋“œ ์ฃผ์ž…์„ ์‚ฌ์šฉํ–ˆ๊ตฌ๋‚˜(์ œ์ผ ์•ˆ์ข‹์€๋“ฏ;;) ์ด์ œ๋ถ€ํ„ฐ ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ  ์กฐ๋ฆฝ ์‹œ ์œ ์šฉํ•œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์จ์•ผ๊ฒ ๋‹ค. 

 

 

์•„๋ž˜๋Š” ์ž‘๋…„์— DB ๊ด€๋ จ ํžˆ์นด๋ฆฌCP ์„ค์ •์„ ํ•  ๋•Œ ์“ด Config ํŒŒ์ผ,,์ด๋• @Bean์ด ๋ฌด์Šจ ์šฉ๋„์ธ์ง€ ์ž˜๋ชฐ๋ž๋‹ค,,,

 

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@PropertySource("classpath:/application.properties") //application.properties๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ •ํ•ด ์ค€๋‹ค.
public class DatabaseConfiguration {
	
	@Autowired
	private ApplicationContext applicationContext;		//bean ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ(beanfactory๋ฅผ ์ƒ์†๋ฐ›์Œ.)

    //application.properties์— ์„ค์ •ํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค.
	//@ConfigurationProperties ์–ด๋…ธํ…Œ์ด์…˜์— prefix๊ฐ€ spring.datasource.hikari๋กœ ์„ค์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 
	//spring.datasource.hikari๋กœ ์‹œ์ž‘ํ•˜๋Š” ์„ค์ •์„ ์ด์šฉํ•ด์„œ ํžˆ์นด๋ฆฌCP์˜ ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.
    @Bean
    @ConfigurationProperties(prefix="spring.datasource.hikari")		//@ConfigurationProperties : *.properties, *.yml ํŒŒ์ผ์— ์žˆ๋Š” property๋ฅผ ์ž๋ฐ” ํด๋ž˜์Šค์— ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜
    public HikariConfig hikariConfig() {
        return new HikariConfig();
    }

    //์•ž์—์„œ ๋งŒ๋“  ํžˆ์นด๋ฆฌCP์˜ ์„ค์ •ํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
    //์—ฌ๊ธฐ์„œ๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค.
    @Bean
    public DataSource dataSource() throws Exception {
        DataSource dataSource = new HikariDataSource(hikariConfig());
        System.out.println(dataSource.toString());
        return dataSource;
    }
    
    @Bean
    @ConfigurationProperties(prefix = "mybatis.configuration")  //@ConfigurationProperties์„ ํ†ตํ•ด์„œ application.properties์—์„œ prefix๊ฐ€ mybatis.configuration์ธ ์„ค์ •์„ ๊ฐ€์ ธ์˜จ๋‹ค.
    public org.apache.ibatis.session.Configuration mybatisConfig(){
        return new org.apache.ibatis.session.Configuration();   //๊ฐ€์ ธ์˜จ ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ์„ค์ •์„ ์ž๋ฐ” ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    }
    
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {	//SqlSessionFactory : mybatis์™€ mysql ์„œ๋ฒ„๋ฅผ ์—ฐ๋™์‹œ์ผœ์คŒ, sqlsession ์ƒ์„ฑ
    	//sqlsession : ์„ธ์…˜์„ ํ•œ๋ฒˆ ์ƒ์„ฑํ•˜๋ฉด ๋งคํ•‘๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜์„ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค. ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์„ธ์…˜์„ ๋‹ซ๋Š”๋‹ค.
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/*.xml"));	//** : ํ•˜์œ„ํด๋”์ „์ฒด
        sqlSessionFactoryBean.setConfiguration(mybatisConfig());	//ํ•ด๋‹น ์„ค์ •์„ sqlSessionFactory์— ์„ค์ •ํ•ด์ค€๋‹ค.
        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {		//SqlSessionTemplate์€ SqlSession์„ ๊ตฌํ˜„ํ•˜๊ณ  ์ฝ”๋“œ์—์„œ SqlSession๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
}

ํ•œ ๊ฐ•์˜๋งˆ๋‹ค ์‹œ๊ฐ„์€ ์งง์€๋ฐ ๋ฐ˜๋ณตํ•ด์„œ ๋“ฃ๋‹ค๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ๊ฝค ๊ฑธ๋ฆฐ๋‹ค. ๋‹ค ๋“ค์—ˆ์„ ๋• ๋ ˆ๋ฒจ์—…๋˜์–ด ์žˆ๊ธฐ๋ฅผ!!

 

์ถœ์ฒ˜ : ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ 

๋ฐ˜์‘ํ˜•