설명 사용자는 제목과 내용을 입력하여 새로운 질문을 작성한다. 질문은 저장되며, 작성자는 로그인한 회원의 ID로 설정된다. 생성일은 DB의 현재 시간이 자동으로 입력된다.
제약 조건
- 제목: 50자 이내, 필수
- 내용: 300자 이내, 필수
⠀응답
- 성공 시: 201 Created, { "questionId": 1 }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 로그인되지 않은 사용자 | 401 Unauthorized | 인증되지 않은 사용자입니다. |
| 제목/내용 누락 또는 길이 초과 | 400 Bad Request | 제목 또는 내용의 형식이 잘못되었습니다. |
설명 사용자는 본인이 작성한 질문의 제목과 내용을 수정할 수 있다. 수정된 질문은 저장되며, 식별자가 응답된다.
제약 조건
- 제목: 50자 이내, 필수
- 내용: 300자 이내, 필수
⠀응답
- 성공 시: 200 OK, { "questionId": 1 }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 인증되지 않은 사용자 | 401 Unauthorized | 로그인 후 이용해주세요. |
| 본인이 작성하지 않은 질문 | 403 Forbidden | 해당 질문을 수정할 권한이 없습니다. |
| 제목/내용 누락 또는 길이 초과 | 400 Bad Request | 제목 또는 내용의 형식이 잘못되었습니다. |
설명 사용자는 본인이 작성한 질문을 삭제할 수 있다. 삭제된 질문은 비활성화 처리되어 타 사용자에겐 보이지 않는다.
응답
- 성공 시: 204 No Content
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 인증되지 않은 사용자 | 401 Unauthorized | 로그인 후 이용해주세요. |
| 본인이 작성하지 않은 질문 | 403 Forbidden | 해당 질문을 삭제할 권한이 없습니다. |
| 존재하지 않는 질문 | 404 Not Found | 질문을 찾을 수 없습니다. |
설명 사용자는 전체 질문 목록을 최신순으로 페이지 단위로 조회할 수 있다.
조회 조건 (쿼리 파라미터)
- page: 페이지 번호 (0부터 시작)
- size: 페이지 당 항목 수
- (옵션) keyword: 제목 또는 내용 키워드 필터링
⠀응답 필드 예시
{
"questions": [
{
"questionId": 1,
"title": "왜 하늘은 파란가요?",
"writer": "궁금이",
"likeCount": 12,
"answerCount": 3,
"createdAt": "2025-04-01T10:00:00"
}
],
"pageInfo": {
"currentPage": 0,
"totalPages": 5,
"totalElements": 50
}
}
설명 사용자는 특정 질문을 상세 조회할 수 있다. 조회 결과에는 제목, 내용, 작성자, 작성일, 좋아요 수, 답변 목록이 포함된다.
응답
- 성공 시: 200 OK, 질문 상세 정보
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 존재하지 않는 질문 | 404 Not Found | 질문을 찾을 수 없습니다. |
| 비활성화된 질문 | 403 Forbidden | 해당 질문은 볼 수 없습니다. |
설명 사용자는 특정 질문에 좋아요를 누를 수 있다. 같은 질문에 다시 누르면 좋아요가 취소된다. 본인의 질문에도 좋아요를 누를 수 있다.
응답
- 성공 시: 200 OK, { "liked": true } 또는 { "liked": false }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 인증되지 않은 사용자 | 401 Unauthorized | 로그인 후 이용해주세요. |
| 존재하지 않는 질문 | 404 Not Found | 질문을 찾을 수 없습니다. |
설명 사용자는 특정 질문에 답변을 남길 수 있다. 답변은 저장되며, 작성자는 로그인한 회원 ID로 설정된다. 생성일은 DB에 의해 자동 입력된다.
제약 조건
- 내용: 300자 이내, 필수
⠀응답
- 성공 시: 201 Created, { "answerId": 1 }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 로그인되지 않은 사용자 | 401 Unauthorized | 로그인 후 이용해주세요. |
| 내용 누락 또는 300자 초과 | 400 Bad Request | 답변 내용이 유효하지 않습니다. |
| 존재하지 않는 질문 | 404 Not Found | 질문을 찾을 수 없습니다. |
설명 사용자는 본인이 작성한 답변을 수정할 수 있다. 수정된 답변은 저장되며, 식별자가 응답된다.
제약 조건
- 내용: 300자 이내, 필수
⠀응답
- 성공 시: 200 OK, { "answerId": 1 }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 인증되지 않은 사용자 | 401 Unauthorized | 로그인 후 이용해주세요. |
| 본인이 작성하지 않은 답변 | 403 Forbidden | 해당 답변을 수정할 권한이 없습니다. |
| 내용 누락 또는 길이 초과 | 400 Bad Request | 답변 내용이 유효하지 않습니다. |
설명 사용자는 본인이 작성한 답변을 삭제할 수 있다. 삭제된 답변은 DB에서 바로 제거되지 않고 비활성화되어 타 사용자에게 보이지 않는다.
응답
- 성공 시: 204 No Content
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 인증되지 않은 사용자 | 401 Unauthorized | 로그인 후 이용해주세요. |
| 본인이 작성하지 않은 답변 | 403 Forbidden | 해당 답변을 삭제할 권한이 없습니다. |
| 존재하지 않는 답변 | 404 Not Found | 답변을 찾을 수 없습니다. |
설명 사용자는 특정 답변에 좋아요를 누를 수 있다. 같은 답변에 다시 누르면 좋아요가 취소된다. 본인이 작성한 답변에도 좋아요를 누를 수 있다.
응답
- 성공 시: 200 OK, { "liked": true } 또는 { "liked": false }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 인증되지 않은 사용자 | 401 Unauthorized | 로그인 후 이용해주세요. |
| 존재하지 않는 답변 | 404 Not Found | 답변을 찾을 수 없습니다. |
설명 사용자는 이메일, 비밀번호, 이름, 전화번호, 닉네임을 입력하여 회원가입할 수 있다. 가입 시 입력 정보는 저장되며, 성공 시 사용자 식별자(userId)가 응답된다.
입력 필드 및 제약
| 항목 | 설명 | 제약 조건 |
|---|---|---|
| 로그인용 이메일 | RFC 5322 이메일 형식, 중복 불가 | |
| password | 로그인 시 사용하는 비밀번호 | 영문/숫자/특수문자 포함, 8~20자 |
| name | 실명 | 한글/영문, 2~20자 |
| phoneNumber | 연락처 | 숫자만, 10~11자리 |
| nickname | 닉네임 | 특수문자 제외, 2~15자, 중복 불가 |
응답
- 성공 시: 201 Created, { "userId": 1 }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 필수 입력값 누락 | 400 Bad Request | 모든 필드를 입력해주세요. |
| 이메일 형식 오류 | 400 Bad Request | 이메일 형식이 올바르지 않습니다. |
| 비밀번호 정책 위반 | 400 Bad Request | 비밀번호 형식이 유효하지 않습니다. |
| 중복된 이메일/닉네임 | 409 Conflict | 이미 존재하는 이메일 또는 닉네임입니다. |
설명 사용자는 이메일과 비밀번호를 입력하여 로그인할 수 있다. 로그인 성공 시 액세스 토큰이 응답 헤더에 포함되어 반환된다.
입력 필드
| 항목 | 설명 | 제약 조건 |
|---|---|---|
| 가입한 이메일 | 이메일 형식 필수 | |
| password | 등록된 비밀번호 | 비밀번호 정책 동일 적용 |
응답
- 성공 시: 200 OK
- 헤더: Authorization: Bearer <JWT 토큰>
- 바디: { "userId": 1, "nickname": "궁금한사람" }
⠀예외
| 상황 | 응답 코드 | 메시지 |
|---|---|---|
| 이메일 또는 비밀번호 불일치 | 401 Unauthorized | 로그인 정보가 올바르지 않습니다. |
| 존재하지 않는 계정 | 404 Not Found | 해당 이메일로 등록된 사용자가 없습니다. |
| 입력값 누락 | 400 Bad Request | 이메일과 비밀번호는 필수입니다. |