# 요구사항 분석
| No | 요구사항 |
| --- | ---------------------------------------------------------------- |
| 1 | [로그인 - 깃허브 계정 또는 회원가입을 통해 로그인할 수 있다.](#요구사항-1--로그인---깃허브-계정-또는-회원가입을-통해-로그인할-수-있다) |
| 2 | [이슈목록 - 기본](#요구사항-2--이슈목록---기본) |
| 3 | [이슈목록 - 필터](#요구사항-3--이슈목록---필터) |
| 4 | [이슈목록 - 다중선택](#요구사항-4--이슈목록---다중-선택) |
| 5 | [새로운 이슈 작성](#요구사항-5--새로운-이슈-작성) |
| 6 | [이슈 상세](#요구사항-6--이슈-상세) |
| 7 | [레이블 목록](#요구사항-7--레이블-목록) |
| 8 | [마일스톤 목록](#요구사항-8--마일스톤-목록) |
<br>
#### 요구사항 1 : 로그인 - 깃허브 계정 또는 회원가입을 통해 로그인할 수 있다.
| No | Task |
| --- | :------------------------------------------------------------------------ |
| 1-1 | 이미 발행한 OAuth 토큰이 있는 경우 바로 이슈 목록를 표시한다. |
| 1-2 | 아이디는 최소 6자리에서 16자리까지 입력할 수 있다. |
| 1-3 | 비밀번호는 최소 6자리에서 12자리까지 입력할 수 있다. |
| 1-4 | 아이디와 비밀번호가 모두 입력되었을 때 로그인 버튼이 활성화된다. |
| 1-5 | 로그인 버튼 클릭 시, 아이디와 비밀번호가 일치하지 않으면 에러를 표시한다. |
| 1-6 | 로그인을 하면 이슈 목록 페이지로 이동한다. |
<br>
#### 요구사항 2 : 이슈목록 - 기본
| No | Task |
| ----- | :---------------------------------------------------------------------------------------------------------------------------------- |
| 2-1 | 이슈목록 페이지는 기본으로 열린 이슈를 보여준다. |
| 2-1-1 | 이슈가 없는 경우 '이슈없음' 메시지를 보여준다. |
| 2-2 | 이슈 탭에는 열린 이슈, 닫힌 이슈 탭의 개수가 카운팅되어 표시된다. |
| 2-3 | 열린 이슈, 닫힌 이슈 탭을 클릭하면 해당하는 목록을 제공한다. |
| 2-4 | 이슈 목록에는 상태, 제목, 레이블, 이슈번호, 작성자 및 작성시간, 마일스톤, 담당자를 표시한다. (해당 값이 없을 경우 표시하지 않는다.) |
| 2-5 | 이슈 제목 버튼을 클릭하면 해당 이슈에 대한 상세화면으로 이동한다. |
| 2-6 | 레이블 탭을 누르면 레이블 목록 페이지로 이동한다. |
| 2-7 | 마일스톤 탭을 누르면 마일스톤 목록 페이지로 이동한다. |
| 2-8 | 레이블, 마일스톤 탭은 옆에 개수가 카운팅되어 표시된다. |
<br>
#### 요구사항 3 : 이슈목록 - 필터
| No | Task |
| ----- | :------------------------------------------------------------------------------------------------------ |
| 3-1 | 필터바 버튼을 클릭하면 이슈 필터 팝업이 뜬다. |
| 3-2 | 필터 종류 중 하나를 선택하면 |
| 3-2-1 | 이슈 필터가 닫힌다. |
| 3-2-2 | 검색창은 Filled 상태가 된다. |
| 3-2-3 | 검색창에 선택된 필터 검색어가 입력된다. |
| 3-2-4 | 목록에는 조건이 적용된 이슈만 나타난다. |
| 3-3 | 필터 팝업이 떠있을 때, 팝업 외 다른 영역을 클릭하면 팝업이 닫힌다. |
| 3-4 | 이슈 목록 우측상단의 조건버튼(담당자, 레이블, 마일스톤, 작성자)을 클릭하면 해당하는 조건팝업이 뜬다. |
| 3-4-1 | 조건 팝업이 떠있을 때, 팝업 외 다른 영역을 클릭하면 팝업이 닫힌다. |
| 3-4-2 | 다중 선택이 가능하다. |
| 3-5 | 이슈 목록 상단의 열린 이슈, 닫힌 이슈 탭을 클릭하면 |
| 3-5-1 | 검색창에 선택된 필터 검색어가 입력된다. |
| 3-5-2 | 목록에는 조건이 적용된 이슈만 나타난다. |
<br>
#### 요구사항 4 : 이슈목록 - 다중 선택
| No | Task |
| ----- | :----------------------------------------------------------------------------------------------------------------------------------------- |
| 4-1 | 체크 박스를 클릭하면 해당 이슈가 선택된다. |
| 4-1-1 | 선택한 개수만큼 이슈 목록 상단 영역에 카운팅되어 표시된다. |
| 4-2 | 체크 박스가 1개 이상 선택됐을 때, 이슈 목록 상단 우측 탭이 필터 버튼(담당자, 레이블, 마일스톤, 작성자 탭)에서 상태 수정 버튼으로 변경된다. |
| 4-2-1 | 모든 체크박스가 해제되면 다시 필터 버튼으로 돌아간다. |
| 4-3 | 이슈 목록 상단 영역의 체크 박스를 클릭하면 전체 선택 또는 전체 해제로 동작한다. |
| 4-4 | 이슈 목록 상단 우측의 상태 수정 버튼을 클릭하면 상태 변경 팝업이 나타난다. |
| 4-4-1 | 상태 변경 팝업이 떠있을 때, 팝업 외 다른 영역을 클릭하면 팝업이 닫힌다. |
| 4-5 | 팝업의 이슈 열기/닫기 버튼을 클릭하면 선택된 이슈에 오픈/클로즈 상태를 일괄 적용할 수 있다. |
<br>
#### 요구사항 5 : 새로운 이슈 작성
| No | Task |
| ----- | :---------------------------------------------------------------------------- |
| 5-1 | 제목이 입력되면 완료 버튼이 활성화 된다. |
| 5-2 | 본문을 작성하면 |
| 5-2-1 | 내용 작성 영역이 포커스되면 포커스 된 스타일이 적용된다.(하얀배경) |
| 5-2-2 | 내용 작성 영역 하단 우측에 띄어쓰기 포함 글자수를 표시한다. |
| 5-3 | 완료 버튼을 클릭하면 |
| 5-3-1 | 작성한 내용으로 이슈를 등록한다. |
| 5-3-2 | 새로 작성된 이슈의 상세 화면 페이지으로 이동한다. |
| 5-4 | 우측 상세정보영역(담당자, 레이블, 마일스톤)을 클릭하면 정보 선택 팝업이 뜬다. |
| 5-4-1 | 정보 선택 팝업이 떠있을 때, 팝업 외 다른 영역을 클릭하면 팝업이 닫힌다. |
| 5-4-2 | 다중 선택이 가능하다. |
| 5-5 | 파일 첨부하기 버튼을 클릭하면 이미지를 선택할 수 있는 창이 뜬다. |
| 5-5-1 | 이미지를 선택하면 서버에 업로드 된다. |
| 5-5-2 | 저장된 이미지 주소가 마크다운 형식으로 내용 작성 영역에 추가된다. |
| 5-6 | 작성 취소 버튼을 클릭하면 이슈 목록 화면으로 이동한다. |
<br>
#### 요구사항 6 : 이슈 상세
| No | Task |
| --- | :--- |
| 6-1 | 제목 편집 버튼을 클릭해 제목을 변경할 수 있다. |
| 6-1-1 | 제목 편집 버튼을 클릭하면 제목이 인풋창으로 변경된다. |
| 6-1-2 | 우측 버튼(제목 편집, 이슈 닫기)이 편집 취소, 편집 완료 버튼으로 변경된다. |
| 6-1-3 | 키보드로 입력하면 하얀 배경(포커스 스타일)으로 변경된다. |
| 6-1-4 | 편집 완료 버튼을 클릭하면 변경된 제목이 반영된다. |
| 6-1-5 | 편집 취소 버튼을 클릭하면 기존의 제목이 그대로 나타난다. |
| 6-2 | 이슈 닫기 버튼을 클릭해 이슈를 닫을 수 있다. |
| 6-2-1 | 이슈 닫기 버튼을 클릭하면 해당 이슈가 보관되고, 이슈 닫기 버튼이 다시 열기 버튼으로 변경된다. |
| 6-2-2 | 제목 아래 이슈 상태가 열린 이슈에서 닫힌 이슈로 변경된다. |
| 6-2-3 | 이슈 상태 텍스트(누가, 언제)를 변경한다. |
| 6-2-4 | 이슈가 닫혔다는 코멘트가 추가된다. |
| 6-3 | 코멘트를 남길 수 있다. |
| 6-3-1 | 입력창이 포커스되면 포커스 스타일로 변경된다. |
| 6-3-2 | 내용 작성 영역 하단 우측에 띄어쓰기 포함 글자수를 표시한다. |
| 6-3-3 | 내용을 작성하면 하단의 코멘트 작성 버튼이 활성화된다. |
| 6-3-4 | 코멘트 작성 버튼을 클릭하면 코멘트가 등록된다. |
| 6-4 | 파일 첨부하기 버튼을 클릭하면 파일을 첨부할 수 있다. (5-5와 동일) |
| 6-5 | 본인이 작성한 코멘트를 편집할 수 있다. |
| 6-5-1 | 편집 버튼을 클릭하면 코멘트 상자가 입력 상자로 변경된다. |
| 6-5-2 | 내용 작성은 6-3과 동일 |
| 6-5-3 | 하단에 편집 취소 버튼과 편집 완료 버튼이 나타난다. |
| 6-5-4 | 편집 취소 버튼을 클릭하면 입력 상자가 코멘트 상자로 변경된다. 내용은 그대로 |
| 6-5-5 | 편집 완료 버튼을 클릭하면 입력 상자가 코멘트 상자로 변경된다. 내용은 새로 입력한 내용 |
| 6-6 | 우측 상세정보영역(담당자, 레이블, 마일스톤)을 클릭하면 정보선택 팝업이 뜬다. |
| 6-6-1 | 정보 선택 팝업이 떠있을 때, 팝업 외 다른 영역을 클릭하면 팝업이 닫힌다. |
| 6-6-2 | 다중 선택이 가능하다. |
| 6-7 | 이슈 삭제 버튼을 클릭하면 이슈를 삭제할 수 있다. |
| 6-7-1 | 이슈를 삭제하면 이슈 목록 페이지로 이동한다. (기본 필터는 열린 이슈로 한다.) |
<br>
#### 요구사항 7 : 레이블 목록
| No | Task |
| --- | :--- |
| 7-1 | 레이블 탭을 클릭하면 레이블 목록 페이지로 이동한다. |
| 7-2 | 목록은 레이블 이름, 설명, 편집버튼, 삭제 버튼으로 구성된다. |
| 7-2-1 | 레이블 설명은 한 줄로 표시(특정 길이 넘어가면 말줄임 ... 표시)한다. |
| 7-2-2 | 레이블 설명이 없으면 표시하지 않는다. |
| 7-3 | 삭제 버튼을 클릭하면 해당 레이블이 삭제된다. |
| 7-3-1 | 삭제된 레이블을 갖고 있는 이슈들의 정보에서 삭제된 레이블을 제거한다. |
| 7-4 | 우측 상단 추가 버튼을 클릭하면 레이블을 추가할 수 있다. |
| 7-4-1 | 추가 버튼을 클릭하면 목록의 상단에 새로운 레이블 추가 입력창이 생성된다. |
| 7-4-2 | 레이블 이름이 입력되면 완료 버튼이 활성화된다. |
| 7-4-3 | 텍스트 색상은 어두운 색(검정)이 기본으로 선택된다. |
| 7-4-4 | 배경 색상은 #EFF0F6이 기본으로 선택된다. |
| 7-4-5 | 배경 색상 변경 버튼을 클릭 시 저장된 색상 중 랜덤으로 선택된다. |
| 7-4-6 | 배경 색상을 직접 키보드로 입력할 수 있다. |
| 7-4-7 | 배경 색상 입력 값이 유효하지 않으면 기본 색상(#EFF0F6)으로 적용된다. |
| 7-4-8 | 레이블 미리보기는 사용자 입력(이름, 설명, 배경색상, 텍스트색상)이 일정 ms이상 없을 때 최신화 된다. |
| 7-4-9 | 활성화된 완료 버튼을 클릭하면 레이블 목록 제일 아래에 새로 만든 레이블이 추가 된다. |
| 7-5 | 편집 버튼을 클릭하면 레이블을 편집할 수 있다. |
| 7-5-1 | 편집 버튼을 클릭하면 해당 목록의 레이블 아이템이 편집창으로 전환된다. |
| 7-5-2 | 취소 버튼을 클릭하면 편집창이 사라지고 기존 레이블 아이템으로 전환된다. |
| 7-5-3 | 활성화된 완료 버튼을 클릭하면 해당 레이블 아이템의 변경사항이 업데이트되고 편집창이 사라진다. |
| 7-5-4 | 편집창에서의 내용 입력은 7-4-2 ~ 7-4-8과 동일하다. |
<br>
#### 요구사항 8 : 마일스톤 목록
| No | Task |
| --- | :--- |
| 8-1 | 마일스톤 탭을 클릭하면 마일스톤 목록 페이지로 이동한다. 기본으로 열린 마일스톤을 보여준다. |
| 8-2 | 목록은 제목, 마감기한, 설명, 닫기 버튼, 편집 버튼, 삭제 버튼, 프로그래스 바, 열린 이슈 개수, 닫힌 이슈 개수로 구성된다. |
| 8-2-1 | 설명은 일정 길이가 넘어가면 다음 줄로 줄바꿈된다. 박스 크기도 입력에 따라 커진다. |
| 8-2-2 | 프로그래스 바의 진행률은 닫힌 이슈 개수 / 전체 이슈 개수로 계산한다. |
| 8-3 | 닫기 버튼을 클릭하면 마일스톤이 닫힌다. |
| 8-3-1 | 열린 마일스톤 목록을 업데이트 한다. |
| 8-3-2 | 닫힌 마일스톤의 갯수를 업데이트 한다. |
| 8-4 | 삭제 버튼을 클릭하면 마일스톤이 삭제된다. |
| 8-5 | 상단 우측의 추가 버튼을 클릭하면 마일스톤을 추가할 수 있다. |
| 8-5-1 | 추가 버튼을 클릭하면 입력 상자가 나타난다. |
| 8-5-2 | 추가 버튼이 닫기 버튼으로 변경된다. |
| 8-5-3 | 제목을 입력하면 완료 버튼이 활성화된다.|
| 8-5-4 | 완료일 입력시 숫자 입력 후 자동으로 -를 추가한다. |
| 8-6 | 활성화된 완료 버튼을 클릭하면 마일스톤을 추가한다. |
| 8-6-1 | 입력 상자가 사라진다. |
| 8-6-2 | 마일스톤 목록을 업데이트한다.|
| 8-6-3 | 마일스톤 목록 상단의 마일스톤 갯수를 업데이트한다. |
| 8-7 | 편집 버튼을 클릭하면 마일스톤을 편집할 수 있다.|
| 8-7-1 | 목록 아이템이 입력 상자로 변경된다. 하단에 취소 버튼과 완료 버튼이 있다. |
| 8-7-2 | 내용 입력은 8-5-3 ~ 8-6과 동일하다. |
| 8-7-3 | 취소 버튼을 클릭하면 편집이 취소된다. |