Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 일기

JAVA 게시판 만들기 1 탄 (feat. aquerytool 테이블 설계, DTO 클래스 만들기 ) 본문

Project 1. 게시판 만들기

JAVA 게시판 만들기 1 탄 (feat. aquerytool 테이블 설계, DTO 클래스 만들기 )

개발 일기 2021. 8. 19. 22:49

안녕하세요.

 

제가 한동안 블로그를 쓰지 못했는데 ㅠㅠ,,

그 이유가 어제 올렸듯이 시험도 있었고(이번 주말에 또 있고..ㅠ)

 

다른 이유중에 하나는 현재 제가 수강하고 있는 수업에서 이제 세미프로젝트를 팀별로 하나 진행을 하고 있어요.

그래서 저희 팀은 '전자도서관'의 컨셉으로 개발을 시작했고 현재 분업화해서 모두 바쁘게 작성중에 있습니다.

 

그 중에 저는 QNA 게시판 영역을 담당하게 되었구요.

그래서 제가 작성해나가고 있는 코드를 공유해보도록 하겠습니다.

 

 

1. ERD(테이블)설계 

//화면정의서와 요구사항 명세서 작성 후 ERD 작성

 

우선 자바 코딩에 앞서 전체적인 서비스를 제공하기 위한

ERD(개체-관계 모델(Entity Relationship Model))를 팀원들과 작성을 해보았습니다.

화면 공유와 수정이 수월한 에이쿼리 툴을(https://aquerytool.com/) 활용해서 작성을 했습니다.

제가 QNA 게시판을 만드는데 사용하게 될 DB 테이블의 ERD 모델입니다.

'전자도서관' 컨셉으로 회원을 중심으로 서비스가 이루어지게되며,

QNA와 REPLY에 회원번호를 FK(외래키)설정을 해주었습니다.

 

SQL문 변환 시 QNA, REPLY TABLE 생성 SQL문

 

CREATE TABLE QNA
(
    qna_no          NUMBER(3)         NOT NULL,
    member_no       NUMBER(3)         NOT NULL,
    qna_title       VARCHAR2(150)     NOT NULL,
    qna_content     VARCHAR2(4000)    NOT NULL,
    qna_reg_date    DATE              DEFAULT SYSDATE NOT NULL,
    qna_visible     NUMBER(1)         DEFAULT 1 NOT NULL,
    qna_file        VARCHAR2(256)     NULL,
    qna_views       NUMBER(4)         DEFAULT 0 NOT NULL,
    CONSTRAINT PK_QNA PRIMARY KEY (qna_no)
)

 

CREATE TABLE REPLY
(
    reply_no         NUMBER(3)         NOT NULL,
    reply_content    VARCHAR2(4000)    NOT NULL,
    qna_no           NUMBER(3)         NOT NULL,
    member_no        NUMBER(3)         NOT NULL,
    CONSTRAINT PK_REPLY PRIMARY KEY (reply_no)
)

 

2. QNA, REPLY의 DTO 클래스 생성

위에서 이제 ERD 설계에 따른 SQL 테이블을 생성을 완료 했다면,

JAVA에서 사용 할 수 있도록 클래스 설계를 시작합니다.

그 중 맨 처음으로 해주어야 할 단계인 DTO(VO)클래스 생성을 해보겠습니다.

 

- QNA DTO 클래스 생성

package com.itwill.librarian.domain;

import java.util.Date;
import java.util.List;

public class Qna {
	private int qnaNo;
	private int memberNo;
	private String qnaTitle;
	private String qnaContent;
	private Date qnaRegDate;
	private int qnaVisible;
	private String qnaFile;
	private int qnaViews;
	private int qna_reply_count;
	private List<Reply> replys;
	
	public Qna() {
		
	}
	
	public Qna(int qnaNo, String qnaTitle, Date qnaRegDate, int qnaVisible,	String qnaFile, int qnaViews) {
		super();
		this.qnaNo = qnaNo;
		this.qnaTitle = qnaTitle;
		this.qnaRegDate = qnaRegDate;
		this.qnaVisible = qnaVisible;
		this.qnaFile = qnaFile;
		this.qnaViews = qnaViews;
	} 

	public Qna(int qnaNo, int memberNo, String qnaTitle, String qnaContent, Date qnaRegDate, int qnaVisible,
			String qnaFile, int qnaViews) {
		super();
		this.qnaNo = qnaNo;
		this.memberNo = memberNo;
		this.qnaTitle = qnaTitle;
		this.qnaContent = qnaContent;
		this.qnaRegDate = qnaRegDate;
		this.qnaVisible = qnaVisible;
		this.qnaFile = qnaFile;
		this.qnaViews = qnaViews;
	}

	public int getQna_reply_count() {
		return qna_reply_count;
	}

	public void setQna_reply_count(int qna_reply_count) {
		this.qna_reply_count = qna_reply_count;
	}
	
	public List<Reply> getReplys() {
		return replys;
	}

	public void setReplys(List<Reply> replys) {
		this.replys = replys;
	}

	public int getQnaNo() {
		return qnaNo;
	}

	public void setQnaNo(int qnaNo) {
		this.qnaNo = qnaNo;
	}

	public int getMemberNo() {
		return memberNo;
	}

	public void setMemberNo(int memberNo) {
		this.memberNo = memberNo;
	}

	public String getQnaTitle() {
		return qnaTitle;
	}

	public void setQnaTitle(String qnaTitle) {
		this.qnaTitle = qnaTitle;
	}

	public String getQnaContent() {
		return qnaContent;
	}

	public void setQnaContent(String qnaContent) {
		this.qnaContent = qnaContent;
	}

	public Date getQnaRegDate() {
		return qnaRegDate;
	}

	public void setQnaRegDate(Date qnaRegDate) {
		this.qnaRegDate = qnaRegDate;
	}

	public int getQnaVisible() {
		return qnaVisible;
	}

	public void setQnaVisible(int qnaVisible) {
		this.qnaVisible = qnaVisible;
	}

	public String getQnaFile() {
		return qnaFile;
	}

	public void setQnaFile(String qnaFile) {
		this.qnaFile = qnaFile;
	}

	public int getQnaViews() {
		return qnaViews;
	}

	public void setQnaViews(int qnaViews) {
		this.qnaViews = qnaViews;
	}

	@Override
	public String toString() {
		return "Qna [qnaNo=" + qnaNo + ", memberNo=" + memberNo + ", qnaTitle=" + qnaTitle + ", qnaContent="
				+ qnaContent + ", qnaRegDate=" + qnaRegDate + ", qnaVisible=" + qnaVisible + ", qnaFile=" + qnaFile
				+ ", qnaViews=" + qnaViews + ", qna_reply_count=" + qna_reply_count + ", replys=" + replys + "]";
	}

}

- DB에 만든 컬럼에 맞추어 변수를 생성한 뒤 생성자와 getter, setter 설정을 합니다.

- REPLY(댓글)쪽 데이터를 활용 할 경우에 맞춰 '댓글 수' 변수와 댓글리스트 변수를 설정합니다.

 

 

- REPLY DTO 클래스 생성

package com.itwill.librarian.domain;

public class Reply {
	private int replyNo;
	private String replyContent;
	private int qnaNo;
	private int memberNo;
	
	public Reply() {
		
	}

	public Reply(int replyNo, String replyContent, int qnaNo, int memberNo) {
		super();
		this.replyNo = replyNo;
		this.replyContent = replyContent;
		this.qnaNo = qnaNo;
		this.memberNo = memberNo;
	}

	public int getReplyNo() {
		return replyNo;
	}

	public void setReplyNo(int replyNo) {
		this.replyNo = replyNo;
	}

	public String getReplyContent() {
		return replyContent;
	}

	public void setReplyContent(String replyContent) {
		this.replyContent = replyContent;
	}

	public int getQnaNo() {
		return qnaNo;
	}

	public void setQnaNo(int qnaNo) {
		this.qnaNo = qnaNo;
	}

	public int getMemberNo() {
		return memberNo;
	}

	public void setMemberNo(int memberNo) {
		this.memberNo = memberNo;
	}

	@Override
	public String toString() {
		return "Reply [replyNo=" + replyNo + ", replyContent=" + replyContent + ", qnaNo=" + qnaNo + ", memberNo="
				+ memberNo + "]";
	}
	
}

- QNA와 마찬가지로 DB에 만든 컬럼에 맞추어 변수를 생성한 뒤 생성자와 getter, setter 설정을 합니다.

 

 

오늘은 ERD모델 설계와 DB 테이블 생성 후

JAVA DTO 클래스까지 만드는 내용을 정리해보았습니다.

감사합니다.

Comments