개발

Spring Boot 프로젝트 설정 관련

DHBAEK 2023. 4. 21. 00:47

금일 샘플 소스 작성으로 인해 스프링 프로젝트를 새로 만들었다.

 

이때 활용한 설정 관련 내용을 공유 하도록 하겠다.

 

신설 프로젝트를 개요

- Spring Boot

- JDBC 커넥터 활용 DB연동

- DB : postgresql

- HikariCP 활용

 

* HikariCP는 히카리 커넥션 풀로 디비와 연결할때마다 커넥션을 새로 만드는게 아닌 구현되어있는 커넥션을 사용 및 반환하여 서버 부하를 줄이기 위해 사용한다.

 

관련 gradle dependency 목록

 

  • org.springframework.boot:spring-boot-starter-web: 스프링 부트 웹 애플리케이션 개발에 필요한 라이브러리들을 포함하고 있습니다.
  • org.springframework.boot:spring-boot-starter-test: 스프링 부트 테스트에 필요한 라이브러리들을 포함하고 있습니다.
  • org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0: MyBatis를 스프링 부트 애플리케이션에서 사용할 수 있도록 지원하는 라이브러리입니다.
  • org.springframework.boot:spring-boot-starter-data-jdbc: 스프링 부트 JDBC를 사용할 수 있도록 지원하는 라이브러리입니다.
  • javax.xml.bind:jaxb-api:2.3.1: JAXB API를 사용하여 XML 데이터를 바인딩하는 데 필요한 라이브러리입니다.
  • org.mybatis:mybatis:3.5.8: MyBatis 프레임워크의 코어 라이브러리입니다.
  • org.springframework:spring-tx:5.3.9: 스프링 트랜잭션 모듈에 대한 라이브러리입니다.
  • org.springframework:spring-jdbc:5.3.9: 스프링 JDBC 모듈에 대한 라이브러리입니다.
  • com.zaxxer:HikariCP:4.0.3: HikariCP 커넥션 풀 라이브러리입니다.
  • org.projectlombok:lombok:1.18.20: 자바 코드를 간결하게 작성할 수 있도록 지원하는 라이브러리입니다.
  • org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16: JDBC 드라이버를 사용하여 SQL 쿼리 및 파라미터 로그를 출력할 수 있는 라이브러리입니다.
  • com.sun.xml.bind:jaxb-core:2.3.0.1: JAXB 구현체의 코어 라이브러리입니다.
  • com.sun.xml.bind:jaxb-impl:2.3.2: JAXB 구현체의 구현 라이브러리입니다.
  • org.postgresql:postgresql: PostgreSQL JDBC 드라이버입니다.

상기와 같은 라이브러리들을 활용하였다.

 

마지막으로 피곤하니 myBatis 설정 소스를 주고 마무리 하겠다.

 

package com.example.demo.config;
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import com.zaxxer.hikari.HikariDataSource;

import lombok.extern.slf4j.Slf4j;

//로그 남기기위한 어노테이션
@Slf4j
//해당 패키지에 있는 메퍼를 스캔하여 등록
@MapperScan(basePackages = {"com.**.test"})
//이 소스가 설정임을 알림
@Configuration
//해당 패키지에 있는 것들 중 각 어노테이션에 맞는 것들을 bean등록
@ComponentScan(basePackages = {"com.**.test"},
				includeFilters = {
						@Filter(type = FilterType.ANNOTATION, value = Component.class)
						, @Filter(type = FilterType.ANNOTATION, value = Service.class)
						, @Filter(type = FilterType.ANNOTATION, value = Repository.class)
              },
              excludeFilters = {
            		  @Filter(type = FilterType.ANNOTATION, value = Controller.class)
              })
public class MybatisConfig {
	//bean 등록
	@Bean(name="datasourceUser")
	public DataSource dataSource() {
    	//히카리 CP 관련 bean 데이터 저장
		HikariDataSource dataSource = new HikariDataSource();
		dataSource.setDriverClassName("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
		dataSource.setJdbcUrl("jdbc:log4jdbc:postgresql://***.***.***.***:****/***?charSet=UTF-8&prepareThreshold=1");
		dataSource.setUsername("*******");
		dataSource.setPassword("******");
		dataSource.setMaximumPoolSize(10);
		dataSource.setMinimumIdle(5);
		
		return dataSource;
	}
	
    //DB트랜잭션 관리 빈등록
	@Bean
    public DataSourceTransactionManager transactionManager() {
		log.info(" ### RootConfig transactionManager ### ");
        return new DataSourceTransactionManager(dataSource());
    }
	
    //mtBatis와 spring 연동 빈 등록
	@Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
		log.info(" ### RootConfig sqlSessionFactory ### ");
		SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
		
		factory.setDataSource(dataSource());
        //메퍼 파일 위치
		factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
		//mybatis 설정 파일 위치
        factory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
		return factory.getObject();
    }

}