๋ณธ ์๋น์ค๋ ์ ์ ๊ณ์ ์ ํด์ํ๊ทธ(โ#daniโ) ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์คํ๊ทธ๋จ
, ์ค๋ ๋
, ํ์ด์ค๋ถ
, ํธ์ํฐ(X)
๋ฑ
๋ณต์์ SNS์ ๊ฒ์๋ ๊ฒ์๋ฌผ ์ค ์ ์ ์ ํด์ํ๊ทธ๊ฐ ํฌํจ๋ ๊ฒ์๋ฌผ๋ค์ ํ๋์ ์๋น์ค์์ ํ์ธํ ์ ์๋
ํตํฉ Feed ์ดํ๋ฆฌ์ผ์ด์
์
๋๋ค.
- ๐ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
- ๐ฆ ERD
- ๐ API ๋ช ์ธ์
- โ Git Commit Message Convention
- ๐ฟ Git Branch ์ ๋ต
๊ตฌ์กฐ๋
src
โโโโmain
โ โ
โ โ
โ โโโโjava
โ โ โโโโwanted
โ โ โโโโmedia
โ โ โ MediaApplication.java
โ โ โ
โ โ โโโโexception
โ โ โ โ BadRequestException.java
โ โ โ โ BaseException.java
โ โ โ โ CustomException.java
โ โ โ โ ErrorCode.java
โ โ โ โ ErrorResponse.java
โ โ โ โ InvalidPasswordException.java
โ โ โ โ NotFoundException.java
โ โ โ โ PostListCustomException.java
โ โ โ โ UserNotFoundException.java
โ โ โ โ VerificationCodeExpiredException.java
โ โ โ โ VerificationCodeMismatchException.java
โ โ โ โ
โ โ โ โโโโhandler
โ โ โ CustomException.java
โ โ โ GlobalExceptionHandler.java
โ โ โ
โ โ โโโโglobal
โ โ โ โโโโconfig
โ โ โ โ QueryDslConfig.java
โ โ โ โ WebConfig.java
โ โ โ โ
โ โ โ โโโโconverter
โ โ โ StringToLocalDateTimeConverter.java
โ โ โ
โ โ โโโโpost
โ โ โ โโโโcontroller
โ โ โ โ PostController.java
โ โ โ โ StatController.java
โ โ โ โ
โ โ โ โโโโdomain
โ โ โ โ CountValueType.java
โ โ โ โ Post.java
โ โ โ โ StatDateType.java
โ โ โ โ Type.java
โ โ โ โ
โ โ โ โโโโdto
โ โ โ โ PostDetailResponse.java
โ โ โ โ PostDto.java
โ โ โ โ PostIdResponse.java
โ โ โ โ StatParam.java
โ โ โ โ StatResponse.java
โ โ โ โ
โ โ โ โโโโrepository
โ โ โ โ PostRepository.java
โ โ โ โ StatRepository.java
โ โ โ โ
โ โ โ โโโโservice
โ โ โ PostService.java
โ โ โ StatService.java
โ โ โ
โ โ โโโโuser
โ โ โโโโconfig
โ โ โ SecurityConfig.java
โ โ โ TokenAuthenticationFilter.java
โ โ โ TokenProvider.java
โ โ โ
โ โ โโโโcontroller
โ โ โ TokenController.java
โ โ โ UserController.java
โ โ โ
โ โ โโโโdomain
โ โ โ Code.java
โ โ โ Grade.java
โ โ โ Token.java
โ โ โ User.java
โ โ โ UserDetail.java
โ โ โ
โ โ โโโโdto
โ โ โ ReissueCodeRequest.java
โ โ โ ReissueCodeResponse.java
โ โ โ SignUpRequest.java
โ โ โ SignUpResponse.java
โ โ โ TokenRequestDto.java
โ โ โ TokenResponseDto.java
โ โ โ UserCreateDto.java
โ โ โ UserInfoDto.java
โ โ โ UserLoginRequestDto.java
โ โ โ UserLoginResponseDto.java
โ โ โ VerifyRequest.java
โ โ โ VerifyResponse.java
โ โ โ
โ โ โโโโrepository
โ โ โ CodeRepository.java
โ โ โ TokenRepository.java
โ โ โ UserRepository.java
โ โ โ
โ โ โโโโservice
โ โ GenerateCode.java
โ โ TokenService.java
โ โ UserDetailService.java
โ โ UserService.java
โ โ UserValidator.java
โ โ
โ โโโโresources
โ application-dev.yml
โ application-secret.yml
โ application-test.yml
โ application.yml
โ
โโโโtest
โโโโjava
โโโโwanted
โโโโmedia
โ MediaApplicationTests.java
โ
โโโโpost
โโโโservice
PostServiceTest.java
๊ธฐ๋ฅ | Method | URL |
---|---|---|
ํ์๊ฐ์ | POST | /api/users/sign-up |
๋ก๊ทธ์ธ | POST | /api/users/login |
JWT ์ฌ๋ฐ๊ธ | POST | /api/token |
ํ์ ๊ฐ์ ์น์ธ | POST | /api/users/approve |
์ธ์ฆ์ฝ๋ ์ฌ๋ฐ๊ธ | POST | /api/users/reissue-code |
๊ฒ์๋ฌผ ๋ชฉ๋ก | GET | /api/posts?hashtag={account}&type={type} &orderBy={createdAt}&sortDirection={ASC} &search_by={title}&search={search_keyword} &page={page_number}&page_count={count_number} |
๊ฒ์๋ฌผ ์์ธ | GET | /api/posts/:postId |
๊ฒ์๋ฌผ ์ข์์ | POST | /api/posts/likes/:postId |
๊ฒ์๋ฌผ ๊ณต์ | POST | /api/posts/share/:postId |
ํต๊ณ | GET | /api/statistics |
์ฌ์ฉ์
๊ณ์
,์ด๋ฉ์ผ
,๋น๋ฐ๋ฒํธ
์ ์ ๋ ฅํด ํ์๊ฐ์ ํฉ๋๋ค.- ํ์๊ฐ์
์ ์ฑ๊ณตํ๋ฉด
์ธ์ฆ์ฝ๋
๊ฐ ๋ฐ๊ธ๋ฉ๋๋ค.
a. ๊ณ์
,์ด๋ฉ์ผ
,๋น๋ฐ๋ฒํธ
์
๋ ฅ
b. ๋น๋ฐ๋ฒํธ
์ ํจ์ฑ ๊ฒ์ฌ (2๊ฐ์ง ์ด์ ๋ง์กฑ)
๋น๋ฐ๋ฒํธ ์ ํจ์ฑ ๊ฒ์ฌ ์กฐ๊ฑด
โข ๊ณ์ , ์ด๋ฉ์ผ ์์ด๋์ ์ ์ฌํ ๋น๋ฐ๋ฒํธ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โข ๋น๋ฐ๋ฒํธ๋ ์ต์ 10์ ์ด์์ด์ด์ผ ํฉ๋๋ค.
โข ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ง ๋น๋ฐ๋ฒํธ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โข ์ซ์, ๋ฌธ์, ํน์๋ฌธ์ ์ค 2๊ฐ์ง ์ด์์ ํฌํจํด์ผ ํฉ๋๋ค.
โข 3ํ ์ด์ ์ฐ์๋๋ ๋ฌธ์ ์ฌ์ฉ์ด ๋ถ๊ฐํฉ๋๋ค.
c. ์ ํจ์ฑ ๊ฒ์ฌ์ ํต๊ณผํ ๋น๋ฐ๋ฒํธ
๋ ์ํธํ๋์ด DB์ ์ ์ฅ
d. ๊ฐ์ ์ธ์ฆ์ฝ๋ ๋ฐ๊ธ
e. ์ธ์ฆ์ฝ๋, ์ฌ์ฉ์ ์ ๋ณด DB์ ์ ์ฅ
{
"account": "๊ณ์ ",
"email": "์ด๋ฉ์ผ",
"password": "๋น๋ฐ๋ฒํธ"
}
{
"message": "ํ์๊ฐ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์ต๋๋ค.",
"user": {
"account": "๊ณ์ ",
"email": "์ด๋ฉ์ผ"
},
"authCode": "ํ์๊ฐ์
์ธ์ฆ ์ฝ๋"
}
-
400 Bad Request
- ์ด๋ฉ์ผ ํ์ ์ค๋ฅ
- ๋น๋ฐ๋ฒํธ ์ ์ฝ ์กฐ๊ฑด ์ค๋ฅ
-
409 Conflict
- ๊ณ์ ์ด๋ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ
-
500 Internal Server Error
- ํ์๊ฐ์
์, ์์ฑ๋ 6์๋ฆฌ ๋๋ค
์ธ์ฆ์ฝ๋
๋ฅผ ์ ๋ ฅํฉ๋๋ค. ๊ณ์
,๋น๋ฐ๋ฒํธ
,์ธ์ฆ์ฝ๋
๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ ฅ๋๋ฉด ๊ฐ์ ์น์ธ๋ฉ๋๋ค.- ๊ฐ์
์น์ธ ๋๋ฉด
ํ์๋ฑ๊ธ
์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
a. ๊ณ์
,๋น๋ฐ๋ฒํธ
,์ธ์ฆ์ฝ๋
์
๋ ฅ
b. ๊ณ์
, ๋น๋ฐ๋ฒํธ
ํ์์ ๋ณด ์ผ์น ์กฐํ
c. ์ฌ์ฉ์์ ๋ชจ๋ ์ธ์ฆ์ฝ๋
DB ์กฐํ (์ต์ ์ ์ ๋ ฌ)
d. ์
๋ ฅ๋ ์ธ์ฆ์ฝ๋
์ ๊ฐ์ฅ ์ต๊ทผ ๋ฐ๊ธ๋ ์ธ์ฆ์ฝ๋
์ผ์น ์กฐํ
e. ์ธ์ฆ์ฝ๋
์ ํจ์ฑ ๊ฒ์ฆ (์ ํจ์๊ฐ 15๋ถ)
f. ํ์๋ฑ๊ธ ๋ณ๊ฒฝ NORMAL_USER
โ PREMIUM_USER
g. ์ธ์ฆ ์๋ฃ ํ์์ ์ธ์ฆ์ฝ๋
DB ์ญ์
{
"account" : "์ฌ์ฉ์ ๊ณ์ ",
"password" : "๋น๋ฐ๋ฒํธ",
"inputCode" : "์ธ์ฆ์ฝ๋"
}
{
"message": "์ธ์ฆ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค!",
"userInfo": {
"account": "์ฌ์ฉ์ ๊ณ์ ",
"email": "์ด๋ฉ์ผ",
"grade": "ํ์๋ฑ๊ธ"
}
}
-
400 Bad Request
- ๊ณ์ ์ค๋ฅ
- ๋น๋ฐ๋ฒํธ ์ค๋ฅ
- ์ธ์ฆ์ฝ๋ ์ค๋ฅ
- ์ธ์ฆ์ฝ๋ ๋ง๋ฃ
-
500 Internal Server Error
์ธ์ฆ์ฝ๋
์ฌ๋ฐ๊ธ์ ์์ฒญํฉ๋๋ค.
a. ๊ณ์
,๋น๋ฐ๋ฒํธ
์
๋ ฅ
b. ๊ณ์
, ๋น๋ฐ๋ฒํธ
ํ์์ ๋ณด ์ผ์น ์กฐํ
c. ์๋ก์ด ์ธ์ฆ์ฝ๋
๋ฐ๊ธ
d. ์ธ์ฆ์ฝ๋
์ ์ฅ
e. ํ์๋ฑ๊ธ ๋ณ๊ฒฝ NORMAL_USER
โ PREMIUM_USER
{
"account" : "์ฌ์ฉ์ ๊ณ์ ",
"password" : "๋น๋ฐ๋ฒํธ"
}
{
"message": "์ธ์ฆ์ฝ๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฌ๋ฐ๊ธ๋์์ต๋๋ค",
"newAuthCode": "์ฌ๋ฐ๊ธ ๋ฐ์ ์ธ์ฆ์ฝ๋"
}
400 Bad Request
- ๊ณ์ ์ค๋ฅ
- ๋น๋ฐ๋ฒํธ ์ค๋ฅ
500 Internal Server Error
๋ก๊ทธ์ธ & JWT ์ฌ๋ฐ๊ธ
- ๋ก๊ทธ์ธ
- ์ค๋ช
- ํ์๊ฐ์ ํ ํ์์ ๋ก๊ทธ์ธํ ์ ์๋ค.
- ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด
JWT
๊ฐ ๋ฐ๊ธ๋๋ค. - ์ดํ ๋ชจ๋ ์๋น์ค ์ด์ฉ ์
JWT
๋ฅผ ์ฌ์ฉ์ ์ธ์ฆ์ ์ฌ์ฉํ๋ค.
- ์
๋ ฅ
๊ณ์
,๋น๋ฐ๋ฒํธ
- ์ถ๋ ฅ
- ์ฑ๊ณต :
ํ์ ๊ณ ์ ์๋ณ๊ฐ(id)
,์ก์ธ์ค ํ ํฐ
- ์คํจ :
์ค๋ฅ ๋ฉ์์ง
- ์ฑ๊ณต :
- ์ฒ๋ฆฌ ๊ณผ์
๊ณ์
๊ณผ๋น๋ฐ๋ฒํธ
๋ก ํ์์ด ์กด์ฌํ๋์ง ํ์ธํ๋ค.- ์กด์ฌํ๋ ๊ฒฝ์ฐ
์ก์ธ์ค ํ ํฐ
์ ๋ฐ๊ธ๋ฐ์ ์ถ๋ ฅํ๊ณ๋ฆฌํ๋ ์ ํ ํฐ
์ ๋ฐ๊ธ๋ฐ์ DB์ ์ ์ฅํ๋ค.
- ์ค๋ช
- JWT ์ฌ๋ฐ๊ธ
- ์ค๋ช
์ก์ธ์ค ํ ํฐ
๊ณผ๋ฆฌํ๋ ์ ํ ํฐ
์ ์ฌ๋ฐ๊ธํ ์ ์๋ค.
- ์
๋ ฅ
์ก์ธ์ค ํ ํฐ
,๋ฆฌํ๋ ์ ํ ํฐ
- ์ถ๋ ฅ
- ์ฑ๊ณต :
์ฌ๋ฐ๊ธ๋ฐ์ ์ก์ธ์ค ํ ํฐ
,์ฌ๋ฐ๊ธ๋ฐ์ ๋ฆฌํ๋ ์ ํ ํฐ
- ์คํจ :
์ค๋ฅ ๋ฉ์์ง
- ์ฑ๊ณต :
- ์ฒ๋ฆฌ ๊ณผ์
๋ฆฌํ๋ ์ ํ ํฐ
์ ํจ์ฑ์ ๊ฒ์ฆํ๋ค.- ์ ํจํ ๊ฒฝ์ฐ
์ก์ธ์ค ํ ํฐ
๊ณผ๋ฆฌํ๋ ์ ํ ํฐ
์ ์ฌ๋ฐ๊ธํ๋ค. ๋ฆฌํ๋ ์ ํ ํฐ
์ ์ฌ๋ฐ๊ธ ๋ฐ์ ๊ฒ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
- ์ค๋ช
๊ฒ์๋ฌผ ์กฐํ
- ๊ฒ์๋ฌผ ์กฐํ
- ๋ณธ์ธ์ ๊ณ์ ์ ํด์ฌ ํ๊ทธ๋ก ์กฐํํ๋ ๊ธฐ๋ฅ
- ์ ํ ์ ํด๋น type์ ํ๋๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ
- ๋ชฉ๋ก์ ์ ๋ ฌํด์ฃผ๋ ๊ธฐ๋ฅ
- ์์ฑ๋ ์ง์, ์ ๋ฐ์ดํธ๋๋ ์ง์, ์ข์์์, ๊ณต์ ์, ์กฐํ์์ ์ผ๋ก ์ค๋ฆ์ฐจ์๊ณผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ์ ์๋ค.
- ์ผ๋ฐ ๊ฒ์์ ํ ์ ์๋ ๊ธฐ๋ฅ
- ๊ธฐ๋ณธ์ผ๋ก 10๊ฐ์ ๊ฒ์๋ฌผ์ ํ ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ
- ์กฐํํ๋ ค๋ ํ์ด์ง ์ ํ ์ ํด๋น ํ์ด์ง๋ง ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ
๊ฒ์๋ฌผ ์์ธ
- ๊ฒ์๋ฌผ ์์ธ(API)
- ์ ์ ๊ฐ ๊ฒ์๋ฌผ์ ํด๋ฆญ ์ ์ฌ์ฉ๋๋ API
- ๋ชจ๋ ํ๋ ๊ฐ์ ํ์ธ
- API ํธ์ถ ์, ํด๋น ๊ฒ์๋ฌผ view_count ๊ฐ 1 ์ฆ๊ฐ
๊ฒ์๋ฌผ ์ข์์ & ๊ณต์ ํ๊ธฐ
๊ฒ์๋ฌผ ๋ชฉ๋ก ๋๋ ์์ธ ์์ ๊ฒ์๋ฌผ ์ข์์
ํด๋ฆญ ์ ์ฌ์ฉ๋๋ API
- ์ข์์ ํด๋ฆญ ์ ๊ฐ SNS ๋ณ ๋ช ์๋ API ๋ฅผ ํธ์ถํฉ๋๋ค.
- ํด๋น ํธ์ถ์ด ์ฑ๊ณตํ ์
response status 200
ํด๋น ๊ฒ์๋ฌผ์like_count
๊ฐ 1 ์ฆ๊ฐํฉ๋๋ค. - ํ์ ์ ํ์ด ์์ต๋๋ค. ํ ์ ์ ๊ฐ ๋ช ๋ฒ์ ์ข์์๋ฅผ ๋๋ฅด๋ ์ข์์ ์๋ ๊ณ์ ์์นํฉ๋๋ค.
- postId๋ฅผ ํตํด ๊ฒ์๋ฌผ์ SNS ์ ํ์ ์กฐํํ๋ค. ex) FACEBOOK, TWITTER, INSTAGRAM, THREADS
- SNS ์ ํ๋ณ๋ก ์๋ ํฌ์ธํธ๋ฅผ ๋ง๋ค๊ณ , ์ธ๋ถ SNS API ํธ์ถ์ ํ๋ค. (๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํ ์์๋ก, ์ค์ ๋์ํ์ง ์์)
- ์ธ๋ถ SNS API๋ฅผ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ฑ๊ณตํ๋ฉด ์ข์์ ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , 200์ ๋ณด๋ธ๋ค.
API ํ ์คํธ
HTTP : POST
URL: /api/posts/likes/:postId
{
"postId": "๊ฒ์๋ฌผ์์ด๋",
"messgae": "์ข์์ ์ ์ฆ๊ฐ ์๋ฃ"
}
-
500 Internal Server Error
- ์๋ชป๋ postId๋ฅผ ์
๋ ฅํ์ ๋
{ "postId": "๊ฒ์๋ฌผ์์ด๋", "messgae": { "์ข์์ ์ ์ฆ๊ฐ ์คํจ": "์กด์ฌํ์ง ์๋ ์ํฐํฐ์ ๋๋ค." } }
- ์๋ชป๋ postId๋ฅผ ์
๋ ฅํ์ ๋
๊ฒ์๋ฌผ ๋ชฉ๋ก ๋๋ ์์ธ ์์ ๊ณต์ ํ๊ธฐ
ํด๋ฆญ ์ ์ฌ์ฉ๋๋ API
- ์ข์์ ํด๋ฆญ ์ ๊ฐ SNS ๋ณ ๋ช ์๋ API ๋ฅผ ํธ์ถํฉ๋๋ค.
- ํด๋น ํธ์ถ์ด ์ฑ๊ณตํ ์
response status 200
ํด๋น ๊ฒ์๋ฌผ์share_count
๊ฐ 1 ์ฆ๊ฐํฉ๋๋ค. - ํ์ ์ ํ์ด ์์ต๋๋ค. ํ ์ ์ ๊ฐ ๋ช ๋ฒ์ ๊ณต์ ๋ฅผ ๋๋ฅด๋ ๊ณต์ ์๋ ๊ณ์ ์์นํฉ๋๋ค.
- postId๋ฅผ ํตํด ๊ฒ์๋ฌผ์ SNS ์ ํ์ ์กฐํํ๋ค. ex) FACEBOOK, TWITTER, INSTAGRAM, THREADS
- SNS ์ ํ๋ณ๋ก ์๋ ํฌ์ธํธ๋ฅผ ๋ง๋ค๊ณ , ์ธ๋ถ SNS API ํธ์ถ์ ํ๋ค. (๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํ ์์๋ก, ์ค์ ๋์ํ์ง ์์)
- ์ธ๋ถ SNS API๋ฅผ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ฑ๊ณตํ๋ฉด ๊ณต์ ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , 200์ ๋ณด๋ธ๋ค.
API ํ ์คํธ
HTTP : POST
URL: /api/posts/share/:postId
{
"postId": "๊ฒ์๋ฌผ์์ด๋",
"messgae": "๊ณต์ ์ ์ฆ๊ฐ ์๋ฃ"
}
-
500 Internal Server Error
- ์๋ชป๋ postId๋ฅผ ์
๋ ฅํ์ ๋
{ "postId": "๊ฒ์๋ฌผ์์ด๋", "messgae": { "๊ณต์ ์ ์ฆ๊ฐ ์คํจ": "์กด์ฌํ์ง ์๋ ์ํฐํฐ์ ๋๋ค." } }
- ์๋ชป๋ postId๋ฅผ ์
๋ ฅํ์ ๋
ํต๊ณ
queryParam | ์์ฑ | default(๋ฏธ์ ๋ ฅ ์ ๊ฐ) | ์ค๋ช |
---|---|---|---|
hashtag | string | ๋ณธ์ธ๊ณ์ | |
type | string (์ด๊ฑฐํ) | ํ์ ๊ฐ | date, hour |
start | date | ์ค๋๋ก ๋ถํฐ 7์ผ์ | 2023-10-01 ๊ณผ ๊ฐ์ด ๋ฐ์ดํธ ํ์์ด๋ฉฐ ์กฐํ ๊ธฐ์ค ์์์ผ์ ์๋ฏธํฉ๋๋ค. |
end | date | ์ค๋ | 2023-10-25 ๊ณผ ๊ฐ์ด ๋ฐ์ดํธ ํ์์ด๋ฉฐ ์กฐํ ๊ธฐ์ค ์์์ผ์ ์๋ฏธํฉ๋๋ค. |
value | string (์ด๊ฑฐํ) | count (๊ฒ์๋ฌผ ๊ฐ์) | count , view_count, like_count, share_count ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. |
value
count
์ผ ์, ๊ฒ์๋ฌผ ๊ฐ์view_count
์ผ ์, ํด์ ํ๊ทธ์ ํด๋นํ๋ ๊ฒ์๋ฌผ ๋ค์view_count
์ ํฉ(like_count
,share_count
๋ ๋์ผ)
?value=count&type=date
์ผ์,start
~end
๊ธฐ๊ฐ๋ด (์์์ผ, ์ข ๋ฃ์ผ ํฌํจ) ํด๋นhashtag
๊ฐ ํฌํจ๋ ๊ฒ์๋ฌผ ์๋ฅผ ์ผ์๋ณ๋ก ์ ๊ณตํฉ๋๋ค.- ex) api/statistics?type=DATE&hashtag=user1
- D-7์ผ์ ๋ถํฐ D-day๊น์ง user1์ด๋ผ๋ ํด์ํ๊ทธ๊ฐ ํฌํจ๋ ๊ฒ์๊ธ์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
?value=count&type=hour
์ผ์,start
~end
๊ธฐ๊ฐ๋ด (์์์ผ, ์ข ๋ฃ์ผ ํฌํจ) ํด๋นhashtag
๊ฐ ํฌํจ๋ ๊ฒ์๋ฌผ ์๋ฅผ ์๊ฐ๋ณ๋ก ์ ๊ณตํฉ๋๋ค.start
์ผ์์ 00์ ๋ถํฐ 1์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก.- ex) api/statistics?type=HOUR&hashtag=๊ณ ์์ด
- D-7์ผ์ 00:00:00๋ถํฐ D-day23:59:59๊น์ง ๊ณ ์์ด์ด๋ผ๋ ํด์ํ๊ทธ๊ฐ ํฌํจ๋ ๊ฒ์๊ธ์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
์ปค๋ฐ ์ ํ
์ปค๋ฐ ์ ํ | ์๋ฏธ |
---|---|
feat | ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ |
fix | ๋ฒ๊ทธ ์์ |
docs | ๋ฌธ์ ์์ |
style | ์ฝ๋ formatting, ์ธ๋ฏธ์ฝ๋ก ๋๋ฝ, ์ฝ๋ ์์ฒด์ ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ |
refactor | ์ฝ๋ ๋ฆฌํฉํ ๋ง |
test | ํ ์คํธ ์ฝ๋, ๋ฆฌํฉํ ๋ง ํ ์คํธ ์ฝ๋ ์ถ๊ฐ |
chore | ํจํค์ง ๋งค๋์ ์์ , ๊ทธ ์ธ ๊ธฐํ ์์ ex) .gitignore |
์ปค๋ฐ ๋ฉ์ธ์ง ์ธ๋ถ ๋ด์ฉ
โโข ๊ธ๋ก ์์ฑํ์ฌ ๋ด์ฉ์ด ์ ์ ๋ฌ๋ ์ ์๋๋ก ํ ๊ฒ
โโข ๋ณธ๋ฌธ์๋ ๋ณ๊ฒฝํ ๋ด์ฉ๊ณผ ์ด์ ์ค๋ช (์ด๋ป๊ฒ๋ณด๋ค๋ ๋ฌด์ & ์๋ฅผ ์ค๋ช )
โ
โrefactor : ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๋ณ๊ฒฝ (title)
โ( ๊ณต ๋ฐฑ )
โ๊ธฐ์กด ๋ก๊ทธ์ธ ๋ฐฉ์์์ ~~ํ ๋ฌธ์ ๋ก ~~ํ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. (content)
โfeat : ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
๋ธ๋ ์น ๋ช ๋ช ๊ท์น
feat/๊ธฐ๋ฅ๋ช
- ex) feat/users_apply
๋ธ๋์น ์์ฑ ๋ฐฉ๋ฒ
- ๋ธ๋์น๋ ๊ธฐ๋ฅ ๋จ์๋ก ๋๋๋ค.
- feat ๋ธ๋์น๋ dev ๋ธ๋์น์์ ํ์ํด์ ๋ง๋ ๋ค.
- PR์ ํตํด dev ๋ธ๋์น์์ ๊ธฐ๋ฅ์ด ์์ฑ๋๋ฉด main ๋ธ๋์น๋ก merge ํ๋ค.
์ด๋ฆ | ํ ์คํธ |
---|---|
main | ์ ํ์ผ๋ก ์ถ์๋ ์ ์๋ ๋ธ๋์น |
dev | ๋ค์ ์ถ์ ๋ฒ์ ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น |
feat | ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น |