개발환경 : 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

 

STS에서 Dynamic Web Project 개발

STS에서 Dynamic Web Project 개발 STS는 왜 이렇게 원래의 legacy 방밥을 통한 개발을 싫어할까? Boot를 밀고 싶은 맘이야 충분히 공감하지만 legacy도 좀 끼워주면 안되나 싶다. 사라져버린 Dynamic Web Program..

goodteacher.tistory.com

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

 

Apache Tomcat 9 (9.0.41) - Documentation Index

This is the top-level entry point of the documentation bundle for the Apache Tomcat Servlet/JSP container. Apache Tomcat version 9.0 implements the Servlet 4.0 and JavaServer Pages 2.3 specifications from the Java Community Process, and includes many addit

tomcat.apache.org

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연결은 잘 되긴합니다

 

 

 

+ Recent posts