Part 7. 스프링 MVC 프로젝트의 기본 구성
7.3 예제 프로젝트 생성
- 예제를 위한 프로젝트는 'ex02' 이름으로 생성하고, 'Spring Legacy Project'로 생성한다.
- 프로젝트를 생성한 후에는 pom.xml의 수정, 데이터베이스 관련 처리, 스프링 MVC 처리와 같은 순서로 진행한다.
7.3.1 pom.xml의 수정
- 프로젝트를 생성 후 pom.xml에서 스플이의 버전과 Java 버전 등을 수정한다.
< pom.xml - 스프링의 버전 변경>
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.0.7RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
- 스프링 관련해서 추가적인 라이브러리로는 spring-txt, spring-jdbc, spring-test가 필요하다.
< pom.xml - 스프링 관련 라이브러리 >
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
- MyBatis를 이용할 것이므로 HikariCP, MyBatis, mybatis-spring, Log4jdbc 라이브러리들도 추가한다.
< pom.xml - HikariCP, MyBatis, mybatis-spring, Log4jdbc 라이브러리 추가>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
- 테스트와 Lombok을 위해 jUnit 버전을 변경하고, Lombok을 추가한다.
- jUnit의 경우 4.7로 설정되어 있으므로 반드시 기존 설정을 변경해 준다.
< pom.xml - jUnit 수정, Lombok 추가 >
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
- Servlet 3.1(혹은 3.0)을 제대로 사용하기 위해서 pom.xml에 있던 서블릿 2.5 버전이 아닌 3.0 이사응로 수정한다.
< pom.xml - Servlet 버전 수정 >
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
- Servlet 3.1 버전을 제대로 활용하고, JDK8의 기능을 활용하기 위해 Maven 관련 Java 버전을 1.8로 수정한다.
< pom.xml - Maven 관련 Java 버전 수정 >
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
- ex02 프로젝트를 선택하고 Maven > Update Project를 실행한다.
- 마지막으로 Oracle JDBC Driver를 프로젝트의 Build Path에 추가하고, Deployment Assembly에 추가한다.
7.3.2 테이블 생성과 Dummy(더미) 데이터 생성
- SQL Developer를 이용해 PART 1에서 작성한 book_ex 계정을 통해 테이블을 생성한다.
- 게시물은 각 게시물마다 고유의 번호가 필요하다.
- 오라클의 경우 시퀀스를 이용해 이러한 작업을 처리한다.
CREATE SEQUENCE SEQ_BOARD;
CREATE TABLE TBL_BOARD (
BNO NUMBER(10,0),
TITLE VARCHAR2(200) NOT NULL,
CONTENT VARCHAR2(2000) NOT NULL,
WRITER VARCHAR2(50) NOT NULL,
REGDATE DATE DEFAULT SYSDATE,
UPDATEDATE DATE DEFAULT SYSDATE
);
ALTER TABLE TBL_BOARD ADD CONSTRAINT PK_BOARD
PRIMARY KEY(BNO);
- 시퀀스를 생성할 때는 데이터베이스의 다른 오브젝트들과 구분하기 위해 'seq_'와 같이 시작하는 것이 일반적이다.
- 테이블을 생성할 때는 'tbl'로 시작하거나 't'와 같이 구분이 가능한 단어를 앞에 붙여주는 것이 좋다.
- tbl_board 테이블은 고유의 번호를 가지기 위해 bno 칼럼을 지정했고, 제목(title), 내용(content), 작성자(writer)를 칼럼으로 지정한다.
- 테입르을 설계할 때는 가능하면 레코드의 생성 시간과 최종 수정 시간을 같이 기록하는 것이 좋기 때문에 생성 시간(regdate)과 레코드의 최종 수정 시간(updatedate) 칼럼을 작성한다.
- 이 때 기본값으로 sysdate를 지정해 레코드가 생성된 시간은 자동으로 기록될 수 있게 한다.
- 테이블의 생성 이후에는 'alter table..'을 이용해 테이블에 Primary Key(이하 PK)를 지정해 주었다.
- PK를 지정할 때 'pk_board'라는 이름을 부여하는데, 이 이름은 뒤에서 중요하게 사용되므로 반드시 의미를 구분할 수 잇게 생성해 주는 것이 좋다.
더미 데이터의 추가
- 테이블을 생성하고 나면 여러 개의 데이터를 추가해 주는데 이런 의미 없는 데이터를 흔히 '토이 데이터' 혹은 '더미 데이터'라 한다.
- 게시물이 많을수록 유용하지만, 간단하게 다음과 같은 방식을 통해 더미 데이터를 추가한다.
INSERT INTO TBL_BOARD (BNO, TITLE, CONTENT, WRITER)
VALUES (SEQ_BOARD.NEXTVAL, '테스트 제목', '테스트 내용', 'USER00');
- tbl_board의 bno 칼럼은 매번 새로운 값이 들어가야 하므로 seq_board.nextval을 이용해 매번 새로운 번호를 얻는다.
- regdate와 updatedate 칼럼은 기본으로 현재 시간이 들어가므로, 별도의 작업이 필요하지 않다.
- 오라클 데이터베이스의 경우 데이터를 insert 한 후 주의해야 하는 점이 commit이다.
- MySQL과 달리 오라클의 경우 데이터에 대한 가공 작업 후 반드시 commit을 수동으로 처리해야 한다.
- 명령어를 이용해 commit을 해주거나 화면 위쪽에 있는 버튼을 이용해 처리할 수 있다.
- insert를 여러 번 실행한 후 'select'문을 이용해 데이터가 정상적으로 처리되었는지 확인해 주는 것이 좋다.
- 데이터베이스에 insert 작업이 끝난 후에는 반드시 데이터베이스를 commit 해야 한다.
- 오라클의 경우 MySQL과 다르기 때문에 수동으로 처리해야 하므로 주의해야 한다.
이렇게 유용한 정보를 공유해주셔서 감사합니다.