조직(기업) 구성원의 협업 지원 소프트웨어인 그룹웨어9(Groupware9)은

과제 관리 시스템 PMS9 (Project Management System)에 이은 두번째 프로젝트로

빠른 개발을 위해 만든 Java 웹 프로젝트 템플릿인 Project9 (Spring 4 + MyBatis 3 + MariaDB)을 기반으로

그룹웨어의 주요 기능을 간단하게 구현한 웹 프로젝트이다.

그룹웨어의 주요 기능인 전자결재, 일정관리, 메일 관리 기능을 구현한 웹 사이트로,

초보자들의 학습용으로 제작하였다.

즉, 구현된 주요 기능에 보완 기능을 추가하거나, 버그를 수정하면서 전체적인 개발 개념을 잡기 위한 용도로 작성하였다.

소스는 github에서 다운 받을 수 있다.

설치 방법은 Project9과 동일하기 때문에 Project9 설치를 참고하면 되고,

설치시 guthub 주소를 다음과 같이 바꾸어 주면 된다.

       https://github.com/gujc71/groupware9.git

설치를 완료한 뒤,

웹 브라우저에서 http://localhost:8080/groupware9/로 접속하여 확인한다.



다음은 간단한 화면 설계서 이다.




테이블 구성(ERD)은 다음과 같다.

Project9은 AmaterasERD로 작성되어 project9.erd 파일로 제공된다.

Groupware9은 그룹웨어와 관련된 테이블들을 ERMaster로 별도 제작하였다 (groupware9.erm).

ERMaster 설치는 간단한 검색으로 설치할 수 있다.


논리모드

물리모드


마지막으로 그룹웨어 기능과 관련된 프로그램 명세서 이다.

명세서 우측에 2개의 필드를 추가하여,

CRUD(Create, Read, Update, Delete)의 어떤 기능을 수정한 것인지 표시 하였다.

실제로 그룹웨어의 대부분 기능을 Project9의 CRUD 예제를 복사/붙여넣기 하여 구현하였다(Copy, Paste, Replace).

관련 방법(?)은 PMS9에서 정리하였다.


메뉴

Action (URL)

설명

CRUD

주요 SQL

전자결재

signListTobe 결재 받을 문서 리스트 리스트 SELECT
signListTo 결재 할 문서 리스트 리스트 SELECT
signDocTypeList 기안양식 선택 리스트 SELECT
signDocForm 기안작성 SELECT
signDocSave 작성된 기안 저장 저장 INSERT / UPDATE
signDocRead 작성된 기안 읽기 읽기 SELECT
signDocDelete 기안 삭제 삭제 DELETE
signDocCancel 기안 회수 상태변경 UPDATE
signSave 기안 결재 상태변경 UPDATE

일정관리

schList 일정 리스트 (월) 리스트 SELECT
schForm 새로운 일정 작성 SELECT
schSave 작성된 일정 저장 저장 INSERT / UPDATE
schRead4Ajax 작성된 일정 읽기. Ajax 용으로 리스트에서 마우스 이동시 사용 읽기 SELECT
schRead 작성된 일정 읽기 읽기 SELECT
schDelete 작성된 일정 삭제 삭제 DELETE

메일

receiveMails 받은 메일 리스트 리스트 SELECT
receiveMailRead 받은 메일 읽기 읽기 SELECT
receiveMailDelete 받은 메일 삭제 삭제 DELETE
receiveMailsDelete 받은 메일들 삭제 삭제 DELETE
sendMails 보낸 메일 리스트 리스트 SELECT
sendMailRead 보낸 메일 읽기 읽기 SELECT
sendMailDelete 보낸 메일 삭제 삭제 DELETE
sendMailsDelete 보낸 메일들 삭제 삭제 DELETE
mailForm 새 메일 작성  DELETE
mailSave 작성된 메일 저장 저장 INSERT / UPDATE

메일 서버 정보

getReceiveMail 메일 서버 정보 등록후 기존 받은 메일 가지고 오기    
mailInfoList 등록된 메일 서버 정보 리스트 리스트 SELECT
mailInfoForm 메일 서버 등록 폼  SELECT
mailInfoSave 작성된 서버 정보 저장 저장 INSERT / UPDATE
mailInfoDelete 서버 정보 삭제 삭제 DELETE








'Java > 기타' 카테고리의 다른 글

과제 관리 시스템 (PMS9)  (8) 2016.12.01
Project9  (8) 2016.09.18
Project9 설치  (5) 2016.09.18
데이터를 Excel 파일로 다운로드  (2) 2016.09.18

과제 관리 시스템 PMS9 (Project Management System)은

기업내의 과제를 온라인으로 관리하기 위한 도구로,

Project9 (Spring 4 + MyBatis 3 + MariaDB 기반으로 제작한 웹 프로젝트 템플릿)을 기반으로,

Project9을 응용하는 방법을 표현하기 위해 제작하였다.

즉, 쉽고 빠르게 개발하는 방법을 정리하기 위한 예제로 제작하였다.

핵심기능 위주로 제작하여 공개하고,

시간 나는데로 확장할 계획이다.


데모는 여기에서 확인할 수 있고

소스는 github에서 다운 받을 수 있다.

설치 방법은 Project9과 동일하기 때문에 Project9 설치를 참고하길 바라고

설치시 guthub 주소를 다음과 같이 바꾸어 줘야 한다.

        https://github.com/gujc71/pms9.git


설치를 완료한 뒤,

웹 브라우저에서 http://localhost:8080/pms9/로 접속하여 확인한다.



다음은 간단한 화면 설계서 이다.


마지막으로 테이블 구성(ERD)는 다음과 같다.

AmaterasERD로 작성되었고

파일명이 pms9.erd로 github에서 같이 배포되고 있다.

대부분의 테이블 구성이 Project9의 ERD와 동일하지만

과제와 관련된 4개의 테이블이 추가되었다.

프로젝트, 프로젝트 업무(task), 업무 담당자, 첨부파일의 4개로

ERD왼쪽에 배치되어 있다.

Logical mode

Physical mode


'Java > 기타' 카테고리의 다른 글

그룹웨어 (Java) - 설치  (27) 2018.04.15
Project9  (8) 2016.09.18
Project9 설치  (5) 2016.09.18
데이터를 Excel 파일로 다운로드  (2) 2016.09.18

Project9은 Spring 4 + MyBatis 3 + MariaDB (Maven) 기반으로 제작한 웹 프로젝트 템플릿이다.

소스는 Github에서 받을 수 있다.

데모는 여기에서 확인할 수 있다.

데모는 AWS 무료를 사용하는 관계로  1년(2017-09-17) 이후에는 접속이 안될 수 있고

작성한 데이터는 통보없이 삭제될 수 있다.

웹 개발시 많이 사용되는 다양한 기능들 미리 구현해 두고

복사해서 사용하기 위해 제작하였다.

많이 사용되는 회원관리(로그인, 로그아웃 포함), 부서관리 (조직도), 게시판 (설정), 무한 댓글 등의 기능을 미리 구현해 두었고,

프로젝트에 따라 필수적인 기능을 샘플로 구현해서

같이 작업하는 개발자들이 일관되고 빠르게 작업할 수 있게 하였다.

그리고, 유사 기능은 복사/붙여넣기를 하여 쉬운 개발을 하려고 준비하였다.

(만들고 보니 전자정부프레임과 비슷한 느낌이…)


주요 구현 기능은 다음과 같다.

  • 멀티 게시판 (무한 댓글, 좋아요 등)
  • 회원 기능: 모든 페이지는 회원만 접속 가능. 로그인/로그 아웃 기능. 회원관리 등
  • 보안 기능: 일반사용자(U)와 관리자(A)로 구분하여 일반 사용자는 관리자 페이지에 접근 불가.
  • 다국어 처리
  • 디자인: 부트스트랩기반 반응형 웹 적용 (SB-Admin)
  • 공통 에러 페이지 처리(404, 500)
  • 로그 처리(logback, log4jdbc)


준비된 샘플

  • 사용자 선택: 부서, 사용자 선택 기능 (팝업)
  • 날짜(DatePicker) 선택 및 챠트(morris) 사용법 샘플
  • 엑셀 다운로드(jXLS) 샘플


사용된 라이브러리와 구성은 다음 그림과 같다.


디렉토리 구조는 다음과 같다.

java 패키지는 gu 하위에 있으며

동일한 디렉토리 구조로 JSP 파일이 WEB-INF 하위의 jsp에 있다.

admin 디렉토리는 관리자 기능으로

게시판 생성과 부서(조직도), 사용자 관리 등을 가지고 있다.

board 디렉토리는 게시판 기능을 가지고 있다.

main 디렉토리는 메인 화면(index)과 샘플을 가지고 있다.

member 디렉토리는 로그인/아웃, 개인정보 수정등을 가지고 있다.

common 디렉토리는 공통 기능을 가진 디렉토리로

파일 업로드/다운로드(엑셀), 권한 관리등을 기능만 가지고 있다.

jsp의 common 디렉토리는 페이징 화면, 오류 페이지등

공통으로 사용되는 화면을 가지고 있다.

마지막으로 etc 디렉토리는 공통으로 사용되는 화면과 기능을 가진 디렉토리로

부서나 사용자 선택등을 가지고 있다.


resources의 message는 다국어 처리 파일을 가지고 있고

sql 디렉토리는 프로그램에서 사용되는 모든 Mybatis SQL문을 가지고 있다.


마지막으로 테이블 구성(ERD)는 다음과 같다.

AmaterasERD로 작성되었고

파일명이 project9.erd로 github에서 같이 배포되고 있다.

Logical mode

Physical mode

'Java > 기타' 카테고리의 다른 글

그룹웨어 (Java) - 설치  (27) 2018.04.15
과제 관리 시스템 (PMS9)  (8) 2016.12.01
Project9 설치  (5) 2016.09.18
데이터를 Excel 파일로 다운로드  (2) 2016.09.18

먼저 Eclipse를 이용하여 github에서 소스를 다운로드 받는다.

Eclipse를 이용하여 github에서 소스를 다운 받는 방법은 여기를 참고하면 된다.

github 소스 주소만 바꾸어서 사용하면 된다.


MariaDB에 데이터 베이스(project9)를 생성하고

소스와 같이 제공되는 tables.sql(테이블 정보), tableData.sql (샘플 데이터)를 실행하여 테이블과 데이터를 생성한다.

MariaDB 데이터 베이스 생성법


applicationContext.xml에 적절한 접속 정보를 입력한다.

톰캣이나 이클립스에서 project9를 실행

http://localhost:8080/project9/로 접속



관리자(admin/admin)로 로그인 하거나

일반 사용자로(user1/user1, user2/user2 ...) 로그인 하면 된다.


PC에서 보는 일반적인 화면


PC에서 보는 작은 화면 or 모바일에서 보는 화면




'Java > 기타' 카테고리의 다른 글

그룹웨어 (Java) - 설치  (27) 2018.04.15
과제 관리 시스템 (PMS9)  (8) 2016.12.01
Project9  (8) 2016.09.18
데이터를 Excel 파일로 다운로드  (2) 2016.09.18

Java에서 데이터를 엑셀로 다운로드 하는 방법은 몇 가지 방법이 있다.

http://greatkim91.tistory.com/72

개인적으로 jXLS를 방법을 선호하는데

jXLS은 템플릿 방식으로 Java의 MVC를 그대로 활용할 수 있기 때문이다.

다만, 엑셀 2003(XLS) 파일만 지원되다 엑셀 2007(XLSX) 파일 지원은 뒤늦게 지원되어

관련 문서가 많지 않아 (못 찾은 것일 수도),

여기에 문서로 정리한다.

http://jxls.sourceforge.net/getting_started.html

https://github.com/svn2github/jxls-105/blob/master/jxls-examples/src/main/java/net/sf/jxls/sample/StressXlsxTest.java

http://senni.tistory.com/27

http://blog.naver.com/PostView.nhn?blogId=likerkawk&logNo=220260084312

이상의 문서를 참조해서 다음의 예제를 만들었다.

기본 개념들은 위 자료를 참고하길 바란다.


개인적으로 오랫동안 jXLS를 사용해 왔고 선호하는 이유는

Java의 MVC 개념을 적용하여 사용할 수 있기 때문이다.

Java의 MVC에서 V (view)는 JSP를 의미하는데

처리된 데이터를 적절하게 디자인하여 화면에 출력하게 된다.

jXLS를 사용하면 기존 코드(M과 C)를 그대로 활용하고

JSP 대신 엑셀 파일을 사용하여 처리한다.

JSP로 보여주나 Excel로 보여주나(다운로드)

같은 개념으로 보고 그림과 같이 View만 바꿔서 사용하는 것이다. 

예를 들어, 게시판 리스트를 작성한다고 하면

다음과 같이 컨트롤을 작성한다. (게시판 예제 참조)

@RequestMapping(value = "/boardList")
public String boardList(HttpServletRequest request, BoardSearchVO searchVO, ModelMap modelMap) {

        searchVO.pageCalculate( boardSvc.selectBoardCount(searchVO) );
        List<?> listview  = boardSvc.selectBoardList(searchVO);
       
        modelMap.addAttribute("searchVO", searchVO);
        modelMap.addAttribute("listview", listview);

        return "board/BoardList";
}


jXLS를 사용하여 다음과 같이 사용할 수 있다.

@RequestMapping(value = "/boardListExcel")
public void boardListExcel(HttpServletRequest request, HttpServletResponse response, BoardSearchVO searchVO) {

        List<?> listview  = boardSvc.selectBoardList(searchVO);
        Map<String , Object> beans = new HashMap<String , Object>();
        beans.put("listview" , listview );

        MakeExcel me = new MakeExcel();
        me.download(request, response, beans, me.get_Filename("project9"), "board.xlsx");
}

ModelMap으로 값을 JSP로 전달하는 대신

Map을 사용하고

board/BoardList(.jsp)파일을 반환하는 대신

board.xlsx라는 엑셀 템플릿을 지정한다.

이외에 엑셀은 모든 데이터를 받기 때문에

페이징 처리를 위한 개수(selectBoardCount) 계산을 하지 않는 차이가 있다.

JSP와 엑셀 모두 같은 서비스와 SQL을 사용하기 때문에

복잡한 별도 처리 없이 코드 재사용성을 높일 수 있다.

MakeExcel 클래스의 주요 코드는 다음과 같고

jXLS를 메소드 호출(download)만으로 사용하기 위해

미리 jXLS 사용 코드를 함수화 한 코드일 뿐이다.

download 메소드를 호출해서 사용하는 것만 알면 되므로

클래스에 대한 자세한 설명을 하지 않는다.

public void download(HttpServletRequest request, HttpServletResponse response, Map<String , Object> beans, String filename, String templateFile) {
        String tempPath = request.getSession().getServletContext().getRealPath("/WEB-INF/templete") ;
       
        try {
            InputStream is = new BufferedInputStream(new FileInputStream(tempPath + "\\" + templateFile));
            XLSTransformer transformer = new XLSTransformer();
            Workbook resultWorkbook = transformer.transformXLS(is, beans);
            response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + ".xlsx\"");
            OutputStream os = response.getOutputStream();
            resultWorkbook.write(os);
           
        } catch (ParsePropertyException | InvalidFormatException | IOException ex) {
            LOGGER.error("MakeExcel"); // System.out.println(ex);
        }
}

MakeExcel.java


마지막으로 view에서 처리가 있다.

JSP에서 다양한 디자인과 함께 데이터를 출력하게 된다.

엑셀에서는 그림과 같이 적절한 디자인을 하고

${} 안에 Map으로 넘긴 변수명을 넣어 사용하면 된다.

Map으로 넘긴 변수명이 listview이니 ${listview} 이고

listview는 글제목(brdtitle), 작성자(brdwriter), 작성일자(brddate) 등을 가지는

VO 클래스들을 가지고 있기 때문에 그림과 같이

${listview.brdtitle}, ${listview.brdwriter} 등으로 사용하게 된다.

listview는 LIST 형으로 JSP에서는 반복문을 사용해야 하지만

jXLS에서는 알아서 처리해주기 때문에

그림과 같이 작성만 하면 된다.

board.xlsx


자세한 코드는 project9에 샘플로 작성되어 있다.

https://github.com/gujc71/project9


jXLS을 사용하면

엑셀의 챠트 등 엑셀에서 제공하는 대부분의 기능을 사용할 수 있는 장점도 있다.



추가해야 할 라이브러리는 다음과 같다.

        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.6</version>
        </dependency>
      
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.3.0</version>
        </dependency>
      
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-poi</artifactId>
            <version>1.0.9</version>
        </dependency>
      
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-jexcel</artifactId>
            <version>1.0.6</version>
        </dependency>
              
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
      
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>




'Java > 기타' 카테고리의 다른 글

그룹웨어 (Java) - 설치  (27) 2018.04.15
과제 관리 시스템 (PMS9)  (8) 2016.12.01
Project9  (8) 2016.09.18
Project9 설치  (5) 2016.09.18

+ Recent posts