Skip to content

요구사항분석

YongHwan Kim edited this page May 3, 2023 · 52 revisions

요구사항 분석

기능 요구사항

  • 회원
    • 회원 추가
    • 전체 회원 조회
    • 특정 회원 조회
    • 특정 회원 수정
  • 질문 게시글
    • 특정 질문 추가
    • 전체 질문 목록 조회
    • 특정 질문 조회
    • 특정 질문 수정
    • 특정 질문 삭제
  • 댓글
    • 댓글 추가
    • 댓글 삭제
  • 로그인
    • 로그인
    • 로그아웃
  • 페이징
    • 게시글 페이징
    • 댓글 페이징

프로그래밍 요구사항

회원

  • 회원가입

    • 회원가입을 완료한후 전체 회원 조회 페이지로 이동합니다.
    • 사용자가 전달한 값을 객체를 생성해 저장합니다.
    • 회원가입 시 아이디 또는 이메일이 중복시 다시 입력하도록 합니다.
    • 회원가입 요청시 입력 형식에 맞지 않은 경우 다시 입력하도록 합니다.
    • 회원가입 정보 형식
      • 아이디 : 5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용 가능합니다.
      • 비밀번호 : 8~16자 영문 대 소문자, 숫자, 특수문자만 사용 가능합니다.
      • 이름 : 1~20자 영문 소문자, 한글만 사용 가능합니다.
      • 이메일 : (something)@(some_domain).(some_toplevel_domain)
  • 전체 회원 조회

    • 가입한 회원들의 목록을 출력합니다.
    • 가입한 특정 회원의 이름 클릭시 특정 회원 프로필 조회 페이지로 이동합니다.
  • 특정 회원 조회

    • 요청한 회원의 정보들을 출력합니다.
    • 조회하고자 하는 회원이 없는 경우 전체 회원 조회 페이지로 이동합니다.
  • 특정 회원 수정

    • 회원 정보 수정 페이지 이동 전에 비밀번호 확인 페이지로 이동하여 비밀번호가 맞으면 회원 수정 페이지로 이동합니다.
    • 이름, 이메일을 수정합니다. 단, 회원 아이디는 수정할 수 없습니다.
    • 비밀번호가 일치하는 경우에만 수정 가능합니다.
    • 회원 수정 완료시 로그인 페이지로 이동합니다.
    • 비밀번호, 이름, 이메일 입력 형식은 회원가입의 입력 형식을 따릅니다.
  • 회원 URL

기능 URL HTTP 메소드
전체 회원 조회 /users GET
특정 회원 추가 /users POST
특정 회원 조회 /users/{id} GET
특정 회원 수정 /users/{id} PUT
  • 회원 페이지
기능 URL HTTP 메소드
회원 가입 페이지 /user/new GET
회원 수정 페이지 /user/{id}/edit GET

질문 게시글

  • 특정 질문 추가

    • 질문 추가 페이지로 이동하려면 로그인 된 상태여야 합니다.
    • 질문 추가 화면에서 글쓴이 입력 필드가 없어야 합니다.
    • 질문 추가 페이지 입장시 비 로그인 상태라면 로그인 페이지로 이동해야 합니다.
    • 질문 글쓰기 완료되면 전체 질문 조회 페이지("redirect:/")로 이동합니다.
    • 저장되는 질문에는 id값이 존재하고 사용자들이 글이 저장될 때마다 1씩 증가합니다.
    • 부적절한 질문 글쓰기 입력 형식 제출시 경고 메시지를 받고 다시 입력하도록 합니다.
    • 특정 질문 추가 입력 형식
      • 작성자 : 로그인한 회원의 이름
      • 제목 : 제목의 길이는 100자 이내여야 합니다.
  • 전체 질문 목록 조회

    • 전체 질문 목록 조회는 비 로그인 상태여도 확인할 수 있습니다.
    • 작성된 질문 목록들을 출력합니다.
    • 작성된 질문은 최근에 작성된 것일수록 앞쪽으로 출력되어야 합니다.
    • 작성된 질문 게시글 제목 클릭시 특정 질문 조회 페이지로 이동합니다.
  • 특정 질문 조회

    • 특정 질문 조회는 로그인한 사람만 조회할 수 있습니다.
    • 비 로그인 상태에서 질문 조회 페이지 접속시 로그인 페이지로 이동합니다.
    • 작성된 질문의 내용을 출력합니다.
    • 조회하고자 하는 질문이 없는 경우 전체 질문 조회 목록 페이지로 이동합니다.
  • 특정 질문 수정

    • 질문 게시글을 작성한 로그인된 상태의 글쓴이는 작성된 질문 게시글의 내용을 수정합니다.
    • 특정 질문 수정 페이지는 로그인한 사용자가 자기 질문을 수정하는 경우에만 가능합니다.
    • 다른 사람의 질문 게시글을 수정하려고 할때 에러 메시지를 전달받고 에러 페이지로 이동합니다.
    • 질문 게시글 입력 형식은 특정 질문 게시글 추가 입력 형식을 따릅니다.
    • 질문 게시글 수정 완료시 수정한 질문 게시글의 특정 질문 조회 화면으로 이동합니다.
  • 특정 질문 삭제

    • 로그인 상태의 질문 게시글 본인이 삭제할 수 있습니다.
    • 게시글의 데이터를 완전히 삭제하는 것이 아닌 데이터 상태를 삭제 상태(boolean 타입)로 변경합니다.
    • 특정 질문 게시글 삭제시 댓글 또한 삭제되며 댓글의 삭제 또한 삭제 상태(deleted)로 변경됩니다.
    • 다른 사람의 글을 삭제하려고 할때 에러 메시지를 전달받고 에러 페이지로 이동합니다.
    • 질문 게시글 삭제 완료시 전체 질문 조회 목록 페이지로 이동합니다.
  • 질문 URL

기능 URL HTTP 메소드
전체 질문 목록 조회 /qna, / GET
특정 질문 추가 /qna POST
특정 질문 조회 /qna/{id} GET
특정 질문 수정 /qna/{id} PUT
특정 질문 삭제 /qna/{id} DELETE
  • 질문 페이지
기능 URL HTTP 메소드
질문 추가 페이지 /qna/new GET
질문 수정 페이지 /qna/{id}/edit GET

댓글

  • 댓글 추가

    • 로그인 상태에서 댓글을 추가할 수 있습니다.
    • 댓글 입력 형식
      • 내용 : 내용의 길이는 3000글자 이내여야 합니다.
  • 댓글 삭제

    • 자신의 댓글만을 삭제할 수 있습니다.
  • 댓글 수정

    • 자신의 댓글만을 수정할 수 있습니다.
    • 댓글 입력 형식은 댓글 추가의 입력 형식을 따릅니다.
  • 댓글 URL

기능 URL HTTP 메소드
댓글 목록 /qna/{questionId}/comments GET
댓글 추가 /qna/{questionId}/comments POST
댓글 수정 /qna/{questionId}/comments/{id} PUT
댓글 삭제 /qna/{questionId}/comments/{id} DELETE
  • 댓글 페이지
기능 URL HTTP 메소드
댓글 수정 페이지 /qna/{questionId}/comments/{id}/edit GET

로그인

  • 로그인

    • 로그인 성공시 전체 질문 목록 조회 페이지로 이동합니다.
    • 현재 상태가 로그인 상태라면 상단 메뉴에서 "로그아웃", "개인정보수정"이 표시되어야 합니다.
    • 현재 상태가 로그인 상태가 아니라면 상단 메뉴에서 "로그인", "회원가입"이 표시되어야 합니다.
    • 부적절한 입력 형식으로 로그인 요청이나 로그인 실패시 로그인 실패 페이지로 이동하여 에러 메시지를 출력하고 다시 입력하도록 합니다.
    • 로그인 정보 형식
      • 아이디 : 5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용 가능합니다.
      • 비밀번호 : 8~16자 영문 대 소문자, 숫자, 특수문자만 사용 가능합니다.
  • 로그아웃

    • 로그아웃 버튼 클릭시 세션 저장소에 회원 정보가 사라집니다.
    • 로그아웃 성공시 로그인 페이지로 이동합니다.
  • 로그인 URL

기능 URL HTTP 메소드
로그인 /login POST
로그아웃 /logout POST
  • 로그인 페이지
기능 URL HTTP 메소드
로그인 페이지 /login GET

페이징

게시글 페이징

  • 게시글을 한 페이지에 15개씩 가져오도록 구현합니다.
  • 게시글은 생성일 기준 내림차순으로 구현합니다.
  • 한 화면에 보이는 페이지 수는 최대 5개입니다. 6개가 넘어가는 경우 다음 페이지 그룹으로 이동할 수 있는 버튼이 나타나야 합니다.
    • 예를 들어 총 페이지 수가 8인 경우 다음 페이지 그룹으로 이동하면 6,7,8 페이지가 보이고 좌측 페이지 그룹으로 이동할 수 있는 버튼이 나와야 합니다.
  • 페이지 이동시 페이지 범위를 벗어나는 경우 다음과 같이 동작합니다.
    • 입력받은 페이지가 최대 페이지보다 큰 경우 최대 페이지로 이동합니다.
    • 입력받은 페이지가 0 이하인 경우 첫번째 페이지로 이동합니다.
    • 입력받은 페이지가 숫자가 아닌 경우 첫번째 페이지로 이동합니다.

댓글 페이징

  • 한 게시글에 댓글은 작성일 기준으로 15개씩 보여줍니다.
  • 댓글 더보기 버튼을 누르면 +15개씩 댓글을 추가해서 보여줍니다.
  • 화면에 표시되지 않은 댓글이 남았을 경우 '더보기' 버튼이 표시됩니다. 더보기 버튼을 클릭하면 남은 댓글을 화면에 추가로 표시합니다.