JAVA/대덕인재대학교-최프

환경설정 - root.context.xml : 스프링 설정 파일

lavender1122 2024. 9. 9. 00:43

root.context.xml

  • 스프링 설정 파일
  • 서블릿과 필터가 공유할 수 있는 루트 스프링 컨테이너 설정으로 공통 bean(Service, Repository(DAO),DB,Log 등)을 설정합니다.
  • 공통 bean을 설정하는 곳으로 주로 view 지원을 제외한 bean을 설정합니다.

< bean id ="dataSource" >

<bean id="dataSource"
    class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" 
        value="oracle.jdbc.driver.OracleDriver"></property>
    <property name="url"
        value="jdbc:oracle:thin:@IP주소:1521:xe"></property>
    <property name="username" value="username"></property>
    <property name="password" value="password"></property>
</bean>
  • 데이터베이스 연결을 위한 DataSource 를 설정합니다.
  • 설정에서 사용된 클래스는 org.apache.commons.dbcp2.BasicDataSource로 Apache Commons DBCP (Database Connection Pooling) 라이브러리를 사용하여 데이터베이스 연결 풀을 관리 합니다.

< bean id ="sqlSessionFactory" >

  • 데이터베이스와 연결을 맺고 끊어질 때까지의 라이프 사이클을 관리 해주는 sqlSession 객체를 생성합니다.
  • MyBatis의 SqlSessionFactory를 설정합니다.
  • SqlSessionFactory는 MyBatis에서 데이터 베이스와의 세션을 생성하는 데 사용됩니다.
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="mapperLocations"
    value="classpath:/sqlmap/**/*_SQL.xml" />
    <property name="configLocation"
     value="/WEB-INF/mybatisAlias/mybatisAlias.xml" />
</bean>
  • <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> :
    • sqlSessionFactory라는 이름의 빈을 정의합니다.
    • class="org.mybatis.spring.SqlSessionFactoryBean"는 bean의 클래스 타입을 지정합니다. SqlSessionFactoryBean은 MyBatis의 SqlSessionFactoryBean를 생성하는 Spring Bean 입니다.
  • <property name="dataSource" ref="dataSource"></property> 
    • name="dataSource"는 bean에서 사용할 DataSource를 지정합니다.
    •  ref="dataSource"는 dataSource라는 이름의 빈을 참조합니다. 이 DataSource 빈은 앞서 정의한 데이터베이스 연결 정보를 포함합니다.
  • <property name="mapperLocations" value="classpath:/sqlmap/**/*_SQL.xml" />
    • name="mapperLocations"는 MyBatis 매퍼 파일의 위치를 설정합니다.
    • value="classpath:/sqlmap/**/*_SQL.xml"는 클래스패스 내의 sqlmap폴더에서 _SQL.xml로 끝나는 모든 파일을 매퍼로 사용할 것임을 지정합니다. 
    • <property name="configLocation" value="/WEB-INF/mybatisAlias/mybatisAlias.xml" />
      • name="configLocation"는 MyBatis 설정 파일의 위치를 지정합니다.
      •  value="/WEB-INF/mybatisAlias/mybatisAlias.xml" 는 mybatisAlias.xml 설정 파일이 /WEB-INF/mybatisAlias/ 경로에 위치한다고 지정합니다.

< bean id ="sqlSessionTemplate" >

<bean id="sqlSessionTemplate"
class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
  • <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
    • class="org.mybatis.spring.SqlSessionTemplate"는 bean의 클래스 타입을 지정합니다.
    • SqlSessionTemplate은 MyBatis의 SqlSession을 구현하며, MyBatis의 데이터베이스 세션을 처리하는 데 사용됩니다.
  • <constructor-arg index="0" ref="sqlSessionFactory" />
    • constructor-arg는 빈의 생성자 인자를 설정합니다.
    • index="0" 는 첫 번쨰 생성자 인자를 설정하는 것을 의미합니다.
    • ref="sqlSessionFactory"는 sqlSessionFactory라는 이름의 빈을 참조합니다.
    • 즉, SqlSessionTemplate의 생성자에 sqlSessionFactory 빈을 주입하여 SqlSessionTemplate이 SqlSessionFactory를 사용하돌고 합니다.

< bean id ="transactionManager" >

  • 트랜잭션 관리자의 빈을 정의 합니다.
<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<tx:annotation-driven/>

  • 어노테이션 기반의 트랜잭션 제어를 활성화합니다.
  • @Transactional 어노테이션을 사용하여 트랜잭션을 자동으로 처리할 수 있게 합니다.
  • 이 설정을 통해 @Transactional 어노테이션이 붙은 메서드가 트랜잭션을 시작하고 커밋하거나 롤백할 수 있도록 Spring이 자동으로 관리합니다.
<tx:annotation-driven/>

Mapper 인터페이스 설정

  • 개발자가 직접 DAO를 설정하지 않아도 자동으로 Mapper 인터페이스를 활용하는 객체를 생성하게 됩니다.
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="kr.or.ddit.mapper" />
</bean>
  • MapperScannerConfigurer는 MyBatis의 Mapper 인터페이스를 자동으로 스캔하여 MyBatis의 SQL세션에 등록하는 역할을 합니다. 이를 통해 매퍼 xml파일을 별도로 설정하지 않고, 인터페이스 기반으로 매퍼를 사용 할 수 있습니다.
  • basePackage 속성은 MyBatis가 매퍼 인터페이스를 스캔할 패키지를 지정합니다.
  • 이 경우, kr.or.ddit.mapper 패키지 아래에 있는 모든 Mapper 인터페이스를 스캔하여 MyBatis의 SQL 세션에 등록합니다.

스프링 AOP 활성화

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  • AspectJ 기반 AOP를 활성화합니다.
  • 스프링 컨테이너가 @Aspect 어노테이션이 붙은 클래스를 인식하고, 이를 기반으로 AOP 기능을 적용합니다.
  • 이 설정을 통해 @Aspect로 정의된 클래스를 자동으로 프록시로 만들어서, 횡단 관심사(예: 로깅, 트랜잭션 관리 등)를 애플리케이션의 특정 비즈니스 로직에 적용할 수 있습니다.

컴포넌트 스캔

<context:component-scan base-package="kr.or.ddit.aop"></context:component-scan>
  • kr.or.ddit.aop 패키지를 스캔하여 해당 패키지 내의 컴포넌트(예: @Component, @Service, @Repository,@Controller 등)들을 스프링 컨테이너에 등록합니다.
  • 스프링은 이 패키지 내의 클래스들을 자동으로 발견하고 빈으로 등록하여 의존성 주입을 가능하게 합니다.