본문 바로가기
[ Developer ]/Web - Servlet JSP

[JSP Web] 회원 기록 남기기 Operation History

by 김현섭. 2016. 6. 5.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Operation History
사용자나 관리자가 하는 행동들을 모두 기록해줘야 한다
우선 사용자나 관리자가 할 수 있는 기능들을 예상한다

사용자
  • 회원가입
  • 로그인
  • 로그아웃
  • 글쓰기
  • 목록보기
  • 글 내용보기
  • 수정하기
  • 삭제하기
  • 추천하기
  • 댓글 달기
  • 파일 다운받기

위와 같은 기능을 할 때 사용자들의 로그를 기록해서 남길 수 있어야 법적인 문제나
유용한 자료로 사용이 가능하다

우선 HISTORY TABLE을 생성해준다
History는 사용자가 행동하는 로그에 대해서 저장하는 테이블이다


그리고 난 후 HISTORY_ID_SEQ 시퀀스를 생성하고 새로운 패키지를 생성한다
그리고 난 후 VO를 생성해서 OPER_HIST가 갖는 요소들을 정의해준다


그리고 난 후 DAO와 Biz를 생성해준다
Biz의 기본 틀을 생성해 준다
Biz는 서블릿에서 각 기능들의 서블릿에서 넘겨받은 기능을 DAO로 넘겨주는 역할만을 한다


그 후 DAO 메소드를 정의하기 위해서 DAO를 작성한다
이전의 INSERT시키는 소스를 이용하면 된다
메소드를 정의해 준 후 쿼리를 생성해 준다


그리고 난 후 쿼리를 만든 쿼리로 대체 해주고 ? 물음표 값들을 set 시켜주기만 하면 된다


우선 history VO 패키지 안에 인터페이스를 생성한다
ActionCode와 Description을 생성한다



그리고 VO 패키지 안에 클래스를 하나 생성한다

로그로 저장되는 위의 Description에서의 [%s]와 같은 문구들을 다른 String 문자열로 대체를 해주는 역할을 하는 
BuildDescription을 정의한다
아래와 같이 ...이 있는데 배열으로 가변적으로 넣을 수 있다
, 콤마를 이용해서 여러 파라미터로 넘길 수 있다는 뜻

BuildDescription


위의 BuildDescription에서 format은 인터페이스에 선언된 %s를 문자로 변경을 해주는 역할이다
format에 [%s] 님이 로그인 했습니다가 들어가고 args는 바뀔 문자가 들어간다



index.jsp에서 session을 이용해 이미 로그인한 사용자는 로그인 페이지가 안보이게 하고 history에 추가한다


이제는 로그인이 되지 않은 사람을 기록하기 위해 기능을 추가한다
우선 Description에 문구를 추가해 준다


그리고 난 후 index.jsp에서 if 구절 밑에 새로운 히스토리를 추가하는 것을 추가해준다

Login 페이지 방문 Log


그리고 난 후 로그인 한다면 히스토리가 기록되는 것을 볼 수 있다



이제 DoLoginServlet에서 로그인 히스토리를 기록한다
로그인 성공과 실패를 구별해서 redirect 시키므로 두개 다르게 history를 기록하게 메소드를 정의한다


# 목록 페이지 로그
이제는 목록 페이지를 볼 때와 페이징을 넣는 것을 히스토리에 기록한다
또한 검색을 하는 액션 까지 히스토리 처리한다


ActionCode에 acticle을 추가한다


그리고 로그에 저장될 내용을 Description에 추가한다


ArticleListServlet에서 try catch 부분에 히스토리를 저장하는 구문을 넣어준다
try 부분은 Paging 선택 시 실행되는 부분이므로 LIST_PAGING 로그를 저장해준다

historyVO를 set 시키는 부분에서 IP와 MemberID, URL, ActionCode는 중복 되므로 
try~catch 이전에 실행시켜 중복 코드를 피해준다


# 게시글 상세 페이지 로그
이제는 Detail 즉 게시글의 상세 정보를 볼 때 히스토리를 등록한다
그러나 자꾸 반복되는 과정이 있다

historyVO에 Ip와 MemberId나 URL을 체크하느 부분이다
이런 부분을 필터로 반복 시켜줄 수 있다

SessionCheckFilter에서 작성한다
중복되는 부분인 IP와 MemberId, URL을 저장할 때 필터를 통해 어느 페이지마다 접속 시
필터를 거치게 되므로 저장되서 OperationHistoryVO로 파라미터를 넘겨 받을 수 있게 된다


DetailArticleServlet에서 히스토리를 추가한다
historyVO에 필터에 정의해서 파라미터로 보낸 VO를 받아오고 
이후에 로그에 저장될 값들만 set 시켜주면 된다
Description에서 멤버ID는 필터에서 넣은 것에 있으므로 historyVO.getMemberId()를 통해서 가져온다


articleId + ""는 숫자를 문자로 바꿔주기 위함이다

# 게시글 상세페이지 로그 작성 시 어느 글인지 명시
게시글을 읽을 때 어떤 글을 읽었는지도 저장을 하기 위해서 historyVO에 etc라는 String 변수를 선언한다
물론 Toad에서도 테이블을 추가시켜줘야 한다


작성이 되었다면 DB에 접근해서 History를 입력하는 DAO에서 수정을 해줘야 한다
입력할 항목이 하나 더 추가되었기 때문이다

쿼리를 먼저 변경해준다


쿼리에서 ETC를 추가시켜주고 DAO에서 받아오는 구문을 추가해준다


그리고 로그에 저장될 문구인 Description을 정의해준다


Detail 서블릿에서 ActionCode와 Description 밑에 ETC를 하나 더 추가시켜준다


DB에 저장된 모습