지난 게시글 "게시판 관리기능 : 여러 개의 게시판이 필요할 때 (1/)"에 이어서 실제로 프로젝트를 만들어서 구현을 해보는 글을 기술하고자 한다.

여기서는 다중 게시판 프로젝트 : bdmanager라는 이름으로 이를 기술한다.

1. 이클립스에서 새로운 스프링 MVC 프로젝트 bdmanager를 생성한다.

2. pom.xml을 변경 : Properties 중 java-version과 Spring version을 변경

  - Java-version 변경 : 1.6 -> 1.8    // java version은 새로운 버전을 사용

  - org.springframework-version 변경 : 3.1.1.RELEASE -> 4.1.7.RELEASE    // spring도 새로운 버전 사용

3. 이클립스에서 프로젝트 설정 변경

  - 프로젝트에서 우클릭 후 Properties 선택

  - Project Facets 선택

  - java : 1.6 -> 1.8로 변경        // 자바 버전을 새로운 것으로 맞추어 준다.

  - Runtimes에서 Apache Tomcat v8.5 선택하고 "Apply" 버튼 클릭    // Tomcat v8.5 사용

  - Java Build Path Libraries 확인    // 라이브러리를 맞추어 준다.

    + JRE System Library [jdk1.8.0_121] : 자바 버전에 따라 다름 (jdk8)

    + Apache Tomcat v8.5 [Apache Tomcat V8.5]

  - Java Compiler 1.8 확인 후 "OK" 버튼을 누른다.

4. Encoding UTF-8 설정

  - web.xml에 Encoding Filter 적용 : src/main/webapp/WEB-INF/web.xml

    <filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

     <param-name>forceEncoding</param-name>

     <param-value>true</param-value>

</init-param>

    </filter>

    <filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

    </filter-mapping>

  - views/home.jsp에 UTF-8 pageEncoding 추가

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

  -> 이렇게 하면 기본적인 프로젝트 설정 기본단계는 완료

5. 데이터베이스 테이블 생성

  - board table 생성    // 다중 게시판 운영을 위해 게시판에 대한 설정 정보를 저장하는 테이블

    /* board type

     *   기본 : 제목, 작성자, 비밀번호, 내용, 첨부 1

     *   갤러리 : 이미지 첨부만 가능, 첨부를 thumbnail로 처리

     *   자료실 : 첨부 5개까지 가능

     *   Q&A : 비밀글 표시 및 비밀번호 검사 후 내용 표시

     *   공지사항 : 글쓰기 버튼 비활성화, 관리자만 쓰기 가능

     *   방명록 : 쓰기, 삭제, 목록보기 기능

     * url    : 링크를 누르면 이동할 페이지의 주소

     * secret : 비밀글 표시 사용 여부

     * read_allow  : 읽기 권한 (all, login, customer, business, admin)

     * write_allow : 쓰기 권한 (all, login, customer, business, admin)

     * reply  : 댓글 권한 (all, login, customer, business, admin)

     * modify : 수정 권한 (writer, admin)

     * remove : 삭제 권한 (writer, admin)

     * download : 첨부물 다운로드 권한 (all, login, customer, business, admin)

     * upload : 첨부물 업로드 권한 (all, login, customer, business, admin)

     * nAttach : 첨부 파일 수

     * aSize : 첨부파일 하나의 크기 제약

     */


    create sequence board_sequence

increment by 1

start with 1

nomaxvalue

nocycle

cache 10;


    create table board (

board_id number(11) not null primary key,

board_name varchar2(40) not null,

board_type varchar2(20) not null,

url varchar2(100),

secret char(1) default 'F',

read_allow varchar2(10),

write_allow varchar2(10),

reply_allow varchar2(10),

modify_allow varchar2(10),

remove varchar2(10),

download varchar2(10),

upload varchar2(10),

nAttach number(1),

aSize varchar2(5),

display_format number(1) default 1,

creating_date timestamp default current_timestamp,

board_desc varchar2(100)

    );

  - article table : 게시글을 저장하는 테이블

    create sequence article_sequence

increment by 1

start with 1

nomaxvalue

nocycle

cache 10;


    /*

     * article : 게시글을 저장하는 테이블

     * - article_id : 게시글 ID

     * - board_id : 게시판을 구별하는 ID

     * - writer_name : 게시글 작성자 이름

     * - email : 게시글 작성자의 ID (ID를 email로 사용하는 경우)

     * - title : 게시글 제목

     * - author : 원 저자 (시와 같은 창작물을 게시할 때, 원 저자를 기술)

     * - password : 게시글을 관리(수정, 삭제 등)할 때 필요 (로그인 하지 않은 경우 작성자를 구분하는 방법)

     * - read_count : 게시글을 읽은 횟수

     * - comment_count : 댓글의 수

     * - like_count : 좋아요를 누른 횟수

     * - ref : 게시글과 댓글에 대한 순서를 보장하는데 사용 (보통 게시글 ID)

     * - setp : 댓글에 대한 순서를 나타냄

     * - depth : 댓글에 대한 depth 정보를 저장

     * - createdAt : 게시글 생성 시간

     * - modifiedAt : 게시글을 수정한 시간

     * - content : 게시글 내용

     * - ip : 게시글을 접근하는 사용자의 IP address

     * - secret : 비밀글 여부를 나타냄 (기본 : 'F' 비밀글이 아님)

     */

    create table article (

article_id number(11) not null primary key,

board_id number(11) default 0,

writer_name varchar2(30) not null,

email varchar2(30) not null,

title varchar2(100) not null,

author varchar2(30),

password varchar2(20) not null,

read_count number(8) default 0 not null,

comment_count number(4) default 0 not null,

like_count number(8) default 0 not null,

ref number(10) default 0 not null,

step number(3) default 0 not null,

depth number(3) default 0 not null,

createdAt timestamp(6) default current_timestamp,

modifiedAt timestamp(6) default current_timestamp,

content varchar2(4000) not null,

ip varchar2(20) not null,

secret char(1) default 'F'

    );


    /* 게시글은 특정 게시판에 속하므로 게시판에 의존하게 된다.

     * 따라서 다음과 같이 foreign key를 선언해 준다.

    */

    alter table article add constraint fk_board

    foreign key (board_id) references board (board_id);

Posted by 세상을 살아가는 사람
,

다음은 웹을 배우면서 홈 페이지를 개발하는 프로젝트를 수행한다. 이때 필요한 기능들을 기술해 본다.

  • 회원관리 기능 : 회원가입, 약관 및 개인정보수집 동의, 로그인, 로그아웃, 아이디/비밀번호 찾기, 회원탈퇴, 회원정보 관리(목록보기, 회원정보보기, 변경), 아이디 중복 검사, 아이디/비밀번호 입력제약 Audit 기능, 개인정보 암호화 저장

  • 게시판 기능 : 페이징 처리, 댓글 순서 관리, 목록보기, 게시글 쓰기, 게시글 수정, 게시글 삭제, 게시글 검색, 스마트 에디터 사용, 첨부파일 저장, 비밀글 기능, 게시판 종류 및 다른점 처리 (방문록, Q&A, 공지사항, 게시판, 자료실, FAQ), 게시판 권한관리(읽기, 쓰기, 답변, 첨부 허용여부 관리), 다중 게시판 만들기(게시판이 여러 개일 때 관리방법), 게시판 관리(목록보기, 추가, 변경, 삭제)

  • 메뉴 체계 및 링크 연동 : 헤더에 있는 nav 및 사이드바에 있는 lnav

    • nav : 몇 단으로 할 것인가? 마우스를 갖다 대면 전체 메뉴를 보여 줄 것인가? 아니면 1단 메뉴에 속한 2단 세부 메뉴를 보여줄 것인가?

    • lnav : nav와 연동되어 표시되는 방법은? 몇 단으로 구성할 것인가?

    • 관리자 측면에서는 메뉴의 관리를 할 것인가? 즉, 메뉴에 대한 추가, 삭제, 변경 및 목록보기, 보기를 허용할 것인지? 아니면 고정적으로 운영할 것인지 이다.

  • SNS 연동 기능 : 페이스북 로그인, 카카오톡 로그인, 트위터 로그인, 게시글 공유(카톡, 페이스북, 트위터), 좋아요, 별점

  • 반응형 웹 만들기 : 휴대폰에서 브라우저에서 접속할 때 동작

  • 실행환경 서버 관리(윈도우 서버, 리눅스 서버) : 네트워크, 하드웨어(CPU, 메모리, 하드디스크, 백업장치), 도메인관리, 호스팅 관리 , 실행환경 구축

  • 전자정부표준프레임 : 공통기능(모바일 포함), 하이브리드앱

  • HTML5 기능 : 비디오, 오디오, 캔버스, 드래그 & 드롭, 지오로케이션, 웹 스토리지, Indexed DB, 파일, 커뮤니케이션, 웹워커, 히스토리, 오프라인

  • Open API 연동 : Rest API, SOAP API 연동 (공공데이터 연동)

  • Open API 기능 제공 : REST API 제공

  • 주기적인 Job 수행 방법


Posted by 세상을 살아가는 사람
,

홈 페이지를 만들다보면 게시판을 여러 개를 만들 필요가 있다. 또한 게시판 마다 게시글의 읽기, 쓰기, 댓글달기, 첨부파일 달기 등의 권한을 달리 설정해주어야 하는 경우가 발생한다.

여기서는 그런 경우에 고려하여야 할 사항과 구현방법에 대하여 기술한다.

1. 요구사항

- 여러 개의 게시판을 운영한다. : 게시판 생성, 게시판 정보 변경, 게시판 삭제, 게시판 목록 보기, 게시판 정보 보기 등의 기능이 필요

- 게시판에 대한 속성 설정 : 읽기, 쓰기, 댓글달기, 비밀글 여부, 첨부파일 허용여부, 첨부파일 허용용량, 게시글 수정, 게시글 삭제

- 게시판 종류 : 기본, 갤러리, 자료실, Q&A, 공지사항, 방명록

  + 기본 게시판 : 제목, 작성자, 비밀번호, 내용, 첨부 1개

  + 갤러리 : 이미지 첨부만 가능, 첨부는 thumbnail로 처리

  + 자료실 : 첨부 파일은 5개까지 가능

  + Q&A : 비밀글 표시 및 비밀번호 검사 후 내용 표시

  + 공지사항 : 글쓰기 버튼 비활성화, 관리자만 쓰기 가능

  + 방명록 : 내용과 첨부 사진 올리기만 가능, 비밀글(쓰기, 답변)

여기에 기술된 요구사항은 대략적인 것으로 개발을 위해서는 구체적인 요구사항이 세분화 되어져야 한다.

2. 데이터베이스 테이블

2.1 board table

- board_id : 게시판을 식별하는 ID (정수)

- board_name : 게시판 이름

- board_type : 게시판 종류 (기본 게시판, 갤러리, 자료실, Q&A, FAQ, 공지사항, 방명록)

- url : 게시판에 접속하기 위한 URL 주소

- secret : 비밀글 여부

- read_allow : 읽기 허용 여부 (사용자 유형에 따라 제어 : 로그인 안했을 때, 로그인 했을 때, 관리자)

  + 모두 허용

  + 로그인한 경우 허용

  + 가입자 유형이 고객(customer)인 경우 허용

  + 가입자 유형이 상인(business)인 경우 허용

  + 특정 그룹에 속한 경우 허용 (추후 고려)

  + 관리자만 허용

- write_allow : 쓰기 허용 여부

  + 모두 허용

  + 로그인한 경우 허용

  + 가입자 유형이 고객(customer)인 경우 허용

  + 가입자 유형이 상인(business)인 경우 허용

  + 특정 사용자만 허용 : 별도의 쓰기 허용자 정보 저장 필요 (추후 고려)

  + 특정 그룹에 속한 경우 허용 (추후 고려)

  + 관리자만 허용

- reply_allow : 댓글 허용 여부

  + 모두 허용

  + 로그인한 경우 허용

  + 가입자 유형이 고객(customer)인 경우 허용

  + 가입자 유형이 상인(business)인 경우 허용

  + 특정 그룹에 속한 경우 허용 (추후 고려)

  + 관리자만 허용

- modify_allow : 수정 허용 여부

  + 모두 허용

  + 로그인한 경우 허용

  + 가입자 유형이 고객(customer)인 경우 허용

  + 가입자 유형이 상인(business)인 경우 허용

  + 작성자만 허용

  + 특정 그룹에 속한 경우 허용 (추후 고려)

  + 관리자만 허용

- delete_allow : 삭제 허용 여부

  + 작성자만 허용

  + 관리자만 허용

- download : 첨부파일 다운로드 허용 여부

  + 모두 허용

  + 로그인한 경우 허용

  + 가입자 유형이 고객(customer)인 경우 허용

  + 가입자 유형이 상인(business)인 경우 허용

  + 특정 그룹에 속한 경우 허용 (추후 고려)

  + 관리자만 허용

- upload : 첨부파일 업로드 허용 여부

  + 모두 허용

  + 로그인한 경우 허용

  + 가입자 유형이 고객(customer)인 경우 허용

  + 가입자 유형이 상인(business)인 경우 허용

  + 특정 사용자만 허용 (추후 고려)

  + 특정 그룹에 속한 경우 허용 (추후 고려)

  + 관리자만 허용

- nAttach : 첨부 가능한 파일의 수 (0~최대 5개)

- aSize : 첨부 가능한 파일의 용량 (최대 100MB까지)

  + 0, 50KB, 200KB, 1MB, 10MB, 100MB

- display_format : 본문 표시 여부

  + 1 : 제목만 표시

  + 2 : 본문(내용) 일부 표시

  + 3 : 본문(내용) 전부 표시

- board_desc : 게시판 설명

2.2 article table

- article_id : 게시글 id

- boardId : 게시판 id (하나의 테이블에 모든 게시판의 게시글을 저장하므로 게시판을 구분해 주어야 함)

- writer_name : 게시글 작성자 이름(O) -> 불필요할 수 있음(원 저자)

- email : 게시글 작성자 id (이메일 형식)

- title : 제목(O)

- author : 시와 같은 창작물을 게시할 때 원 저자를 입력(O)

- password : 비밀번호 (로그인 하지 않은 사용자가 게시글을 작성시, 추후 게시글 삭제 때 필요)

- read_count : 게시글을 읽은 횟수

- comment_count : 게시글에 대한 댓글 수

- like_count : 좋아요 수

- ref : 게시글과 댓글에 대한 정렬에 사용

- step : 게시글과 댓글에 대한 정렬에 사용

- depth : 게시글과 댓글에 대한 정렬에 사용

- createdAt : 게시글 작성 시간

- modifiedAt : 게시글 수정 시간

- content : 게시글 본문 내용

- ip : 사용자가 접속한 IP address

- secret : 비밀글 여부 (default false)

3. 추가로 고려되어야 할 사항

- 게시판 생성 후, 메뉴와의 연계방법 입니다. 동적으로 게시판을 생성하였더라도 그 게시판을 사용하려면 홈 페이지의 메뉴 체계와 동적으로 연계가 되어야 하는데 그 부분은 상당히 난이도가 있는 부분 같습니다. 전체 구조와도 연계가 되기 때문 입니다. 그 부분은 나중에 시간이 있을 때 고려하기로 합니다.


Posted by 세상을 살아가는 사람
,