데이터 베이스를 기반으로 하는 프로그램들은

게시판만 잘 만들 줄 알아도 대부분의 개발은 되는 것으로 알고 있다.

모든 프로그램은 입력(INSERT), 수정(UPDATE), 삭제(DELETE), 조회(SELECT) 기능이 다양한 형태로 표현되는 것으로,

이러한 기능을 가장 간단하게 구현할 수 있는 것이 게시판 이라고 생각하기 때문이다.

따라서, 대단한 기술이 없이 단순 게시판만 잘 만들 줄 알아도 대부분의 프로그램을 문제 없이 만들 수 있다.

오히려 어설프게 아는 기술들을 적용해서 프로젝트를 망치는 경우를 매우 많이 봤다.

여기서는 게시판 만드는 과정을 단계별로 구성하여

보다 쉽고 깊이 있게 배울 수 있도록 시도하였다.

(게시판을 만들줄 알면 나머지는 프로세스에 따른 구현과 SQL 사용 능력인데 여기서는 다루지 않는다.)


본 게시판 예제는 Spring 4.1과 MyBatis 3.2를 기반으로 구성하였다.

Spring 4를 기반으로 제작했지만 

Spring 4의 특징들을 반영하지 않았기 때문에 Spring 3(전자정부 프레임)에서도 사용 가능하다.

다음 그림은 본 예제에서 사용한 Spring MVC 구조로 기본 구조보다 단순하게 구성하였다.   

Spring MVC에서는 DAO(mapper)와 Service interface(추상화)등의 구성이 더 구현되어야 한다.

하지만, 경험상 필요성을 느끼지 못하고 이러한 구조는 복잡성을 가중시킨다고 생각하여

본 예제에서는 다음 그림과 같이 단순화 하여 구성하였다.

즉, 추상화를 사용하지 않았고 DAO와 Servic를 합쳐서 Service로 사용하였다.


본 예제는 게시판을 개발하며 프로그래밍 하는 과정을 익히는 것으로

Spring과 MyBatis, MVC에 대하여 어는 정도 알고 있다는 전제로 진행되기 때문에

상세한 내용을 적지는 않을 것이지만 개발 구성에 대해서 간단하게 서술하였다.



사용자가 웹 브라우저를 통하여 특정 페이지에 접속하면 웹 서버(실제로는 WAS)는 해당 페이지의 컨트롤을 호출하고,

사용자가 입력하거나 처리에 필요한 정보를 구성하여 작성한 HTML을 웹 서버에 반환하게 되고

웹 서버는 해당 내용을 클라이언트(웹브라우저)에게 전송하면 사용자가 원하는 내용을 보게 된다.

다만 컨트롤이 처리할 때, 데이터 베이스 관련 작업이 필요한 경우 서비스를 호출하여 해당 데이터 처리와 관련된 실행(SQL)을 처리하여 반환하게 된다.




게시판의 리스트를 예로 들면,

사용자가 게시판 리스트(board1List)를 선택한 경우 웹 서버는 컨트롤인 board1List(Java)를 호출한다.

컨트롤인 board1List는 데이터 베이스에서 게시판 데이터를 가져오기 위해 서비스인 boardSvc를 호출하고

boardSvc는 Mybtis를 통해 데이터를 가져올 수 있는 SQL문을 board1.xml 파일에서 찾아서 실행시키게 된다. 

실행 결과로 게시판 데이터들을 집합(RecordSet)으로 받게 되고 이 데이터를 컨트롤에게 반환한다.


컨트롤은 이 데이터와 필요한 데이터를 묶어서 HTML로 구성된 board1List.jsp로 넘겨주고,

JSP 파일에서는 Taglib와 HTML로 사용자가 보는 화면을 구성하게 된다.

즉, MVC ((Model–View–Controller)로 운영되는 것이다.

데이터 베이스는 MariaDB를 대상으로 작성하였으나 MySQL에서도 사용가능하며,

Limit나 DATE_FORMAT등 함수 몇 가지를 수정하면 표준 SQL이라 다른 데이터 베이스에서도 사용 가능하다.



'Java > 게시판기본' 카테고리의 다른 글

Spring 4 + MyBatis 3 + MariaDB (Maven) 기반 게시판 예제  (0) 2016.04.02
2. 게시판의 구성  (4) 2016.04.02
3. 설치  (16) 2016.04.02
4. 게시판 구성 단계  (14) 2016.04.02

프로그래밍 언어에 관계없이 온라인 게시판은 일반적으로 다음 그림과 같이 구성된다.


  • 리스트: 게시판의 모든 내용을 웹 페이지에 출력 하는 것으로 게시판 테이블(TBL_BOARD)의 내용을 가져와서(Select) 하여 지정된 형태로 출력하게 된다.
  • 글 읽기: 리스트의 게시물 하나(한 행)를 선택하면 선택한 게시물에 대한 상세한 내용을 볼 수 있는 글 읽기 페이지로 이동한다. 게시물을 확인하고 리스트로 돌아가거나 글 수정이나 삭제를 할 수 있다.
  • 글 쓰기: 리스트 페이지에서 [글쓰기] 링크를 선택하면 나타나는 페이지로 사용자가 입력할 화면이 나오고, 입력 후 [저장] 버튼을 클릭하면 테이블에 저장(Insert) 한 후 리스트로 돌아가서 저장된 내용을 볼 수 있게 한다.
  • 글 수정: 글쓰기와 같은 화면으로 구성되고, 글 읽기에서 [글수정]을 선택하면 이동한다. 수정할 내용을 입력 후 저장] 버튼을 클릭하면 테이블에 저장(Update)한 후 리스트로 돌아가서 저장된 내용을 볼 수 있게 한다.
  • 글 삭제: 글 읽기에서 [글삭제]를 선택하면 화면 없이 삭제를 진행하고 리스트로 돌아가서 삭제된 내용을 볼 수 있게 한다.

글쓰기를 제외하고는 기본키(Primary Key, PK) 값이 있어야 해당 글을 읽거나 수정/ 삭제 할 수 있다.

게시판에서는 기본키가 글 번호가 된다.

개발하는 방식에 따라 글 수정과 삭제 링크를 글읽기가 아닌 리스트에 둘 수 있지만 본 예제에서는 위 그림처럼 진행한다.





이 그림은 게시판의 구성에 컨트롤명(웹페이지명)을 매핑한 그림이다.

사용자는 게시판 리스트 페이지에 접속하고 웹서버는 리스트 페이지를 제공하기 위해 boardList 컨트롤을 호출한다.

하나의 Java 파일(board1Ctr, board2Ctr 등)에 모아져 있으니 먼저 확인하면 좋을 것이다.

또, 이 컨트롤에서 모든 처리가 이루어지기 때문에 먼저 설명한다.


이하의 게시판 예제는 GitHub에서 다운 받을 수 있다.

'Java > 게시판기본' 카테고리의 다른 글

Spring 4 + MyBatis 3 + MariaDB (Maven) 기반 게시판 예제  (0) 2016.04.02
2. 게시판의 구성  (4) 2016.04.02
3. 설치  (16) 2016.04.02
4. 게시판 구성 단계  (14) 2016.04.02
  1. mao2mao515 2018.04.24 18:13 신고

    안녕하세요.
    깃에서 마리아 디비 버전 다운 받고 , 실행 및 웹 속이랑 잘고 저장까지 잘 됩니다.

    그런데 한글이 다 깨져서 저장이 되네요.
    혹시 어느 부분을 손봐야 될지 대충이라도 알려주시면 안될까요?

    이미 phpmyadmin utf8_general_ci ? 인가 이걸로 디비를 생성했습니다. 그런데 다 한글이 깨져서 저장이되네요.

    • forest71 2018.04.24 18:18 신고

      MariaDB와 Java(MyBatis)에서 설정해야 합니다.
      http://egloos.zum.com/jth8172/v/11176221 를 참고하세요.
      http://forest71.tistory.com/26?category=537814의 댓글을 읽어보셔도 됩니다.

  2. 2018.05.24 14:50

    비밀댓글입니다

  3. 나그네 2018.05.24 14:52 신고

    좋은 자료 감사합니다.

여기서는 다루지 않지만 기본적으로 다음 사항은 설치가 되어 있어야 한다.

설치 되지 않았다면 참고할 사이트를 작성하였으니 읽고 설치 해야 한다.


이클립스(Eclipse)에서 가져오기(import)나 새로만들기(New)를 실행하여

다음 그림과 같이 Git(Projects from Git)을 선택한다.

다음 화면에서 Clone URI를 선택한다.

Github의 게시판 예제 사이트 (https://github.com/gujc71/board_sample)에서

본 샘플 Git URL(https://github.com/gujc71/board_sample.git)을 복사한다.

이클립스에서 URL에 붙여넣기를 한다.

가져온 샘플을 저장할 디렉토리를 지정한다.

디렉토리는 이클립스에서 지정된 workspace 하위에 있어야 한다.

샘플로 생성할 프로젝트 종류를 지정하는 화면으로

다음과 같이 "Import existing Eclipse projects"를 선택한다.

다음 화면에서 완료(finish)를 선택하면

Github에서 데이터를 가져와 컴파일하는 화면이 나타난다.

Maven을 사용했기 때문에

다음 그림과 같은 프로젝트가 생성되고,

Maven이 필요한 라이브러리(jar)를 설치해 준다.

위 트리에 빨간색 X 표시 아이콘이 나타날 경우가 있다.

해당 파일을 열어 보면 자바 기본 클래스들이 모두 오류 표시가 된 경우는 자바 버전이 맞지 않은 것이다.

제공되는 소스는 자바 1.7로 개발되었는데 설치한 사람의 PC에는 다른 버전의 자바가 설치 된 경우 이다.


위 트리의 상위(프로젝트)를 선택하고 마우스 오른 쪽을 눌러 "Properties"를 실행하고

Java Build Path > Libaraies 탭을 선택한다.

JRE System Library에 jre 버전을 확인하고 Edit 버튼으로 설치된 자바 버전으로 변경한다.

board\src\main\webapp\WEB-INF하위에 있는

applicationContext.xml파일을 열어서 MariaDB의 적절한 url와 아이디/비밀번호를 넣고

톰캣을 실행한다.

MariaDB에는 다음 테이블이 생성되어 있어야 한다.

CREATE TABLE TBL_BOARD (
  BRDNO int(11) NOT NULL AUTO_INCREMENT,
  BRDTITLE varchar(255),
  BRDWRITER varchar(20),
  BRDMEMO   varchar(4000),
  BRDDATE   datetime,
  BRDHIT INT,
  BRDDELETEFLAG CHAR(1),
  PRIMARY KEY (BRDNO)
) ;

CREATE TABLE TBL_BOARDFILE (
    FILENO INT(11)  NOT NULL AUTO_INCREMENT,
    BRDNO INT(11),
    FILENAME VARCHAR(100),
    REALNAME VARCHAR(30),
    FILESIZE INT,
    PRIMARY KEY (FILENO)
);


웹브라우저에서 http://localhost:8080/board/board1List를 입력하여

실행해 보면 다음 그림과 같이 게시판이 실행된다.


게시판 예제는 다음 그림과 같은 구조로 제작되었다.

Java > gu 폴더에 서비스, 컨트롤 등의 Java 파일이 있고

Resources > sql 폴더에 SQL 문이 Mybatis의 XML 파일로 있다.

Webapp > WEB-INF > jsp 폴더에 JSP(HTML)로 작성된 파일이 있다.

gu 폴더 하위의 board1 폴더,

sql 폴더에 있는 board1.xml, 

jsp 폴더 하위의 board1 폴더가 각 단계별 하나의 묶음으로 구성되었다.


gu 폴더 하위의 board1 폴더 하위에 있는

board1Ctr.java에 기본 게시판에 사용된 모든 컨트롤

board1Src.java에 기본 게시판에 사용된 모든 서비스가 있다.

gu 폴더 하위의 board2, 3 등의  폴더 하위에도 동일한 규칙이 적용되었다.

board1Ctr, board2Ctr등과 board1Src, board2Src 등이 아닌

boardCtr 과 boardSrc로 각 폴더별로 동일한 명칭을 사용하면 좀더 편한데

이러한 명명 규칙은 Java에서는 허용하지만 Spring에서 허용되지 않아서 앞서의 명명 규칙처럼 다른 이름을 사용하였다.





'Java > 게시판기본' 카테고리의 다른 글

Spring 4 + MyBatis 3 + MariaDB (Maven) 기반 게시판 예제  (0) 2016.04.02
2. 게시판의 구성  (4) 2016.04.02
3. 설치  (16) 2016.04.02
4. 게시판 구성 단계  (14) 2016.04.02
  1. Mr_KIM 2016.04.12 12:18 신고

    " board\src\main\webapp\WEB-INF하위에 있는
    applicationContext.xml파일을 열어서 MariaDB의 적절한 url와 아이디/비밀번호를 넣고
    톰캣을 실행한다."

    위 부분에서 혹시 sql 관련해서 에러가 발생하시는 분은,
    1. database 생성시, 위에 url 을 그대로 따라가실 것이면
    "board" 라는 이름의 database 생성하시면 됩니다

    2. 그 다음, applicationContext.xml 파일에서 자신의 IP 직접 삽입
    p:url="jdbc:log4jdbc:mysql://자신의IP:3306/board"
    (ex) p:url="jdbc:log4jdbc:mysql://192.168.0.121:3306/board" 이런 식으로.

    3. 그 다음, boardList.jsp 파일에서 "localhost"->자신의 IP:3306 으로 변경
    (ex)String url = "jdbc:mysql://192.168.0.121:3306/board" 이런 식으로.

    이렇게 하시면, 에러 없이 웹페이지가 보여질 것 입니다.

  2. forest71 2016.05.06 11:29 신고

    Java 한글깨짐 관련 조치자료
    http://egloos.zum.com/jth8172/v/11176221

    • 잘웃는남자 2016.05.19 10:38 신고

      설정해야하는 곳들을 상세하게 잘 정리해 주셨네요 ^^
      덕분에 좋은 정보 얻었습니다. 감사합니다!

    • 잘웃는남자 2016.05.19 10:47 신고

      추가적으로
      DB 별(Oracle, Mysql..) 인코딩 설정방법들도
      따로 있는 것으로 알고 있습니다.
      위에 부분들을 다 적용했는데도 깨진다 하는 분들은
      DB별 인코딩 설정 을 하시면 될듯 싶습니다.

    • ohnewdev 2017.08.16 20:08 신고

      마리아 DB charset 설정 때문에 깨지는 경우...

      http://applejara.tistory.com/516

  3. 개발자 2016.05.11 17:19 신고

    첫번째 쿼리문에서 BRDDELETEFLAG CHAR(1) 뒤에 콤마가 빠졌네요~

    • 두두상당 2016.12.30 11:32 신고

      위에 다따라하고 데이타베이스 주소까지 다 맞췄는데 404에러가 뜨네요..

  4. forest71 2016.12.30 11:57 신고

    404에러면 웹 브라우저에서 주소를 잘 못 입력하신 것 같습니다.
    http://localhost:8080/board/board1List 나 http://localhost:8080/board/로 입력하셨는지 확인해 보세요.
    boardList가 아니고 board와 List 사이에 숫자 1이 있습니다.

    • 두두상당 2016.12.30 12:08 신고

      처음 탐캣 구동하면 http://localhost:8081/board/ 페이지는 정상적으로 뜨구요 거기서 클릭해서 들어가거나 주소를 쳐서 http://localhost:8080/board/board1List로 들어가면 404가 뜨네요.
      따로 콘솔에 에러가 잡히는게없는데말이죠..

    • 두두상당 2016.12.30 12:09 신고

      어.. 맨위에
      경고: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:board_sample' did not find a matching property.
      에러 하나가 보이내요? 혹시 이것떄문인가요

  5. forest71 2016.12.30 12:26 신고

    오류 메시지는 정확하게 뭔지 잘 모르겠습니다.
    다만, 톰캣이 안 올라왔다면 톰캣 가동할때 콘솔들을 더 확인해보세요.
    추측으로는 Maven이 라이브러리를 제대로 못 가져와서 그럴 수 있습니다.
    또는 Maven 설치가 ~~~

    • 두두상당 2016.12.30 13:03 신고

      해결했어요.. 전 바보인가봅니다..
      위에 붙여놨듯이 8081 톰캣으로 열고..
      링크해서 들어갈때 8080소켓으로 가서.. 당연 404에러가 드는거였어요.. 신경써주셔서 감사합니다 !!!

  6. forest71 2016.12.30 13:04 신고

    ㅎㅎㅎㅎ 도움도시길 바랍니다

  7. ohnewdev 2017.08.18 08:54 신고

    실습으로 따라할 때...
    board1을 board0 등으로 실습버젼으로 하나 생성해놓고,
    쭉 board1~board9 단계별로 따라하듯이 코딩을 추가해나가면,
    실습하면서 배우기 좋은 것 같습니다 :)

  8. 쟈스민트향꽃 2018.03.28 15:01 신고

    현재 톰캣 8 사용하고 있는데 , 톰캣실행 않됩니다.

    일단 우분투 16.04에 eclipse 최신으로 설치하고 추가로 아무것도 설치하지 않았습니다.

    spring , maven 은 eclipse market 으로부터 다운받지는 않았습니다.

    혹시 spring , maven 을 추가로 마켓에서 다운받아야 되나요?


    • forest71 2018.03.28 15:06 신고

      Maven 별도 설치후에 eclipse와 연동후 사용하시면 됩니다. spring은 maven에서 지정하여 다운받습니다.
      설치법은 검색해 보세요.
      https://www.google.co.kr/search?newwindow=1&client=firefox-b&dcr=0&ei=LzC7WtToJYi20QTm3JXwBg&q=eclipse+maven+%EC%84%A4%EC%B9%98&oq=eclipse+maven+%EC%84%A4%EC%B9%98&gs_l=psy-ab.3..0j0i8i30k1l6j0i5i30k1l3.121438.122924.0.123216.7.7.0.0.0.0.152.690.0j5.5.0....0...1c..64.psy-ab..2.5.688...0i67k1.0.Zi_rgph2Jbo

본 샘플은 Spring 4 + MyBatis 3 + MariaDB (Maven) 기반으로 게시판을 만드는 과정을 단계별로 구현한 샘플이다.

각 내용은 다음과 같이 구성되었다.


1. board Step 1 (게시판1)
    List: 모든 게시물 출력
    Form: 사용자 입력 내용 저장
    Update: 사용자 입력 내용 수정
    Read: 사용자 입력 내용 보기
    Delete: 지정된 게시물 삭제

    URL: http://localhost:8080/board/board1List


2. board Step 2 (게시판2)

    List: 페이징, 새로운 번호 부여
    Form: 입력/수정을 하나로
    Read: 조회수
    Delete: 삭제에서 숨기기로

    URL: http://localhost:8080/board/board2List


3. board Step 3 (게시판3)

    List: 검색, 제목을 한 줄로 표시 ==> 페이징을 공통으로
    Form: 필수입력, 수정/저장 서비스 하나로
    Read: 스크립트 실행 방지

4. board Step 4 (게시판4)

    자료실

5. board Step 5 (게시판5)

    댓글

6. board Step 6 (게시판6)

    무한 댓글 (계층형)

7. board Step 7 (게시판7)

    JQuery / Ajax

8. board Step 8
(게시판8)

    멀티 게시판

9. board Step 9 - (게시판9)

    멀티 게시판 관리자


'Java > 게시판기본' 카테고리의 다른 글

Spring 4 + MyBatis 3 + MariaDB (Maven) 기반 게시판 예제  (0) 2016.04.02
2. 게시판의 구성  (4) 2016.04.02
3. 설치  (16) 2016.04.02
4. 게시판 구성 단계  (14) 2016.04.02
  1. 개발자 2016.05.11 17:10 신고

    정말 잘봤습니다!!!

  2. 나그네 2018.05.24 15:53 신고

    잘 정리해주셨내요.

    단계별로 쉽게 구현해주셔서 보기 정말 간편했습니다.

    감사합니다.

    • forest71 2018.05.24 15:59 신고

      누군가에게 도움이 된다니 다행입니다. 즐거운 개발하세요~.

  3. 나그네 2018.05.29 16:17 신고

    Oracle 기준
    Board 8,9 실행시 List 페이지 오류가 있습니다.
    ctrl 에서 bgnNo 값 가져올때 bgnNo 값이 NULL 값이기 때문에 발생되는 문제입니다.
    주석 후 실행하면 잘 됩니다.
    또한 게시판 리스트 갯수 가져오는 쿼리 (selectBoard8Count) include 안에 BGNNO 값이 NULL 이기 때문에
    발생되는 오류가 있었습니다.
    덕분에 잘보고 갑니다.
    감사합니다.



    • forest71 2018.05.29 16:24 신고

      bgNo(게시판 그룹번호)는 게시판 종류를 나타내는 필드입니다.
      bgNo가 null이면 이전 게시판과 같이 하나의 게시판만 사용하는 겁니다.
      멀티 게시판이 되려면 필요한 값이 있어야 하니 확인해 보세요.
      리스트를 호출하실 때 다음과 같이 파라미터(?bgno=1)를 줘야 하는데 빼신 것 같습니다.
      http://localhost:8080/board/board8List?bgno=1

  4. 나그네 2018.05.29 16:26 신고

    주인장님 AA만 좀 가져가서 포폴 좀 만들도록 하겠습니다.

    개발하신 소스는 참고하여 살좀 붙이도록 하겠습니다.

    감사합니다.


    • forest71 2018.05.29 16:29 신고

      게시판 소스를 정리해서 실제 사용할 수 있도록 구현한 것이 project9이라고 하는 제가 만든 템플릿에 있습니다.
      도움이 되시길 바라겠습니다.
      http://forest71.tistory.com/78?category=581570

  5. 나그네 2018.05.29 16:33 신고

    음.. 주인장님 파라미터 값은 빼진 않았구요
    serarchVo에서 값을 전달해주고 있는데 이쪽에 bgNo값이 NULL 입니다.
    제가 말씀드리는거는 board9/BoardList.jsp 기준 입니다.
    피드백 감사합니다.

  6. 나그네 2018.05.29 16:38 신고

    말씀해주신 URL http://forest71.tistory.com/78?category=581570

    엄청난 도움이 될꺼 같습니다.

    진심으로 감사드립니다.

    똑같이 한번 구현하고, 살좀 붙혀 보겠습니다.

    다시한번 감사드립니다.

  7. 나그네 2018.05.29 17:16 신고

    주인장님 제가 말씀드리는 부분은 이쪽 로직입니다.
    BoardGroupVO bgInfo = boardGroupSvc.selectBoardGroupOne4Used(searchVO.getBgno()); -> null 값
    if (bgInfo == null) {
    return "board9/BoardGroupFail"; -> page 호출
    }
    쿼리
    SELECT BGNO, BGNAME, BGUSED, BGREPLY, BGREADONLY
    FROM TBL_BOARDGROUP
    WHERE BGDELETEFLAG='N'
    AND BGNO=#{bgno} -> null 값이기때문에 오류

    화면단 board9\BoardList.jsp
    여기서 파라미터 bgNo 값은 bgInfo.bgreadonly=='N' 일때 board9Form?bgno=searchVO.bgno 이거 말고는 없는데...

    그리고 selectBoardCount 에서
    쿼리
    <sql id="includeBoard">
    WHERE BGNO=#{bgno} AND BRDDELETEFLAG='N'
    BGNO 값이 NULL 이라서 오류가 나는데...

    혹시 제가 잘못 보고있는건가요?
    바쁘신 업무중에 죄송합니다.

    • forest71 2018.05.29 17:33 신고

      코드 볼 상황이 아니라서 간단하게 답변 드리겠습니다.
      Board8은 멀티 게시판에 대한 첫 예제로 게시판 종류에 대하여 등록없이 사용하도록 예제를 만들었습니다.
      Board9는 실제 멀티 게시판 예제로, 게시판 리스트 등의 기능을 사용하려면 게시판 종류를 등록해야 합니다.
      http://localhost:8080/board/boardGroupList를 실행하셔서 게시판을 등록하시고,
      http://localhost:8080/board/board9List?bgno=1 같이 접속해 보세요.
      이 부분에 대한 설명이 부족했던 것 같습니다.

  8. 나그네 2018.05.29 17:43 신고

    바쁘신 업무중에 설명 감사 드립니다.

    나머지 부분은 소스따라가며 분석해 보겠습니다.

    감사합니다. 감사합니다.(__)

+ Recent posts

티스토리 툴바