JSP

[JSP] JSP로 CRUD 게시판 만들기 (1) - 패키지 및 DB 생성

Song hyun 2024. 7. 15. 09:22
728x90
반응형

[JSP] JSP로 CRUD 게시판 만들기 (1) - 패키지 및 DB 생성

 

1. 다이나믹 웹 프로젝트 및 패키지 만들기

(1) src/main/java: 컨트롤러, 모델, 레파지토리, 유틸 총 4개의 패키지 생성.

(데이터베이스 쿼리 전송 및 수정 담당)

(2) resources 폴더: css, 이미지, js 코드 폴더 생성 (프론트 담당)

(3) views 폴더: 게시판, 댓글, 로그인 JSP 폴더 생성 (1과 2를 연결, 사용자에게 화면 보여줌)

 

 

2. 라이브러리 적용하기

*사용 라이브러리

-HikariCP 라이브러리

-Jakarta-JSTL 라이브러리 2개

-Lombok 라이브러리

-MySQL connector Java 라이브러리

-SLF4J 라이브러리 (로깅용)

 

 

 

 

3. 테이블 설계하기 - MySQL 사용

(1) users 테이블: 사용자 정보 테이블

(2) board 테이블: 게시글 테이블

(3) comments 테이블: 댓글 테이블

drop database if exists db_tboard;
create database db_tboard;
use db_tboard;

-- users 테이블 생성
create table users (
	id int auto_increment primary key,
    username varchar(50) not null unique,
    password varchar(50) not null,
    email varchar(50) not null unique,
    created_at timestamp default current_timestamp
);

-- board 테이블 생성
create table board(
	id int primary key auto_increment,
    user_id int,
    title varchar(255) not null,
    content text not null,
    created_at timestamp default current_timestamp,
    foreign key (user_id) references users(id) on delete cascade
);

create table comments(
	id int auto_increment primary key,
    board_id int,
    user_id int,
	content text not null,
    created_at timestamp default current_timestamp,
    foreign key (board_id) references board(id) on delete cascade,
    foreign key (user_id) references users(id) on delete cascade
);

-- 기존 테이블 삭제 시, auto-increment 초기화
truncate table comments;
truncate table board;
truncate table users;

-- users 테이블에 샘플 데이터 삽입
INSERT INTO users (username, password, email) VALUES ('user1', 'asd123', 'user1@example.com');
INSERT INTO users (username, password, email) VALUES ('user2', 'asd123', 'user2@example.com');
INSERT INTO users (username, password, email) VALUES ('user3', 'asd123', 'user3@example.com');

-- board 테이블에 샘플 데이터 삽입
INSERT INTO board (user_id, title, content) VALUES (1, '자바의 장점', '자바는 플랫폼 독립적이며, 풍부한 라이브러리를 제공합니다.');
INSERT INTO board (user_id, title, content) VALUES (2, '파이썬과 머신러닝', '파이썬은 머신러닝에 최적화된 언어로, 다양한 라이브러리를 지원합니다.');
INSERT INTO board (user_id, title, content) VALUES (3, '자바스크립트와 웹 개발', '자바스크립트는 웹 개발의 핵심 언어로, 프론트엔드와 백엔드 모두에서 사용됩니다.');

INSERT INTO board (user_id, title, content) VALUES (1, 'Spring 프레임워크', 'Spring은 자바 기반의 강력한 애플리케이션 프레임워크입니다.');
INSERT INTO board (user_id, title, content) VALUES (2, 'Django를 활용한 웹 개발', 'Django는 파이썬 기반의 웹 프레임워크로, 빠른 개발이 가능합니다.');
INSERT INTO board (user_id, title, content) VALUES (3, 'React로 인터랙티브 웹 만들기', 'React는 사용자 인터페이스 구축을 위한 자바스크립트 라이브러리입니다.');

INSERT INTO board (user_id, title, content) VALUES (1, 'JSP와 서블릿', 'JSP와 서블릿을 사용하여 동적인 웹 페이지를 개발할 수 있습니다.');
INSERT INTO board (user_id, title, content) VALUES (2, 'Flask의 장점', 'Flask는 가벼운 파이썬 웹 프레임워크로, 유연성과 확장성이 뛰어납니다.');
INSERT INTO board (user_id, title, content) VALUES (3, 'Node.js로 서버 개발', 'Node.js는 자바스크립트를 사용하여 서버 측 애플리케이션을 개발할 수 있습니다.');

INSERT INTO board (user_id, title, content) VALUES (1, '첫 게시글 작성', '첫 게시글을 작성했습니다. 앞으로 자주 올리겠습니다.');
INSERT INTO board (user_id, title, content) VALUES (2, '두 번째 게시글', '두 번째 게시글입니다. 댓글 많이 달아주세요.');
INSERT INTO board (user_id, title, content) VALUES (3, '안녕하세요', '안녕하세요, 오늘도 즐거운 하루 되세요.');

-- comments 테이블에 샘플 데이터 삽입
INSERT INTO comments (board_id, user_id, content) VALUES (1, 2, '자바의 장점에 대해 잘 읽었습니다.');
INSERT INTO comments (board_id, user_id, content) VALUES (1, 3, '좋은 글 감사합니다.');
INSERT INTO comments (board_id, user_id, content) VALUES (2, 1, '파이썬과 머신러닝에 관한 글 잘 봤습니다.');
INSERT INTO comments (board_id, user_id, content) VALUES (2, 3, '유익한 정보 감사합니다.');
INSERT INTO comments (board_id, user_id, content) VALUES (3, 1, '자바스크립트에 대해 더 알고 싶습니다.');
INSERT INTO comments (board_id, user_id, content) VALUES (3, 2, '도움이 많이 되었습니다.');

select * from users;
select * from board;
select * from comments;

drop table users;
drop table board;
drop table comments;

select*from comments;
delete from users where id=1;

desc users;

 

*CASCADE란?

->CASCADE는 데이터베이스 관리 시스템에서 외래 키 제약 조건을 설정할 때 사용되는 옵션 중 하나이다. 이 옵션은 참조 무결성을 유지하기 위해, 부모 테이블의 행이 변경될 때 자식 테이블의 행이 자동으로 동일한 변경을 적용하게 만든다.

 

->CASCADE의 종류

(1) ON DELETE CASCADE

: 부모 테이블에서 행이 삭제될 때, 해당 행을 참조하는 모든 자식 테이블의 행들도 자동으로 삭제된다.

 

(2) ON UPDATE CASCADE

: 부모 테이블의 기본 키 값이 업데이트 될 때, 해당 기본 키를 참조하는 자식 테이블의 외래 키값도 자동으로 업데이트 된다.

728x90
반응형