포트폴리오

스프링 레거시 프로젝트 초기설정(gradle)

incodingone 2024. 5. 20. 17:20

스프링 레거시 프로젝트를 시작하기로 정하고 프로젝트의 초기 설정을 해봤다.

아직 책으로 익힌 것에서 크게 벗어나진 못했지만 한번 초기 설정을 나만의 스타일로 규격화할 필요가 있지 않을까 싶어 작성해 본다.

(새로 알게 되는 내용이나 틀린부분 계속 수정 예정)

우선, 인텔리제이를 사용하여 프로젝트를 생성하였다.


  1. 프로젝트 생성

  2. 라이브러리 추가

    라이브러리 목록 펼치기
    1. spring-core
    2. spring-context
    3. spring-test
    4. spring-webmvc(스프링 프레임워크의 웹 관련 처리 라이브러리)
    5. spring-jdbc(Mybatis 이용에 사용)
    6. spring-tx(Mybatis 이용에 사용)
    7. Lombok
    8. Log4j2
    9. jstl
    10. HikariCP
    11. mybatis
    12. mybatis-spring
  3. log4j2.xml 설정 및 추가 - 링크 추가 해야 함

  1. root-context.xml 생성 - 링크 추가 해야 함

  2. web.xml의 기본 설정 및 DispatcherServlet 설정 - 링크 추가 해야 함

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>
    <!-- root-context.xml 의 위치 지정과 구동시 root-context.xml을 로드하기 위해 -->
    
    <listener>
        <listener-class>
          org.springframework.web.context.ContetLoaderListener
        </listener-class>
    </listener>
    <!-- ContextLoaderListener 클래스의 지정과 구동시 로드 -->
    
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
                                                                    </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servlet-context.xml</param-value>
        </init-param>
    
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--
    <servlet> 설정은 DispatcherServlet을 등록하는데 디스패처가 로딩할 때 servlet-context.xml 을 이용하도록 설정 load-on-startup 설정은 톰캣 구동시에 미리 로딩해두기 위한 설정 
    -->
    
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- <servlet-mapping.은 디스패처서블렛이 모든 경로의 요청에 대한 처리를 담당, /  로 지정 -->
  1. servlet-context.xml 생성 및 수정 - 링크 추가 해야 함

    <mvc:annotation-driven></mvc:annotiation-driven>
    <!-- 
    <mvc:annotation-driven> 설정은 스프링 MVC설정을 어노테이션 기반으로 처리한다는 의미
    스프링 MVC의 여러 객체들을 자동으로 스프링의 빈 으로 등록하게 기능
    -->
    
    <mvc:resources mapping="/resources/**" location="/resources/"></mvc:resources>
    <!--
    이미지나 html 등 정적인 파일 경로 지정
    해당 경로로 들어오는 요청은 정적파일 요구로 판단, 스프링 mvc 에서 처리하지 않음
    location 속성 값은 webapp 폴더에 만들어둔 폴더를 의미
    -->
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!-- 
    InternalResourceViewResolver 는 스프링 MVC 에서 뷰를 어떻게 결정하는지에 대한 설정을 담당
    servlet 으로 구현시 컨트롤러에서 return 할때마다 /WEB_INF/veiws/***.jsp 를 지정했으나
    InternalResourceVeiwResolver fㅡㄹ 통해 WEB-INF 의 경로와 .jsp 라는 확장자를 지정. 직접 설정을 생략할수 있는 장점
    -->
  1. DataSource 구성 - 링크 추가 해야 함

    1. MariaDB 드라이버와 HikariCP 라이브러리 추가

    2. root-context.xml 에 HikariCP 빈 설정

      <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">  
        <property name="driverClassName" value="org.mariadb.jdbc.Driver"></property>  
        <property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/데이터베이스이름">
                                      </property>  
      
        <property name="username" value="유저이름"></property>  
        <property name="password" value="비밀번호"></property>  
        <property name="dataSourceProperties">  
            <props>  
                <prop key="cachePrepStmts">true</prop>  
                <prop key="prepStmtCacheSize">250</prop>  
                <prop key="prepStmtCacheSqlLimit">2048</prop>  
            </props>  
        </property>  
      </bean>  
      
      <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">  
          <constructor-arg ref="hikariConfig"></constructor-arg>  
      </bean>
  1. 커넥션 테스트

    //테스트 클래스
    
    @Log4j2
    @ExtendWith(SpringExtension.class)
    @ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/root-context.xml")
    public class DataSourceTests{
    
      @Autowired
      private DataSource dataSource;
    
      @Test
      public void testDataSource() throws Exception{
    
        Connection connection = dataSource.getConnection();
    
        log.info(connection);
        connection.close();
      }
    }
  2. MyBatis 스프링 연동(xml 형태)

    1. spring-jdbc,spring-tx 라이브러리 추가

    2. mybatis, mybatis-spring 라이브러리 추가

    3. root-context.xml 에 <mybatis:scan>과, SqlSessionFactory 빈 설정

      <mybatis:scan base-package="org.leeinwon.studylink.mapper"></mybatis:scan>
      
      <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
          <property name="dataSource" ref="dataSource"></property>  
          <property name="mapperLocations" value="classpath:/mappers/**/*.xml"></property> 
      </bean>
    4. /src/main/resources 하위에 mappers 파일 생성

  3. Mapper 테스트

    1. 테스트를 위해 mapper interface 생성 및 작성

      public interface TestMapper{
      
        String getNow();
      )
    2. /src/main/resources/mappers 폴더 하위에 TestMapper.xml 생성

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="org.leeinwon.studylink.mapper.TestMapper">
      
          <select id="getNow" resultType="String">
              select now()
          </select>
      </mapper>
    3. mapper 테스트 클래스 생성 후 테스트

      @Log4j2
      @ExtendWith(SpringExtenstion.class)
      @ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/root-context.xml")
      public class TestMapperTests{
      
        @AutoWired(required = false)
        private TestMapper testMapper;
      
        @Test
        public void testGetNow(){
          log.info(testMapper.getNow());
        }
      }