라즈베리파이반

라즈베리파이 등 컴퓨터계열 게시판입니다.

제목스프링 레거시로 게시판 만들기 (1) : 환경설정2022-10-20 19:37
작성자user icon Level 4

88x31.png


이전에 스프링(Spring)에 대해 설명한 적 있습니다. 스프링에는 여러 프로젝트가 있는데, 여기에서 스프링 레거시 프로젝트는 일반적인 스프링 프레임워크 프로젝트를 말합니다. 요즘에는 스프링 부트 프로젝트를 통해 간단하게 어플리케이션을 개발할 수 있는데, 우선은 스프링 레거시 프로젝트를 통해 게시판을 개발해보도록 하겠습니다.



1. STS3 / JDK 11 / Tomcat9 설치 


우선은 Spring Tool Suite 3을 다운받습니다. Spring Tools Suite는 일종의 eclipse 이며, 스프링을 통해 어플리케이션을 개발할 수 있도록 하는 IDE입니다. 3버전은 스프링 레거시를 지원합니다.


JDK는 11 버전 이상이여야 사용할 수 있습니다. oracle JDK 11을 설치합니다. 오라클에 로그인 하셔야 다운가능합니다.


스프링 부트와 달리 내장 톰캣이 없어서 톰캣을 다운받아야 합니다. Tomcat 9 버전을 다운받습니다.


STS3 압축을 풀어 sts-bundle 폴더 안에 ws폴더를 만들고, 톰캣의 압축을 풉니다.


sts-3.9.18.RELEASE 폴더에 들어가서 STS를 실행시킵시다.


방금 생성한 ws 폴더를 작업폴더로 지정하고 Launch를 누릅니다.



2. 인코딩 설정 


상단에 Window > Preferences를 클릭합니다.

 


General > Content Types에 들어가서 Text를 선택하고 하단에 Default encodingutf-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 또한 EncodingUTF-8로 변경후 Apply 버튼을 누르세요.


저는 기존 JDK 버전을 17로 사용하고 있어서 환경변수가 17 버전으로 되어 있습니다. 환경변수를 변경해도 되지만 에디터를 통해 설정하겠습니다.


JAVA > Compiler에서 JDK Compiler compliance level11로 변경하고, JAVA > Installed JREs에서 JDK 11버전 경로를 추가한 후 Apply를 클릭하세요.



3. 톰캣 서버 생성


왼쪽 Package Explorer 창에 있는 기본 서버 프로젝트를 삭제합니다.

 


Delete project contents on disk (cannot be undone)을 체크하여 완전시 삭제합시다.

 


왼쪽 하단에 톰켓 서버도 삭제합니다.

 


왼쪽 하단에 링크를 클릭하여 서버를 추가합시다.

 


Tomcat v9.0 Server를 선택후 Next 버튼을 클릭합니다.

 


Browse... 버튼을 클릭하여 아까 설치한 톰캣 폴더를 디렉토리로 지정한후 Finish를 클릭하세요.

 



4. 프로젝트 서버 생성 


스프링 레거시 프로젝트를 생성하겠습니다. 왼쪽 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로 입력하야합니다. 뷰를 작성할 때 설명하겠습니다.



5. 의존성 추가


레거시 프로젝트의 경우 빌드툴로 메이븐(maven)을 사용하기 때문에 pom.xml을 통해 의존성을 추가할 수 있습니다.


저는 롬복을 통해 간단하게 getter, setter 설정 및 의존성의 생성자 주입을 하므로 롬복을 설치하겠습니다. 또한 DB는 스프링 부트 게시판을 만들때 사용했던 오라클 클라우드를 사용하도록 하겠습니다.


롬복을 설치하면 IDE를 찾을 수 없다고 뜨는데, Specify loaction...을 클릭하여 STS3의 위치를 지정해주고 Install / Update를 클릭합니다.


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로 설정합시다.

    <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버전으로 변경합니다.

<!-- 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을 의존성 추가합니다.

<!-- 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 버전에 맞추어 의존성으로 추가합니다.

  <!-- 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>



6. 프로퍼티 설정


스프링 부트에서는 Gradle 빌드툴을 사용하여 빈(Bean)이 자동으로 등록되고, 빈에 대한 설정은 application.properties 파일에 작성했지만, 레거시에서는 빈을 직접 등록합니다. 레거시 앱의 빈 등록은 src/main/webapp/WEB-INF/spring/appServlet/root-context.xml 파일에 작성합니다.


mybatis를 통해 오라클 DB에 접근하기 위해 dataSourcesqlSessionFactory, sqlSession을 빈으로 등록하고 property에 다음과 같이 설정값을 입력합니다.

<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 파일을 만들고 다음과 같이 작성해둡니다.

<?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라는 패키지 폴더도 하나 만들어둡시다. 나중에 매퍼를 작성할 폴더입니다.

#스프링 레거시