-
Spring - 데이터베이스 연결 시 Config파일 파헤치기Spring/전자정부프레임워크 2024. 12. 23. 15:17반응형
1. 데이터베이스 등록 및 연동의 흐름
Spring에서는 다음의 흐름을 통해 데이터베이스와 연결하고 이를 통해 SQL을 실행합니다:
- 데이터 소스(DataSource) 설정: 데이터베이스 연결 정보(Driver, URL, 사용자명, 비밀번호 등)를 설정.
- SqlSessionFactory 생성: MyBatis에서 사용할 SQL 세션을 생성. 데이터 소스를 기반으로 동작.
- 트랜잭션 매니저(Transaction Manager) 등록: 데이터베이스 트랜잭션을 관리.
- 매퍼 스캔 및 매퍼 연결: MyBatis 매퍼 인터페이스와 XML 매퍼 파일을 등록하고 연결.
2. 상세 흐름과 어노테이션 설명
2.1 데이터 소스 설정
데이터 소스는 데이터베이스 연결을 위한 설정입니다. 일반적으로 XML 파일(context-datasource.xml)에 등록하고 Java Config에서 이를 참조합니다.
XML 파일 예시
<bean id="mariaDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.mariadb.jdbc.Driver" /> <property name="url" value="jdbc:mariadb://localhost:3307/{userdatabase}" /> <property name="username" value="{username}" /> <property name="password" value="{userpassword" /> </bean>
- id: mariaDataSource는 데이터 소스를 식별하는 고유 이름입니다.
- driverClassName: 데이터베이스의 JDBC 드라이버 클래스 이름입니다.
- url: 데이터베이스의 URL 경로입니다.
- username / password: 데이터베이스 접속 정보입니다.
- destroy-method: 빈이 소멸될 때 연결을 종료하는 메서드입니다(close).
2.2 Config 파일: 데이터 소스 참조
Java Config에서 위 XML 파일의 데이터를 로드하고 DataSource를 사용하여 SqlSessionFactory와 트랜잭션 매니저를 등록합니다. 여기서 sqlSessionFactoryRef 의 경우에는 basPackages 즉 매퍼 패키지에 등록된 파일을 기존에 datasource를 xml파일에 등록한 내용과 연결시켜주는 중간 역할을 한다. 그렇기 때문에 @Qualifier에 datasource에서 등록하였던 bean id와 동일하게 해줘야한다.
MariaConfig 파일
@Configuration @ImportResource("classpath:/{path}/context-datasource.xml") // XML 파일 로드 @MapperScan( basePackages = "{path}", // 매퍼 패키지 스캔 sqlSessionFactoryRef = "mariaSessionFactory" // SqlSessionFactory 연결 ) public class MariaConfig extends WebConfig { @Bean(name = "mariaSessionFactory") public SqlSessionFactory mariaSessionFactory(@Qualifier("mariaDataSource") DataSource mariaDataSource) throws Exception { System.out.println("MariaConfig 설정"); return createSqlSessionFactory(mariaDataSource, "classpath:/{path}/*.xml"); } @Bean(name = "mariaTransactionManager") public PlatformTransactionManager mariaTransactionManager(@Qualifier("mariaDataSource") DataSource mariaDataSource) { return createTransactionManager(mariaDataSource); } }
어노테이션 설명
- @Configuration:
- Spring에서 이 클래스를 설정 클래스(Bean Definition Source)로 인식합니다.
- Spring Container가 이 클래스를 로드하여 빈을 생성합니다.
- @ImportResource:
- XML 파일(context-datasource.xml)을 로드합니다.
- XML에서 정의한 DataSource 빈을 Spring Context에 등록합니다.
- @MapperScan:
- 특정 패키지에 있는 MyBatis 매퍼 인터페이스를 자동으로 스캔합니다.
- sqlSessionFactoryRef를 통해 스캔된 매퍼가 사용할 SqlSessionFactory를 지정합니다.
- @Bean:
- Spring Context에 직접 빈을 등록합니다.
- 등록된 빈은 다른 컴포넌트에서 의존성 주입(Dependency Injection)으로 사용됩니다.
- @Qualifier:
- 동일한 타입의 빈이 여러 개 있을 때, 특정 빈(mariaDataSource)을 명시적으로 선택합니다.
2.3 공통 설정: WebConfig
코드
@Configuration public class WebConfig { public SqlSessionFactory createSqlSessionFactory(DataSource dataSource, String mapperLocation) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); // 데이터 소스 연결 sqlSessionFactoryBean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources(mapperLocation) // 매퍼 XML 파일 위치 ); return sqlSessionFactoryBean.getObject(); } public PlatformTransactionManager createTransactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
설명
- SqlSessionFactory 생성
- MyBatis에서 SQL 실행을 관리하는 주요 객체입니다.
- 데이터 소스와 매퍼 XML 파일을 연결하여 MyBatis 매퍼가 사용할 수 있도록 설정합니다.
- PlatformTransactionManager 생성
- Spring에서 트랜잭션을 관리하는 객체입니다.
- @Transactional 어노테이션을 통해 트랜잭션 관리가 가능합니다.
2.4 매퍼 스캔과 MyBatis 매퍼
MyBatis 매퍼 인터페이스
@Mapper public interface MariaMapper { List<String> getAllUsers(); // 추상 메서드 }
- @Mapper:
- MyBatis 매퍼 인터페이스로 등록합니다.
- @MapperScan에 의해 자동으로 스캔됩니다.
매퍼 XML
<mapper namespace="{mapperpath}"> <select id="getAllUsers" resultType="string"> SELECT name FROM users; </select> </mapper>
- namespace: 매퍼 인터페이스와 매퍼 XML 파일을 연결하는 고유 이름. 인터페이스의 FQCN(패키지명 포함된 클래스 이름)과 일치해야 합니다.
- id: 매퍼 인터페이스의 메서드 이름과 일치해야 합니다.
3. 전체 동작 과정
- XML 파일 로드
- Spring은 @ImportResource를 통해 context-datasource.xml에서 데이터 소스를 로드합니다.
- 데이터 소스는 mariaDataSource와 같은 고유 ID로 등록됩니다.
- Config 클래스 처리
- Spring은 @Configuration 클래스를 스캔하여 필요한 SqlSessionFactory와 트랜잭션 매니저를 생성합니다.
- @Qualifier를 통해 XML 파일에서 등록한 특정 데이터 소스를 주입받습니다.
- 매퍼 스캔
- @MapperScan이 지정된 패키지에서 MyBatis 매퍼 인터페이스를 스캔합니다.
- 매퍼 인터페이스는 SqlSessionFactory를 사용하여 데이터베이스와 통신합니다.
- MyBatis 매퍼 실행
- 매퍼 인터페이스에서 정의한 메서드가 호출되면 매퍼 XML에 정의된 SQL이 실행됩니다.
4. 요약
- context-datasource.xml: 데이터 소스를 정의하고 Java Config에서 참조합니다.
- Config 파일:
- SqlSessionFactory와 트랜잭션 매니저를 생성하여 Spring Context에 빈으로 등록합니다.
- @MapperScan:
- 매퍼 인터페이스를 스캔하여 SqlSessionFactory에 등록합니다.
- 매퍼 인터페이스와 XML:
- 매퍼 인터페이스의 메서드는 매퍼 XML의 SQL 쿼리와 연결됩니다.
반응형'Spring > 전자정부프레임워크' 카테고리의 다른 글
Spring - Oracle 스키마별로 분리하여 연결하기 (0) 2024.12.27 Spring - Oracle 데이터베이스 연결 (0) 2024.12.27 Spring - 다중 데이터베이스 설정하기 (MySQL 스키마별 분리) (0) 2024.12.23 Spring - 다중 DB 연결하기 (0) 2024.12.23 Spring - Config파일을 통하여 DB연결 및 흐름도 (0) 2024.12.23