DatabaseConfig
DB와 직접 소통하기 위해서는 DAO가 필요하다. DAO와 DB를 중개해주는 것으로 여기서는 MyBatis를 사용한다.
스프링 프레임워크에서는 application-context.xml
을 통해 bean
으로 데이터베이스 관련 속성을 관리해주었다. 그러나 스프링 부트에서는 Java 클래스 파일로 관리하며 다음과 같이 작성하여 사용한다.
MySQL 사용 시
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@PropertySource("classpath:/application.properties")
public class DatabaseConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource() {
DataSource dataSource = new HikariDataSource(hikariConfig());
System.out.println("dataSource: " + dataSource);
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
System.out.println("DatabaseConfig sqlSessionFactory");
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
Resource[] arrResource = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml");
sqlSessionFactoryBean.setMapperLocations(arrResource);
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return (SqlSessionFactory) sqlSessionFactoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
Oracle 사용 시
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
public class DatabaseConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
System.out.println("DatabaseConfig sqlSessionFactory");
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
Resource[] arrResource = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml");
sqlSessionFactoryBean.setMapperLocations(arrResource);
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return (SqlSessionFactory) sqlSessionFactoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
설정 파일이기 때문에 Configuration
어노테이션을 붙여 설정 파일임을 알려주고 자동호출되게 한다.
내부에 선언된 함수는 스프링 프레임워크에서 <Beans />
내부에 있는 <Bean />
과 같다. 그러므로 Bean
어노테이션을 붙인다.
접근 권한 관리/부여
WebConfig
작성
페이지 접근 권한 부여를 위해 WebConfig
를 클래스 파일로 작성한다.
여기에는 addCorsMapping
함수를 오버라이드한다.
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// WebMvcConfigurer.super.addCorsMappings(registry);
// registry.addMapping("/**").allowedOrigins("http://localhost:8090"); // localhost:8090에서만 접속 가능
registry.addMapping("/**").allowedOrigins("*"); // 어디에서든 접속 가능
}
}
마찬가지로 설정 파일이기 때문에 Configuration
을 붙여주었다.
'Study > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] 게시판 기능 구현하기(2) (0) | 2022.02.24 |
---|---|
[Spring Boot] 게시판 기능 구현하기(1) (0) | 2022.02.23 |
[Spring Boot] AJAX를 사용한 비동기 통신 (0) | 2022.02.22 |
[Spring Boot] DTO, DAO, Service, Controller (0) | 2022.02.21 |
[Spring Boot] 프로젝트 구조 및 초기 설정 (0) | 2022.02.21 |