1. 개발 목적
MESLite 시스템에서 여러 업무 화면이 공통으로 사용할 수 있는 공용 게시판 frmBoard를 개발한다.
frmBoard는 하나의 게시판 전용 화면이 아니라, 프로그램 등록 정보에 따라 서로 다른 게시판으로 동작하는 재사용 가능한 공용 게시판 폼이다.
예를 들어 Form 이름은 frmBoard로 동일하더라도 프로그램명 또는 프로그램 ID가 다르면 각각 별도의 게시판으로 인식되어야 한다.
2. 기본 개념
2.1 게시판 기준 코드
게시판의 기본 구분은 eCode 테이블을 사용한다.
- eCode.ID = '공용게시판'
- 해당 코드의 SEQ 값을 게시판 관련 데이터의 기준 Class 값으로 사용한다.
2.2 게시판 Class 기준
게시판 데이터는 eData에 저장한다.
eData.ClassSEQ는 eClass의 SEQ를 참조한다.
- eClass.ID = '게시판'
- eData.ClassSEQ = eClass.SEQ
게시판의 실제 구분은 프로그램 등록 정보와 연결한다.
- 프로그램 등록 시 Form 이름은 frmBoard
- 프로그램명이 다르면 서로 다른 게시판으로 인식
- 프로그램명 또는 프로그램 ID를 기준으로 eCode.ID를 참조
- 해당 eCode.SEQ를 게시판 구분값으로 사용
즉, frmBoard는 하나지만 다음과 같이 여러 게시판으로 동작해야 한다.
FormNameProgramName게시판 구분
| frmBoard | 공지사항 | 공지사항 게시판 |
| frmBoard | 품질게시판 | 품질게시판 |
| frmBoard | 생산게시판 | 생산게시판 |
| frmBoard | 자유게시판 | 자유게시판 |
3. 사용 테이블
3.1 eData
게시글, 댓글, 게시판 본문 정보를 저장한다.
저장 대상
- 게시글 제목
- 게시글 본문
- 작성자
- 작성일시
- 수정일시
- 조회수
- 게시글 상태
- 댓글
- 부모 글 정보
- 정렬 정보
- HTML 작성 여부
- 첨부파일 존재 여부
권장 구조 개념
기존 eData 구조를 최대한 활용하되, 게시판 처리를 위해 다음 개념을 반영한다.
| 항목 | 설명 |
| ClassSEQ | eClass.ID = '게시판'의 SEQ |
| CodeSEQ | 게시판 구분용 eCode.SEQ |
| ParentSEQ | 댓글인 경우 원본 게시글 SEQ |
| Title | 게시글 제목 |
| Contents | 게시글 본문 |
| DataType | BOARD 또는 COMMENT |
| HtmlYN | HTML 작성 여부 |
| UserID | 작성자 ID |
| UserName | 작성자명 |
| WriteDate | 작성일시 |
| UpdateDate | 수정일시 |
| ViewCount | 조회수 |
| DeleteYN | 삭제 여부 |
| FileYN | 첨부파일 존재 여부 |
댓글은 별도 테이블을 만들지 않고 eData에 같이 저장한다.
- 게시글: DataType = 'BOARD'
- 댓글: DataType = 'COMMENT'
- 댓글의 ParentSEQ는 원본 게시글의 SEQ
3.2 eFile
첨부파일 정보를 저장한다.
eFile.ClassSEQ 또는 eFile.Class도 게시판 구분용 eCode.SEQ와 동일한 개념으로 사용해도 된다.
다만 게시글과 첨부파일의 직접 연결을 위해 반드시 원본 게시글의 eData.SEQ를 참조해야 한다.
저장 대상
- 첨부파일 원본명
- 저장 파일명
- 저장 경로
- 파일 크기
- 파일 확장자
- MIME Type
- 연결된 게시글 SEQ
- 작성자
- 등록일시
- 삭제 여부
권장 구조 개념
| 항목 | 설명 |
| ClassSEQ | 게시판 구분용 eCode.SEQ 또는 eClass.SEQ |
| DataSEQ | 연결된 게시글 eData.SEQ |
| FileName | 원본 파일명 |
| SaveFileName | 서버 또는 로컬 저장 파일명 |
| FilePath | 저장 경로 |
| FileSize | 파일 크기 |
| FileExt | 확장자 |
| ContentType | 파일 MIME Type |
| UserID | 등록자 |
| WriteDate | 등록일시 |
| DeleteYN | 삭제 여부 |
4. frmBoard 화면 구성
4.1 첫 화면
frmBoard 첫 화면은 웹 게시판과 유사하게 구성한다.
주요 영역
- 상단 검색 영역
- 게시글 목록 영역
- 페이지 번호 영역
- 하단 기능 버튼 영역
- 필요 시 상세보기 또는 댓글 영역
4.2 상단 검색 영역
다음 조건으로 검색할 수 있게 한다.
- 제목
- 내용
- 작성자
- 작성일 기간
- 첨부파일 여부
- 전체 검색
구성 예시
- 검색어 입력 TextBox
- 검색 조건 ComboBox
- 시작일 DatePicker
- 종료일 DatePicker
- 검색 버튼
- 초기화 버튼
4.3 게시글 목록 영역
Syncfusion Grid 계열 컴포넌트를 사용하여 깔끔하게 구성한다.
표시 항목
| 컬럼 | 설명 |
| 번호 | 게시글 번호 |
| 제목 | 게시글 제목 |
| 작성자 | 작성자명 |
| 작성일 | 작성일시 |
| 조회수 | 조회수 |
| 댓글수 | 댓글 수 |
| 첨부 | 첨부파일 여부 |
목록 표시 규칙
- 최신 글이 위에 표시되도록 정렬한다.
- 삭제된 글은 기본적으로 표시하지 않는다.
- 댓글은 목록에 직접 표시하지 않고 댓글 수로 표시한다.
- 첨부파일이 있으면 아이콘 또는 “첨부” 표시를 한다.
- 제목 클릭 또는 행 더블클릭 시 상세보기 화면을 연다.
4.4 페이지 처리
게시글이 많을 경우 웹 게시판처럼 페이지 번호를 제공한다.
필수 기능
- 1, 2, 3, 4, 5 형태의 페이지 버튼
- 이전 페이지
- 다음 페이지
- 처음
- 마지막
- 페이지당 표시 건수 선택
기본값
- 페이지당 20건
- 선택 가능 값: 10, 20, 50, 100
5. 게시글 상세보기
게시글 선택 시 상세 화면 또는 Popup을 표시한다.
구현 방식은 다음 중 하나로 한다.
- frmBoard 내부 우측 또는 하단 상세 패널
- 별도 Popup Form
- 별도 상세 Form
공용성과 유지보수를 고려하여 우선은 별도 Popup 또는 별도 Form으로 구성한다.
권장 Form명:
- frmBoardEdit
- 신규, 수정, 상세보기 공통 사용
6. 게시글 작성 / 수정 화면
게시글 신규 작성과 수정은 같은 Form을 사용한다.
Form 동작 모드
| Mode | 설명 |
| NEW | 신규 작성 |
| VIEW | 상세 보기 |
| EDIT | 수정 |
| REPLY | 댓글 작성 |
입력 항목
- 제목
- 본문
- HTML 작성 여부
- 첨부파일
- 작성자 정보
- 저장 버튼
- 취소 버튼
7. 본문 작성 방식
Syncfusion 컴포넌트를 활용하여 다음 두 가지 방식 중 하나를 지원한다.
7.1 일반 텍스트 작성
- 일반 TextBox 또는 RichTextBox 방식
- 기본 입력 방식으로 제공
7.2 HTML 형식 작성
- Syncfusion HTML Editor 또는 RichTextEditor 계열 컴포넌트 사용
- 굵게, 밑줄, 색상, 표, 링크, 이미지 등의 기본 편집 기능 제공
- HTML 작성 여부를 HtmlYN 값으로 저장
저장 규칙
- 일반 글: 본문 내용을 그대로 저장
- HTML 글: HTML 문자열로 저장
- 상세보기 시 HtmlYN 값에 따라 표시 방식 분기
8. 첨부파일 기능
게시글 작성 또는 수정 시 첨부파일을 등록할 수 있게 한다.
필수 기능
- 파일 추가
- 파일 삭제
- 첨부파일 목록 표시
- 파일 다운로드
- 첨부파일 아이콘 표시
- 수정 시 기존 첨부파일 유지
- 수정 시 기존 첨부파일 삭제 가능
- 신규 첨부파일 추가 가능
첨부파일 저장 방식
- 실제 파일은 지정된 파일 저장 폴더에 저장
- 파일 정보는 eFile에 저장
- 게시글과 첨부파일은 eData.SEQ와 eFile.DataSEQ로 연결
파일 저장 경로 예시
/Files/Board/{BoardCodeSEQ}/{yyyyMMdd}/
또는 Windows 프로그램 기준:
.\Files\Board\{BoardCodeSEQ}\{yyyyMMdd}\
파일명 중복 방지
저장 파일명은 GUID 또는 날짜 기반 고유 파일명을 사용한다.
예:
20260708_153012_9F3A2B11.pdf
9. 댓글 기능
게시글 상세보기 화면에서 댓글을 등록하고 조회할 수 있게 한다.
댓글 저장 방식
댓글도 eData에 저장한다.
- 댓글: DataType = 'COMMENT'
- 댓글의 ParentSEQ = 원본 게시글 SEQ
댓글 기능
- 댓글 목록 조회
- 댓글 작성
- 댓글 수정
- 댓글 삭제
- 댓글 작성자만 수정/삭제 가능
- 관리자는 전체 댓글 삭제 가능
10. 삭제 규칙
게시글 삭제는 물리 삭제가 아니라 논리 삭제를 기본으로 한다.
- DeleteYN = 'Y'
삭제 가능 조건
작성자 본인이거나 관리자이면 삭제 가능하다.
단, 게시글에 댓글이 있으면 삭제할 수 없다.
삭제 제한 메시지
댓글이 있는 게시글을 삭제하려고 하면 다음 메시지를 표시한다.
댓글이 있는 게시글은 삭제할 수 없습니다.
댓글을 먼저 삭제한 후 다시 시도하세요.
첨부파일 삭제
게시글 삭제 시 첨부파일은 실제 삭제하지 않고 eFile.DeleteYN = 'Y'로 처리한다.
11. 수정 권한
게시글과 댓글은 작성자만 수정할 수 있다.
관리자 권한이 있는 사용자는 전체 수정 또는 삭제 가능하도록 확장 가능하게 한다.
기본 권한 규칙
| 사용자 | 수정 | 삭제 |
| 작성자 | 가능 | 가능 |
| 다른 사용자 | 불가 | 불가 |
| 관리자 | 가능 | 가능 |
12. 조회수 처리
게시글 상세보기 시 조회수를 증가시킨다.
단, 같은 사용자가 짧은 시간 안에 반복 조회할 경우 중복 증가를 방지할 수 있도록 구조를 열어둔다.
초기 버전에서는 상세보기 진입 시 단순 증가 방식으로 구현한다.
13. 공용 게시판 동작 방식
frmBoard는 호출되는 프로그램 정보에 따라 게시판을 구분한다.
호출 시 필요한 값
- FormName
- ProgramID 또는 ProgramName
- LoginUserID
- LoginUserName
- 관리자 여부
게시판 구분 절차
- 현재 실행 중인 프로그램 정보를 확인한다.
- ProgramName 또는 ProgramID와 동일한 eCode.ID를 조회한다.
- 해당 eCode.SEQ를 게시판 구분값으로 사용한다.
- eData 조회 시 해당 구분값 기준으로 게시글을 조회한다.
- eFile 조회 시에도 동일 구분값과 eData.SEQ를 기준으로 첨부파일을 조회한다.
14. 권장 클래스 구성
14.1 Model
BoardPostModel
BoardCommentModel
BoardFileModel
BoardSearchCondition
14.2 Service
BoardService
BoardFileService
BoardPermissionService
14.3 Form
frmBoard
frmBoardEdit
frmBoardComment
frmBoardFileView
15. frmBoard 주요 기능
frmBoard에는 다음 기능을 구현한다.
필수 기능
- 게시글 목록 조회
- 검색
- 페이지 이동
- 신규 작성
- 상세 보기
- 수정
- 삭제
- 첨부파일 표시
- 댓글 수 표시
- 게시판별 데이터 분리
선택 기능
- HTML 본문 표시
- 첨부파일 미리보기
- 공지글 상단 고정
- 작성자별 필터
- 엑셀 내보내기
16. frmBoardEdit 주요 기능
frmBoardEdit는 신규, 수정, 상세보기를 공통 처리한다.
Mode별 동작
NEW
- 빈 화면으로 시작
- 제목, 본문, 첨부파일 입력 가능
- 저장 시 eData 신규 등록
- 첨부파일이 있으면 eFile 신규 등록
VIEW
- 제목, 본문, 첨부파일, 댓글 표시
- 작성자가 아니면 수정/삭제 버튼 숨김
- 작성자이면 수정/삭제 버튼 표시
- 댓글 등록 가능
EDIT
- 기존 제목, 본문, 첨부파일 표시
- 제목, 본문 수정 가능
- 첨부파일 추가/삭제 가능
- 저장 시 eData 수정
- 첨부파일 변경사항 eFile 반영
REPLY
- 댓글 입력 화면
- 저장 시 eData에 COMMENT로 저장
17. UI 디자인 방향
MESLite 전체 디자인 기준을 따른다.
디자인 원칙
- 업무용 프로그램답게 깔끔하고 단정하게 구성
- 버튼은 기능별로 명확하게 배치
- 목록, 상세, 첨부, 댓글 영역을 구분
- 불필요한 팝업 남발 금지
- 입력 화면은 신규/수정 공통 사용
- Syncfusion 컴포넌트를 적극 활용
버튼 예시
- 조회
- 신규
- 수정
- 삭제
- 저장
- 취소
- 파일추가
- 파일삭제
- 다운로드
- 댓글등록
18. 예외 처리
다음 상황은 반드시 예외 처리한다.
- 게시판 구분 eCode가 없는 경우
- eClass.ID = '게시판'이 없는 경우
- 첨부파일 저장 폴더가 없는 경우
- 파일 저장 실패
- DB 저장 실패
- 네트워크 오류
- 권한 없는 수정/삭제 시도
- 이미 삭제된 게시글 접근
- 댓글 있는 게시글 삭제 시도
19. 메시지 처리
사용자 메시지는 짧고 명확하게 표시한다.
예시
게시글이 저장되었습니다.
게시글이 수정되었습니다.
게시글이 삭제되었습니다.
첨부파일이 등록되었습니다.
첨부파일을 찾을 수 없습니다.
삭제 권한이 없습니다.
댓글이 있는 게시글은 삭제할 수 없습니다.
게시판 기준 정보가 없습니다.
20. 개발 시 주의사항
- 게시판별로 데이터가 섞이지 않도록 반드시 게시판 구분값을 조건에 포함한다.
- frmBoard는 특정 게시판에 종속되지 않는 공용 구조로 만든다.
- 신규/수정/상세보기는 가능한 동일 Form을 사용한다.
- 댓글은 별도 테이블이 아니라 eData에 저장한다.
- 첨부파일은 eFile에 저장하고 eData.SEQ와 연결한다.
- 첨부파일 실제 파일명은 중복되지 않도록 저장한다.
- 삭제는 물리 삭제가 아니라 DeleteYN 처리한다.
- 작성자와 관리자 권한을 구분한다.
- HTML 작성 여부를 저장하고 조회 시 표시 방식을 분리한다.
- 페이지 처리는 반드시 구현한다.
21. 우선 개발 범위
1차 개발에서는 다음 기능을 우선 구현한다.
- frmBoard 목록 화면
- 게시판 구분값 자동 인식
- 게시글 목록 조회
- 게시글 신규 작성
- 게시글 상세 보기
- 게시글 수정
- 게시글 삭제
- 댓글 등록 및 조회
- 댓글이 있는 글 삭제 제한
- 첨부파일 등록
- 첨부파일 다운로드
- 페이지 번호 조회
- 검색 기능
22. 향후 확장 가능 기능
향후 다음 기능을 추가할 수 있도록 구조를 열어둔다.
- 공지글 상단 고정
- 비밀글
- 답글형 게시판
- 이미지 본문 삽입
- 첨부파일 미리보기
- 권한 그룹별 게시판 접근 제한
- 읽음 여부 표시
- 게시글 알림
- 모바일 또는 태블릿 화면 연동
- 웹 게시판 API 연동
23. Codex 개발 요청 문장
아래 내용을 기준으로 MESLite의 공용 게시판 frmBoard를 개발해줘.
frmBoard는 하나의 Form을 여러 게시판에서 공통으로 사용하는 구조로 만든다. 게시판 구분은 프로그램 등록 정보의 ProgramName 또는 ProgramID를 기준으로 eCode.ID를 조회하고, 해당 eCode.SEQ를 게시판 구분값으로 사용한다. 기본 게시판 Class는 eClass.ID = '게시판'의 SEQ를 eData.ClassSEQ로 사용한다.
게시글과 댓글은 eData에 저장하고, 첨부파일은 eFile에 저장한다. 댓글은 별도 테이블을 만들지 말고 eData에 DataType = 'COMMENT', ParentSEQ = 원본 게시글 SEQ 방식으로 저장한다. 게시글은 DataType = 'BOARD'로 저장한다.
첨부파일은 eFile에 저장하되, 게시글의 eData.SEQ와 연결되도록 DataSEQ 또는 이에 해당하는 필드를 사용한다. eFile의 Class도 게시판 구분용 eCode.SEQ와 같은 개념으로 사용해도 된다.
첫 화면은 웹 게시판처럼 구성한다. 상단에는 검색 조건, 중앙에는 게시글 목록, 하단에는 페이지 번호와 신규 작성 버튼을 배치한다. 게시글 목록에는 번호, 제목, 작성자, 작성일, 조회수, 댓글 수, 첨부 여부를 표시한다. 게시글이 많으면 1, 2, 3 형태의 페이지 번호로 나누어 조회한다.
게시글을 선택하면 상세보기 화면 또는 Popup을 띄운다. 상세보기에서는 제목, 본문, 첨부파일, 댓글을 볼 수 있어야 한다. 작성자 본인이거나 관리자이면 수정/삭제 버튼을 표시하고, 그렇지 않으면 표시하지 않는다. 단, 댓글이 있는 게시글은 삭제할 수 없도록 한다.
게시글 신규 작성과 수정은 같은 Form을 사용한다. Form Mode를 NEW, VIEW, EDIT, REPLY 등으로 구분해서 처리한다. 본문 작성은 일반 텍스트와 HTML 형식을 모두 고려하고, Syncfusion 컴포넌트를 이용해 HTML 또는 RichText 방식으로 작성할 수 있게 구성한다. HTML 작성 여부는 HtmlYN 값으로 저장하고, 조회 시 이에 따라 표시 방식을 분리한다.
첨부파일은 파일 추가, 삭제, 목록 표시, 다운로드가 가능해야 한다. 실제 파일은 지정된 파일 저장 폴더에 저장하고, 파일 정보는 eFile에 저장한다. 파일명 중복을 방지하기 위해 저장 파일명은 GUID 또는 날짜 기반 고유 파일명을 사용한다.
삭제는 실제 삭제가 아니라 DeleteYN = 'Y' 방식으로 처리한다. 게시글 삭제 시 첨부파일도 eFile.DeleteYN = 'Y'로 처리한다.
Syncfusion Grid, Button, DatePicker, TextBox, RichTextEditor 계열 컴포넌트를 사용해서 MESLite 스타일에 맞게 깔끔하고 공용성이 높은 업무용 화면으로 만들어줘.
코드는 기존 MESLite 작업 지시 표준서, 디자인 가이드, DB 구조 기준을 우선 참조해서 작성하고, 기존 공통 DB 처리 함수, 공통 메시지 함수, 공통 사용자 정보 처리 방식이 있으면 그것을 우선 사용해줘.
'MES > MES Lite' 카테고리의 다른 글
| 문서보안관리시스템은? (0) | 2026.07.10 |
|---|---|
| 결재관리, 중소 제조업 업무 흐름을 잡아주는 공용 승인 엔진 (0) | 2026.07.09 |
| MES Lite, 이제는 AI가 생산계획을 도와주는 시대 (0) | 2026.07.01 |
| MES Lite, 시스템보다 중요한 것은 ‘운영할 사람’입니다 (0) | 2026.07.01 |
| MES 유지보수를 위한 핵심 조건 (0) | 2026.06.30 |