게시판 만들기 - BACKEND
in Web Dev on Java Spring
- Spring 을 사용해 다음과 같은 아주 간단한 게시판을 만드려고 한다.
- index 페이지에서는 회원가입을 한 뒤 로그인을 한다.
- board 페이지로 들어가서 게시판이 보인다.
- 게시글을 누르면 post 페이지가 보이고 게시글과 댓글이 보인다.
전체적인 흐름
1. db 테이블 설계, 만들기 main/resources에 .sql 파일에 테이블이랑 시퀀스 생성 코드 저장
2. project facet 에서 자바버전, pom.xml 에서 java와 spring 버전 변경 (자바 : 1.8, spring : 4.3.6)
3. db.properties 파일에 oracle db 연결 정보 생성
4. 라이브러리 추가
6. mybatis-config.xml , root-context.xml 세팅, mappers 폴더 만들어서 mapper파일 생성
7. vo 만들어줌 (vo 만들 시 db와 변수 타입 맞추기)
9. interface 만들기 //설계도!
8. JSP, CONTROLLER, REPOSITORY , MAPPER.XML 을 오가며 코드 구현
1. DB 테이블 만들기
- 총 세개의 테이블, member, board, reply 를 만들 것이고, 각각 테이블에 어떤 변수가 있어야하는지 정한 후 Oracle SQL에서 table을 생성해준다.
- member: user를 저장하는 테이블이 필요하다.
- board: 게시글을 저장하는 테이블이 필요하다. 여기서 userid는 foreign key로 줄 것 같지만 아니다. 회원탈퇴를 해도 글은 계속 남아있어야 하기 때문에 member 테이블과 관계를 맺지 않는다.
- reply: 댓글을 저장하는 테이블이 필요하다.
- 테이블과 함께 시퀀서를 만들어준다. 그리고 쿼리는 저장해 놓는게 좋아서 board.sql 파일에 저장해놓는다.
2. java, spring 버전 바꾸기
- project facet 에서 java를 1.8로,
- pom.xml 에서 java를 1.8, spring 을 4.3.6으로
3. db.properties 파일
- Orcle SQL 에 접속할 수 있는 정보를 담은 파일을 src/main/resources에 만들어준다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
user=hr
password=hr
4. library 추가
- ojdbc6.jar 을 web-inf 안에 lib폴더를 만들어 갖다 놓는다.
- pom.xml에 mybatis.jar, mybatis-spring.jar, spring-jdbc.jar 의 dependency 설정을 추가해준다. 자세히
- jstl을 쓸 것이기 때문에, pom.xml에서 servlet-api, jsp-api 버전 또한 수정해준다.자세히
- lombok library 를 추가해준다. 자세히
5. xml 파일을 만든다.
mybatis-config.xml
- 아래와 같이 mappers 태그 아래에 mapper resource 를 넣어주면 된다. mapper file을 아직 안 만들어서 만든 후에 다시 채워넣을 것이다.
<configuration>
<mappers>
<mapper resource=""/>
<mapper resource=""/>
</mappers>
</configuration>
root-context.xml
- src main webapp web-inf spring 의 root-context.xml 코드 를 넣어준다.
<summary>코드 보기</summary>
<pre><?xml version="1.0" encoding="UTF-8"?>
</pre></details>
mapper.xml
- mapper를 여러가지 만들 것이기 때문에 src/main/resouces에 mappers 폴더를 만들어 거기에 mapper.xml을 넣는다.
- Table이 세개니까 mapper또한 세개를 만들어준다.
6. VO를 만든다.
- board VO , memberVO, replyVO를 만든다.
<summary>board VO 코드 보기</summary>
<pre>package sesoc.intern.board.vo; import lombok.Data; @Data public class Board {
private int boardseq;
private String userid;
private String title;
private String message;
private int hitcount;
private String regdate;
private String originalfile;
private String savedfile; }
</pre>
<summary>member VO 코드 보기</summary>
<pre>package sesoc.intern.board.vo; import lombok.Data; //vo 만들 때 db테이블 변수 이름이랑 똑같이 해주는게 가장 좋다. @Data public class Member {
private String userid;
private String userpwd;
private String username;
private String gender;
private String email;
private String phone;
private String hobby;
private String birth;
private String address; }</pre>
<summary>replyVO 코드 보기</summary>
<pre>package sesoc.intern.board.vo; import lombok.Data; @Data public class Reply {
private int replyseq;
private int boardseq;
private String userid;
private String replytext;
private String regdate; }</pre>
7. Interface를 만든다.
public interface memberMapper {
public int join(Member mebmer); //회원가입
public Member selectOne(Map<String,String> map);//조회 (로그인시 사용할 것이다)
public int update(Member member);
public int delete(Map<String,String> map);
}
public interface BoardMapper {
public List<Board> boardList(Map<String, Object> map);
public Board boardDetail(int boardseq);
public int boardDelete(int boardseq);
public int boardUpdate(Board board);
public int boardRegist(Board board);
//글이 몇개 있는지 왜 중요하냐면, paging 할 때 중요하다. select count(*) from board
public int hitCount(int boardseq);
public int getBoardCount(Map<String, Object> map);
}
◇ Spring 게시판 포스팅 시리즈 ◇