포트폴리오
스프링 레거시 프로젝트 초기설정(gradle)
incodingone
2024. 5. 20. 17:20
스프링 레거시 프로젝트를 시작하기로 정하고 프로젝트의 초기 설정을 해봤다.
아직 책으로 익힌 것에서 크게 벗어나진 못했지만 한번 초기 설정을 나만의 스타일로 규격화할 필요가 있지 않을까 싶어 작성해 본다.
(새로 알게 되는 내용이나 틀린부분 계속 수정 예정)
우선, 인텔리제이를 사용하여 프로젝트를 생성하였다.
프로젝트 생성
라이브러리 추가
라이브러리 목록 펼치기
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
log4j2.xml 설정 및 추가 - 링크 추가 해야 함
root-context.xml 생성 - 링크 추가 해야 함
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.은 디스패처서블렛이 모든 경로의 요청에 대한 처리를 담당, / 로 지정 -->
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 라는 확장자를 지정. 직접 설정을 생략할수 있는 장점 -->
DataSource 구성 - 링크 추가 해야 함
MariaDB 드라이버와 HikariCP 라이브러리 추가
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>
커넥션 테스트
//테스트 클래스 @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(); } }
MyBatis 스프링 연동(xml 형태)
spring-jdbc,spring-tx 라이브러리 추가
mybatis, mybatis-spring 라이브러리 추가
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>
/src/main/resources 하위에 mappers 파일 생성
Mapper 테스트
테스트를 위해 mapper interface 생성 및 작성
public interface TestMapper{ String getNow(); )
/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>
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()); } }