IMS 이슈 만들기
1. 요구사항 및 기능 분석
(1) 이슈(Issue) 기능
- 팀에서 완료해야 하는 개별 작업을 추적하는 데
이슈(issue)를 사용함
- 이슈는 제목과 내용 뿐만 아니라 담당자, 기한 날짜, 상태 같이 작업에 대한 많은 정보를 담고 있으며, 이러한 각 요소를
이슈 필드(issueField)라고 함
- 기본 시스템의
고정 필드 이외의 정보들은 사용자 정의 필드를 만들어 정보를 수집할 수 있음
- 이슈 유형별로 필수 입력, 표시여부, 필드 순서 등을 선택하여 유연하게 필드를 배치할 수 있음
(2) 이슈 구조
- 이슈 유형 (
IssueFieldGroup)
고정 필드와 사용자 정의 필드들을 묶어서 하나의 이슈 유형으로 관리함
- 이슈 유형은 템필릿 역할을 하여, 사용자가 해당 이슈 등록시 어떤 필드들을 입력해야 하는지 도움을 주는 역할을 함
- 사용자 정의 필드 (
IssueField)
- 이슈마다 원하는 형태의 필드들을 정의하여 생성할 수 있음
- 필드의 필수 입력 여부, 숨김처리 여부, 필드 순서 등을 설정할 수 있음
- 필드 유형(
IssueFieldType)에는 텍스트, 단락, 날짜, 사용자, 드롭다운, 체크박스가 존재하며, 필드를 어떤 유형으로 만들 것인지 선택할 수 있음
- 텍스트 : 공백을 포함하여 최대 255자까지 한 줄의 텍스트를 입력
- 단락 : 여러 줄의 긴 텍스트를 입력할 수 있는 무제한 텍스트 영역 생성
- 날짜 : 날짜와 시간을 선택
- 사용자 : 한명의 사용자 선택 허용
- 드롭다운 : 옵션을 생성하여, 목록에서 값을 선택
- 그룹 : 사용자 그룹 및 여러명의 사용자를 선택할 수 있음 (예정)
- 계단식 드롭 다운 : 부모-자식 관계에 따라 옵션을 생성하여, 값을 선택할 수 있음 (예정)
- 체크박스 : 옵션을 생성하여, 목록에서 여러개의 값을 선택 (예정)



2. 구현 아이디어 및 적용
(1) EAV 모델 개념
- EAV(Entity-Attribute-Value) 모델
- 데이터베이스 설계 패턴 중 하나로, 주로 속성이 동적으로 변할 수 있는 경우에 사용됨
- EAV 모델의 3가지 주요 구성 요소
- Entity : 속성을 가지는 주체
- Attribute : 엔티티가 가질 수 있는 속성
- Value : 속성에 대한 실제 값

- 사용 이유
- 이슈(Issue)의 필드는 사용자에 의해 언제든 생성 및 변경될 수 있음
- 속성의 종류와 개수가 고정되지 않고, 동적으로 변화하는 데이터를 저장하기 위해 EAV 모델 사용
(2) EAV 모델 적용한 ERD
- EAV 모델 적용 부분
- Entity → Issue 테이블
- Attribute → IssueField 테이블
- AttributeValue → IssueFieldValue 테이블
- ERD 특징
IssueField와 IssueFieldGroup은 N:M 관계
- 사용자가 커스텀 필드(IssueField)를 여러 개 생성한 후, 여러 조합으로 그룹핑하여 사용 할 수 있음
- IssueFieldGroup을 생성할 때마다 모든 IssueField를 새로 생성하는 것이 아님
- 이미 생성해둔 IssueField를 재활용 할 수도 있음
Issue와 IssueFieldGroup , IssueFieldValue 관계
- 이슈 등록시 IssueFieldGroup 들 중에 1개를 선택하여 등록함 (1:N)
- 사용자는 이슈 등록시 IssueFieldGroup에 속한 필드(IssueField)들에 대해 답변 해야 함
→ IssueFieldValue는 IssueId와 IssueFieldId를 FK로 갖고 있음
IssueField와 IssueFieldOption 관계
- IssueFieldType이 드롭다운 및 체크박스인 경우, 옵션 생성이 필요함
→ IssueField와 IssueFieldOption은 1:N 관계
- 계단식 드롭다운과 같이 계층형 구조를 해결 하기 위해 IssueFieldOption은 ParentFieldOptionId를 갖고 있음
