[Spring / BootStrap] Spring Legacy MVC Project로 게시판 및 채팅 기능 구현 - 3 (DB연결 및 VO 생성)

리트리버J

·

2021. 1. 10. 01:00

728x90

1. 의존성 주입

pom.xml에 Oracle, Mybatis, Connetion Pool 관련 dependency를 추가해준다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!-- Oracle DataBase & Mybatis & Connection Pool  -->
        
        <!-- 1. 프로젝트 생성 후 추가적으로 등록하는 DB관련(오라클,마이바티스) 라이브러리들 --> 
        <!-- 1_1. DataBase 오라클 사용을 위한 라이브러리 -->
        <!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
        
        <!-- 1_2. Mybatis 순수 라이브러리 -->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        
        <!-- 1_3. 스프링에서 Mybatis를 사용하기 위한 라이브러리 -->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        <!-- 1_4. 스프링 데이터베이스 기능을 사용하기 위한 라이브러리 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <!-- <version>5.2.1.RELEASE</version> -->
            <version>${org.springframework-version}</version><!-- 위의 properties에 지정한 변수로 버전을 일치시킨다. -->
        </dependency>
        
        <!-- 1_5. 커넥션 풀 기능을 사용하기 위한 라이브러리 -->
        <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        
<!-- // Oracle DataBase & Mybatis & Connection Pool  -->
cs

2. SQL Developer에서 계정을 생성한다.

1
2
3
4
5
CREATE USER TUTORIAL IDENTIFIED BY TUTORIAL;
GRANT CONNECT, RESOURCE TO TUTORIAL;
-- CONNECT : 접속 권한
-- RESOURCE : 객체(생성, 수정, 삭제) 및 데이터 DML 권한
-- (DBA)도 있지만, 이 권한은 굳이 줄 필요는 없다. (아주 강력한 권한이다.)
cs

3. 게시판 TABLE 및 SEQUENCE 생성

3-1. 게시글 내용의 DATA TYPE은 SUMMERNOTE를 사용할 것이기 때문에 CLOB으로 한다.

( 사진파일이 텍스트 형태로 들어가기 때문에 굉장히 길어진다!! )

3-2. 로그인 기능 없는 익명 게시판이기 때문에 작성자가 수정할 수 있도록 비밀번호도 설정해준다.

3-3. 암호화 기능도 나중에 넣을 것이기 때문에 컬럼도 별도로 만들어준다.

3-4. Sequence는 게시글 번호를 위한 것이다.

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
31
32
33
34
-- 게시판 테이블
CREATE TABLE BOARD (
    BNO NUMBER,
    BWRITTER VARCHAR2(20NOT NULL,
    BPASSWORD VARCHAR2(4NOT NULL-- 원래 비밀번호
    BPASSWORDENC VARCHAR2(200NOT NULL-- 암호화된 비밀번호
    BSUBJECT VARCHAR2(50NOT NULL,
    BCONTENT CLOB NOT NULL-- SUMMERNOTE를 사용하기 때문에 CLOB으로 설정한다.
    BREGDATE DATE NOT NULL,
    BMODDATE DATE NOT NULL,
    BCOUNT NUMBER DEFAULT 0-- 조회수는 DEFALUT 0으로 설정
    CONSTRAINT PK_BOARD PRIMARY KEY (BNO) -- 게시글번호에 PRIMARY KEY(기본키)
);
 
-- 테이블 삭제는 DELETE가 아닌 DROP이다**
DROP TABLE BOARD;
 
-- 게시판 테이블 COMMENT
COMMENT ON COLUMN BOARD.BNO IS '게시글번호';
COMMENT ON COLUMN BOARD.BWRITTER IS '작성자';
COMMENT ON COLUMN BOARD.BPASSWORD IS '비밀번호';
COMMENT ON COLUMN BOARD.BPASSWORDENC IS '암호화된 비밀번호';
COMMENT ON COLUMN BOARD.BSUBJECT IS '제목';
COMMENT ON COLUMN BOARD.BCONTENT IS '내용';
COMMENT ON COLUMN BOARD.BREGDATE IS '등록일';
COMMENT ON COLUMN BOARD.BMODDATE IS '수정일';
COMMENT ON COLUMN BOARD.BCOUNT IS '조회수';
 
-- 게시판 테이블 SEQUENCE
CREATE SEQUENCE BOARD_SEQUENCE
START WITH 1 -- 1부터 시작
INCREMENT BY 1 -- 1씩 증가
MAXVALUE 10000 -- 10000까지
NOCYCLE; -- 값 순환 X
cs

4. root-context.xml bean 등록

BasicDataSource,

SqlSessionFactoryBean,

SqlSessionTemplate

bean을 등록해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
        <property name="username" value="TUTORIAL"/>
        <property name="password" value="TUTORIAL"/>
        <property name="defaultAutoCommit" value="false"/>
    </bean>
    
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="dataSource" ref="dataSource"/> <!-- ref : 해당 bean을 참조 -->
    </bean>
    
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSession"/> <!-- ref : 해당 bean을 참조 -->
    </bean>
cs

5. VO 생성

5-1. MVC 패턴의 패키지로 ~board.model.vo 형식의 패키지를 만들어준 후, 객체 생성.

5-2. 캡슐화를 위해 private으로 필드변수를 선언.

5-3. 시/분/초 를 표기 하기 위하여 utilDate를 import해준다.

6. Alt + Shift + S로 생성자, toString 및 Getter & Setter 생성

6-1. 기본생성자 : [ Generate Constructor using Fields... ]

6-2. 필드변수 생성자 : [ Generate Constructors from Superclass... ]

6-3. Getter & Setter : [ Generate Getters and Setters... ]

6-4. toString : [ Generate toString()... ]

7. 완성된 VO

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.bootstrap.tutorial.board.model.vo;
 
import java.util.Date; // 시,분,초 를 표시할 수 있게 java.sql.Date가 아닌 util.Date를 import 한다.
 
public class Board {
    
    private int bNo;                // 게시글 번호
    private String bWritter;        // 작성자
    private String bPassword;        // 비밀번호
    private String bPasswordEnc;    // 비밀번호 (암호화)
    private String bSubject;        // 제목
    private String bContent;        // 내용
    private Date bRegDate;            // 등록일
    private Date bModDate;            // 수정일
    private int bCount;                // 조회수
    
    public Board() {
        super();
    }
 
    public Board(int bNo, String bWritter, String bPassword, String bPasswordEnc, String bSubject, String bContent,
            Date bRegDate, Date bModDate, int bCount) {
        super();
        this.bNo = bNo;
        this.bWritter = bWritter;
        this.bPassword = bPassword;
        this.bPasswordEnc = bPasswordEnc;
        this.bSubject = bSubject;
        this.bContent = bContent;
        this.bRegDate = bRegDate;
        this.bModDate = bModDate;
        this.bCount = bCount;
    }
 
    public int getbNo() {
        return bNo;
    }
 
    public void setbNo(int bNo) {
        this.bNo = bNo;
    }
 
    public String getbWritter() {
        return bWritter;
    }
 
    public void setbWritter(String bWritter) {
        this.bWritter = bWritter;
    }
 
    public String getbPassword() {
        return bPassword;
    }
 
    public void setbPassword(String bPassword) {
        this.bPassword = bPassword;
    }
 
    public String getbPasswordEnc() {
        return bPasswordEnc;
    }
 
    public void setbPasswordEnc(String bPasswordEnc) {
        this.bPasswordEnc = bPasswordEnc;
    }
 
    public String getbSubject() {
        return bSubject;
    }
 
    public void setbSubject(String bSubject) {
        this.bSubject = bSubject;
    }
 
    public String getbContent() {
        return bContent;
    }
 
    public void setbContent(String bContent) {
        this.bContent = bContent;
    }
 
    public Date getbRegDate() {
        return bRegDate;
    }
 
    public void setbRegDate(Date bRegDate) {
        this.bRegDate = bRegDate;
    }
 
    public Date getbModDate() {
        return bModDate;
    }
 
    public void setbModDate(Date bModDate) {
        this.bModDate = bModDate;
    }
 
    public int getbCount() {
        return bCount;
    }
 
    public void setbCount(int bCount) {
        this.bCount = bCount;
    }
 
    @Override
    public String toString() {
        return "Board [bNo=" + bNo + ", bWritter=" + bWritter + ", bPassword=" + bPassword + ", bPasswordEnc="
                + bPasswordEnc + ", bSubject=" + bSubject + ", bContent=" + bContent + ", bRegDate=" + bRegDate
                + ", bModDate=" + bModDate + ", bCount=" + bCount + "]";
    }
}
 
cs
728x90