개발환경 : STS4
서버 : Tomcat9.0
DB : MySQL
필요 준비물 : lombok.jar , mysql-connector-java-8.0.16.jar
앞으로의 시스템 흐름을 이해하기위해 가장 먼저 숙지 해야할 그림입니다.
이번 시간에는 그림 아래부분에있는 DB를 생성하고 , 그것을 담을 Model객체를 만들어보겠습니다.
1. Dynamic Web Project - blog 생성 , Runtime Target = Tomcat9.0 으로 설정
저는 만드는 척만 하겠습니다.
1.a 21년 5월 23일 추가
옛날에는 새 프로젝트를 만들면 Dynamic Web Project 를 선택할 수 있었는데, STS의 버전이 업그레이드 되면서 해당 프로젝트의 생성을 권장하지 않아서 그런지 기본 선택목록에서 아예 제외된것 같습니다.
Web Project Plugin 설치방법
https://goodteacher.tistory.com/329
Help - install new software - ...
2. MySQL Workbench 실행, 테이블생성 을 하기전에~~~~
유저 생성
create user 'bloguser'@'%' identified by '비밀번호';
GRANT ALL PRIVILEGES ON *.* TO 'bloguser'@'%';
create database blog;
use blog;
새로 만든 bloguser로 접속합시다
3. 테이블 생성
drop table user;
drop table board;
drop table reply;
CREATE TABLE user(
id int primary key auto_increment,
username varchar(100) not null unique,
password varchar(100) not null,
email varchar(100) not null,
address varchar(100),
userRole varchar(20),
createDate timestamp
) ;
CREATE TABLE board(
id int primary key auto_increment,
userId int,
title varchar(100) not null,
content longtext,
readCount int default 0,
createDate timestamp,
foreign key (userId) references user (id)
);
CREATE TABLE reply(
id int primary key auto_increment,
userId int,
boardId int,
content varchar(300) not null,
createDate timestamp,
foreign key (userId) references user (id) on delete set null,
foreign key (boardId) references board (id) on delete cascade
);
4. Model 생성
com.cos.blog.domain 패키지 안에 board , reply , user 패키지생성.
각각의 패키지에 각각의 class 생성.
package com.cos.blog.domain.board;
import java.sql.Timestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Board {
private int id;
private int userId;
private String title;
private String content;
private int readCount;
private Timestamp createDate;
}
package com.cos.blog.domain.reply;
import java.sql.Timestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Reply {
private int id;
private int userId;
private int boardId;
private String content;
private Timestamp createDate;
}
package com.cos.blog.domain.user;
import java.sql.Timestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
private int id;
private String username;
private String password;
private String email;
private String address;
private String userRole; // admin, user
private Timestamp createDate;
}
lombok.jar 설치 하셔야합니다
5. Dao(DataAccessObject) 생성
Dao란 무엇인가??
DB에 접근하여 조회, 삽입, 수정, 삭제의 기능만을 담당하는 객체입니다.
그림에서 Model과 DB 사이에 위치하고있습니다.
기능은 나중에 구현하고 빈 클래스만 만들어주세요
6. DB연결
tomcat.apache.org/tomcat-9.0-doc/index.html
Tomcat Document에 가보시면 DB연결을 하기위한 세팅방법이 나와있습니다.
설명해드리겠습니다.
META-INF 와 WEB-INF 에 context.xml , web.xml 을 만들어주세요.
xml 파일의 파일명은 반드시 소문자로하셔야합니다. 대문자를 인식하지못합니다.
두 개의 파일은 원래 Tomcat의 설정 파일인데 add 해서 사용한다는 느낌? 같습니다
1. context.xml
Document 에서 가져왔습니다
주석은 필요없고 driverClassName이랑 url에 서버시간만 붙여주시면 됩니다
수정안하고 해도 가능하긴할텐데 cj.jdbc가 더 최신버전인거같습니다 .
<context>
<Resource name="jdbc/TestDB" auth="Container"
type="javax.sql.DataSource" maxTotal="100" maxIdle="30"
maxWaitMillis="10000" username="bloguser" password="비밀번호"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul" />
</context>
2. web.xml
저도 방금 봤는데 버전 차이가 조금 있네요
밑에걸로 복붙 해주세요
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
3. DB.java + DBTest.java 생성
3-1 DB.java
package com.cos.blog.config;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class DB {
public static Connection getConnection() {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
Connection conn = ds.getConnection();
return conn;
} catch (Exception e) {
System.out.println("DB연결실패");
e.printStackTrace();
}
return null;
}
jdbc/oracle 과 jdbc/TestDB 가 다릅니다
DB연결하는 기능을 함수화 했습니다.
3-2 DBTest.java
프로젝트에서 우클릭 - Build Path
Add Library - JUnit4 선택
package com.cos.blog.test;
import static org.junit.Assert.assertNotNull;
import java.sql.Connection;
import org.junit.Test;
import com.cos.blog.config.DB;
public class DBTest {
@Test
public void DBConnectionTest() {
Connection conn2 = DB.getConnection();
assertNotNull(conn2);
}
}
방금 DB에서 만든 getConnection() 함수를 사용합니다
@Test 어노테이션을 이용하여 테스트를 할 수 있습니다.
근데 JUnit 은 제가 아직 사용을 잘 안해봐서 모르겠습니다
테스트 결과
옛날에 만든거라 사용법을 아직 잘 몰라서 어떻게 성공시키는지 모르겠네요
DB연결은 잘 되긴합니다
'국비지원 Spring프레임워크 > JSP dynamic web project blog' 카테고리의 다른 글
blog 6. 글 목록 페이징 하기 (0) | 2021.02.23 |
---|---|
blog 5. 글 목록 보기 (0) | 2021.02.16 |
blog 4. URI 직접 접근 필터링하기 (0) | 2021.01.29 |
blog 3. 글작성, DB INSERT (0) | 2021.01.27 |
blog 2. 회원가입, 로그인 만들기 (0) | 2021.01.11 |