이번 절에서는 지금까지 배운 내용을 복습도 할 겸 새로운 예제를 만들어 본다. 이 책에서 만드는 예제는 간단한 프로젝트 관리 시스템이다. 로그인, 로그아웃, 회원 등록/조회/변경/삭제를 구현해 보았다. 이제 다른 기능을 만들어본다.
1. 데이터베이스 모델
다음 그림 1은 SPMS의 데이터베이스 모델이다. 제 4장 서블릿과 JDBC 부분(https://stbhg5.tistory.com/35)에서 처음으로 회원 기본 정보를 다루기 위한 테이블을 준비하였다. 이번 절에서는 프로젝트와 프로젝트에 참여하는 회원 정보를 다루는데 필요한 테이블을 준비한다(그림 1).
- 프로젝트 테이블 생성
프로젝트 정보를 저장할 테이블을 생성한다. 프로젝트 테이블의 기본 키는 자동 생성되는 일련번호 컬럼이다. 태그 컬럼을 제외한 나머지 모든 컬럼은 필수 입력 컬럼이다. MySQL Workbench 프로그램을 실행한다. Query 편집기에서 먼저 프로젝트 테이블을 생성하는 SQL을 실행한다.
/*프로젝트 테이블 생성*/
CREATE TABLE PROJECTS (
PNO INTEGER NOT NULL COMMENT '프로젝트일련번호'
,PNAME VARCHAR(255) NOT NULL COMMENT '프로젝트명'
,CONTENT TEXT NOT NULL COMMENT '설명'
,STA_DATE DATETIME NOT NULL COMMENT '시작일'
,END_DATE DATETIME NOT NULL COMMENT '종료일'
,STATE INTEGER NOT NULL COMMENT '상태'
,CRE_DATE DATETIME NOT NULL COMMENT '생성일'
,TAGS VARCHAR(255) NULL COMMENT '태그'
) COMMENT '프로젝트'
;
프로젝트 설명을 저장할 CONTENT 컬럼의 데이터 형은 TEXT이며 최대 65,536바이트 크기를 갖는 데이터 형이다. 즉 영어는 최대 65,536자까지 저장할 수 있고, 한글은 UTF-8이 3바이트 크기이므로 21,845자를 저장할 수 있다.
PROJECTS 테이블의 기본 키 컬럼을 지정한다. PNO 컬럼을 기본 키로 사용할 것이다.
/*PROJECTS 테이블의 기본키 컬럼 설정*/
ALTER TABLE PROJECTS
ADD CONSTRAINT PK_PROJECTS
PRIMARY KEY (PNO)
;
PNO 컬럼에 대해 자동으로 증가하는 일련번호가 저장될 수 있도록 설정한다.
/*PROJECTS 테이블의 PNO 컬럼에 대해 제약조건 설정 - 자동으로 증가하는 일련번호 저장*/
ALTER TABLE PROJECTS
MODIFY COLUMN PNO INTEGER NOT NULL AUTO_INCREMENT COMMENT '프로젝트일련번호'
;
- 프로젝트 멤버 테이블 생성
프로젝트에 참여하는 멤버의 정보를 저장할 테이블을 생성한다. 프로젝트 멤버 테이블의 기본 키는 회원 번호와 프로젝트 번호를 묶은 값이다.
프로젝트 멤버 테이블을 생성하는 SQL을 실행한다.
/*프로젝트 멤버 테이블 생성*/
CREATE TABLE PRJ_MEMBS (
PNO INTEGER NOT NULL COMMENT '프로젝트일련번호'
,MNO INTEGER NOT NULL COMMENT '회원일련번호'
,LEVEL INTEGER NOT NULL COMMENT '등급'
,STATE INTEGER NOT NULL COMMENT '상태'
,MOD_DATE DATETIME NOT NULL COMMENT '상태변경일'
) COMMENT '프로젝트멤버'
;
PRJ_MEMBS 테이블의 기본 키 컬럼을 지정한다. 프로젝트 일련번호(PNO) 컬럼과 회원 일련번호(MNO) 컬럼을 묶어 기본 키로 사용할 것이다.
/*PRJ_MEMBS 테이블의 기본키 컬럼 설정*/
ALTER TABLE PRJ_MEMBS
ADD CONSTRAINT PK_PRJ_MEMBS
PRIMARY KEY (PNO, MNO)
;
이제 프로젝트 정보와 멤버 정보를 다룰 테이블을 준비했다. MySQL Workbench의 스키마 목록을 보면 다음 그림과 같이 studydb 스키마에 존재하는 테이블 목록을 볼 수 있다(그림2).
- Project 값 객체 준비
프로젝트 데이터를 다룰 때 사용할 값 객체를 준비한다.
spms.vo 패키지에 Project 클래스를 생성하여 다음과 같이 편집한다.
package spms.vo;
import java.util.Date;
public class Project {
protected int no; //프로젝트일련번호
protected String title; //프로젝트명
protected String content; //설명
protected Date startDate; //시작일
protected Date endDate; //종료일
protected int state; //상태
protected Date createdDate; //생성일
protected String tags; //태그들
public int getNo() {
return no;
}
public Project setNo(int no) {
this.no = no;
return this;
}
public String getTitle() {
return title;
}
public Project setTitle(String title) {
this.title = title;
return this;
}
public String getContent() {
return content;
}
public Project setContent(String content) {
this.content = content;
return this;
}
public Date getStartDate() {
return startDate;
}
public Project setStartDate(Date startDate) {
this.startDate = startDate;
return this;
}
public Date getEndDate() {
return endDate;
}
public Project setEndDate(Date endDate) {
this.endDate = endDate;
return this;
}
public int getState() {
return state;
}
public Project setState(int state) {
this.state = state;
return this;
}
public Date getCreatedDate() {
return createdDate;
}
public Project setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
return this;
}
public String getTags() {
return tags;
}
public Project setTags(String tags) {
this.tags = tags;
return this;
}
}
Project 클래스의 각 인스턴스 변수들은 PROJECTS 테이블의 각 컬럼들을 매핑한다. 셋터 메서드의 리턴 타입이 void가 아니라 인스턴스를 반환한다는 것에 주의한다. Member 클래스에서 했던 것과 같은 이유이다. 즉 셋터 메서드를 연속으로 호출하여 값을 설정할 수 있다.
2. 프로젝트 관리 시스템
이번 절의 목적은 이전까지 배운 지식과 예제 소스를 활용하여 과제를 해결함으로써 프로그래밍 실력을 늘리는 것이다. 과제 해결에 필요한 테이블 생성과 값 객체는 준비되었다. 나머지는 훈련 지시에 따라 구현한다(그림 3).
① 제일 먼저 프로젝트 목록을 출력하는 기능을 구현한다.
② 프로젝트 목록에서 '신규 프로젝트' 링크를 클릭했을 때 실행될 프로젝트 등록 기능을 구현한다.
③ 프로젝트 목록에서 '프로젝트 이름' 링크를 클릭했을 때 실행될 프로젝트 상세정보 출력 기능을 구현한다.
④ 프로젝트 상세정보 페이지에서 '삭제' 버튼을 클릭하거나 프로젝트 목록 페이지에서 '삭제' 링크를 클릭할 때, 프로젝트 삭제를 수행할 기능을 구현한다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
97. 실력 향상 훈련 (3) (0) | 2022.08.21 |
---|---|
96. 실력 향상 훈련 (2) (0) | 2022.08.20 |
94. 어노테이션을 이용한 객체 관리 (3) (0) | 2022.08.15 |
93. 어노테이션을 이용한 객체 관리 (2) (0) | 2022.08.14 |
92. 어노테이션을 이용한 객체 관리 (1) (0) | 2022.08.13 |
댓글