Skip to content

Commit c99f38f

Browse files
HyeryongChoiksone02wonyongChoi05parkmuhyeuniamjooon2
authored
Release: v2.0.0 (#515)
* feat: ์‹ํ’ˆ ํ•„ํ„ฐ๋ง ๊ฒฐ๊ณผ ์—†์„ ๋•Œ ํ…์ŠคํŠธ ์ถ”๊ฐ€ (#431) * feat: ์‹ํ’ˆ ํ•„ํ„ฐ๋ง ๊ฒฐ๊ณผ ์—†์„ ๋•Œ ํ…์ŠคํŠธ ์ถ”๊ฐ€ * refactor: ํ•„ํ„ฐ๋ง ๊ฒฐ๊ณผ ์—†์„ ๋•Œ ํ…์ŠคํŠธ ๋ฌธ๊ตฌ ์ˆ˜์ • * refactor: Toast ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ฆฌํŒฉํ„ฐ๋ง / ๊ฐ•์•„์ง€ ํ„ฐ์น˜ ์ด์Šคํ„ฐ์—๊ทธ ์ˆ˜์ • (#428) * refactor: Toast ๋กœ์ง Context with Provider๋กœ ๋ณ€๊ฒฝ * refactor: ๊ฐ•์•„์ง€ ์ด์Šคํ„ฐ์—๊ทธ ์ˆ˜์ • * refactor: ToastContext ํƒ€์ž… ๋ถ„๋ฆฌ ๋ฐ ๋ฆฌํŒฉํ„ฐ๋ง * refactor: Landing Toast ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ * fix: ์ด์Šคํ„ฐ์—๊ทธ ์˜คํƒˆ์ž ์ˆ˜์ •(๊บ  -> ๊นจ) (#443) * feat: ๋ฆฌ๋ทฐ ์š”์•ฝ ์กฐํšŒ json ํ”„๋กœํผํ‹ฐ ๋ช… ์ˆ˜์ • (#449) * fix: json ํ”„๋กœํผํ‹ฐ๋ช… ์ˆ˜์ • * fix: ๋ฆฌ๋ทฐ ์š”์•ฝ ์กฐํšŒ API ๋ฌธ์„œ ์ˆ˜์ • * chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์กด์„ฑ ์ œ๊ฑฐ * chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” DTO ์ œ๊ฑฐ * feat: ์ฟผ๋ฆฌ ์นด์šดํ„ฐ ์ ์šฉ (#445) * feat: ์ฟผ๋ฆฌ ์นด์šดํ„ฐ ๊ฐ์ฒด ์ƒ์„ฑ * feat: ์ปค๋„ฅ์…˜ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋ก์‹œ ๊ตฌํ˜„์„ ์œ„ํ•œ handler ์ถ”๊ฐ€ * feat: ์ฟผ๋ฆฌ์นด์šดํ„ฐ AOP ์ ์šฉ * feat: ์ฟผ๋ฆฌ์นด์šดํ„ฐ ๋กœ๊น… ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * test: ๊ณตํ†ต MockMvcTest ์ถ”๊ฐ€ * feat: refresh token ์ ์šฉ (#447) * feat: refresh token ์„ค์ •๊ฐ’ ์ถ”๊ฐ€ * feat: refresh token ์ƒ์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * feat: refresh token์„ ์ฟ ํ‚ค์— ๋‹ด์•„ ๋‹ด๋Š” ๊ธฐ๋Šฅ * refactor: String.valueOf() ๋Œ€์‹  .toString()์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ * refactor: refreshTokenCookieProvider ๊ฐ์ฒด ๋„์ถœ * refactor: tokenRefresh ๊ธฐ๋Šฅ ๊ตฌํ˜„ * refactor: ResponseCookie ์ ์šฉ * test: authServiceTest ์ž‘์„ฑ * test: jwtProviderTest ์ž‘์„ฑ * test: refreshTokenRepositoryTest ์ž‘์„ฑ * chore: application-local1.yml ์‚ญ์ œ * feat: ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * test: ํ† ํฐ ์ธ์ฆ ์‹คํŒจ์‹œ 401 ์˜ˆ์™ธ ์ถ”๊ฐ€ * refactor: DTO ๋„ค์ด๋ฐ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๋„๋ก ์ˆ˜์ • * test: ๋กœ๊ทธ์•„์›ƒ ์ฟ ํ‚ค ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ * test: ๋กœ๊ทธ์•„์›ƒ ์ฟ ํ‚ค ํ…Œ์ŠคํŠธ ์ˆ˜์ • * feat: API ๋ช…์„ธ ๋ณ€๊ฒฝ `/logout` -> `/log-out` * refactor: Tokens -> TokenDto ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * feat: token rotation ์ œ๊ฑฐ * refactor: AuthServiceTest ๋‚ด ๋ชจํ‚นํ…Œ์ŠคํŠธ ๋ถ„๋ฆฌ * refactor: Controller ํ…Œ์ŠคํŠธ ๋ถ„๋ฆฌ * feat: refreshToken BaseTimeEntity ์ ์šฉ * refactor: renewAccessToken -> renewAccessTokenBy ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„ token -> refreshToken ๋ณ€๊ฒฝ * refactor: ํ…Œ์ŠคํŠธ์šฉ ์‹œํฌ๋ฆฟ ํ‚ค ์ƒ์ˆ˜ ๋ถ„๋ฆฌ * refactor: ๊ฐœํ–‰ ๋ณ€๊ฒฝ * refactor: logout ํ†ต์ผ * refactor: ํ† ํฐ ๋งŒ๋ฃŒ๊ธฐํ•œ ๋ณ€์ˆ˜๋ช… ์ˆ˜์ • * test: ๋ถˆํ•„์š”ํ•œ @SpringBootTest ์ œ๊ฑฐ * refactor: ํ† ํฐ ์ƒ์„ฑ์‹œ ๋ฐ›๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ * feature: ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ณ ๋„ํ™” (#453) * feat: webpack config ์ž๋™ ์™„์„ฑ annotation ์ถ”๊ฐ€ * feat: ErrorBoundary onError ์˜ต์…˜ ์ถ”๊ฐ€ * feat: RenderProps ํƒ€์ž… ์ถ”๊ฐ€ * feat: ErrorBoundary ignore option ์ถ”๊ฐ€ * feat: APIBoundary ์ถ”๊ฐ€ * feat: componseFunctions util ํ•จ์ˆ˜ ์ถ”๊ฐ€ * feat: useErrorBoundary ์ถ”๊ฐ€ * feat: PrefetchImg ์ถ”๊ฐ€ * refactor: Global Provider๋“ค์˜ ์‚ฌ์šฉ ์œ„์น˜๋ฅผ index > App์œผ๋กœ ๋ณ€๊ฒฝ * feat: Global eventHandler ์ถ”๊ฐ€ - online - offline - unhandledrejection * feat: QueryBoundary ์ถ”๊ฐ€ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜ ๋ณ€๊ฒฝ * refactor: QueryBoundary ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * refactor: ์ „์—ญ Provider๋“ค์˜ ๊ฒฝ๊ณ„ ์žฌ์กฐ์ • * fix: QueryBoundary ์ž„ํฌํŠธ ๊ฒฝ๋กœ ์ˆ˜์ • * feat: msw ๋ชจ๋“ˆ ๊ฒฝ๋กœ ์ˆ˜์ • * refactor: FoodList ๋ฐ์ดํ„ฐ ์š”์ฒญ ์œ„์น˜ ๋ณ€๊ฒฝ * feat: exception routes ์ถ”๊ฐ€ * feat: exception router์— ErrorPage ์ ์šฉ * refactor: ErrorBoundaryState ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜์ • * feat: ErrorBoundaryValue ํƒ€์ž…์— error ํƒ€์ž… ์ถ”๊ฐ€ * feat: ErrorBoundary fallback์— error ์ •๋ณด๋„ ํ•จ๊ป˜ ์ œ๊ณต * feat: CustomError ์ถ”๊ฐ€ - RuntimeError - UnexpectedError * feat: APIBoundary UnexpectedError ์ ์šฉ * refactor: error message ์ˆ˜์ • * feat: EndOfErrorBoundary ์ถ”๊ฐ€ * refactor: UnexpectedError์˜ ๋ฉ”์„ธ์ง€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์ œ๊ฑฐ * feat: APIErrorCode ์ถ”๊ฐ€ * refactor: ManageableAxiosError ํƒ€์ž… ๋ถ„๋ฆฌ * feat: APIError ์ถ”๊ฐ€ * feat: APIBoundary ํ†ต์‹  ์„ฑ๊ณต์‹œ APIError throw * chore: refresh icon ์ถ”๊ฐ€ * chore: home icon height, viewbox ์ˆ˜์ • * feat: NOT_FOUND error message ์ถ”๊ฐ€ * refactor: UnexpectedError๊ฐ€ ๋ชจ๋“  value๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ • * refactor: ErrorPage๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ • - error์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ status์™€ message ํ‘œ์‹œ - NotFound page ์ถ”๊ฐ€ * refactor: exception routes์— NotFound ํŽ˜์ด์ง€ ์ ์šฉ * refactor: UnexpectedError message ๋ณ€๊ฒฝ * refactor: canManage ์กฐ๊ฑด ์ˆ˜์ • * refactor: Error static method ์ถ”๊ฐ€ - convertToError ์ถ”๊ฐ€ - canManage๋ฅผ APIError์˜ static method๋กœ ๋ณ€๊ฒฝ * refactor: CustomError > ZipgoError ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * feat: useMutationWithToast ์ถ”๊ฐ€ * feat: EndOfErrorBoundary ์ ์šฉ * feat: ์ „์—ญ staleTime, cacheTime ์„ค์ • * feat: reviewList query staleTime 1๋ถ„์œผ๋กœ ์„ค์ • * feat: useMutationWithToast critical option ์ถ”๊ฐ€ * refactor: APIBoundary๊ฐ€ APIError์ธ ๊ฒฝ์šฐ throwํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ • * refactor: ignore key ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌ * refactor: type only export๋กœ ๋ณ€๊ฒฝ ๋ฐ named export ๊ทธ๋ฃนํ™” * refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” type export ์ œ๊ฑฐ * refactor: ๋„คํŠธ์›Œํฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌ * refactor: Unhandled rejection์„ ์—๋Ÿฌ๋ฐ”์šด๋”๋ฆฌ์—์„œ ์ฒ˜๋ฆฌ * refactor: axios interceptor๊ฐ€ ์ตœ์ดˆ ๋ Œ๋”๋ง์‹œ์— ๋“ฑ๋ก๋˜๋„๋ก ์ˆ˜์ • * refactor: ์ฃผ์„ ์ œ๊ฑฐ * refactor: convertToError ๋กœ์ง์—์„œ ZipgoError๋Š” ์žฌ๋ณ€ํ™˜ ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ * feat: warning icon prefetch * feat: ErrorCode ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์ ์šฉ * refactor: AxiosInterceptors ์ œ๊ฑฐ - request interceptor์—์„œ Promise๋ฅผ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ์ˆ˜์ • - ํ† ํฐ ๋งŒ๋ฃŒ์‹œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋กœ์ง์„ APIBoundary๋กœ ๋ถ„๋ฆฌ * refactor: RenderProps return type ๋ณ€๊ฒฝ * feat: resolveRenderProps ํ•จ์ˆ˜ ์ถ”๊ฐ€ * refactor: ErrorBoundary๊ฐ€ ๋ฌด์กฐ๊ฑด ์—๋Ÿฌ๋ฅผ ๋ณ€ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ * feat: isDifferentArray ์œ ํ‹ธ ํ•จ์ˆ˜ ์ถ”๊ฐ€ * feat: ErrorBoundary ๊ธฐ๋Šฅ ์ถ”๊ฐ€ - location ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์—๋Ÿฌ๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜๋„๋ก ๋ณ€๊ฒฝ - resetKeys prop ์ถ”๊ฐ€ * refactor: APIBoundary์—์„œ 401 ํ•ธ๋“ค๋ง์„ ํ•˜๋„๋ก ๋ณ€๊ฒฝ * refactor: ํ•จ์ˆ˜ ์„ ์–ธ์‹์„ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝ * refactor: APIBoundary ๋ถˆํ•„์š”ํ•œ ์—๋Ÿฌ ์žฌ๋ณ€ํ™˜ ์ œ๊ฑฐ * refactor: composeFunctions์™€ composeEventHandlers ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ฉ * refactor: APIBoundary๊ฐ€ onErrorProps๋„ ์‹คํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ * refactor: ๊ธฐ์กด์˜ composeEventHandlers๋ฅผ composeFunctions๋กœ ๋ณ€๊ฒฝ * feat: ๋ฉ”์ธํŽ˜์ด์ง€ ํ•˜๋‹จ '์‚ฌ๋ฃŒ ์„ ํƒ ๋„์›€๋ง ๋ฐฐ๋„ˆ' ์ถ”๊ฐ€ (#458) * feat/#457: ์‚ฌ๋ฃŒ ์„ ํƒ ๋„์›€๋ง ๋ฐฐ๋„ˆ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * test/#457: ์Šคํ† ๋ฆฌ ์ถ”๊ฐ€ * feat/#457: ๋žœ๋”ฉํŽ˜์ด์ง€์— ๋„์›€๋ง ๋ฐฐ๋„ˆ ์ถ”๊ฐ€ * refactor/#457: ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ…Œ๋งˆ๋กœ ๋ถ„๋ฆฌ * Merge branch 'develop' of https://github.com/woowacourse-teams/2023-zipgo into feature/#457 * fix/#457: ์‚ฌํŒŒ๋ฆฌ์—์„œ svg ์ด๋ฏธ์ง€ ๊นจ์ง€๋Š” ๋ฌธ์ œ webp ์ด๋ฏธ์ง€ ์‚ฌ์šฉ์œผ๋กœ ํ•ด๊ฒฐ * chore: ์Šคํ† ๋ฆฌ๋ถ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”๊ฐ€ (#464) * fix: ์Šคํ† ๋ฆฌ๋ถ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์บ์‹œ ๋ฌดํšจํ™” ๋กœ์ง ์‚ญ์ œ ๋ฐ mockServiceWorker ๊ฒฝ๋กœ ์ˆ˜์ • (#466) * chore/#465: ํด๋ผ์šฐ๋“œํ”„๋ก ํŠธ ์บ์‹œ ๋ฌดํšจํ™” ๋กœ์ง ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์‚ญ์ œ * chore/#465: ์Šคํ† ๋ฆฌ๋ถ mockServiceWorker ๊ฒฝ๋กœ ์„ค์ • * fix: ์Šคํ† ๋ฆฌ๋ถ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ ์บ์‹œ ๊ฒฝ๋กœ ์ˆ˜์ • (#468) * chore: ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ์— ์บ์‹œ์ ์šฉ (#470) * chore/#469: ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ์— ์บ์‹œ ์ ์šฉ * chore/#469: ์ž‘์—… ์‹คํ–‰ ์กฐ๊ฑด ์ˆ˜์ • * feat: ์‹ํ’ˆ ํ•„ํ„ฐ ์„ ํƒ ํ›„ ์„ ํƒํ•œ ํ•„ํ„ฐ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#461) * feat/#460: ๋ฐ˜๋ ค๊ฒฌ ๋“ฑ๋ก ํ™”์‚ดํ‘œ ์‚ญ์ œ * feat/#460: ์„ ํƒํ•œ ํ•„ํ„ฐ ๋ณด์—ฌ์ค„ ๋•Œ ๋‚œ๋…ํ™”๋ผ์„œ ๋‚˜์˜ค์ง€ ์•Š๋„๋ก url๋ณตํ˜ธํ™” * refactor/#460: ํŒŒ์ผ ์ด๋™ * feat/#460: ์„ ํƒํ•œ ํ•„ํ„ฐ ๋ชฉ๋ก ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * refactor/#460: ์ปดํฌ๋„ŒํŠธ๋ช… ์ˆ˜์ • * refactor/#460: ์ปดํฌ๋„ŒํŠธ๋ช… ์ˆ˜์ • * fix/#460: ์ž˜๋ชป๋œ ์ง€ํ‘œ ์„ค๋ช… ์ˆ˜์ • * refactor/#460: iPhone13 mini์—์„œ ๋„์›€๋ง ์ค„๋ฐ”๊ฟˆ ์—†์ด ๋ณด์ด๋„๋ก ์ˆ˜์ • * refactor: else if ๋ฌธ ๊ฐœ์„  * refactor: ํด๋ฆญ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ SelectedFilterItem์œผ๋กœ ์ด๋™ * refactor: string๋ฐฐ์—ด KEYWORD_EN์œผ๋กœ ๋Œ€์ฒด * refactor: ํƒ€์ž…๋ช…๊ณผ ์ผ์น˜ํ•˜๋„๋ก category > keyword๋กœ ๋ณ€์ˆ˜๋ช… ์ˆ˜์ • * feat: Object.entries ํƒ€์ž… ์ถ”๋ก ์„ ์œ„ํ•œ ์˜ค๋ฒ„๋กœ๋”ฉ ํƒ€์ž… ์ถ”๊ฐ€ * refactor: ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์— ๋”ฐ๋ผ ํ•„ํ„ฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ์ˆ˜์ • * refactor: ํŽซํ‘ธ๋“œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง (#459) * refactor: PetFoodQueryRepository ํ…Œ์ŠคํŠธ๊ฐ„ ๋…๋ฆฝ์„ฑ ๋ณด์žฅ * refactor: PetFoodQueryService ํ…Œ์ŠคํŠธ๊ฐ„ ๋…๋ฆฝ์„ฑ ๋ณด์žฅ * refactor: PetFoodController ํ…Œ์ŠคํŠธ๊ฐ„ ๋…๋ฆฝ์„ฑ ๋ณด์žฅ * refactor: PetFoodQueryRepository ํ…Œ์ŠคํŠธ ์ˆ˜์ • * refactor: fixture ์ˆ˜์ • * refactor: PetFoodQueryService ํ…Œ์ŠคํŠธ ์ˆ˜์ • * refactor: PetFoodController ํ…Œ์ŠคํŠธ ์ˆ˜์ • * refactor: QueryServiceTest ์‚ญ์ œ * refactor: ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ํ†ตํ•ฉ ๋ฐ ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ * refactor: abstract ์ถ”๊ฐ€ * feat: Datadog Trace ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€ (#475) * feat: datadog ์˜์กด์„ฑ ์ถ”๊ฐ€ * feat: Trace ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€ * feature: ErrorBoundary ์‚ฌ์šฉ ๋ฐฉ์‹ ๋ณ€๊ฒฝ ๋ฐ ๊ฐ„์†Œํ™” (#477) * refactor: ๋ถˆํ•„์š”ํ•œ stringify ์ œ๊ฑฐ * refactor: APIError status ํƒ€์ž… ์ง€์ • * refactor: shouldIgnore ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์„ ์ œ๋„ค๋ฆญ์œผ๋กœ ๋ณ€๊ฒฝ * feat: BaseFunction type ์ถ”๊ฐ€ * feat: resolveFunctionOrPrimitive ์œ ํ‹ธ ํ•จ์ˆ˜ ์ถ”๊ฐ€ * refactor: APIBoundary onError > ignore๋กœ ๋ณ€๊ฒฝ * refactor: APIError์˜ method๊ฐ€ get์ด ์•„๋‹ˆ๋ผ๋ฉด ignore true๋กœ ์„ค์ • * refactor: Error field ์ˆ˜์ • - ignore > IGNORE_KEY * refactor: ignore ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ • - boolean๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ * refactor: ErrorBoundary ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ • - mustCatch ์ถ”๊ฐ€ - ignore > shouldIgnore๋กœ ๋ณ€๊ฒฝ - EndOfBoundary > CriticalBoundary๋กœ ๋ณ€๊ฒฝ - ๊ธฐ์กด shouldIgnore ์œ ํ‹ธ ํ•จ์ˆ˜ > isIgnored๋กœ ๋ณ€๊ฒฝ * chore: nvmrc ์ถ”๊ฐ€ v18.16.1 * feat: Loading ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * refactor: ๊ธฐ์กด QueryBoundary ์‚ฌ์šฉ์„ Loading, Suspense๋กœ ๋ณ€๊ฒฝ * feat: ๊ฐ™์€ ํ”Œ๋กœ์šฐ ์•ˆ์˜ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํผ๋„ ์ถ”์ƒํ™” ๋ฐ ์ ์šฉ (#482) * refactor/#473: navigate ๊ด€๋ จ ์ฝ”๋“œ ํ›… ๋ถ„๋ฆฌ * feat/#473: Funnel, useFunnel ๊ตฌํ˜„ * feat/#473: NonEmptyArray ํƒ€์ž… ์ถ”๊ฐ€ * feat/#473: ReviewFormFunnel ์ ์šฉ * refactor/#473: ReviewํŽ˜์ด์ง€ ๊ฒฝ๋กœ ์ˆ˜์ • * feat/#473: ํ…œํ”Œ๋ฆฟ overflow-y auto๋กœ ๋ณ€๊ฒฝ * feat/#473: ์Šคํฌ๋กค ๋””์ž์ธ ์•ˆ๋ณด์ด๋„๋ก ์ˆ˜์ • * feat/#473: useFunnel ๋ฐ˜ํ™˜๊ฐ’ ๊ฐ์ฒด๋กœ ์ˆ˜์ • * feat/#473: PetProfile ๋“ฑ๋ก ํผ Funnel ์ ์šฉ * fix/#473: ๋ฏน์Šค๊ฒฌ์ธ ๊ฒฝ์šฐ์—๋งŒ petSize ๊ธฐ๋ณธ๊ฐ’ ๋„ฃ์–ด์ฃผ๋„๋ก ์ˆ˜์ • * feat/#473: ํŽซ ๋“ฑ๋ก ํผ ์ž‘์„ฑ ์‹œ ํŽ˜์ด์ง€ ์ด๋™ํ•ด๋„ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜๋„๋ก ์„ค์ • * feat/#473: ํผ ์ž‘์„ฑ ์ค‘ ์‚ฌ์šฉ์ž์˜ ์‹ค์ˆ˜๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•œ goBackSafely ์ ์šฉ * feat/#473: ๋ฆฌ๋ทฐ ์Šคํ… ์ƒ์ˆ˜ํ™” * fix/#473: 0์‚ด(1์‚ด๋ฏธ๋งŒ)์ผ ๋•Œ ๋‹ค์Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜๋„๋ก ์ˆ˜์ • * fix/#473: ReviewForm ํ…Œ์ŠคํŠธ ๊นจ์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * refactor/#473: ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ๋งž์ถ”๊ธฐ ๋ฐ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ * refactor/#473: ์ธ๋ผ์ธ ๋ถ„๊ธฐ๋ฌธ ๋ณ€์ˆ˜๋กœ ์ถ”์ถœ * fix: ํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ณ€๊ฒฝ (#480) * fix: ์˜ˆ์™ธ ๋ณ€๊ฒฝ * test: ํ…Œ์ŠคํŠธ ์ˆ˜์ • * feat: localhost https ์ถ”๊ฐ€ (#485) * refactor: '์‚ฌ๋ฃŒ ์„ ํƒ ๋„์›€๋ง ๋ฐฐ๋„ˆ'๋ฅผ ๋‹ซ์œผ๋ฉด ๋ฆฌ์•กํŠธ ๋‚ด๋ถ€ ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์•ˆ ๋ณด์ด๋„๋ก ์ˆ˜์ • (#486) * refactor: UI/UX ๊ฐœ์„  (#488) * refactor: AlignSelect๋ฅผ native select๋กœ ๋ณ€๊ฒฝ - ์‹ค์ œ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง๊ณผ select option์„ ๋™๊ธฐํ™” - ์•„์ด์ฝ˜ ์ œ๊ฑฐ * refactor: ALIGN_QUERY < REVIEW_ALIGN_QUERY ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * feat: REVIEW_FILTER_QUERY_STRINGS ์ƒ์ˆ˜ ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ ์ฝœ๋ฐฑ ์ œ๊ฑฐ * refactor: ๋ฆฌ๋ทฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ƒ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ * feat: ๋ฆฌ๋ทฐ ํ•„ํ„ฐ ์ƒํƒœ์™€ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๋™๊ธฐํ™” * feat: ํ•„ํ„ฐ ์•„์ด์ฝ˜ ์œ„์น˜ ์šฐ์ธก์œผ๋กœ ๋ณ€๊ฒฝ * feat: ์ƒ์ˆ˜ ์ ์šฉ ๋ฐ ๋ถˆํ•„์š”ํ•œ useEffect ์ œ๊ฑฐ * refactor: ๊ฒฌ์ข… select ๊ธฐ๋ณธ ํ™”์‚ดํ‘œ ์ œ๊ฑฐ * feat: ReactQueryDevtools ์ถ”๊ฐ€ * refactor: StyledProps $props ํ˜•์‹์„ ์นด๋ฉœ ์ผ€์ด์Šค ๋„ค์ด๋ฐ์—๋งŒ ์ ์šฉ * refactor: theme animation > keyframes๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ณ„๋„์˜ animation ์†์„ฑ ์ถ”๊ฐ€ * refactor: COMMENT_VISIBLE_LINE_LIMIT ์˜คํƒ€ ์ˆ˜์ • * feat: ReviewItem Skeleton ์ถ”๊ฐ€ * refactor: ๊ธฐ์กด ReviewList > ReviewListAndChart๋กœ ๋ณ€๊ฒฝ ๋ฐ ReviewList ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * refactor: query key ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ์ œ๊ฑฐ * refactor: ๋ณ€๊ฒฝ๋œ ReviewListAndChart ๋„ค์ด๋ฐ ์ ์šฉ * refactor: query key์— queryString ์ถ”๊ฐ€ * refactor: refetch > query key์— queryString์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ * feat: SuspendedImg ์ถ”๊ฐ€ * refactor: StarRatingDisplay ๋ณ„์  ์ด๋ฏธ์ง€ SuspenedImg๋กœ ๋ณ€๊ฒฝ * feat: ReviewControls Skeleton ์ถ”๊ฐ€ * refactor: SuspensedImg src๋ฅผ ์˜ต์…”๋„๋กœ ๋ณ€๊ฒฝ * refactor: ReviewItem img > SuspendedImg๋กœ ๋ณ€๊ฒฝ * refactor: ๋ˆ„๋ฝ๋๋˜ FilterSelectionDisplay ์žฌ์ ์šฉ * feat: SuspenedImg lazy loading ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * feat: FoodList Skeleton ์ถ”๊ฐ€ * feat: foodList fixture imageUrl ์ถ”๊ฐ€ * feat: FoodItem Skeleton ์ถ”๊ฐ€ ๋ฐ LazyImg > SuspendedImg๋กœ ๋ณ€๊ฒฝ * feat: FoodList Skeleton ์ ์šฉ * feat: FilterBottomSheet ์ตœ๋Œ€ ๋†’์ด ์ง€์ • * feat: iPhone8 ์ดํ•˜ ์‚ฌ์ด์ฆˆ ๋Œ€์‘ * refactor: ReviewControls ๋ ˆ์ด์•„์›ƒ ์ˆ˜์ • * chore: stylelint rule ์ถ”๊ฐ€ * refactor: ์‚ฌ๋ฃŒ ํ•„ํ„ฐ ๋ชฉ๋ก ๋ ˆ์ด์•„์›ƒ ์ตœ์†Œ ๋†’์ด ์„ค์ • * refactor: GuideBanner ์ž‘์€ ๋””๋ฐ”์ด์Šค์—์„œ ํฐํŠธ ์‚ฌ์ด์ฆˆ ์ž‘๊ฒŒ ๋ณ€๊ฒฝ * refactor: ์˜์–‘๊ธฐ์ค€ ๊ตญ๊ธฐ ์ด๋ชจ์ง€ > svg๋กœ ๋ณ€๊ฒฝ * refactor: ReviewList ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ ์—†์Œ ์ปดํฌ๋„ŒํŠธ ๋””์ž์ธ์„ ์‹ํ’ˆ ๊ฒฐ๊ณผ ์—†์Œ๊ณผ ํ†ต์ผ * fix: NutritionStandardBlock story State๋ฅผ ์ง์ ‘ ๋ช…๋ช… * refactor: NonEmptyArray type export๋กœ ๋ณ€๊ฒฝ * refactor: styledprops $์žฌ์ ์šฉ * refactor: ๏ฟฝOAuth API ํ˜ธ์ถœ์„ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„์—์„œ ๋ถ„๋ฆฌ (#471) * refactor: AuthServiceFacade ์ ์šฉ * test: AuthServiceFacade๋ฅผ ๋ชจํ‚น์œผ๋กœ ๋ถ„๋ฆฌ * test: OAuth API ์ƒ์„ฑ ๋ฉ”์„œ๋“œ๋ช… ํ†ต์ผ * refactor: ์„œ๋“œํŒŒํ‹ฐ ์„ฑ๊ณต ์‘๋‹ต fixture ์ƒ์„ฑ * refactor: AuthControllerTest๋กœ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * feat: ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค(ios)์—์„œ <input>, <textarea> ํฌ์ปค์Šค ์‹œ ์ž๋™ zoom-in๋˜๋Š” ํ˜„์ƒ ๊ฐœ์„  (#492) * refactor/#491: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ * feat/#491: ๊ธ€๋กœ๋ฒŒ์Šคํƒ€์ผ ์ˆ˜์ • * fix/#491: ๋ฐ์Šคํฌํ†ฑ ์‚ฌํŒŒ๋ฆฌ์—์„œ ๋„ค๋ชจ๋กœ ๋‚˜์˜ค๋Š” ๋ผ๋ฒจ ๋””์ž์ธ ์ˆ˜์ • * feat/#491: ๋ชจ๋ฐ”์ผ ํ™”๋ฉด์—์„œ zoom-in๋˜์ง€ ์•Š๋„๋ก ํฐํŠธ ์‚ฌ์ด์ฆˆ ์„ค์ • * feat/#491: select border-radius ๊ธฐ๋ณธ ์Šคํƒ€์ผ ์ œ๊ฑฐ * refactor/#491: ์ค‘๋ณต css ์ฝ”๋“œ ์‚ญ์ œ * feat: ๋ฐ์Šคํฌํƒ‘ ๋ทฐ ์ „์—ญ ๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„ (#494) * feat: DesktopView ๊ตฌํ˜„ * fix: storybook ci ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * refactor: redirectUri๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ (#456) * fix: allowCredentials ์˜ต์…˜ ๋ฐ ํ—ˆ์šฉ ํ—ค๋” ์ถ”๊ฐ€ (#496) * feat: ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ๋ถ„๋ฆฌ ์ถ”๊ฐ€ (#495) * feat: ์ฟ ํ‚ค ๋‚ด SameSite=None ์˜ต์…˜ ์ถ”๊ฐ€ (#497) * fix: allowCredentials ์˜ต์…˜ ๋ฐ set-Cookie ํ—ค๋” ์ถ”๊ฐ€ * fix: sameSite none ์˜ต์…˜ ์ถ”๊ฐ€ * fix: sameSite none ์˜ต์…˜ ์ถ”๊ฐ€ * fix: ์ฟ ํ‚ค ๋‚ด domain ์„ค์ • ์ถ”๊ฐ€ (#498) * fix: UI ๊นจ์ง ํ•ด๊ฒฐ (#501) * feature: ์นด์นด์˜ค ๋กœ๊ทธ์ธ redirect uri ๋™์ ์œผ๋กœ ์„ค์ • (#500) * feat: refreshZipgoAuth api ์ถ”๊ฐ€ * feat: response interceptor refresh ๋กœ์ง ์ถ”๊ฐ€ * refactor: useNavigate > useEasyNavigate๋กœ ์ˆ˜์ • * chore: .gitignore *.pem ์ถ”๊ฐ€ * feat: https cert key paths ์ถ”๊ฐ€ * feat: localhost https ์ ์šฉ * feat: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€ - isLocal ์ถ”๊ฐ€ - HOMEPAGE ์ถ”๊ฐ€ - isDevelop, isProduction, HTTPS ๋ถ„๋ฆฌ - KAKAO_REDIRECT_URI ์‚ญ์ œ ๋ฐ webpack์—์„œ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๋„๋ก ๋ณ€๊ฒฝ * feat: ๋กœ๊ทธ์ธ api ์ˆ˜์ • - loginZipgoAuth redirect-uri ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ์ถ”๊ฐ€ - refreshZipgoAuth withCredentials ์˜ต์…˜ ์ถ”๊ฐ€ * feat: isAuthError static method ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ axios instance ์„ค์ • ์ œ๊ฑฐ * refactor: ์œ ์ € ๊ถŒํ•œ ์ธ์ฆ ๋กœ์ง ๋ถ„๋ฆฌ > useCheckAuth * feat: Priavte route ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * feat: Private route ์ ์šฉ * refactor: test ์ฝ”๋“œ ์ œ๊ฑฐ * refactor: ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์—๋Ÿฌ๋ฅผ Runtime ์ปค์Šคํ…€ ์—๋Ÿฌ๋กœ ๋ณ€๊ฒฝ * refactor: error text๊ฐ€ ๊ฐœํ–‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€๊ฒฝ * fix: storybook process is not defined ์˜ค๋ฅ˜ ์ˆ˜์ • * feat: RefreshToken ์ „ํ™˜ (#503) * feat: RefreshToken ์ ์šฉ * chore: EOF ์ถ”๊ฐ€ * refactor: refreshToken ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ (#504) * docs: README ์—…๋ฐ์ดํŠธ (#505) * docs: README ์—…๋ฐ์ดํŠธ * docs: README ์—…๋ฐ์ดํŠธ * refactor: ๋ฆฌํ”„๋ ˆ์‹œ ์ฟ ํ‚ค > JWT ๋ณ€๊ฒฝ ๋ฐ ๋ฒ„๊ทธ + ๊ฐœ์„  ์‚ฌํ•ญ ๋ฐ˜์˜ (#506) * feat: LoginZipgoaAuth refresh token ์ถ”๊ฐ€ * refactor: ๊ธฐ์กด refresh token ๋กœ์ง์„ ์ฟ ํ‚ค > JWT๋กœ ๋ณ€๊ฒฝ * fix: FilterDialog Desktop์—์„œ position์ด ์•ˆ๋งž๋Š” ํ˜„์ƒ ์ˆ˜์ • * refactor: Template min-height ์ˆ˜์ • * refactor: FoodDetailWrapper padding bottom ์กฐ์ ˆ * refactor: Toast ๋†’์ด ์ˆ˜์ • * refactor: petFoodId type ์ˆ˜์ • * refactor: ๋ฆฌ๋ทฐ CRUD์— ๋”ฐ๋ผ SummaryChart ๋ณ„์ ์ด ๋™๊ธฐํ™” ๋˜๋„๋ก ์ˆ˜์ • * fix: UI ๊นจ์ง, ์Šค์ผˆ๋ ˆํ†ค UI ์ˆ˜์ • (#513) * fix: 0์‚ด์ด๋ฉด 1์‚ด ๋ฏธ๋งŒ์œผ๋กœ ๋œจ๋„๋ก ์ˆ˜์ •, ๋ฆฌ๋ทฐ ๋”๋ณด๊ธฐ ํด๋ฆญ์ด ์•ˆ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ (#512) * fix/#511: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ•˜๋‹จ margin ์ถ”๊ฐ€ - ๋ฆฌ๋ทฐ ๋”๋ณด๊ธฐ ํด๋ฆญ์ด ์•ˆ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * feat/#511: 0์‚ด์ด๋ฉด 1์‚ด ๋ฏธ๋งŒ์œผ๋กœ ๋œจ๋„๋ก ์ˆ˜์ • * feat/#511: ์ƒํ’ˆ์ƒ์„ธ ํ•˜๋‹จ margin ์ถ”๊ฐ€ * hotfix: ๋ฆฌ๋ทฐ, ํŽซ ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ผ ์ƒํƒœ ๋™๊ธฐํ™” (#514) * refactor: ๋ถˆํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ ๋ณ‘ํ•ฉ * fix: 1๋ถ„ ์ž˜๋ชป๋œ ์‹œ๊ฐ„ ์ˆ˜์ • * fix: ๋ฆฌ๋ทฐ ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ผ ์ƒํ’ˆ ๋ณ„์  ๋™๊ธฐํ™” * fix: ํŽซ ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ผ ํŽซ ํ”„๋กœํ•„ ์ •๋ณด ๋™๊ธฐํ™” --------- Co-authored-by: Sangwon Kang <[email protected]> Co-authored-by: wyc <[email protected]> Co-authored-by: Mooooooo <[email protected]> Co-authored-by: iamjooon2 <[email protected]> Co-authored-by: Seyeon Jeong <[email protected]> Co-authored-by: Kayoung Yoon <[email protected]>
1 parent 9b78a2f commit c99f38f

File tree

248 files changed

+5855
-2683
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

248 files changed

+5855
-2683
lines changed

โ€Ž.github/workflows/frontend-deploy-dev.ymlโ€Ž

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ name: Frontend Deploy to Dev
22

33
on:
44
push:
5-
branches: [develop]
6-
paths: frontend/**
5+
branches:
6+
- develop
7+
paths:
8+
- frontend/**
9+
- .github/**
710

811
jobs:
912
build-dockerfile:
@@ -18,8 +21,24 @@ jobs:
1821
with:
1922
node-version: '18.x'
2023

24+
- name: Cache Yarn global cache
25+
uses: actions/cache@v3
26+
with:
27+
path: '**/.yarn'
28+
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
29+
restore-keys: |
30+
${{ runner.os }}-yarn-
31+
32+
- name: Cache Yarn project cache
33+
uses: actions/cache@v3
34+
with:
35+
path: '**/.yarn/cache'
36+
key: ${{ runner.os }}-yarn-project-${{ hashFiles('**/yarn.lock') }}
37+
restore-keys: |
38+
${{ runner.os }}-yarn-project-
39+
2140
- name: Install dependencies
22-
run: yarn
41+
run: yarn install --immutable
2342

2443
- name: Set up QEMU
2544
uses: docker/setup-qemu-action@v2

โ€Ž.github/workflows/frontend-deploy-prod.ymlโ€Ž

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ name: Frontend Deploy to Prod
22

33
on:
44
push:
5-
branches: [main]
6-
paths: frontend/**
5+
branches:
6+
- main
7+
paths:
8+
- frontend/**
9+
- .github/**
710

811
jobs:
912
build-dockerfile:
@@ -18,8 +21,24 @@ jobs:
1821
with:
1922
node-version: '18.x'
2023

24+
- name: Cache Yarn global cache
25+
uses: actions/cache@v3
26+
with:
27+
path: '**/.yarn'
28+
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
29+
restore-keys: |
30+
${{ runner.os }}-yarn-
31+
32+
- name: Cache Yarn project cache
33+
uses: actions/cache@v3
34+
with:
35+
path: '**/.yarn/cache'
36+
key: ${{ runner.os }}-yarn-project-${{ hashFiles('**/yarn.lock') }}
37+
restore-keys: |
38+
${{ runner.os }}-yarn-project-
39+
2140
- name: Install dependencies
22-
run: yarn
41+
run: yarn install --immutable
2342

2443
- name: Set up QEMU
2544
uses: docker/setup-qemu-action@v2
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
name: Frontend Storybook Deploy To S3
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
paths:
8+
- frontend/**
9+
- .github/**
10+
11+
jobs:
12+
build:
13+
runs-on: ubuntu-22.04
14+
defaults:
15+
run:
16+
working-directory: ./frontend
17+
concurrency:
18+
group: ${{ github.workflow }}
19+
cancel-in-progress: true
20+
21+
steps:
22+
- name: Use repository source
23+
uses: actions/checkout@v3
24+
25+
- name: Use node.js
26+
uses: actions/setup-node@v3
27+
with:
28+
node-version: 18.x
29+
30+
- name: Cache Yarn global cache
31+
uses: actions/cache@v3
32+
with:
33+
path: '**/.yarn'
34+
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
35+
restore-keys: |
36+
${{ runner.os }}-yarn-
37+
38+
- name: Cache Yarn project cache
39+
uses: actions/cache@v3
40+
with:
41+
path: '**/.yarn/cache'
42+
key: ${{ runner.os }}-yarn-project-${{ hashFiles('**/yarn.lock') }}
43+
restore-keys: |
44+
${{ runner.os }}-yarn-project-
45+
46+
- name: Install dependencies
47+
run: yarn install --immutable
48+
49+
- name: Build Storybook
50+
run: yarn build:sb
51+
52+
- name: Upload storybook build files to temp artifact
53+
uses: actions/upload-artifact@v3
54+
with:
55+
name: Storybook
56+
path: frontend/storybook-static
57+
deploy:
58+
needs: build
59+
runs-on: front-dev-server
60+
steps:
61+
- name: Remove previous version app
62+
working-directory: .
63+
run: rm -rf frontend/storybook
64+
65+
- name: Download the built file to AWS EC2
66+
uses: actions/download-artifact@v3
67+
with:
68+
name: Storybook
69+
path: frontend/storybook
70+
71+
- name: Upload to S3
72+
run: |
73+
aws s3 sync frontend/storybook s3://2023-team-project/2023-zipgo/storybook --delete

โ€ŽREADME.mdโ€Ž

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,43 @@
1-
# 2023-zipgo
1+
<p align="center">
2+
<img src="https://github.com/woowacourse-teams/2023-zipgo/assets/24777828/e7eefb82-4bbf-47cd-a6ef-dc756d97c77d" alt="์ง‘๊ณ  README ๋ฐฐ๋„ˆ" />
3+
<p align="center">
4+
<img src="https://img.shields.io/badge/react-v18.2.0-9cf?logo=react" alt="react v18.2.0" />
5+
<img src="https://img.shields.io/badge/spring_boot-v3.1.1-green?logo=springbootโ€ alt="spring-boot v3.1.1" />
6+
<img src="https://img.shields.io/badge/typescript-v5.1.6-blue?logo=typescriptโ€ alt="typescript v5.1.6"/>
7+
<img src="https://img.shields.io/badge/mysql-v8.0.34-blue?logo=mysql" alt="mysql v8.0.34"/>
8+
</p>
29

3-
## ๋ฉค๋ฒ„
10+
**์ดˆ๋ณด ์ง‘์‚ฌ์˜ ๋ฐ˜๋ ค๋™๋ฌผ ์‹ํ’ˆ ์„ ํƒ์„ ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค**, ์ง‘์‚ฌ์˜๊ณ ๋ฏผ์ž…๋‹ˆ๋‹ค.
411

5-
| Frontend | Frontend | Frontend |
6-
| :--------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------: |
7-
| <img src="https://avatars.githubusercontent.com/u/24777828?v=4" width=100px alt="์ฒต์Šค"/> | <img src="https://avatars.githubusercontent.com/u/79056677?v=4" width=100px alt="๋…ธ์•„์ด์ฆˆ"/> | <img src="https://avatars.githubusercontent.com/u/72087183?v=4" width=100px alt="์—๋””"/> |
8-
| [์ฒต์Šค](https://github.com/HyeryongChoi) | [๋…ธ์•„์ด์ฆˆ](https://github.com/n0eyes) | [์—๋””](https://github.com/ksone02)
12+
์ „๋ฌธ๊ฐ€๋“ค์˜ ์‚ฌ๋ฃŒ ์„ ํƒ ๊ธฐ์ค€์€ ๋ฌด์—‡์ผ๊นŒ์š”?
913

14+
๋‹ค์–‘ํ•œ ์ „๋ฌธ๊ฐ€๋“ค์ด ์ธ์ •ํ•˜๋Š” [์ข‹์€ ์‚ฌ๋ฃŒ ์„ ํƒ ๊ธฐ์ค€]([https://translucent-mallet-426.notion.site/dae305b85c8146399d7de6a0e74b773d](https://www.notion.so/dae305b85c8146399d7de6a0e74b773d?pvs=21)), **์ง‘์‚ฌ์˜ ๊ณ ๋ฏผ**์—์„œ ํ™•์ธํ•˜์„ธ์š”!
1015

11-
| Backend | Backend | Backend | Backend |
12-
|:--------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------:|:----------------------------------:| :----------------------------------:|
13-
| <img src="https://avatars.githubusercontent.com/u/73161212?v=4" width=100px alt="๊ฐ€๋น„"/> | <img src="https://avatars.githubusercontent.com/u/76938931?v=4" width=100px alt="๋ฌด๋ฏผ"/> | <img src="https://avatars.githubusercontent.com/u/94087228?v=4" width=100px alt="๋ฒ ๋ฒ "/> | <img src="https://avatars.githubusercontent.com/u/61582017?v=4" width=100px alt="๋กœ์ง€"/> |
14-
| [๊ฐ€๋น„](https://github.com/iamjooon2) | [๋ฌด๋ฏผ](https://github.com/parkmuhyeun) | [๋ฒ ๋ฒ ](https://github.com/wonyongChoi05) | [๋กœ์ง€](https://github.com/kyY00n)
16+
- [zipgo.pet](https://zipgo.pet)
17+
- [zipgo.wiki](https://github.com/woowacourse-teams/2023-zipgo/wiki)
18+
19+
# Skills
20+
21+
### Frontend Tech Stack
22+
![Frontend Tech Stacks](https://github.com/woowacourse-teams/2023-zipgo/assets/24777828/4372f950-d29e-46a0-807c-79d78a7f6913)
23+
24+
### Backend Tech Stack
25+
![Backend Tech Stacks](https://github.com/woowacourse-teams/2023-zipgo/assets/24777828/a4643676-e669-43f5-9bb4-d2f4e92ed470)
26+
27+
# Infra Structure
28+
![Zigo Infra](https://github.com/woowacourse-teams/2023-zipgo/assets/24777828/09847ae1-2aac-41a1-9302-4a2b49a284e0)
29+
30+
31+
### Frontend Infra Structure
32+
![image](https://github.com/woowacourse-teams/2023-zipgo/assets/24777828/eac9e8af-2df3-486a-9812-6a39ab36eb4e)
33+
34+
### Backend Infra Structure
35+
![image](https://github.com/woowacourse-teams/2023-zipgo/assets/24777828/c6b9ec96-1301-4088-98d1-1e1ec1d3b334)
36+
37+
38+
# Member
39+
40+
| [์ฒต์Šค](https://github.com/HyeryongChoi) | [๋…ธ์•„์ด์ฆˆ](https://github.com/n0eyes) | [์—๋””](https://github.com/ksone02) | [๊ฐ€๋น„](https://github.com/iamjooon2) | [๋ฌด๋ฏผ](https://github.com/parkmuhyeun) | [๋ฒ ๋ฒ ](https://github.com/wonyongChoi05) | [๋กœ์ง€](https://github.com/kyY00n) |
41+
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |
42+
| <img src="https://avatars.githubusercontent.com/u/24777828?v=4" width=200px alt="์ฒต์Šค" /> | <img src="https://avatars.githubusercontent.com/u/79056677?v=4" width=200px alt="๋…ธ์•„์ด์ฆˆ" /> | <img src="https://avatars.githubusercontent.com/u/72087183?v=4" width=200px alt="์—๋””" /> | <img src="https://avatars.githubusercontent.com/u/73161212?v=4" width=200px alt="๊ฐ€๋น„" /> | <img src="https://avatars.githubusercontent.com/u/76938931?v=4" width=200px alt="๋ฌด๋ฏผ" /> | <img src="https://avatars.githubusercontent.com/u/94087228?v=4" width=200px alt="๋ฒ ๋ฒ "/> | <img src="https://avatars.githubusercontent.com/u/61582017?v=4" width=200px alt="๋กœ์ง€" /> |
43+
| Frontend | Frontend | Frontend | Backend | Backend | Backend | Backend |

โ€Žbackend/build.gradleโ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ dependencies {
5252
compileOnly 'org.projectlombok:lombok'
5353
annotationProcessor 'org.projectlombok:lombok'
5454

55+
implementation group: 'com.datadoghq', name: 'dd-trace-api', version: '1.21.0'
56+
5557
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
5658
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
5759
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
@@ -110,6 +112,7 @@ jacocoTestReport {
110112
'**/*Response*',
111113
'**/*Request*',
112114
'**/BaseTimeEntity',
115+
'**/KakaoOAuthClient',
113116
'**/*Dto*',
114117
'**/S3*',
115118
'**/*Interceptor*',
@@ -149,6 +152,7 @@ jacocoTestCoverageVerification {
149152
'*.*Exception*',
150153
'*.*Dto',
151154
'*.S3*',
155+
'*.KakaoOAuthClient*',
152156
'*.*Response',
153157
'*.*Request',
154158
'*.BaseTimeEntity',

โ€Žbackend/deploy-dev.shโ€Ž

Lines changed: 0 additions & 28 deletions
This file was deleted.

โ€Žbackend/deploy-prod.shโ€Ž

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package zipgo.aspect;
2+
3+
import org.springframework.web.context.request.RequestContextHolder;
4+
5+
import java.lang.reflect.InvocationHandler;
6+
import java.lang.reflect.Method;
7+
8+
public class ConnectionProxyHandler implements InvocationHandler {
9+
10+
private static final String QUERY_PREPARE_STATEMENT = "prepareStatement";
11+
12+
private final Object connection;
13+
private final QueryCounter queryCounter;
14+
15+
public ConnectionProxyHandler(Object connection, QueryCounter queryCounter) {
16+
this.connection = connection;
17+
this.queryCounter = queryCounter;
18+
}
19+
20+
@Override
21+
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
22+
countQuery(method);
23+
return method.invoke(connection, args);
24+
}
25+
26+
private void countQuery(Method method) {
27+
if (isPrepareStatement(method) && isRequest()) {
28+
queryCounter.increaseCount();
29+
}
30+
}
31+
32+
private boolean isPrepareStatement(Method method) {
33+
return method.getName().equals(QUERY_PREPARE_STATEMENT);
34+
}
35+
36+
private boolean isRequest() {
37+
return RequestContextHolder.getRequestAttributes() != null;
38+
}
39+
40+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package zipgo.aspect;
2+
3+
import lombok.Getter;
4+
import org.springframework.stereotype.Component;
5+
import org.springframework.web.context.annotation.RequestScope;
6+
7+
@Getter
8+
@Component
9+
@RequestScope
10+
public class QueryCounter {
11+
12+
private int count;
13+
14+
public void increaseCount() {
15+
count++;
16+
}
17+
18+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package zipgo.aspect;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.aspectj.lang.ProceedingJoinPoint;
5+
import org.aspectj.lang.annotation.Around;
6+
import org.aspectj.lang.annotation.Aspect;
7+
import org.springframework.stereotype.Component;
8+
9+
import java.lang.reflect.Proxy;
10+
11+
@Aspect
12+
@Component
13+
@RequiredArgsConstructor
14+
public class QueryCounterAop {
15+
16+
private final QueryCounter queryCounter;
17+
18+
@Around("execution(* javax.sql.DataSource.getConnection(..))")
19+
public Object getConnection(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
20+
Object connection = proceedingJoinPoint.proceed();
21+
22+
return Proxy.newProxyInstance(
23+
connection.getClass().getClassLoader(),
24+
connection.getClass().getInterfaces(),
25+
new ConnectionProxyHandler(connection, queryCounter)
26+
);
27+
}
28+
29+
}

0 commit comments

Comments
ย (0)