스프링 레거시(Spring legacy) - 설정
지난번 스프링 부트를 통해 게시판을 만들어 보았는데 이번에는 스프링 레거시를 사용해서 게시판을 만들어보겠습니다.
STS3 / JDK 11 / Tomcat9 설치
우선은 Spring Tool Suite 3을 다운받습니다. 3버전은 스프링 레거시를 지원합니다.
JDK는 11 버전 이상이여야 사용할 수 있습니다. 이전에 open JDK 17을 다운받았는데, oracle JDK 11을 새로 설치하겠습니다. 오라클에 로그인 하셔야 다운가능합니다.
스프링 부트와 달리 내장 톰캣이 없어서 톰캣을 다운받아야 합니다. Tomcat 9 버전을 다운받습니다.
STS3 압축을 풀어 sts-bundle 폴더 안에 ws
폴더를 만들고, 톰캣의 압축을 풉니다.
sts-3.9.18.RELEASE
폴더에 들어가서 STS
를 실행시킵시다.
방금 생성한 ws
폴더를 작업폴더로 지정하고 Launch
를 누릅니다.
인코딩 설정
상단에 Window > Preferences
를 클릭합니다.
General > Content Types
에 들어가서 Text
를 선택하고 하단에 Default encoding
에 utf-8
을 입력후 Update
버튼을 누르세요.
General > Workspace
에서 Text file encoding
또한 UTF-8
로 번경 후 Apply
버튼을 누르세요
Web > CSS Files
, Web > HTML Files
, Web > JSP Files
, XML > XML Files
, JSON > JSON Files
또한 Encoding을 UTF-8
로 변경후 Apply
버튼을 누르세요.
기본 JDK 버전을 17로 사용하고 있어서 환경변수가 17 버전으로 되어 있습니다. 환경변수를 변경해도 되지만 에디터를 통해 설정하겠습니다.
JAVA > Compiler
에서 JDK Compiler compliance level
을 11
로 변경하고, JAVA > Installed JREs
에서 JDK 11버전 경로를 추가한 후 Apply
를 클릭하세요.
톰캣 서버 생성
왼쪽 Package Explorer 창에 있는 기본 서버 프로젝트를 삭제합니다.
Delete project contents on disk (cannot be undone)
을 체크하여 완전시 삭제합시다.
왼쪽 하단에 톰켓 서버도 삭제합니다.
왼쪽 하단에 링크를 클릭하여 서버를 추가합시다.
Tomcat v9.0 Server
를 선택후 Next
버튼을 클릭합니다.
Browse...
버튼을 클릭하여 아까 설치한 톰캣 폴더를 디렉토리로 지정한후 Finish
를 클릭하세요.
프로젝트 서버 생성
스프링 레거시 프로젝트를 생성하겠습니다. 왼쪽 Package Explorer 창에 오른쪽 마우스 클릭을 한 후 New > Spring Legacy Project
를 선택합니다.
Spring MVC Project
를 선택후 프로젝트 이름을 적고 Next
를 클릭합니다.
패키지 및 아티팩트 이름을 적고 Finish를 클릭하면 레거시 프로젝트의 의존성이 자동으로 설치되면서 프로젝트가 추가됩니다.
톰캣 서버에서 Add and Remove...
를 선택하여 프로젝트를 추가해줍니다.
Ctrl + Alt + R
을 누르면 톰캣 서버가 시작됩니다. 기본 포트는 8080
입니다. localhost:8080/board
로 접속해보세요. (board는 아티팩트 이름입니다.)
한글이 깨지는데 뷰 페이지를 작성할때 encoding 메타정보를 utf-8로 입력하야합니다. 뷰 페이지 작성을 참고하세요.
의존성 추가
레거시 프로젝트의 경우 빌드툴로 메이븐(maven)
을 사용하기 때문에 pom.xml
을 통해 의존성을 추가할 수 있습니다.
저는 롬복을 통해 간단하게 getter, setter 설정 및 의존성의 생성자 주입을 하므로 롬복을 설치하겠습니다. 또한 DB는 스프링 부트 게시판을 만들때 사용했던 오라클 클라우드를 사용하도록 하겠습니다.
롬복을 설치하면 IDE를 찾을 수 없다고 뜨는데, Specify loaction...
을 클릭하여 STS3의 위치를 지정해주고 Install / Update
를 클릭합니다.
pom.xml
파일에 롬복 의존성을 추가합니다.
pom.xml
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
mvnrepository를 참고하여 의존성을 설정해줍니다.
자바 버전은 1.8
로 변경하고, 스프링 프레임워크 버전도 5.1.5.RELEASE
로 설정합시다.
pom.xml
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.1.5.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
junit은 현재 4.12 버전의 사용률이 높으므로 4.12버전으로 변경합니다.
pom.xml
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
JPA 대신 이번에는 mybatis를 사용하여 sql문을 실행하겠습니다.
DB 연결을 위해 Spring JDBC
를 의존성으로 추가하고, 메이븐 레포지토리를 참고하여 mybatis
와 mybatis-spring
을 의존성 추가합니다.
pom.xml
<!-- Spring JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
DB는 오라클 클라우드를 사용할 예정이므로 OJDBC
의존성을 추가합니다. 클라우드 연결에는 인증키를 통한 인증 과정이 필요하므로 Osdt
도 OJDBC 버전에 맞추어 의존성으로 추가합니다.
pom.xml
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.database.security/osdt_cert -->
<dependency>
<groupId>com.oracle.database.security</groupId>
<artifactId>osdt_cert</artifactId>
<version>21.1.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.database.security/osdt_core -->
<dependency>
<groupId>com.oracle.database.security</groupId>
<artifactId>osdt_core</artifactId>
<version>21.1.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.database.security/oraclepki -->
<dependency>
<groupId>com.oracle.database.security</groupId>
<artifactId>oraclepki</artifactId>
<version>21.1.0.0</version>
</dependency>
프로퍼티 설정
스프링 부트에서는 Gradle 빌드툴을 사용하여 빈(Bean)이 자동으로 등록되고, 빈에 대한 설정은 application.properties
파일에 작성했지만, 레거시에서는 빈을 직접 등록합니다. 레거시 앱의 빈 등록은 /src/main/webapp/WEB-INF/spring/appServlet/root-context.xml
파일에 작성합니다.
mybatis를 통해 오라클 DB에 접근하기 위해 dataSource
와 sqlSessionFactory
, sqlSession
을 빈으로 등록하고 property에 다음과 같이 설정값을 입력합니다.
src/main/webapp/WEB-INF/spring/root-context.xml
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" name="dataSource">
<property value="oracle.jdbc.driver.OracleDriver" name="driverClassName"/>
<property value="[DB 주소]" name="url"/>
<property value="[DB 아이디]" name="username"/>
<property value="[DB 암호]" name="password"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
sqlSession
은 SQL을 실행하고 트랜잭션을 제어하는 객체입니다. mybatis에서는 sqlSession 객체를 통해 mapper의 쿼리문을 실행합니다. sqlSessionFactory를 의존성 주입받으며, sqlSessionFactory은 dataSource를 참조하여 sqlSession 객체를 생성합니다.
sqlSessionFactory에는 mybatis-config.xml
파일과 mappers.xml
의 위치를 지정해주고, dataSource에는 DB 정보를 입력해줍니다.
해당 위치에 mybatis-config.xml
파일을 만들고 다음과 같이 작성해둡니다.
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="kro.rubisco.dto"/>
</typeAliases>
</configuration>
typeAliases
태그 아래 package 태그의 name 속성은 패키지의 별칭을 나타냅니다. 나중에 매퍼를 작성함에 있어서 DTO를 연결할 때 패키지명을 모두 적어야하지만, 이렇게 별칭을 지정해두면 작성된 패키지 부분을 생략하고 DTO 클래스명만 적어도 연결이 됩니다.
mappers
라는 패키지 폴더도 하나 만들어둡시다. 나중에 매퍼를 작성할 폴더입니다.