IMS 이슈 만들기

1. 요구사항 및 기능 분석

(1) 이슈(Issue) 기능

  • 팀에서 완료해야 하는 개별 작업을 추적하는 데 이슈(issue)를 사용함
  • 이슈는 제목과 내용 뿐만 아니라 담당자, 기한 날짜, 상태 같이 작업에 대한 많은 정보를 담고 있으며, 이러한 각 요소를 이슈 필드(issueField)라고 함
  • 기본 시스템의 고정 필드 이외의 정보들은 사용자 정의 필드를 만들어 정보를 수집할 수 있음
  • 이슈 유형별로 필수 입력, 표시여부, 필드 순서 등을 선택하여 유연하게 필드를 배치할 수 있음

(2) 이슈 구조

  • 이슈 유형 (IssueFieldGroup)
    • 고정 필드사용자 정의 필드들을 묶어서 하나의 이슈 유형으로 관리함
    • 이슈 유형은 템필릿 역할을 하여, 사용자가 해당 이슈 등록시 어떤 필드들을 입력해야 하는지 도움을 주는 역할을 함
  • 사용자 정의 필드 (IssueField)
    • 이슈마다 원하는 형태의 필드들을 정의하여 생성할 수 있음
    • 필드의 필수 입력 여부, 숨김처리 여부, 필드 순서 등을 설정할 수 있음
    • 필드 유형(IssueFieldType)에는 텍스트, 단락, 날짜, 사용자, 드롭다운, 체크박스가 존재하며, 필드를 어떤 유형으로 만들 것인지 선택할 수 있음
      • 텍스트 : 공백을 포함하여 최대 255자까지 한 줄의 텍스트를 입력
      • 단락 : 여러 줄의 긴 텍스트를 입력할 수 있는 무제한 텍스트 영역 생성
      • 날짜 : 날짜와 시간을 선택
      • 사용자 : 한명의 사용자 선택 허용
      • 드롭다운 : 옵션을 생성하여, 목록에서 값을 선택
      • 그룹 : 사용자 그룹 및 여러명의 사용자를 선택할 수 있음 (예정)
      • 계단식 드롭 다운 : 부모-자식 관계에 따라 옵션을 생성하여, 값을 선택할 수 있음 (예정)
      • 체크박스 : 옵션을 생성하여, 목록에서 여러개의 값을 선택 (예정)

image.png

image.png

image.png


2. 구현 아이디어 및 적용

(1) EAV 모델 개념

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

image.png

  • 사용 이유
    • 이슈(Issue)의 필드는 사용자에 의해 언제든 생성 및 변경될 수 있음
    • 속성의 종류와 개수가 고정되지 않고, 동적으로 변화하는 데이터를 저장하기 위해 EAV 모델 사용

(2) EAV 모델 적용한 ERD

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

image.png