[StackOverflow-Clone] 사용자 요구사항 정의서
- -
사용자 요구사항 정의서
분석 단계에서 요구되는 모든 문서를 작성해보고 이를 실제 프로젝트를 진행하는 구현 단계에서 참조 자료로 활용해보면 좋겠으나 시간이 부족하다는 점과 실제 개발 업무가 아닌 학습을 위한 프로젝트 과정임을 감안하여 내용을 축소해야 합니다. 하지만 분석 단계에서 작성하는 ‘사용자 요구사항 정의서'는 매우 중요합니다. 그러므로 우리는 ‘사용자 요구사항 정의서'를 작성해 볼 필요가 있습니다.
항목 설명
- 요구사항 ID : 요구사항별로 유일한 ID를 부여하여 기입합니다.
- 요구사항명 : 도출된 요구사항을 요약할 수 있는 명칭을 기입합니다.
- 구분 : 도출된 요구사항을 기능 / 성능 / 품질 / 인터페이스 / 데이터 / 운영 / 제약사항 중에서 선택하여 기재합니다.
- 요구사항 설명 : 사용자 요구사항을 구체적이고 상세하게 기술합니다.
- 중요도 : 해당 요구사항의 전체 시스템 구현 측면에서의 중요도를 기술합니다. (상, 중, 하)
- 비고 : 항목에 포함되지 않으나, 고려해야 할 사항이 있으면 기술합니다.
우리 팀은 일단 모두 처음 프로젝트를 진행해보는 상황이라 실현가능한 목표를 기준으로 프로젝트를 완성해보자고 했다.
각 요구사항과 구분, 요구사항 ID를 토대로 화면정의서를 작성 할 수 있었다
Level 0
Pre-Project 일정 내에 개발 가능한 기능을 정의 합니다.
멤버십
회원 가입, 로그인, 회원 정보 등 회원에 관련된 기능입니다. 회원 가입, 로그인 2가지 화면을 제공해야 합니다.
- 아이디/패스워드 입력 방식
- 회원가입 및 로그인 시 이메일 형식의 아이디와 패스워드를 사용자가 직접 입력하는 방식입니다.
- 회원 가입 시 사용자가 입력한 정보는 데이터베이스(DB)에 저장하며 이때 패스워드는 암호화되어야 합니다.
- 회원 가입 시 별도 이메일 인증 과정은 생략합니다.
- 이미 가입되어 있는 이메일로는 회원 가입이 불가능해야 합니다.
- 세션을 이용한 사용자 인증
- 로그인 시 세션을 생성하고 클라이언트와 서버 간의 통신을 유지합니다.
- 세션 공유 등 다중 서버 환경에서의 세션 유지 방식은 고려하지 않습니다.
- 로그인 시 서버는 세션 아이디(JSESSIONID)를 생성하여 클라이언트에 전달합니다. 클라이언트는 해당 세션 아이디를 쿠키에 저장 후 서버와 통신할 때마다 해당 값을 사용하여 세션을 인증하고 유지합니다. 이를 통해 서버는 클라이언트가 로그인한 상태인지를 인증할 수 있습니다.
- Remember-Me 쿠키를 이용한 세션 자동 연장 처리는 고려하지 않습니다.
질문 게시판
질문 게시판은 다수의 질문글들이 리스트 형태로 표시되는 질문 리스트 화면과 각각의 질문글 내용이 상세히 표시 되는 질문 상세 화면으로 구분 합니다. 질문 리스트 화면은 스택오버플로우의 메인 화면으로, 서비스 접속 시 가장 먼저 표시되는 화면이며 리스트 상의 질문글을 선택하면 질문 상세 페이지로 이동 합니다.
- 리스트 조회
- 리스트 상 각 항목에 질문글의 제목, 작성자, 작성 시간을 노출 합니다.
- 페이징 처리
- 화면 하단에 페이지 번호가 존재 하고 해당 번호를 클릭 하면 각 페이지에 해당 하는 리스트가 노출 합니다.
- 각 페이지에 해당하는 데이터의 총 개수, 한 페이지당 보여줄 데이터의 개수, 현재 페이지 번호 등 페이지 관련된 정보를 모든 질문글 리스트 api 호출 시 Response에 포함합니다.
- 화면 진입 시 첫 리스트 api 호출 정보를 기준으로 하단 페이지 정보를 구성 하며, 이후 페이지 번호 클릭 시 해당 리스트 api 호출 결과를 기준으로 하단 페이지를 재구성 합니다.
- 1페이지에 포함되는 질문글의 수는 임의로 설정 합니다.
- 질문 상세 페이지 CRUD
- 질문글을 생성, 조회, 삭제 ,수정 할 수 있습니다.
- 질문글 원문과 답변 내용을 노출 합니다.
- 내용은 문자 형태로만 작성 가능 하며 링크, 이미지 삽입 등은 지원 하지 않습니다.
- 삭제, 수정은 원문을 작성한 사람만 가능 합니다.
- 질문글 삭제 시 질문글에 달려 있는 답변도 같이 삭제 합니다.
답변
1개의 질문에 대해 여러개의 답변이 달릴 수 있습니다.
- 답변 CRUD
- 답변을 생성, 조회, 삭제, 수정 할 수 있습니다.
- 질문글 상세 페이지 접근 시 게시글과 함께 노출 합니다.
- 문자 형태로만 작성 가능 하며 링크, 이미지 삽입 등은 지원 하지 않습니다. 답변을 작성한 사람만 삭제, 수정이 가능 합니다.
- 1개의 게시글에 달리는 답변의 개 수는 임의로 제한 할 수 있습니다.
- 답변에는 작성자의 아이디과 시간을 노출 해야 하며 하며 별도로 페이징을 지원하지 않습니다.
Level 1
Pre-Project 일정 내에 구현이 완료된다면 높은 성과로 평가될 수 있는 수준의 기능입니다.
멤버십
- OAuth
- 구글, 카카오톡 등 외부 서비스 제공 업체의 사용자 인증 정보를 사용하여 사용자를 인증합니다.
- JWT
- JWT를 사용하여 인증 보안을 구현합니다. 발급된 JWT는 클라이언트에 전달하며 서버와의 통신 시 http 헤더의 Authorization 필드를 통해 서버에 전송해야 합니다.
- 자동 로그인 - Refresh 키를 통한 JWT 재발급
- Refresh 키는 발행 시점에서 클라이언트 또는 서버에 저장될 수 있으며 이에 맞는 JWT 재발급 로직을 개발 해야 합니다. 만일, Refresh 키까지 만료 된 상황이라면 로그인 페이지로 이동 합니다.
- Refresh 키를 클라이언트에 저장하는 경우 인증 권한이 필요한 API를 호출할 때마다 해당 JWT의 유효성을 검사합니다. JWT가 만료되었다면, 클라이언트는 서버에 저장된 Refresh 키를 이용하여 JWT를 재발급 받습니다. 이후, 클라이언트는 발급받은 새로운 JWT를 사용하여 API를 호출할 수 있습니다.
- Refresh 키를 서버에 저장하는 경우 인증 권한이 필요한 API를 호출할 때마다 해당 JWT의 유효성을 검사합니다. JWT가 만료되었다면, 서버는 저장된 Refresh 토큰을 이용하여 자동으로 JWT를 재발급하고, 이를 새로운 JWT로 갱신하여 클라이언트에 반환합니다. 이후, 클라이언트는 발급받은 새로운 JWT를 사용하여 api를 호출할 수 있습니다.
- 회원 정보 표시
- 프로필 이미지, 사용자 이름을 확인 할 수 있는 사용자 프로필 화면을 제공 합니다.
- OAuth 사용자의 경우 회원가입 시 외부 서비스 제공 업체에서 가져온 사용자 정보를 표시 합니다.
- 이메일 회원의 경우 회원 가입 시 직접 입력 합니다.
- 사용자 프로필 이미지 등록은 기능 범위에서 제외 합니다.
- 회원 정보 수정 하기
- 프로필 화면에서 사용자 정보를 수정 할 수 있습니다.
- 사용자 프로필 이미지 수정은 기능 범위에서 제외 합니다.
질문 게시판
- 리스트 조회
- 채택된 답변이 있는 질문글의 경우 리스트 상에서 하이라이트 등으로 별도 표시 합니다.
- 사용자가 질문 상세 페이지 접근 시 조회 수가 올라가며 리스트 및 상세페이지에 해당 질문글의 총 조회수를 표시 합니다.
- 무한 스크롤을 이용한 페이징 처리
- 무한 스크롤은 사용자가 스크롤을 아래로 내릴 때마다 자동으로 새로운 컨텐츠를 동적으로 로드하여 화면을 연속적으로 확장시키는 방식의 UI 패턴입니다.
- 스크롤을 내리면 계속해서 다음 게시글을 조회 해 질문 리스트에 Append 합니다.
- 페이지의 끝까지 스크롤하여 더 이상 로드할 데이터가 없을 때 더 이상 로드하지 않고 멈추도록 구현해야 합니다.
- 해당 기능 구현 시 하단 페이지 번호 방식의 페이징 기능은 제공 하지 않습니다.
- 웹 에디터
- 웹 에디터 라이브러리는 웹 개발자들이 에디터를 쉽게 구현하고, 사용자들이 편리하게 게시글을 작성할 수 있도록 도와줍니다.
- 질문 상세 페이지에서 게시글을 작성 시 웹 에디터 라이브러리를 사용하여 다양한 서식, 스타일, 레이아웃 등의 요소를 적용 할 수 있도록 합니다.
- 작성된 게시글은 html 형태로 데이터베이스에 저장됩니다.
- 이미지 업로드는 기능 범위에서 제외 합니다.
- 리스트 조회 옵션
- 최신 순, 조회 순, 최근 답변 달린 순으로 리스트 조회 순서를 변경 할 수 있습니다.
답변
- 웹 에디터
- 질문글과 동일한 수준의 웹 에디터 기능을 제공 합니다.
- 답변 CRUD
- 답변 삭제 시 해당 답변에 달린 댓글도 전부 삭제 합니다.
- 답변 생성 시 답변을 남기는 사용자 정보를 표시 합니다.
- 무한 스크롤
- 질문글과 동일한 수준의 무한 스크롤 기능을 제공 합니다.
- 답변 채택
- 질문 게시자는 답변 중 맘에 드는 답변을 1개 채택할 수 있습니다.
- 채택된 답변은 하이라이트로 표시하여 일반 답변과 구분 합니다.
댓글
답변에 대해 댓글을 달 수 있습니다.
- Depth
- Depth는 댓글의 계층 구조를 나타내는 숫자 값입니다. 댓글의 계층 구조란, 댓글이 부모-자식 관계를 가지며, 하나의 댓글에 대해 여러 개의 답글이 달리는 구조를 의미 합니다.
- Depth1 만 제공 하며 대댓글은 지원하지 않습니다.

- 댓글 CRUD
- 댓글을 생성, 조회, 삭제 ,수정 할 수 있습니다.
- 댓글은 문자 형태로만 작성 가능 하며 링크, 이미지 삽입 등은 지원 하지 않습니다.
데이터 유효성 검사
사용자가 입력한 데이터가 올바른 형식인지, 또는 시스템이 처리할 수 있는 유효한 데이터인지를 확인하는 과정입니다. 데이터 유효성 검사는 보통 클라이언트 측에서 수행되지만, 보안상의 이유로 서버 측에서도 반드시 수행 해야 합니다.
- 회원가입 / 로그인
- 사용자가 회원가입 / 로그인을 시도할 때 입력한 이메일 주소나 비밀번호가 유효한 형식인지, 또는 입력 필드에 허용된 문자열 길이를 초과하지 않았는지 등을 확인합니다.
- 문제가 발생 했을 때는 화면에 어떤 문제가 발생 했는지를 사용자에게 알려 줘야 합니다.
- 데이터 유효성의 기준은 팀 내에서 임의로 설정 합니다.
계속 추가로 변동 되는 중.
'PROJECT > PRE 프로젝트' 카테고리의 다른 글
에디터 기능 (0) | 2023.04.21 |
---|---|
[StackOverflow - Clone] 마이페이지 작업중 (0) | 2023.04.20 |
React 이미지 경로 public폴더 설정시 애러 (0) | 2023.04.16 |
깃허브 프로젝트 브랜치 클론하기 (0) | 2023.04.15 |
[StackOverflow-Clone] [재사용] Aside 컴포넌트 작업 (0) | 2023.04.15 |
소중한 공감 감사합니다