식별된 ROLE
-----------
* 사이트 관리자
* 프로젝트 관리자
* 프로젝트 멤버
* 로그인 유저
* 사용자


소프트웨어맵
------------
* 사용자는 관심있는 프로젝트를 찾기 위해 소프트웨어맵에서 특정 분류에 속한 프로젝트 목록을 볼 수 있다.
* 사용자는 활성화된 프로젝트를 찾기 위해 소프트웨어맵에서 프로젝트를 특정기준(랭킹 유저수, 게시물 수)으로 정렬하여 볼 수 있다.


nFORGE 홈
---------
* 사이트 관리자는 nFORGE 홈을 커스터마이징 할 수 있다. (8-20)


게시판(새소식 포함)
-------------------
* 사용자는 게시물의 내용을 볼 수 있다. (1)
* 사용자는 게시물 목록을 볼 수 있다. (1)
	* 페이징은 고려 안함
* 로그인 유저는 게시물을 등록할 수 있다. (1)
* 로그인 유저는 자신의 게시물을 삭제/편집 할 수 있다. (2)
* 로그인 유저는 게시물에 댓글을 남길 수 있다.(2)
* 사용자는 게시물의 댓글을 볼 수 있다.(1)
* 로그인 유저는 자신이 남긴 댓글을 삭제할 수 있다.(0.5)
* 프로젝트 관리자는 댓글을 삭제할 수 있다. (0.5)
* 프로젝트 관리자는 게시물을 편집/삭제 할 수 있다.(2)
* 프로젝트 멤버는 게시물을 새소식으로 게시하도록 요청할 수 있다. (0.5)
* 사이트 관리자는 새소식 게시 요청을 승인 또는 거절할 수 있다. (0.5)
* 사용자는 전체 프로젝트의 새소식 목록을 볼 수 있다. (1)
	* 제목과 프로젝트 이름이나오는 수준

위키
----
* git-based storage 구현
	* 위키 생성 (1)
	* 위키 페이지 작성 (3)
	* 위키 페이지 삭제 (1)
	* 위키 페이지 편집 (0)
	* 위키 페이지 열람 (1)
	* 위키 페이지 히스토리 출력 (2)
	* 위키 페이지를 특정 시점(commit)으로 되돌리기 (1)
* 프로젝트 멤버는 위키 페이지를 등록할 수 있다.
	* 마크다운 렌더링 (2)
	* 실시간 preview (2)
* 프로젝트 멤버는 위키 페이지를 편집 할 수 있다. (3)
	* 동시 편집 고려 (5)
		* 최신페이지에 시작한 상황이 아니면 경고
* 프로젝트 멤버는 위키 페이지를 삭제할 수 있다.(2)
* 프로젝트 멤버는 위키 페이지에 관련 자료를 다운받을 수 있도록 파일을 첨부할 수 있다. (3)
* 프로젝트 멤버는 위키 페이지에 그림을 삽임할 수 있다. (2)
	* 커서가 위치한 곳에 이미지 태그 표시
	* 이미지 크기를 조정하는 기능 고려
* 프로젝트 멤버는 현재 위키 페이지를 과거 버전으로 되돌릴 수 있다. (1)
	* 가정: 온라인 커밋이 먼저 구현되어 있다
* 사용자는 위키 페이지의 변경 히스토리를 볼 수 있다. (5)
	* 버전별 diff 까지 표시되어야.
	* diff 렌더러 구현까지 포함
* 로그인 유저는 특정 페이지에서 자신이 마지막으로 열람 한 이후의 변경사항을 확인할 수 있다. (3)
	* recent changes
+ 로그인 유저는 특정 위키의 변경사항을 빠르게 받아볼 수 있도록 '자동알림'기능으로 지정할 수 있다. (2)
+ 사용자는 이름을 아는 위키페이지로 한 번에 이동할 수 있다. (1)
+ 사용자는 모든 위키페이지의 목록을 볼 수 있다. (1)
	+ 페이징 (3)
+ 사용자는 위키페이지를 제목과 본문 내용으로 검색할 수 있다. (5)
	+ 제목과 검색어가 처음 등장한 위치의 본문 일부가 보인다.
	+ 제목만 매칭된 경우, 제목과 본문 시작부분 일부가 보인다.


마일스톤
--------
* 사용자는 프로젝트의 마일스톤을 열람할 수 있다. (2)
* 프로젝트 멤버는 마일스톤을 등록/편집/삭제 할 수 있다. (3)
* 프로젝트 멤버는 마일스톤에 이슈를 할당할 수 있다. (2)
* 프로젝트 멤버는 해당 마일스톤에 할당된 이슈 목록을 볼 수 있다.(1)
+ 프로젝트 멤버는 마일스톤에서 특정 이슈를 제거할 수 있다.(1)


이슈트래커
----------
* 사용자는 해당 프로젝트에 등록된 이슈 목록을 볼 수 있다.(5)
	* 페이징 처리 포함
* 사용자는 이슈트래커의 특정 이슈의 내용을 볼 수 있다.(1)
* 로그인 유저는 이슈트래커에 글을 등록할 수 있다.(3)
* 로그인 유저는 자신이 남긴 이슈트래커 글을 편집/삭제 할 수 있다.(2)
* 로그인 유저는 특정 이슈에 댓글을 남길 수 있다.(2)
* 사용자는 특정 이슈의 댓글을 볼 수 있다.(1)
* 로그인 유저는 자신이 남긴 이슈트래커 댓글을 삭제할 수 있다.(0.5)
* 프로젝트 관리자는 유저가 남긴 댓글을 삭제할 수 있다. (0.5)
* 프로젝트 관리자는 이슈트래커의 모든 글을 편집/삭제 할 수 있다.(2)
* 프로젝트 관리자는 효율적으로 이슈들을 관리하기 위해 여러개의 이슈트래커 게시판을 만들 수 있다.(3)
* 프로젝트 관리자는 이슈트래커의 이름을 변경 할 수 있다. (1)
* 프로젝트 관리자는 이슈트래커의 세부 항목(필드)을 편집 할 수 있다. (3)
* 사용자는 본인에게 필요한 이슈를 다양한 조건으로 검색할 수 있다. (10)
	* 스마트 검색기능(ex.사내 이메일 검색) - (5)
	* 상세 검색기능 - (5)
* 로그인 유저는 자주 사용하는 검색조건을 저장할 수 있다. (2)
	* 상세 검색 후
* 로그인 유저는 엑셀등의 외부 도구를 이용하기 위해 검색된 이슈트래커의 목록을 파일로 저장할 수 있다.(2)
	* CSV파일 등
* 로그인 유저는 특정 이슈에 대한 해결안 등 의견을 제시하기 위해 패치 파일을 댓글로 첨부할 수 있다.(2)
* 사용자는 이슈트래커 게시글에 첨부된 패치파일의 내용을 볼 수 있다. (3)
* 프로젝트 멤버가 특정 이슈번호를 참조로 커밋한 내용은 이슈에 관심있는 사람들이 알 수 있도록 커밋로그와 변경내역(패치파일)이 댓글로 남는다.(3)
* 이슈트래커 게시글의 변경 사항은 자동으로 '자동알림등록'한 사람들에게 메일로 통지된다.(2)
* 프로젝트 멤버는 다량의 이슈를 할당하거나 상태를 수정하기 위해 여러개의 이슈들을 일괄로 처리할 수 있다.(3)
+ 로그인 유저는 이슈 등록시 본문에 첨부파일의 이미지를 표시할 수 있다. (3)
	* 이미지 본문 표시 방법에 대한 고민 시간 포함
+ 프로젝트 멤버는 이슈에 대해 참조자를 지정 및 해지 할 수 있다.(2)
+ 사용자는 게시물에 찬반 투표를 할 수 있다.(2)
+ 사용자는 특정 게시물을 자동통보로 설정한 사용자를 볼 수 있다.(1)
+ 프로젝트 관리자는 사용자가 일관된 포맷에 맞춰 이슈를 등록하도록 이슈 템플릿을 정의할 수 있다. (2)
	* 버그, 기능개선 등등에 대해서
+ 프로젝트 관리자는 이슈의 특정 세부항목을 사용자가 항상 기입하도록 필수항목으로 지정할 수 있다. (3)
	* 이슈 상태별로 고민할 필요가 있음
+ 로그인 유저는 자신이 작성한 게시물을 찾기 쉽도록 태그를 붙일 수 있다.(3)
	* 자동완성 기능 포함
+ 프로젝트 멤버는 의존 관계가 있는 이슈들을 표시하기 위해 다른 이슈를 연결할 수 있다. (3)
	* 한쪽에서만 걸어도 상호링크
+ 로그인 유저는 아직 읽지 않은 게시물을 구별할 수 있다. (3)
+ 로그인 유저는 한 프로젝트에서 저장했던 검색 조건을 다른 프로젝트에서도 검색할 때 사용할 수 있다. (2)
+ 로그인 유저는 자동알림으로 지정된 이슈가 의존하는 다른 이슈의 상태 변경시에 통보받을 수 있다. (2)
	* 단, 의존 이슈의 경우 닫힘에 대해서만 통보받는게 좋을 것 같음
+ 프로젝트 멤버는 어떤 이슈와 어떤 이슈가 중복인지 표시할 수 있다. (2)
+ 사용자는 중복 이슈에 대해 어떤 이슈와 중복인지 확인 할 수 있다. (1)



코드저장소
----------
* 프로젝트 멤버는 코드를 보관, 수정하기 위해 코드저장소를 이용할 수 있다.  (3)
	* SVN/GIT
* 프로젝트 관리자는 사용자의 코드 저장소 접근을 제한 할 수 있다.(8)
	* 현재 SCM매니저에는 권한처리 플러그인이 없음
	* SCM 매니저에 대한 지식 부족
* 사용자는 웹으로 코드저장소의 코드를 볼 수 있다.(8)
	* 코드 네비게이션 포함
	* syntax highlighting 포함
* 사용자는 코드 변경 이력을 보기 위해 커밋 로그를 볼 수 있다. (3)
	* older, newer 식의 네비게이션 포함
	* 폴더나 파일 기준의 로그도 포함
* 사용자는 커밋들 간의 코드 변경 사항을 확인할 수 있다. (3)
	* diff rendering 포함
	* 폴더나 파일 기준의 변경 사항도 포함
* 사용자는 프로젝트 통계를 볼 수 있다. (3)
	* 전체 커밋 추이, 개발자별 커밋 현황 등
* 사용자는 코드 변경을 빠르게 인지하기 위해 자동알림 기능을 이용할 수 있다. (2)
	* 이메일
+ 사용자가 코드 네이게이션 상태에서 코드의 일부를 복사하면 출처도 복사된다.(2)
	* 언어에 맞는 주석표시가 함께 붙어서
+ 프로젝트 관리자는 한 프로젝트내에서 여러 개의 저장소를 만들 수 있다.(2)
+ 프로젝트 관리자는 저장소를 생성할 때 github 코드를 가져올 수 있다. (2)
+ 로그인 유저는 자신만의 코드조각(snippet)을 생성/편집/삭제 할 수 있다. (3)
+ 로그인 유저는 코드의 특정 라인에 의견을 남길 수 있다.(5)

다운로드
--------
* 사용자는 해당 프로젝트에 등록된 다운로드 목록을 볼 수 있다.(2)
	* 페이징 포함
* 사용자는 해당 프로젝트에서 파일을 다운로드 받을 수 있다.(1)
* 프로젝트 멤버는 파일 배포를 위해 릴리즈 게시물을 등록할 수 있다.(2)
	* 컬럼: 파일명, 제목, 날짜, 크기, 다운로드 횟수
	* 파일 업로드 포함
* 프로젝트 멤버는 다운로드 목록을 보기좋게 정리하기 위해 목록 순서를 변경할 수 있다.(2)
	* 컬럼 정렬 기능을 제공
* 프로젝트 멤버는 특정 다운로드 게시물을 활성/비활성을 할 수 있다. (1)
* 사용자는 다운로드 파일의 대한 의견을 남기기 위해 댓글을 등록/삭제 할 수 있다.(2)
* 프로젝트 관리자는 스팸성 댓글을 삭제할 수 있다.(1)
* 사용자는 다운로드 게시물을 빠르게 인지하기 위해 자동알림을 이용할 수 있다.(2)



프로젝트 관리
-------------
* 로그인 유저는 프로젝트를 생성할 수 있다. (2)
* 프로젝트 관리자는 모든 사용자에게 공개되는 프로젝트 정보를 편집할 수 있다. (1)
* 프로젝트 관리자는 프로젝트 로고 이미지를 등록/삭제할 수 있다.(1)
* 프로젝트 관리자는 사용자의 권한을 조절하기 위해 사용자 등급을 변경할 수 있다. (8)
	* 프로젝트관리자, 프로젝트 멤버, 프로젝트 서포터
	* 권한기능 포함 (게시물, 다운로드, 코드저장소, 위키, 이슈트래커, 프로젝트 관리)
	* 사용자를 검색해서 특정 등급으로 추가 가능
* 프로젝트 관리자는 해당 프로젝트를 알기 쉽게 분류할 수 있다. (2)
	* 라이선스, 언어 등
* 프로젝트 관리자는 프로젝트를 비공개로 설정할 수 있다. (2)
	* 프로젝트 기본정보는 공개되나 메뉴나 기능에는 접근할 수 없다.
* 프로젝트 관리자는 더 이상 필요하지 않은 프로젝트를 삭제할 수 있다.(3)
* 프로젝트 관리자는 권한 관리를 편하게 하기 위해 권한 등급을 추가/삭제/권한 변경을 이용할 수 있다. (later)
+ 사용자가 프로젝트를 생성하면 다음에 무엇을 해야 할지 알 수 있는 안내문구를 볼 수 있다. (5)
	* 영어/한국어


검색
----
* 사용자는 특정 프로젝트 내의 컨텐츠를 검색할 수 있다. (5)
	* 게시판, 이슈트래커, 다운로드, 위키
	* 페이징 처리 (항목별에서)
* 사용자는 전체 프로젝트를 대상으로 검색을 할 수 있다. (1)
	* 게시판, 이슈트래커, 다운로드, 위키
	* 프로젝트 내 검색 먼저 구현
* 사용자는 아이디나 이름으로 특정 사용자를 찾을 수 있다.(2)


활동내역
--------
* 로그인 유저는 자신이 속한 프로젝트들의 활동상황을 보기 위해 프로젝트 변경사항들을 확인할 수 있다. (3)

개인화 기능
-------------
* 로그인 유저는 자신이 할 일과 한 일을 파악하기 위해 자신과 관련된 프로젝트/게시물을 대시보드에서 열람할 수 있다.(2)
	* 페이징 기능 포함
* 로그인 유저는 자동알림 설정된 항목을 열람할 수 있다.(2)
* 로그인 유저는 필요하지 않은 자동알림을 받아보지 않기 위해 자동알림을 삭제할 수 있다.(1)
* 로그인 유저는 잦은 자동알림으로 고통받지 않기 위해 자동알림 지정된 항목들을 모아보기로 설정을 할 수 있다. (3)

+ 로그인 유저는 자신의 유저페이지를 꾸밀 수 있다. (7)
	* 이슈번호 #6043
	* 아바타 설정(이미지나 gravatar) (3)
	* 자기소개 (1)
	* 페이스북 연동 (2)
	* 스킬셋 표시 (1)

+ 사용자는 다른 사용자의 유저페이지에서 소개, 활동내역을 열람할 수 있다. (9)
	* 최근 활동내역(trello) (1)
	* 레벨과 경험치 (지식인 미니) (8)


링크 만들기
-----------
* 게시물 작성자(로그인 유저)는 추가정보를 제공하기 위해 미리 정의된 태그를 써서 이슈/리비전/위키에 대한 링크를 만들 수 있다. (2)
	* # => 이슈, r => 리비전, [] => 위키

사이트 관리
------------
+ 사이트 관리자는 웹에서 nFORGE를 쉽게 업그레이드 할 수 있다. (8)
	* 원격 업그레이드 기능
+ nFORGE 팀은 nFORGE를 설치하거나 원격 업그레이드 기능을 사용한 사이트 목록을 알 수 있다.(2)
+ 사이트 관리자는 특정 메일주소를 가진 사용자의 가입신청을 자동으로 승인할 수 있다.(1)
+ 사이트 관리자는 보안을 위해 로그인 과정이 HTTPS로 처리되도록 설정할 수 있다.(later)


설치
----
+ 사이트 관리자는 특정 Prefix가 붙은 URL로 접근할 수 있도록 설치시에 nFORGE의 URL Prefix를 지정할 수 있다. (1)
	* 지정하는 방법 가이드로 제공
+ 사이트 관리자는 nFORGE 설치시에 생긴 문제를 해결하기 위해 DB만 따로 생성할 수 있다.(1)
+ 사이트 관리자는 nFORGE 설치를 위해 설치 가이드를 볼 수 있다. (2)
	* 설치 가이드 작성

프로젝트 그룹
-------------
+ 사이트 관리자는 프로젝트 그룹을 만들 수 있다.
+ 사이트 관리자는 프로젝트 그룹페이지를 만들 수 있다.
+ 사이트 관리자는 그룹에 맴버를 추가할 수 있다.
+ 특정 그룹에 속한 로그인 유저는 해당 그룹에 속하는 프로젝트를 생성할 수 있다.
+ 사이트 관리자는 관련있는 프로젝트들을 하나의 그룹으로 지정할 수 있다.


기타
----
* 사용자는 선호하는 언어로 nFORGE를 이용할 수 있다. (영어/한국어 등. guess system)
+ 사용자는 단축키를 통해 nFORGE를 이용할 수 있다.
+ 로그인 유저는 모든 게시물에 특정 문법을 사용할 수 있다. (wiki문법, markdown문법 등)


사이트 관리
-----------
* 사이트 관리자는 등록된 사용자를 삭제할 수 있다.
* 사이트 관리자는 등록된 사용자를 활성화 혹은 비활성화 할 수있다.
* 사이트 관리자는 등록된 사용자의 메일주소를 변경할 수 있다.
* 사이트 관리자는 프로젝트를 삭제할 수 있다.
* 사이트 관리자는 전체 프로젝트에 대한 통계를 볼 수 있다.
* 사이트 관리자는 소프트웨어 맵을 관리할 수 있다.
* 사이트 관리자는 등록된 사용자에게 메일을 발송할 수 있다.
	* 메일발송 기능
