---
# System prepended metadata

title: API 문서

---

# API 문서

## User 관련

### 로그인
----
  사용자 로그인 기능 제공

* URL

    `/api/v1/login`  

* Method:

  `POST`
  
* URL Params

   Required:

   None

* Body

    ```JSON
    {
      email : String,
      password : String
    }
    ```

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      token_type : String,
      access_token : String,
      refresh_token : String,
      user_id : Long,
      email : String
    }
    ```

* Error Response:

  * Code: 404 NOT FOUND  
    Content: 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 로그아웃

----

  사용자 로그아웃 기능 제공

* URL

    `/api/v1/logout`  

* Method:

  `POST`
  
* URL Params

   Required:

   None

* Body

    ```JSON
    {
      email : String
    }
    ```

* Success Response:

  * Code: 200 OK  
    Content: 
    ```json
    {
      success: boolean
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 회원가입

----

  사용자 회원가입 기능 제공

* URL

    `/api/v1/signup`  

* Method:

  `POST`
  
* URL Params

   Required:

   None

* Body

    ```JSON
    {
      email : String,
      password : String,
      nickname : String
    }
    ```

* Success Response:

  * Code: 201 CREATED  
    Content: 
    ```json
    {
      userId : Long
    }
    ```
  > 201 CREATED : 회신 메시지의 body에 생성된 자원을 동봉해야 하지만, 그냥 일단 userId만 포함시켰음
* Error Response:

  * Code: 400 BAD REQUEST  
    Content: 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```
  * Code: 409 CONFLICT  
    Content: 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 이메일 검증

----

  사용자 회원가입시, 이메일 중복 검사 기능 제공

* URL

    `/api/v1/users/validation/{email}`  

* Method:

  `GET`
  
* URL Params

   Required:

   `email : String`

* Body

    None

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  

      None

* Error Response:
  * Code: 409 CONFLICT  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 별명 검증

----

  사용자 회원가입시, 별명 중복 검사 기능 제공

* URL

    `/api/v1/users/validation/{nickname}`  

* Method:

  `GET`
  
* URL Params

   Required:

   `nickname : String`

* Body

    None

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  

      None

* Error Response:
  * Code: 409 CONFLICT  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```


### 유저 정보 가져오기

----

  사용자의 정보를 가져오는 기능

* URL

    `/api/v1/users/{user_id}`  

* Method:

  `GET`
  
* URL Params

   Required:

   `user_id : Long`

* Body

    None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      userId : Long,
      email : String,
      password : String,
      nickname : String,
      githubUrl : String,
      blogUrl : String
    }
    ```

* Error Response:
  * Code: 401 UNAUTHORIZED  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 유저 정보 수정하기

----

  사용자의 정보를 수정하는 기능

* URL

    `/api/v1/users/{user_id}`  

* Method:

  `PUT`
  
* URL Params

   Required:

   `user_id : Long`

* Body

    None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      userId : Long,
      email : String,
      password : String,
      nickname : String,
      githubUrl : String,
      blogUrl : String
    }
    ```

* Error Response:
  * Code: 401 UNAUTHORIZED  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 유저 탈퇴하기

----

  사용자 탈퇴기능

* URL

    `/api/v1/users/{user_id}`  

* Method:

  `DELETE`
  
* URL Params

   Required:

   `user_id : Long`

* Body

    None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      userId : Long
    }
    ```

* Error Response:
  * Code: 401 UNAUTHORIZED  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

## Profile 화면 관련

### Mypage(Profile) 정보 가져오기

----

  Mypage(Profile) 정보 가져오기

* URL

    `/api/v1/users/{user_id}/profile`  

* Method:

  `GET`
  
* URL Params

   Required:

   `user_id : Long`

* Body
    
    None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      nickname : String,
      githubUrl : String,
      blogUrl : String,
      introduce : String,
      userTechTag : TechTag[],
      projects : Project[]
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```
  * Code: 404 NOT FOUND  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### Github 주소 수정하기

----

  Github 주소 수정

* URL

    `/api/v1/users/{user_id}/github-url`  

* Method:

  `PUT`
  
* URL Params

   Required:

   `user_id : Long`

* Body
    ```
    {
      githubUrl : String
    }
    ```

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  
    
    None

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### Blog 주소 수정하기

----

  Blog 주소 수정

* URL

    `/api/v1/users/{user_id}/blog-url`  

* Method:

  `PUT`
  
* URL Params

   Required:

   `user_id : Long`

* Body
    ```
    {
      blogUrl : String
    }
    ```

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  
    
    None

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 자기소개(한줄) 수정하기

----

  Profile 화면에서의 자기소개 수정

* URL

    `/api/v1/users/{user_id}/introduce`  

* Method:

  `PUT`
  
* URL Params

   Required:

   `user_id : Long`

* Body
    ```
    {
      introduce : String
    }
    ```

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  
    
    None

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 백준 아이디 수정하기

----

  Solved.ac 티어를 보여주기 위한 백준 아이디 수정

* URL

    `/api/v1/users/{user_id}/baekjoon-id`  

* Method:

  `PUT`
  
* URL Params

   Required:

   `user_id : Long`

* Body
    ```
    {
      baekjoonId : String
    }
    ```

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  
    
    None

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```
  * Code: 404 NOT FOUND  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 관심 있는 기술 태그 추가하기

----

  관심 있는 기술 태그 추가하기

* URL

    `/api/v1/users/{user_id}/tech`  

* Method:

  `POST`
  
* URL Params

   Required:

   `user_id : Long`

* Body
    ```
    {
      skill : String 
    }
    ```

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  
    
    None

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 관심 있는 기술 태그 삭제하기

----

  관심 있는 기술 태그 삭제하기

* URL

    `/api/v1/users/{user_id}/tech/{tech_id}`  

* Method:

  `DELETE`
  
* URL Params

   Required:

   `user_id : Long`  
   `tech_id : Long`

* Body
   
  None

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  
    
    None

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```


### 프로젝트 추가하기

----

  본인이 진행한 프로젝트 추가하기

* URL

    `/api/v1/users/{user_id}/projects`  

* Method:

  `POST`
  
* URL Params

   Required:

   `user_id : Long`

* Body
    ```
    {
      name : String,
      startDate : Date,
      endDate : Date,
      content : String,
      githubUrl : String,
      deployUrl : String,
      projectTechTag : TechTag[]
    }
    ```

* Success Response:

  * Code: 200 
    Content:  
    ```
    {
      projectId : Long
    }
    ```
* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 프로젝트 수정하기

----

  본인이 진행한 프로젝트 수정하기

* URL

    `/api/v1/users/{user_id}/projects/{project_id}`  

* Method:

  `PUT`
  
* URL Params

   Required:

   `user_id : Long`  
   `project_id : Long`

* Body
    ```
    {
      name : String,
      startDate : Date,
      endDate : Date,
      content : String,
      githubUrl : String,
      deployUrl : String,
      projectTechTag : TechTag[]
    }
    ```

* Success Response:

  * Code: 200 
    Content:  
    ```
    {
      projectId : Long
    }
    ```
* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 프로젝트 삭제하기

----

  본인이 진행한 프로젝트 삭제하기

* URL

    `/api/v1/users/{user_id}/projects/{project_id}`  

* Method:

  `DELETE`
  
* URL Params

   Required:

   `user_id : Long`  
   `project_id : Long`

* Body
    
    None

* Success Response:

  * Code: 200 
    Content:  
    ```
    {
      projectId : Long
    }
    ```
* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```
  * Code: 404 NOT FOUND  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

## POST 관련

### 게시글 작성하기

----

  게시글 작성하기

* URL

    `/api/v1/posts`  

* Method:

  `POST`
  
* URL Params

   Required:

    None

* Body
    ```json
    {
      user_id : Long,
      title : String,
      content : String,
      postTags : PostTag[],
      category : String
    }
    ```

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      postId : Long
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 게시글 읽기

----

  게시글 읽기

* URL

    `/api/v1/posts/{post_id}`  

* Method:

  `GET`
  
* URL Params

   Required:

    `post_id : Long`

* Body
    
    None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      postId : Long,
      title : String,
      content : String,
      tag : String[],
      category : String,
      createdAt : Date,
      updatedAt : Date,
      comments : Comment[]
    }
    ```

* Error Response:
  * Code: 404 NOT FOUND  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 게시글 수정하기

----

  게시글 수정하기

* URL

    `/api/v1/posts/{post_id}`  

* Method:

  `PUT`
  
* URL Params

   Required:

    `post_id : Long`

* Body
    ```json
    {
      user_id : Long,
      title : String,
      content : String,
      tag : String[],
      category : String
    }
    ```

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      postId : Long
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 게시글 삭제하기

----

  게시글 삭제하기

* URL

    `/api/v1/posts/{post_id}`  

* Method:

  `DELETE`
  
* URL Params

   Required:

    `post_id : Long`

* Body
    
  None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      postId : Long
    }
    ```

* Error Response:
  * Code: 404 NOT FOUND  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 게시글 목록 불러오기

----

  게시글 목록 불러오기

* URL

    `/posts?offset={offset}&limit={limit}&keyword={keyword}`  

* Method:

  `GET`
  
* URL Params

   Required:

    `post_id : Long`  
    `offset : Integer`  
    `limit : Integer`  
    `keyword : String`  

* Body
    
  None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      postCount : Integer,
      posts : Post[]
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

## Comment 관련

### 댓글 작성하기

----

  댓글 작성하기

* URL

    `/api/v1/posts/{post_id}/comments`  

* Method:

  `POST`
  
* URL Params

   Required:

    `post_id : Long`

* Body
    ```json
    {
      user_id : Long,
      parent_id : Long,
      comment : String
    }
    ```

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      commentId : Long
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 댓글 수정하기

----

  댓글 수정하기

* URL

    `/api/v1/posts/{post_id}/comments/{comment_id}`  

* Method:

  `PUT`
  
* URL Params

   Required:

    `post_id : Long`  
    `comment_id : Long`  

* Body
    ```json
    {
      user_id : Long,
      parent_id : Long,
      comment : String
    }
    ```

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      commentId : Long
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 댓글 삭제하기

----

  댓글 삭제하기

* URL

    `/api/v1/posts/{post_id}/comments/{comment_id}`  

* Method:

  `DELETE`
  
* URL Params

   Required:

    `post_id : Long`  
    `comment_id : Long`  

* Body
    
    None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      commentId : Long
    }
    ```

* Error Response:
  * Code: 404 NOT FOUND  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

## Message 관련

### 쪽지 작성하기

----

  쪽지 작성하기

* URL

    `/api/v1/messages/{user_id}/{from_user_id}`  

* Method:

  `POST`
  
* URL Params

   Required:

    `user_id : Long`  
    `from_user_id : Long`  

* Body
    ```json
    {
      content : String
    }
    ```

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      messageId : Long
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 쪽지 목록(리스트) 확인하기

----

  쪽지 목록(리스트)하기

* URL

    `/api/v1/messages/{user_id}`  

* Method:fromUserList

  `GET`
  
* URL Params

   Required:

    `user_id : Long`

* Body
   
   None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      messageUsers : MessageUser[]
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 쪽지 당사자와 내용 확인하기

----

  쪽지 당사자와 내용 확인하기

* URL

    `/api/v1/messages/{user_id}/{from_user_id}`  

* Method:

  `GET`
  
* URL Params

   Required:

    `user_id : Long`  
    `from_user_id : Long`
    
* Body
   
   None

* Success Response:

  * Code: 200 OK  
    Content:  
    ```json
    {
      messages: Message[]
    }
    ```

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

### 쪽지 당사자와 내용 전체 삭제하기

----

  쪽지 당사자와 내용 전체 삭제하기

* URL

    `/api/v1/messages/{user_id}/{from_user_id}`  

* Method:

  `DELETE`
  
* URL Params

   Required:

    `user_id : Long`  
    `from_user_id : Long`
    
* Body
   
   None

* Success Response:

  * Code: 204 NO CONTENT  
    Content:  
    
    None

* Error Response:
  * Code: 400 BAD REQUEST  
    Content 
    ```json
      { 
        errorMsg : String,
        result : String,
        uriRequested : String
      }
    ```

## Model
### TechTag 
```json
{
  skill : String,
  color : String,
  textColor : String
}
```

### Project
```json
{
  projectId : Long,
  userId : Long,
  startDate : Date,
  endDate : Date,
  title : String,
  content : String,
  githubUrl : String,
  deployUrl : String
}
```
### Post
```json
{
  postId : Long,
  userId : Long,
  title : String,
  content : String,
  createdAt : Date,
  updatedAt : Date,
  
  
  : String[]
}
```
### Comment
```json
{
  commentId : Long,
  userId : Long,
  postId : Long,
  parentId : Long,
  content : String,
  createdAt : Date,
  updatedAt : Date
}
```
### PostTag
```json
{
  postId : Long,
  postTagId : Long,
  tag : String,
}
```
### Message
```json
{
  messageId : Long,
  userId : Long,
  fromUserId : Long,
  content : String,
  createdAt : Date
}
```
### MessageUser
```json
{
  userNickname : String
}
```
