jsp

chap21, chap22 회원제 게시판 구현

일상다반ㅅㅏ 2018. 11. 25. 17:04

회원제 게시판 구현 과정을 되짚어보고

예제프로젝트를 진행하며 앞에서 슬쩍 지나간 부분을 다시 살펴본다.


1. 회원 관련 주요 기능

- 회언 가입

- 회원 정보 수정

- 로그인/로그아웃

- 로그인한 사람만 특정 기능 실행



2. 회원제 게시판 기본 셋팅


2-1 데이터베이스 생성

- user 테이블


2-2 프로젝트 생성

WebContent/WEB-INF/lib 파일들의 용도

1) mysql-connector-java-5.1.46-bin.jar

- JDBC (Java DataBase Connectivity) 

: 자바에서 데이터베이스와 관련된 작업을 처리할 때 사용하는 API이다. DBMS의 종류에 상관없이 하나의 JDBC API를 사용해서 데이터베이스 작업을 처리 할 수 있다. 


2) commons-dbcp2-2.1.jar / commons-pool2-2.4.1.jar / commons-logging-1.2.jar

- 커넥션 풀 (connection pool)

: 데이터베이스와 연결된 커넥션을 미리 만들어서 풀 소게 저장해 두고 있다가 필요할 때에 커넥션을 풀에서 가져다 쓰고 다시 풀에 반환하는 기법을 의미

- 다양한 커넥션 풀 라이브러리가 존재하는데 오픈 소프 프로젝트인 DBCP API를 사용했다.

- 커넥션 풀의 특징

> 풀 속에 미리 커넥션이 생성되어 있기 때문에 커넥션을 생성하는데 드는 연결 시간을 줄일 수 있다.

> 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수가 일정하게 유지된다.

3) jstl-1.2.jar

- JSTL (JSP Standard Tag Library)

: JSP는 <jsp:include>와 같은 태그를 개발자가 추가할 수 있는 기능을 제공하는데 이를 커스텀 태그라고 한다. 커스텀 태그 중에서 많이 사용되는 것들을 모아서 JSTL이라는 표준을 만들었다.

: 스크립드릿 코드의 사용을 줄이면서 더욱 간결하고 이해하기 쉬운 JSP 코드를 작성할 수 있다.


2-3 커넥션 관련 코드 추가

- jdbc드라이버와 커넥션 풀 등 DB 연동을 하는 커넥션 관련 코드를 작성한다.


2-4 캐릭터 인코딩 필터 설정

- 모든 페이지에 utf8이 적용 되도록 한다.


2-5 MVC 컨트롤러 코드 추가

- MVC 모델2의 구조로 게시판을 제작한다.

-  18장 설명 참조



3. 회원 기능 구현


3-1 회원 가입

a) 기능명세

- 회원 가입 요청을 하면 입력을 위한 폼을 보여준다.

- 입력 폼에 아이디, 이름, 암호, 암호 확인을 입력하고 전송하면 가입에 성공한다.

- 동일한 아이디를 가진 회원이 존재하면 에러 메시지와 함께 다시 폼을 보여준다.

- 입력한 암호와 암호 확인이 일치하지 않으면 에러 메시지와 함께 다시 폼을 보여준다.


b) 구현코드

JoinHandler : 사용자의 회원가입 요청을 받는다. 사용자가 폼을 요청한 경우 폼을 보여준다. 폼 데이터를 전송한 경우 JoinService를 이용해서 회원 가입을 처리한다.

- joinForm.jsp : 회원 가입 폼을 보여준다.

- joinSuccess.jsp : 회원 가입 처리에 성공한 경우 결과를 보여준다.

JoinService : 회원 가입 기능을 구현한다.

- JoinRequest : 회원 가입할 때 필요한 데이터를 담는다. 폼에 입력한 값을 이 객체에 담아 JoinService에 전달한다.

MemberDao : member 테이블과 관련된 커리를 실행한다.

Member : member 테이블과 관련된 클래스로서 회원 데이터를 담는다.


3-2 로그인

a) 기능명세

- 로그인 요청을 하면 로그인을 위한 폼을 보여준다.

- 입력 폼에 아이디와 암호를 입력하고 전송하면 검사한다.

- 아이디나 암호가 맞지 않으면 에러 메시지와 함께 다시 폼을 보여준다.

- 아이디와 암호가 일지하면 첫 화면으로 이동한다.


b) 코드구현

LoginHandler : 사용자의 로그인 요청을 받는다. 사용자가 폼을 요청한 경우 폼을 보여주고, 폼 데이터를 전송한 경우 LoginService를 이용해서 인증을 처리한다.

- loginForm.jsp : 로그인 폼을 보여준다.

- index.jsp : board 웹 어플리케이션의 첫 화면을 보여준다.

LoginService : 인증 관련 기능을 구현한다.

- User : 인증에 성공한 사용자의 정보를 담는다. 이 객체를 세션에 저장한다.

MemberDao : member 테이블과 관련된 커리를 실행한다.

Member : member 테이블과 관련된 클래스로서 회원 데이터를 담는다.


3-3 비밀번호 변경

a) 기능명세

- 로그인을한 경우에만 비밀번호를 변경할 수 있다.

- 기존의 비밀번호와 비교하여 일치하는 경우에 비밀번호를 변경한다.


b) 코드구현

ChangePasswordHandler : 사용자의 암호 변경 요청을 처리한다. 사용자가 폼을 요청한 경우 폼을 보여주고, 폼 데이터를 전송한 경우ChangePasswordService를 이용해서 비밀번호를 변경한다.

- changePwdForm.jsp : 비밀번호 변경 폼을 보여준다.

- changePwdSuccess.jsp : 비밀번호 변경 성공시 화면을 보여준다.

ChangePasswordService : 특정 사용자의 암호를 변경하는 기능을 제공한다. 사용자 아이디, 현재 암호 신규 암호를 입력받아 비밀번호를 변경한다.

Member : 암호가 일치하는지 확인하고 암호를 변경한 데이터를 담는다.

MemberDao : member 테이블의 데이터를 수정하는 기능을 제공한다.



4. 게시판 기능 구현

게시판 기능 목록

- 게시글 등록

- 게시글 목록 조회

- 게시글 내용 조회

- 게시글 수정

- 게시글 삭제


4-1 게시글 등록

a) 기능 명세

- 게시글을 쓰기 위한 폼은 제목과 내용을 제공한다.

- 폼에 제목을 입력하지 않았으면 다시 폼을 보여준다.

- 로그인 한 사용자만 게시글 쓰기를 할 수 있다.


b) 코드구현

WriteArticleHandler : 사용자의 게시글 쓰기 요청을 처리한다. 사용자가 폼을 요청한 경우 폼을 보여주고, 폼 데이터를 전송한 경우 WriteArticleService를 이용해서  게시글을 등록한다.

- writeArticleForm.jsp : 게시글 등록 폼을 보여준다.

- writeArticleSuccess.jsp : 게시글 등록 성공시 보여준다.

WriteArticleService : 새로운 게시글 쓰기 기능을 제공한다. 두 DAO 클래스를 이용해서 기능을 구현한다.

WriteRequest : 신규 게시글을 등록할 때 필요한 데이터를 제공한다.

ArticleDao / ArticleContentDao : article 테이블과 article_content 테이블에 데이터를 삽입하는 기능을 제공한다.


4-2 게시글 목록 조회

a) 기능 명세

- 게시글 목록을 요청하면 10 게시글의 번호, 제목, 작성자, 조회수를 표 형식으로 출력한다.

- 게시글 목록을 요청할 때 페이지 번호를 지정하지 않으면, 가장 최근에 작성한 게시글 10개를 최근 순으로 보여준다.

- 요청한 페이지가 n이면, 가장 최근 게시글 순서로 (10*n)+1번째부터 10*(n+1) 번째까지 게시글 목록을 출력한다. 예를 들어, 게시글 번호가 1부터 55번인 게시글 55개가 있다면 55번 게시글이 가장 최근 게시글이다. 이때 요쳥한 페이지가 3이면 화면에 표시할 게시글 번호 기준으로 35번 게시글부터 26번 게시글까지 10개 게시글을 출력한다.

- 게시글 목록과 함께 이동 가능한 페이지 번호를 5페이지 단위로 표시한다.


b) 코드구현

ListArticleHandler : 사용자의 게시글 목록 요청을 받는다.

- listArticle.jsp : 게시글 목록 폼을 보여준다.

ListArticleService : 게시글 목록을 불러오는 기능과 페이지 수를 불러오는 기능을 제공한다.

ArticlePage : 불러온 게시글 목록 데이터를 담는다.

ArticleDao : article 테이블의 데이터를 불러오는 기능을 제공한다.


4-3 게시글 내용 조회

a) 기능 명세

- 요청한 번호에 해당하는 게시글의 내용을 출력한다.

- 게시글 조회수를 1 증가한다.

- 존재하지 않는 게시글 번호를 요청하면 페이지 없음 상태 코드(404)를 응답한다.


b) 코드구현

ReadArticleHandler : 사용자의 게시글 조회 요청을 받는다.

- readArticle.jsp : 게시글 조회 폼을 보여준다.

ReadArticleService : 게시글을 조회하는 기능을 제공한다.

ArticlePage : 조회한 게시글 데이터를 담는다.

ArticleDao / ArticleContentDao : article 테이블과 article_content 테이블에 데이터를 불러오는 기능을 제공한다.


4-4 게시글 수정

a) 기능 명세

- 게시글 수정 폼은 게시글 제목과 내용을 표시한다.

- 게시글 수정은 작성자만 할 수 있다.


b) 코드 구현

ModifyArticleHandler : 사용자의 게시글 수정 요청을 받는다.

- modifyArticleForm.jsp : 게시글 수정 폼을 보여준다. 기존에 작성된 게시글 내용을 보여준다.

- modifySuccess.jsp : 수정이 성공한 폼을 보여준다.

ModifyArticleService : 게시글을 수정하는 기능을 제공한다.

ModifyRequest : 수정할 데이터를 담는다.

ArticleDao / ArticleContentDao : article 테이블과 article_content 테이블에 데이터를 수정하는 기능을 제공한다.


4-5 게시글 삭제

a) 기능 명세

- 일반 삭제의 경우 게시글의 플래그만 변경하여 게시글 조회 시 불러오지 않도록 한다.

- 완전 삭제의 경우 명령어를 통해 데이터를 완전히 삭제한다.


b) 코드구현


DeleteArticleHandler / DelFlagUpdateHandler : 사용자의 게시글 삭제 요청을 받는다.

- deleteSuccess.jsp : 게시글 삭제완료가 성공한 폼을 보여준다.

DeleteArticleService : 게시글을 삭제하는 기능을 제공한다. 명령어를 통해 테이블에서 삭제처리를 한다.

DelFlagUpdateService : 게시글을 삭제하는 기능을 제공한다. 게시글의 삭제 상태를 변경한다.

DeleteArticleRequest : 삭제할 데이터를 담는다.

ArticleDao / ArticleContentDao : article 테이블과 article_content 테이블에 데이터를 삭제 / 삭제상태 변경하는 기능을 제공한다.