스프링으로 게시판 만들어 보기 ( 프로젝트 생성, 테이블 설계 )

2019. 6. 30. 15:36개발공부/spring

스프링 프레임워크를 이용한 게시판 사이트 개발

스프링 프레임워크 복습과 이전에 게시판을 만들 때는 몰랐던 기능들과 라이브러리들을 사용해서

공부 목적으로 게시판 사이트를 구현해보았습니다.

이전에 비하면 늘었긴 하지만 매번 게시판을 구현할 때마다 또 다른 점에서 색다르고 막히는 부분이 존재하는 것 같습니다.  기본적인 CRUD작업을 하면서 최대한 새로 배운 것들을 활용해서 작업하려고 했습니다.

 

 

 

기본 설정

프로젝트를 생성

 

<properties>
	<java-version>1.8</java-version>
	<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
	<org.aspectj-version>1.6.10</org.aspectj-version>
	<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

스프링 버전 : 5.0.7

자바 1.8

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <compilerArgument>-Xlint:all</compilerArgument>
          <showWarnings>true</showWarnings>
          <showDeprecation>true</showDeprecation>
    </configuration>
</plugin>

메이븐 jdk 버전을 1.8로 변경

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<scope>test</scope>
</dependency>

test를 할 때 사용할 junit의 버전을 4.12로 변경

<repositories>
	<repository>
		<id>codelds</id>
		<url>https://code.lds.org/nexus/content/groups/main-repo</url>
	</repository>
</repositories>

<!-- ojdbc6 -->
<dependency>
	<groupId>com.oracle</groupId>
	<artifactId>ojdbc6</artifactId>
	<version>11.2.0.3</version>
</dependency>

ojdbc6 ( oracle 라이브러리 ) *저작권 문제로?? 메이븐으로 ojdbc는 다운로드가 안됩니다. repositories를 추가하고 다운 

<!-- jackson -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.8</version>
</dependency>

jackson ( json 라이브러리 )

<!-- lombok -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.0</version>
	<scope>provided</scope>
</dependency>

lombok ( 로그, getter, setter에 필요 )

<!-- hikariCP -->
<dependency>
	<groupId>com.zaxxer</groupId>
	<artifactId>HikariCP</artifactId>
	<version>2.7.8</version>
</dependency>

hikariCP ( DB 커넥션 풀 )

<!-- Httpclient -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.2</version>
</dependency>

httpclient ( 세션 리스너 방문자 수 차트에 사용 )

<!-- Mybatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.4.6</version>
</dependency>
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.3.2</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>5.0.7.RELEASE</version>
</dependency>

mybatis, mybatis-spring, spring-jdbc

mybatis - 마이 바티스 기존 jdbc를 사용한 개발방식에서 코드의 양을 줄여주고 개발 시간을 단축시켜주는 프레임워크

mybatis-spring - 마이 바티스와 스프링을 연결시켜주는 라이브러리

spring-jdbc - jdbc 라이브러리

 

테이블 설계

create table springmember( 
    member_no number constraint member_no_pk primary key, 
    member_id varchar2(15 char) constraint member_id_nn not null constraint member_id_uk unique, 
    member_pass varchar2(32 char) constraint member_pass_nn not null, 
    member_phone varchar2(11 char) constraint member_phone_nn not null constraint member_phone_uk unique, 
    member_email varchar2(100 char) constraint member_email_nn not null, 
    member_profile varchar2(100 char) constraint member_profile_nn not null,
    member_joinDate date default sysdate constraint member_joindate_nn not null,
    member_isshow char(1) default 'Y' constraint member_isshow_nn not null
);

create table springboard( 
    board_No number constraint board_no_pk primary key, 
    board_Category varchar2(15 char) constraint board_category_nn not null, 
    member_no number constraint board_writer_nn not null, 
    board_Title varchar2(50 char) constraint board_title_nn not null, 
    board_Content varchar2(2048 char) constraint board_content_nn not null, 
    board_likes number default 0 constraint board_likes_nn not null, 
    board_replycnt number default 0 constraint board_replycnt_nn not null, 
    board_Date date default sysdate constraint board_date_nn not null, 
    board_UpdateDate date constraint board_updatedate_nn not null, 
    board_Isshow char(1) default 'Y' constraint board_isshow_nn not null, 
    constraint board_writer_fk foreign key (member_no) references springmember(member_no) 
); 
create table springReply( 
    reply_No number constraint reply_no_pk primary key, 
    board_No number constraint reply_boardno_nn not null, 
    member_No number constraint reply_writer_nn not null, 
    reply_Content varchar2(1024 char) constraint reply_content_nn not null, 
    reply_Date date default sysdate constraint reply_date_nn not null, 
    reply_isshow char(1) default 'Y' constraint reply_isshow_nn not null constraint reply_isshow_ck check(reply_Isshow in ('Y','N')), 
    reply_Update date constraint reply_update_nn not null, 
    reply_Thumbs number constraint reply_thumbs_nn not null,
    reply_group number constraint reply_group_nn not null,
    reply_parent number,
    reply_indent number constraint reply_indent_nn not null, 
    constraint reply_bno_fk foreign key (board_No) references springBoard(board_No), 
    constraint reply_writer_fk foreign key (member_no) references springMember(member_no) 
);
create table springboardthumbs(
    board_no number constraint thumbs_boardno_nn not null,
    member_no number constraint thumbs_member_no not null,
    constraint thumbs_boardno_fk foreign key (board_no) references springboard(board_no),
    constraint thumbs_memberno_fk foreign key (member_no) references springmember(member_no)
);

create table springreplythumbs(
    reply_no number constraint replythumbs_replyno_nn not null,
    member_no number constraint replythumbs_member_no not null,
    constraint replythumbs_boardno_fk foreign key (reply_no) references springreply(reply_no),
    constraint replythumbs_memberno_fk foreign key (member_no) references springmember(member_no)
);
create table springboardfile(
    file_no number constraint file_no_pk primary key,
    board_no number constraint file_boardno_nn not null,
    file_name varchar2(50 char) constraint file_name_nn not null,
    file_realname varchar2(50 char) constraint file_realname_nn not null,
    constraint file_boardno_fk foreign key (board_no) references springboard(board_no)
);
create sequence springmember_seq;
create sequence springboard_seq;
create sequence springReply_seq;
create sequence springboardfile_seq;

springmember -> 회원 정보를 담을 테이블

( 회원번호, 아이디, 비밀번호, 전화번호, 이메일, 프로필 사진 )

springboard -> 게시글 정보를 담을 테이블

( 글번호, 카테고리, 작성자, 제목, 내용, 좋아요 수, 댓글 수, 작성일, 수정일, 삭제 여부 )

springreply -> 댓글 정보를 담을 테이블   ( 게시글 1 : N 댓글)

( 댓글번호, 글 번호, 작성자, 내용, 작성일, 삭제 여부, 수정일, 추천수, 부모 번호, 공백수(몇 칸 떨어뜨릴지) )

springboardthumbs -> 게시글 추전 테이블 ( 게시글 N : M 유저 )

( 게시글번호, 회원번호 )

springreplythumbs -> 댓글 추천 테이블 ( 댓글 N : M 유저 )

( 댓글번호, 회원번호 )

springboardfile -> 게시글 첨부 파일 ( 게시글 1 : N 파일 )

( 파일번호, 게시글 번호, 저장한 파일 이름, 업로드한 원래 파일 이름 )