[꼼꼼한 개발자] 꼼코더
28. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC 프로젝트의 기본 구성] - 프로젝트 ex02 예제 프로젝트 구성 본문
28. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC 프로젝트의 기본 구성] - 프로젝트 ex02 예제 프로젝트 구성
꼼코더 2023. 1. 8. 02:05👷🏻♂️ 예제 프로젝트 구성
Spring LegacyProject로 ex02 프로젝트 생성한다.
생성 시 pom.xml 수정 → 데이터베이스 관련 처리 → 스프링 MVC 처리 순으로 진행한다.
👨🏻💻 pom.xml 수정
스프링 버전과 java 버전등을 수정한다
스프링 관련 추가 라이브러리는 spring-tx, spring-jdbc, spring-test가 필요하다.
MyBatis를 이용할 것이므로 HikariCP, MyBartis, mybatis-spring, Log4jdbc 라이브러리들도 추가한다.
테스트와 Lombok을 사용할 것이고 사용을 위하여 jUnit 버전을 변경하고, Lombok을 추가한다.
서블릿은 3.0으로 수정해 준다.
서블릿 3.0버전과 JDK 8 기능을 활용하려면 Maven 관련 Java 버전을 1.8로 수정해 준다.
‘ex02’ 선택 → 우클릭 → Maven > Update Project를 실행해 준다.
마지막으로 JDBC Driver를 Builpath와 Deployment Assembly에도 추가한다.
💡 테이블 생성과 Dummy(더미) 데이터 생성
SQL Develvoper를 이용해서 테이블을 생성한다.
게시물은 각 게시물마다 고유의 번호가 필요하다.
오라클의 경우 시퀀스(squencs)를 이용해서 이러한 작업을 처리한다.
// 일렬번호를 위한 시퀀스 추가
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
);
// 게시물의 PK의 저장
alter table tbl_board add constraint pk_board
primary key (bno);
시퀀스 생성 시 데이터베이스의 다른 오브젝트들과 구분하기 위해 ‘seq_’와 같이 시작한다.
테이블 생성 시 ‘tbl_’로 시작하거나 ‘t_’와 같이 구분이 가능하도록 시작한다.
위 tbl_board 테이블은 고유의 번호를 가지기 위하여 bno 칼럼을 지정했다.
제목(tiltle), 내용(content), 작성자(writer)를 칼럼으로 지정한다.
테이블 설계 시 레코드의 생성, 최종 수정 시간을 같이 기록하는 것이 좋기 때문에
생성시간(regdate)과 최종수정시간(updatedate) 칼럼을 작성한다.
이때 sysdate를 지정하여 레코드가 생성된 시간은 자동으로 설정한다..
테이블 생성 후 ‘alter table..’을 이용하여 테이블에 Primary Key(이하 PK)를 지정하였다.
PK를 를 지정할 때에는 ‘pk_’와 같이 의미를 구분할 수 있게 생성해 준다.
👀 더미 데이터의 추가
테이블을 생성하고 나면 여러 개의 데이터를 추가해 준다.
이런 의미 없는 데이터는 ‘토이 데이터(toy data)’ 혹은 ‘더미 데이터(dummy data)’라고 한다
게시물이 많을수록 유용할 수 있지만, 간단하게 다음과 같은 방식을 이용하여 더미 데이터를 추가한다.
// 더미 데이터 추가
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’ 문을 이용하여 결과를 확인해 주는 것이 좋다.
✅ 데이터베이스 관련 설정 및 테스트
root-context.xml에는 mybatis-spring 네임 스페이스를 추가하고
DataSource의 설정과 MyBatis의 설정을 추가한다.
root-context.xml은 내부적으로 Log4jdbc를 이용하는 방식으로 구성되어 있으므로
log4jdbc.log4j2.properties 파일을 추가해 준다.
👨🏻💻 DataSourceTest, JDBCTests추가
프로젝트가 정상적으로 실행하려면 먼저 DataSource와 MyBatis의 연결이 반드시 필요하다.
따라서 DataSourceTest 클래스와 JDBCTests 클래스를 테스트 패키지에 추가해 준다.
💁🏻♂️ 결과
본 프로젝트 시작 전 DataSourceTest, JDBCTests 결과도 정상적으로 확인해 준다.
☕️ Java 설정을 이용하는 경우의 프로젝트 구성
Java 설정을 이용한다면 pom.xml의 라이브러리 추가는 동일하나 XML을 대신하는 클래스 파일이 필요하다.
‘jex02’ 프로젝트 생성시 만들어진 XML 들을 삭제 후 ‘org.zerock.config’ 패키지를 생성해 준다.
(앞으로 java 설정 파일 코드는 교재의 코드를 import 하여 올리겠다 *교재 코드도 동작오류)
👨🏻💻 pom.xml 추가
Java 설정 시 web.xml을 사용하지 않는 설정을 추가해 준다.
👨🏻💻 WebConfig, RootConfig, Servlet 클래스 작성
org.zerock.config 폴더에는
web.xml을 대신하는 WebConfig 클래스
root-context.xml을 대신하는 RootConfig 클래스
Servlet-context.xml을 대신하는 Servlet 클래스를 작성해 준다.
💁🏻♂️ 결과
작업 후에는 JDBC 드라이버 설정, log4jdbc 설정등을 추가하고 테스트 코드를 통하여 정상구동을 확인한다.
🧹 최종 정리
- 의미 없는 데이터는 ‘토이 데이터(toy data)’ 혹은 ‘더미 데이터(dummy data)’라고 한다
- 오라클 데이터베이스의 경우 데이터 insert 이후 주의할 점은 commit이다
- Mysql와 달리 오라클의 경우에 데이터에 대한 가공 작업 후 반드시 commit을 수동으로 처리해야 한다.
위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.