문서 보러 가기 ➡️ API 문서 링크
구분 | 화면 | 필요권한 | Method | Description | 요청 URL | Request JSON |
---|---|---|---|---|---|---|
관리 및 공통 | 로그인 | 관리자 | POST | 관리자 페이지 로그인 | /api/admin/login |
{"id": "{id}", "password": "{password}"} |
사용자 | POST | 사용자 게시판 서비스 로그인 | /api/user/login |
{"id": "{id}", "password": "{password}"} |
||
유저 관리 | 관리자 | GET | 전체 사용자 목록 조회 | /api/admin/users |
{} |
|
관리자 | POST | 사용자 생성 | /api/admin/users |
{"id": "{id}", "password": "{password}", "name": "{name}"} |
||
관리자 | PATCH | 사용자 정보 수정 | /api/admin/users/{userId} |
{"id": "{id}", "password": "{password}", "name": "{name}"} |
||
관리자 | DELETE | 사용자 삭제 | /api/admin/users/{userId} |
{} |
||
관리자 | GET | 사용자 비밀번호 초기화 | /api/admin/users/{userId}/password |
{} |
||
관리자 | POST | 사용자 권한 부여 | /api/admin/users/{userId}/roles |
{"grantRoleList": [{"role": "ADMIN"}, {"role": "USER"}]} |
||
검색 기능 | 게시글 검색 | 사용자 | GET | 사용자가 게시판 내에서 특정 조건을 기준으로 게시글을 검색 | /posts/search |
{"searchType": "string", "searchKeyword": "string"} |
카테고리 관리 | 카테고리 추가 | 관리자 | POST | 관리자가 새로운 카테고리를 생성 | /categories |
{"name": "String", "description": "String", "parentId": "int"} |
카테고리 조회 | 관리자 | GET | 관리자가 모든 카테고리를 조회 | /categories |
없음 | |
카테고리 삭제 | 관리자 | DELETE | 관리자가 특정 카테고리를 삭제 | /categories/{categoryId} |
없음 | |
카테고리 수정 | 관리자 | PUT | 사용자가 카테고리의 이름, 설명, 부모 카테고리를 수정 | /categories/{categoryId} |
{"name": "String", "description": "String", "parentId": "int"} |
- 사용자는 "MEMBER", 관리자는 "ADMIN" 권한이 있어야 API 접근이 가능합니다.
- HttpHeader에 { "Authorization" : "권한" }을 key-value로 보내주면 권한을 체크 후 API 접근이 가능합니다.
- 권한을 주지 않고 헤더 없이 보낼 경우, { "Authorization" : "NONE" } 으로 처리됩니다.
mockMvc.perform(get("/api/admin/users")
.contentType(
MediaType.APPLICATION_JSON)
// header 지정하여 사용 -> ADMIN, MEMBER와 같은 일반 문자열 사용
.header("Authorization", "ADMIN")
).andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.data[0].id").value("mb1"))
.andExpect(jsonPath("$.data[0].name").value("회원1"))
.andExpect(jsonPath("$.statusCode").value(200))
.andExpect(jsonPath("$.message").value("OK"));
관리 및 공통 (담당 : DevSeoRex )
-
관리자
는 관리자 페이지에로그인
할 수 있다 - Method Return Type (String - default(”jwttoken”))- 관리자 페이지 로그인시,
아이디
와비밀번호
로 회원 조회 후 관리자가 아닐경우 “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” 에러 표시가 필요하다. 아이디
와비밀번호
가 틀린 경우 “아이디 또는 비밀번호가 다릅니다.” 에러 표시가 필요하다.- 회원 조회시 없는 회원인 경우 “존재하지 않는 회원입니다.” 에러 표시가 필요하다.
- 관리자 페이지 로그인시,
-
사용자
는 게시판 서비스에로그인
할 수 있다 - Method Return Type (String)아이디
와비밀번호
가 틀린 경우 “아이디 또는 비밀번호가 다릅니다.” 에러 표시가 필요하다.
-
관리자
는 회원 목록 페이지에서 전체사용자 목록
을확인
할 수 있다 - Method Return Type (List)- 현재
Presentation Layer
에서 권한 처리가 되어 있지 않으므로, 전체 사용자 목록만 조회되면 된다.
- 현재
-
관리자
는 회원 관리 페이지에서사용자 계정
을 생성할 수 있다 - Method Return Type (Long - MemberId)사용자
를 생성할 경우, 이미 존재하는ID
로 가입 시도를 하는 경우 “이미 가입된 ID 입니다.” 에러 표시가 필요하다.- 사용자를 생성할 때 비밀번호는
Bcrypt 암호화 처리
가 필요하다.
-
관리자
는 회원 관리 페이지에서사용자 계정
을수정
할 수 있다 - Method Return Type (void)사용자
를 수정할 경우, 이미 존재하는ID
로 수정 시도를 하는 경우"중복된 ID로 정보 변경은 불가능합니다."
에러 표시가 필요하다.- 수정에 성공한다면,
DB
에반영
되어야 한다.
-
관리자
는 회원 관리 페이지에서사용자 계정
을삭제
할 수 있다 - Method Return Type (void)사용자
를삭제
할 경우, 없는 회원의PK
가Path Variable
로 들어오면 “존재하지 않는 회원은 삭제할 수 없습니다.” 에러 표시가 필요하다.- 사용자 삭제는
Hard Delete
로 처리한다. - 삭제에 성공할 경우
DB
에반영
되어야 한다. - 계정 삭제시, 테이블과
User_Role
테이블의 데이터도 함께 삭제되어야 한다.
-
관리자
는 회원 관리 페이지에서 사용자의패스워드
를초기화
할 수 있다 - Method Return Type (String - 초기화 된 비밀번호)사용자
를 조회할 때 없는 사용자라면 “존재하지 않는 회원의 비밀번호는 초기화할 수 없습니다.” 에러 표시가 필요하다.초기화
할 패스워드는UUID
를 생성하여 초기화하며,암호화
해서 회원 정보를 업데이트 해야 한다.
-
관리자
는 사용자에게 다양한권한
을 부여할 수 있다 - Method Return Type (void)부여
하려는권한
이 존재하지 않거나,권한
을부여
하려는 사용자가 없는 사용자라면 “유효하지 않은 권한 부여 시도는 허용되지 않습니다.”, “존재하지 않는 회원에게 권한을 부여할 수 없습니다.” 에러 메시지를 각각 표시한다.사용자
는 여러 권한을 동시에 가질 수 있으므로,Role
을List
로 받아서 저장되어야 한다.- 권한은
Role
테이블에 저장되며User
와Role
사이의Join Table
인User_Role
테이블에 권한과 유저를 매핑해준다.
검색 기능 (담당 : CoRaveler)
- 게시글 검색 기능
- 목적 :
사용자
가 게시판 내에서특정 조건을 기준으로 게시글을 검색
할 수 있다. - URL :
/posts/search
- Method :
GET
- Query Parameters
searchType
: string, 검색 조건 (제목, 제목+내용, 작성자)@NotBlank(message = "검색 조건은 비워둘 수 없습니다.")
@Size(min = 2, max = 50, message = "검색 조건은 2자 이상 50자 이하이어야 합니다.")
searchKeyword
: string, 검색 키워드@NotBlank(message = "검색 키워드는 비워둘 수 없습니다.")
@Size(min = 2, max = 50, message = "검색 키워드는 2자 이상 50자 이하이어야 합니다.")
- Method Return Type (JSON)
- 성공 시 응답 예시 :
{ "status" : 200, "posts" : [ { post1 }, { post2 }, { post3 }, … ] }
- 검색 조건에 맞는 게시글이 없는 경우 :
{ "status" : 204, "posts" : [ ] }
- 잘못된 요청 파라미터로 인한 에러 :
{ "status" : 400, "error" : “잘못된 요청 파라미터가 들어왔습니다” }
- 성공 시 응답 예시 :
- Possible Errors
400 Bad Request
: 잘못된 요청 파라미터로 인한 에러
카테고리 관리 기능 (담당 : CoRaveler)
- 카테고리 추가
-
목적 : 관리자가 새로운 카테고리를 생성할 수 있다.
-
URL :
/categories
-
Method :
POST
-
Request Body
name
: String, 카테고리 이름@NotBlank(message = "카테고리 이름은 비워둘 수 없습니다.")
@Size(min = 2, max = 50, message = "카테고리 이름은 2자 이상 50자 이하이어야 합니다.")
description
: String, 카테고리 설명@Size(max = 200, message = "카테고리 설명은 200자를 초과할 수 없습니다.")
parentId
: int, 부모 카테고리 id (선택 사항)-
@Min(value = 1, message = "부모 카테고리 ID는 1 이상이어야 합니다.")
→ 주어진 부모 카테고리의 존재 여부는 Service 계층에서
-
-
Method Return Type (JSON)
- 카테고리 생성 성공 시 :
{ “status” : 200, message : “카테고리가 성공적으로 생성되었습니다.” }
- 카테고리 생성 실패 :
{ “status” : 400, “error” : “제공된 데이터가 유효하지 않습니다.” }
- 관리가 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” }
- 카테고리 생성 성공 시 :
-
Possible Errors
400 Bad Request
: 필수 필드 누락, 잘못된 데이터 포맷, 또는 검증 실패403 Forbidden
: 관리자 권한 없이 관리자 권한 접근
- 카테고리 조회
- 목적 :
관리자
가 모든카테고리를 조회
할 수 있다 - URL :
/categories
- Method :
GET
- Method Return Type
- 카테고리 조회 성공 시 :
{ “categories” : [ { category1 }, { category4 }, { category3 }, … ] }
- 카테고리가 없는 경우 :
{ “categories” : [] }
- 관리가 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다.” }
- 카테고리 조회 성공 시 :
- Possible Errors
403 Forbidden
: 관리자 권한 없이 관리자 권한 접근
- 카테고리 삭제
- 목적 : 관리자가 특정 카테고리를 삭제할 수 있다.
- URL :
/categories/{categoryId}
- Method :
DELETE
- Method Return Type (JSON)
- 카테고리 삭제 성공시 :
{ “status” : 200, message : “카테고리가 성공적으로 삭제되었습니다.” }
- 지정한 카테고리가 존재하지 않는 경우 :
{ “status” : 404, message : “해당 카테고리가 존재하지 않습니다.” }
- 관리가 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” }
- 게시글이 존재하는 카테고리는 변경 삭제가 안되는 경우 :
{ “status” : 400, “error” : “게시글이 존재하는 카테고리는 변경/삭제가 불가능합니다” }
- 카테고리 삭제 성공시 :
- Possible Errors
400 Bad Request
: 게시글이 존재하는 카테고리를 삭제하는 경우403 Forbidden
: 관리자 권한 없이 관리자 권한 접근404 Not Found
: 미존재 카테고리 삭제하는 경우
- 카테고리 수정
-
목적 : 사용자가 카테고리의 이름, 설명, 부모 카테고리를 수정한다.
-
URL :
/categories/{categoryId}
-
Method : PUT
-
Requset Body
name
: String, 카테고리 이름@NotBlank(message = "카테고리 이름은 비워둘 수 없습니다.")
@Size(min = 2, max = 50, message = "카테고리 이름은 2자 이상 50자 이하이어야 합니다.")
description
: String, 카테고리 설명@Size(max = 200, message = "카테고리 설명은 200자를 초과할 수 없습니다.")
parentId
: int, 부모 카테고리 id (선택 사항)-
@Min(value = 1, message = "부모 카테고리 ID는 1 이상이어야 합니다.")
→ 주어진 부모 카테고리의 존재 여부는 Service 계층에서
-
-
Method Return Type (JSON)
-
Possible Errors
400 Bad Request
: 게시글이 존재하는 카테고리를 수정하는 경우403 Forbidden
: 관리자 권한 없이 관리자 권한 접근404 Not Found
: 미존재 카테고리 수정하는 경우
유저 관리 Presentation Layer 기능 (담당 : khmgobe)
- 사용자 생성
-
목적 : 관리자가 사용자를 생성한다.
-
URL :
/api/admin/users
-
Method :
POST
-
Request Body
RegisterMemberCommand
: 사용자 생성 커맨드 객체loginId
: String, 사용자 아이디@NotBlank(message = "아이디는 비어있을 수 없습니다.")
password
: String, 사용자 패스워드@NotBlank(message = "비밀번호는 비어있을 수 없습니다.")
name
: String, 사용자 이름@NotBlank(message = "이름은 비어있을 수 없습니다.")
-
Method Return Type (JSON)
- 사용자 생성 :
{"code":200,"status":"OK","data": {},"message":"OK"}
- 사용자 아이디 누락 :
{"code":400,"status":"BAD_REQUEST","data":{"loginId":["아이디는 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 비밀번호 누락 :
{"code":400,"status":"BAD_REQUEST","data":{"password":["비밀번호는 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 이름 누락 :
{"code":400,"status":"BAD_REQUEST","data":{"name":["이름은 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 아이디 비밀번호 누락 :
{"code":400,"status":"BAD_REQUEST","data":{"password":["비밀번호는 비어있을 수 없습니다."],"loginId":["아이디는 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 아이디, 비밀번호, 이름 누락 :
{"code":400,"status":"BAD_REQUEST","data":{"password":["비밀번호는 비어있을 수 없습니다."],"loginId":["아이디는 비어있을 수 없습니다."],"name":["이름은 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 관리자 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” }
- 사용자 생성 :
-
Possible Errors
400 Bad Request
: 필수 필드 누락, 잘못된 데이터 포맷, 또는 검증 실패403 Forbidden
: 관리자 권한 없이 관리자 권한 접근
- 사용자 수정
-
목적 : 관리자가 사용자를 수정한다.
-
URL :
/api/admin/users
-
Method :
PATCH
-
Request Body
userId
: Long, 사용자 아이디ModifyMemberCommand
: 사용자 수정 커맨드 객체id
: String, 아이디@NotBlank(message = "아이디는 비어있을 수 없습니다.")
password
: String, 사용자 패스워드@NotBlank(message = "비밀번호는 비어있을 수 없습니다.")
name
: String, 사용자 이름@NotBlank(message = "이름은 비어있을 수 없습니다.")
-
Method Return Type (JSON)
- 사용자 수정 :
{"code":200,"status":"OK","data":{"id":"memberId","password":"memberPassword","name":"memberName"},"message":"OK"}
- 아이디가 누락된 경우 :
{"code":400,"status":"BAD_REQUEST","data":{"id":["아이디는 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 비밀번호가 누락된 경우 :
{"code":400,"status":"BAD_REQUEST","data":{"password":["비밀번호는 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 이름이 누락된 경우 :
{"code":400,"status":"BAD_REQUEST","data":{"name":["이름은 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 아이디와 비밀번호가 누락된 경우 :
{"code":400,"status":"BAD_REQUEST","data":{"password":["비밀번호는 비어있을 수 없습니다."],"loginId":["아이디는 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 사용자 아이디와 비밀번호 및 이름이 누락된 경우 :
{"code":400,"status":"BAD_REQUEST","data":{"password":["비밀번호는 비어있을 수 없습니다."],"loginId":["아이디는 비어있을 수 없습니다."],"name":["이름은 비어있을 수 없습니다."]},"message":"BAD_REQUEST"}
- 관리자 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” }
- 사용자 수정 :
-
Possible Errors
400 Bad Request
: 필수 필드 누락, 잘못된 데이터 포맷, 또는 검증 실패403 Forbidden
: 관리자 권한 없이 관리자 권한 접근
- 사용자 삭제
-
목적 : 관리자가 사용자를 삭제한다.
-
URL :
/api/admin/users/{userId}
-
Method :
DELETE
-
Request Body
userId
: Long, 사용자 아이디
-
Method Return Type (JSON)
- 사용자 삭제 :
{"code":200,"status":"OK","data":1,"message":"OK"}
- 사용자 아이디가 0 이하인 경우 :
{"code":400,"status":"BAD_REQUEST","data":"유효하지 않은 값입니다.","message":"BAD_REQUEST"}
- 관리자 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” }
- 사용자 삭제 :
-
Possible Errors
400 Bad Request
: 필수 필드 누락, 잘못된 데이터 포맷, 또는 검증 실패403 Forbidden
: 관리자 권한 없이 관리자 권한 접근
- 사용자 비밀번호 초기화
-
목적 : 관리자가 사용자 비밀번호를 초기화한다.
-
URL :
/api/admin/users/{userId}/password
-
Method :
POST
-
Request Body
userId
: Long, 유저 아이디
-
Method Return Type (JSON)
- 비밀번호 초기화 :
{"code":200,"status":"OK","data":1,"message":"OK"}
- 사용자 아이디가 0 이하인 경우 :
{"code":400,"status":"BAD_REQUEST","data":"유효하지 않은 값입니다.","message":"BAD_REQUEST"}
- 관리자 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” }
- 비밀번호 초기화 :
-
Possible Errors
400 Bad Request
: 필수 필드 누락, 잘못된 데이터 포맷, 또는 검증 실패403 Forbidden
: 관리자 권한 없이 관리자 권한 접근
- 사용자 권한 부여
-
목적 : 관리자가 사용자에게 권한을 부여한다.
-
URL :
/api/admin/users/{userId}/roles
-
Method :
POST
-
Request Body
userId
: Long, 유저 아이디roleList
: List, 권한 리스트
-
Method Return Type (JSON)
- 권한 생성 :
{"code":200,"status":"OK","data":1,"message":"OK"}
- 권한 생성 실패 :
"code":400,"status":"BAD_REQUEST","data":"유효하지 않은 값입니다.","message":"BAD_REQUEST"}
- 관리자 권한 없이 접근 :
{ “status” : 403, “error” : “관리자 권한이 없습니다. 관리자 페이지에 진입할 수 없습니다.” }
- 권한 생성 :
-
Possible Errors
400 Bad Request
: 필수 필드 누락, 잘못된 데이터 포맷, 또는 검증 실패403 Forbidden
: 관리자 권한 없이 관리자 권한 접근