Back-End/Spring

[Spring] pom.xml / web.xml / servlet-context.xml / root-context.xml

zsunny 2023. 4. 30. 11:05

📚 xml 파일

xml 파일은 모두 Bean(객체)를 정의한다.

📕 pom.xml

java, spring 버전 관리

  • default값을 원하는 버전으로 변경해주면 된다.
  • <properties> <java-version>1.8</java-version> <org.springframework-version>4.2.4.RELEASE</org.springframework-version> <org.aspectj-version>1.8.8</org.aspectj-version> <org.slf4j-version>1.7.14</org.slf4j-version> </properties>

필요한 Library 설치

  • maven project에 필요한 Library 들을 MVNrepository 에서 검색해 태그 안에 설치해주면 된다.
  • <dependencies> <!-- AspectJ :: AOP --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${org.aspectj-version}</version> </dependency> <!-- JSP --> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>${jsp-version}</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl-version}</version> </dependency> </dependencies>

📗 web.xml

web.xml은 Servlet 배포 기술로 Tomcat(WAS)에 Dispatcher Servlet 즉, Front Controller에 대한 정보를 제공해주는 역할을 한다.
기본적으로 Root WebApplicationContext와 Servlet WebApplicationContext(DispatcherServlet)에 대한 설정을 포함한다.
Root/Servlet WebApplicationContext의 이름과 경로에 대한 정보를 초함하고 있으며 추가적으로 POST 방식의 한글 처리(encoding)에 대한 filter를 추가할 수 있다.

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

📘 servlet-context.xml

웹과 관련된 모든 객체를 정의한다.

default

  • Handler Mapping (Controller선택)
  • // resources 폴더에는 img/css 같은 폴더/파일이 들어 있으므로 Front Controller에게 해당 경로는 제외하고 Mapping을 시도하라고 알려줘야 함 <resources mapping="/resources/**" location="/resources/" />
  • ViewResolver
  • <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean>

추가 작성

  • MultipartResolver
  • <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
  • Annotation(@) scan
  • // base-package에 설정된 package내의 class 중 @controller (annotation)이 적용된 class는 자동 스캔의 대상이 됨 <context:component-scan base-package="com.test.board.controller" />

📙 root-context.xml

웹과 관련되지 않은 비웹 관련 객체를 정의한다.(Service, DAO(Repository), ..)

  • Annotation(@) scan
  • // base-package에 설정된 package내의 class 중 @Service, @Repository, @Component (annotation)이 적용된 class는 자동 스캔의 대상이 됨 <context:component-scan base-package="com.ssafy.board.model" />
  • 기존 DAO에서 Connection 부분을 대체하는 객체
  • <bean id="conn" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/DB명?characterEncoding=UTF_8&amp;serverTimezone=UTC" /> <property name="username" value="설정한username" /> <property name="password" value="설정한password" /> </bean>
  • Mybatis의 Config.xml 파일을 대체하는 객체
  • <bean id="myBatis" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="conn" /> <property name="typeAliasesPackage" value="com.test.board.model.dto" /> <!-- Mapper에서 쓰는 짧은 클래스 명 --> <property name="mapperLocations" value="classpath:/**/dao/*Mapper.xml" /> <!-- SQL 명령어가 들어있는 위치 --> </bean>
  • BoardMapper Interface를 DAO 객체로 생성해주는 proxy관리자
  • // @Mapper: 클래스가 아니라 인터페이스에 붙이는 어노테이션, 생략해도 실행 됨 <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test.board.model.dao" /> </bean>
  • AOP를 이용해 트랜잭션(ACID)을 적용하기 위한 tx 네임스페이스
    // AOP에서 pointcut 잡고 before, after 등등 작업하던거 그냥 애노테이션 처리 가능하도록 해주는 프록시  
    // Service 또는 DAO에서 생성 및 트랜잭션이 필요한 곳에 @Transactional (annotation)을 추가  
    <tx:annotation-driven transaction-manager="transactionManager"/>  
  • // insert, update, delete같은 것들 두개 이상 묶어서 처리할 때 사용 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="conn"></property> </bean>

'Back-End > Spring' 카테고리의 다른 글

[Spring] 스프링 특징 IOC, AOP, DI 이란?  (0) 2023.12.14
[Spring] Spring MVC  (0) 2023.04.30
[Spring] AOP (Aspect Oriented Programming)  (0) 2023.04.28
[Spring] DI (Dependency Injection)  (0) 2023.04.26
[Spring] Spring Framework란?  (0) 2023.04.25