Skip to content

Commit c5404a5

Browse files
LEE DAEUNxlffm3swon3210Tanney-102binghe819
authored
[v2.1.0] pick-git ๋ฐฐํฌ (#740)
* [#95] ํ™ˆ ํ”ผ๋“œ ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ (#114) * feat: ํŽ˜์ด์ง•์„ ํ†ตํ•ด ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•˜๊ณ  DTO๋กœ ๋ณ€ํ™˜ (#95) * refactor: rebase ๋ณ‘ํ•ฉ์œผ๋กœ ์ธํ•œ ์ถฉ๋Œ ํ•ด๊ฒฐ (#95) * feat: ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ ํŽ˜์ด์ง• ๊ธฐ๋Šฅ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#95) * refactor: ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ ๊ธฐ๋Šฅ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ํƒœ๊ทธ DTO ์ •๋ฆฌ (#95) * refactor: Post ์กฐํšŒ RestAssured ๋ฉ”์„œ๋“œ ์ค‘๋ณต ๋ฆฌํŒฉํ† ๋ง (#95) * refactor: ๋ณ‘ํ•ฉ์œผ๋กœ ์ธํ•œ ์ถฉ๋Œ ํ•ด๊ฒฐ (#95) * refactor: batch size๋ฅผ ํ†ตํ•œ ํŽ˜์ด์ง• ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๊ฐœ์„  (#95) * refactor: ํŽ˜์ด์ง• fetch join ์ถ”๊ฐ€ (#95) * [#119] ์„œ๋ธŒ๋ชจ๋“ˆ ์ ์šฉ (#120) * chore: ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€ (#119) * chore: ์„œ๋ธŒ๋ชจ๋“ˆ ์ ์šฉ (#119) * chore: ์„œ๋ธŒ๋ชจ๋“ˆ ์ˆ˜์ • (#119) * [#87] HomeFeedPage ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#121) * refactor: Provider ์™€ Global Style ์ ์šฉ์„ App.tsx -> Index.tsx ์—์„œ ์ˆ˜ํ–‰ Co-authored-by: Tanney102 <Tanney-102@users.noreply.github.com> * feat: Profile ํŽ˜์ด์ง€ query ์ดˆ๊ธฐํ™” * refactor: CommentData ํƒ€์ž… ๋ณ€๊ฒฝ & Comment ์ปดํฌ๋„ŒํŠธ Props ์˜ CommentData ํƒ€์ž… ์˜์กด์„ฑ ์ œ๊ฑฐ * fix: PostItem ์ปดํฌ๋„ŒํŠธ์— ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ ๋ฒ„ํŠผ ์ถ”๊ฐ€ & Tag ๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” Chip ๋“ค ์ถ”๊ฐ€ - send.svg ์ถ”๊ฐ€ - PostItem ์Šคํƒ€์ผ๋ง ๋ณ€๊ฒฝ * chore: webpack ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋กœ๋” ๋ฃฐ ์ถ”๊ฐ€ * feat: TextEditor ์ปดํฌ๋„ŒํŠธ ๋ฐฐ๊ฒฝ์ƒ‰ prop ์ œ๊ฑฐ - ๊ธฐ๋ณธ border-radius ์ œ๊ฑฐ * feat: Button kind ๋ณ„ padding ๋ณ€ํ™” ์ ์šฉ * feat: ์ƒ์†์šฉ Styled Component ์ œ์ž‘ * feat: Header ์ปดํฌ๋„ŒํŠธ๋“ค์— ๋ชจ๋“ˆ Styled Component ์ƒ์† ์ ์šฉ * chore: .vscode ๋ฅผ gitignore ๋ชฉ๋ก์— ์ถ”๊ฐ€ * feat: PostItem ์ปดํฌ๋„ŒํŠธ ๋งˆํฌ์—… ๊ตฌ์กฐ ์ˆ˜์ • - ํ•„์š”ํ•˜์ง€ ์•Š์€ prop ํ• ๋‹น ์‚ญ์ œ * feat: Header ์ปดํฌ๋„ŒํŠธ์— ์ผ๊ด„์ ์œผ๋กœ ์ ์šฉํ•  ๋†’์ด๊ฐ’ ์ƒ์ˆ˜ํ™” * feat: PostItem ์Šคํƒ€์ผ ์†์„ฑ ์ˆ˜์ • * feat: Feed ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: HomeFeedPage ํŽ˜์ด์ง€ ๊ตฌํ˜„ * feat: FAILURE_MESSAGE & LIMIT ์ƒ์ˆ˜ ์ถ”๊ฐ€ - LIMIT ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ œํ•œํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜๋“ค์„ ๋‹ด์€ ๊ฐ์ฒด - FAILURE_MESSAGE ๋Š” ์š”์ฒญ ํ˜น์€ ๋™์ž‘์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์— ํ™œ์šฉ๋  ๋ฉ”์„ธ์ง€๋“ค์„ ๋‹ด์€ ๊ฐ์ฒด * feat: HomeFeedPage ๋ผ์šฐํŒ… ์ ์šฉ Co-authored-by: Tanney102 <Tanney-102@users.noreply.github.com> * [#118] ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ „๋žต์„ ์ ์šฉ ๋ฐ Entity์— id ๋™๋“ฑ์„ฑ ์ถ”๊ฐ€ (#122) * refactor: Authentication ์ปค์Šคํ…€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ตฌํ˜„ * refactor: User, Tag ์ปค์Šคํ…€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ตฌํ˜„ * refactor: Post, Comment ์ปค์Šคํ…€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ตฌํ˜„ * refactor: ์—”ํ‹ฐํ‹ฐ id ๋™๋“ฑ์„ฑ ์ •์˜ * refactor: ํ”Œ๋žซํผ ์ด๋‹ˆ์…œ V๋กœ ์ˆ˜์ • * fix: DataJpaTest์— Date ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์„ค์ • ์ถ”๊ฐ€ (#123) * [#89] Profile Page ๊ตฌํ˜„ (#126) * refactor: Provider ์™€ Global Style ์ ์šฉ์„ App.tsx -> Index.tsx ์—์„œ ์ˆ˜ํ–‰ Co-authored-by: Tanney102 <Tanney-102@users.noreply.github.com> * feat: Profile ํŽ˜์ด์ง€ query ์ดˆ๊ธฐํ™” * feat: Avatar ์ปดํฌ๋„ŒํŠธ name์˜ fontWeight์„ bold๋กœ ๋ณ€๊ฒฝ * feat: storybook dummy token ์ถ”๊ฐ€ * feat: mock data ๋ฐ routes ์ถ”๊ฐ€ * chore: svg ์•„์ด์ฝ˜ ์ถ”๊ฐ€ * fix: Profile interface ์ˆ˜์ • * Revert "feat: mock data ๋ฐ routes ์ถ”๊ฐ€" This reverts commit ea74c1bfda40c4bacf71283d193fad62927859d7. * feat: ProfileHeader ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#89) * feat: Profile ์ปดํฌ๋„ŒํŠธ์˜ api๋กœ์ง ๋ฐ query ๊ตฌํ˜„ * feat: Profile ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„(#89) * chore: assets/images์˜ ํŒŒ์ผ์„ .png, .jpg ๋กœ ํ†ต์ผ * chore: ์ด๋ฏธ์ง€ ํ™•์žฅ์ž์— ๋Œ€ํ•ด url loader์ถ”๊ฐ€ * feat: profile ๊ด€๋ จ mock api ์ถ”๊ฐ€ * feat: default Profile ์ด๋ฏธ์ง€๋ฅผ svg์—์„œ png ํŒŒ์ผ๋กœ ๋ณ€๊ฒฝ * refactor: profile page url์„ ํ•˜๋‚˜๋กœ ํ†ต์ผ * feat: main ํƒœ๊ทธ ์ถ”๊ฐ€ * feat: Profile์ปดํฌ๋„ŒํŠธ story ์ถ”๊ฐ€ * refactor: Profile url์— userType param ์ถ”๊ฐ€ * refactor: isMyProfile ์†์„ฑ์„ Profile์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์œ„๋กœ ์ด๋™ * feat: Tabs ์ปดํฌ๋„ŒํŠธ์— ํ•ด๋‹น ํƒญ์— ๋Œ€ํ•œ ์ปจํ…์ธ  ์ถ”๊ฐ€ * feat: LoggedInWrapper util๋กœ ๋ถ„๋ฆฌ * feat: ProfileFeed ์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„ * feat: mock data ์ถ”๊ฐ€ * feat: svg icon ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ œ๊ฑฐ ๋ฐ ๋ˆ„๋ฝ ์ฝ”๋“œ ๋ณด์ถฉ - ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ - ๋ˆ„๋ฝ๋œ key prop ์ถ”๊ฐ€ - tab ์Šคํƒ€์ผ ๋ณ€๊ฒฝ - ์ค‘๋ณต๋œ ์ฝ”๋“œ ์ œ๊ฑฐ * feat: ํ”„๋กœํ•„ ํ”ผ๋“œ์— ๋น„๋™๊ธฐ ๋กœ์ง ์ถ”๊ฐ€ * feat: GithubStatistics ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: Profile Page ๊ตฌํ˜„(#89) * refactor: ๋ถˆํ•„์š”ํ•œ interface ์ œ๊ฑฐ * feat: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ˆ˜์ • ๋ฐ ํ™ˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€ * feat: ๋ ˆ์ด์•„์›ƒ ์ˆ˜์ • * fix: ๋ˆ„๋ฝ๋œ accessToken ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ œ๊ฑฐ * feat: ์Šคํƒ€์ผ ๋ณ€๊ฒฝ - main widht๋ฅผ ๋ชจ๋ฐ”์ผ ์‚ฌ์ด์ฆˆ๋กœ ๊ณ ์ • - black button ํŒจ๋”ฉ ์กฐ์ • * feat: ๋ฐ๋ชจ๋ฅผ ์œ„ํ•ด ํ•ญ์ƒ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์ˆ˜์ • * feat: ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ ์ ์šฉ * refactor: optionalํ•œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ JSX๋กœ ์ฒ˜๋ฆฌ * refactor: error์— ๋”ฐ๋ฅธ ui ๋ถ„๊ธฐ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ๋ช…์‹œ Co-authored-by: SONG WON LEE <swon3210@gmail.com> Co-authored-by: Tanney102 <Tanney-102@users.noreply.github.com> * feat: ์  ํ‚จ์Šค ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ (#133) * refactor: ๋น„๋กœ๊ทธ์ธ ์œ ์ €๋กœ๋„ ํ™ˆ ํ”ผ๋“œ ์กฐํšŒ๋ฅผ ํ•˜๋„๋ก ์ˆ˜์ • (#134) (#135) * fix: ํŒŒ๋ผ๋ฏธํ„ฐ ์—†์ด routeํ•˜๋„๋ก url ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ • (#131) * fix: s3storage bean ํƒ์ƒ‰์„ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • (#136) * [hotfix] CORS ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#138) * fix: CORS ๋ฒ„๊ทธ ํ•ด๊ฒฐ * chore: security ์ˆ˜์ • * [#137] ๋‚ด ํ”„๋กœํ•„ ๊ณ„์ •์˜ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•œ๋‹ค. (#139) * feat: ๋‚ด ํ”„๋กœํ•„ ๊ณ„์ •์˜ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#137) * refactor: Jenkins ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ sleep์„ 3์—์„œ 10์œผ๋กœ ๋ณ€๊ฒฝ * [chore] api mocking ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ • (#140) * feat: ๋ฌดํ•œ์Šคํฌ๋กค ๊ตฌํ˜„ ์ „์ž„์„ ๊ฐ์•ˆํ•˜์—ฌ posts ์กฐํšŒ์‹œ page, limit mock * feat: login mock ์ œ๊ฑฐ * chore: ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ api proxy์—ฌ๋ถ€ ๋ถ„๊ธฐ * chore: ์šด์˜ ํ™˜๊ฒฝ ์„ค์ • ์„œ๋ธŒ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ (#143) (#144) * [#141] ๋‹ค๋ฅธ ์œ ์ €์˜ ํ”„๋กœํ•„ ๊ณ„์ •์˜ ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ (#142) * feat: ๋‹ค๋ฅธ ์œ ์ €์˜ ํ”„๋กœํ•„ ํ”ผ๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#141) * refactor: Pageable ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • (#141) * fix: PostRepository์— @param ์ถ”๊ฐ€ (#145) * [#146] ๋กœ๊ทธ์ธ ๋ฐ˜ํ™˜ ๊ฐ’์— ์œ ์ € ๋„ค์ž„ ์ถ”๊ฐ€ ๋ฐ ์ธํ„ฐ์…‰ํ„ฐ ๋งค์น˜ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ† ๋ง (#147) * refactor: PathPattern ์ธํ„ฐ์…‰ํ„ฐ URL๊ณผ Method๋ฅผ ํ†ตํ•ด ๋งค์น˜๋˜๋„๋ก ๋ฆฌํŒฉํ† ๋ง * refactor: ๋กœ๊ทธ์ธํ›„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ํ† ํฐ๊ณผ ํ•จ๊ป˜ ์œ ์ € ๋„ค์ž„๋„ ๋ณด๋‚ด๋„๋ก ์ˆ˜์ • * fix: ์‘๋‹ต ํŒŒ์‹ฑ ์—๋Ÿฌ ์ˆ˜์ • (#148) * [#129] follow ์ถ”๊ฐ€, ์ทจ์†Œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#149) * fix: ํฐํŠธ import ์œ„์น˜ ๋ณ€๊ฒฝ * feat: follow ์ถ”๊ฐ€, ์ทจ์†Œ ๊ธฐ๋Šฅ ๊ตฌํ˜„(#129) * feat: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง„์ž…์‹œ ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ * refactor: submodule์˜ remote branch ๊ธฐ์ค€์„ main์œผ๋กœ ๋ณ€๊ฒฝ (#155) master -> main * refactor: ์  ํ‚จ์Šจ ๋นŒ๋“œ ์œ ๋ฐœ ๋ฐฉ์‹ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#157) * [#152] ์‘๋‹ต ํŒŒ์‹ฑ ์—๋Ÿฌ ์ˆ˜์ • (#153) * fix: ์‘๋‹ต ํŒŒ์‹ฑ ์—๋Ÿฌ ์ˆ˜์ • * refactor: build.gradle ํ˜•์‹ ํ†ต์ผ * fix: ๋น„์ •์ƒ ํŒŒ์ผ ์ด๋ฆ„๋ฐ ํ™•์žฅ์ž ๋„์ถœ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#160) * [#163] ๋นŒ๋“œ ์—๋Ÿฌ๋ฅผ ํ™•์ธํ•˜๋‹ค. (#164) * fix: ๋น„์ •์ƒ ํŒŒ์ผ ์ด๋ฆ„๋ฐ ํ™•์žฅ์ž ๋„์ถœ ๋ฒ„๊ทธ ํ•ด๊ฒฐ * fix: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ import๋กœ ์ธํ•œ ๋นŒ๋“œ ์—๋Ÿฌ ์ˆ˜์ • * fix: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ import๋กœ ์ธํ•œ ๋นŒ๋“œ ์—๋Ÿฌ ์ˆ˜์ • (#165) * [#106] request DTO ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#151) * refactor: Client - Controller DTO๋ช… ๋ณ€๊ฒฝ (#106) * style: ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐœํ–‰ ์ˆ˜์ • (#106) * style: ๋ฉ”์†Œ๋“œ ๊ฐœํ–‰ ์ˆ˜์ • (#106) * test: ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ ๋ฐ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ (#106) * test: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์‚ญ์ œ (#106) * feat: ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€ (#143) * refactor: ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ ‘๊ทผ ์ œ์–ด์ž ๋ณ€๊ฒฝ (#106) * refactor: application-prod.yml ์‚ญ์ œ (#106) * refactor: ์ ์šฉ๋˜์ง€ ์•Š๋Š” Bean Validation ์‚ญ์ œ (#106) * refactor: request DTO์— Bean Validation ์ถ”๊ฐ€ (#106) * refactor: application-prod.yml ์‚ญ์ œ (#106) * refactor: ์„œ๋ธŒ๋ชจ๋“ˆ ์ˆ˜์ • * refactor: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ˆ˜์ • (#106) * refactor: DTO ๋„ค์ด๋ฐ ์ˆ˜์ • (#106) * [#169] ํŒŒ์ผ ์ฃผ์†Œ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • (#170) * fix: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ import๋กœ ์ธํ•œ ๋นŒ๋“œ ์—๋Ÿฌ ์ˆ˜์ • * fix: ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * refactor:์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ * [fix] ํ”„๋ก ํŠธ์—”๋“œ ์ด์Šˆ ์ˆ˜์ • (#171) * fix: ์ƒˆ๋กœ๊ณ ์นจ์‹œ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์ˆ˜์ • * fix: ์˜คํƒ€์ˆ˜์ • * fix: query์— ์ž๊ธฐ ์ด๋ฆ„์œผ๋กœ profileํŽ˜์ด์ง€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ redirect * feat: ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ๋นˆ ๊ฒŒ์‹œ๋ฌผ ํ‘œ์‹œ ์ถ”๊ฐ€ * [fix] ํ”„๋ก ํŠธ์—”๋“œ ๋ฒ„๊ทธ ์ˆ˜์ • (#172) * refactor: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * fix: url ์˜คํƒ€ ์ˆ˜์ • * fix: ๊ฒŒ์‹œ๋ฌผ ํƒœ๊ทธ ๋ฌธ์ž์—ด ํŒŒ์‹ฑ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * [#173] Feature/loader and infinite scroll container (#175) * feat: Loader ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: InfiniteScrollContainer ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * [#90] AddPostPage ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#176) * feat: AddPostPage ๊ตฌ์„ฑ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - PostAddStepHeader ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - PostContentUploader ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - RepositorySelector ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - TagInputForm ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - githube ์•„์ด์ฝ˜ ์ถ”๊ฐ€ * feat: separatorColor theme ์ƒ‰์ƒ ์ถ”๊ฐ€ * feat: AddPostPage ๊ตฌํ˜„ - ImageUploader ์ปดํฌ๋„ŒํŠธ prop ๋ช… ๋ณ€๊ฒฝ - ๊ฒŒ์‹œ๋ฌผ ์—…๋กœ๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋“ค์˜ ํƒ€์ž… ์ถ”๊ฐ€ - ๊ฒŒ์‹œ๋ฌผ ์—…๋กœ๋“œ์— ์‚ฌ์šฉ๋˜๋Š” API_URL, GITHUB_URL, STEPS ์ƒ์ˆ˜ ์ถ”๊ฐ€ - PostAddDataContext & PostAddStepContext ์ถ”๊ฐ€ * fix: Noto Sans ์›นํฐํŠธ๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * feat: requestAddPost ์š”์ฒญ ํ•จ์ˆ˜ ๊ตฌํ˜„ * feat: Input ์ปดํฌ๋„ŒํŠธ์— name prop ์ถ”๊ฐ€ * feat: LIMIT ์ƒ์ˆ˜ ๊ฐ์ฒด์— FEED_COUNT_PER_FETCH ์†์„ฑ ์ถ”๊ฐ€ * feat: requestGetHomeFeedPosts ์š”์ฒญ ํ•จ์ˆ˜์— ๊ธฐ๋ณธ pageIndex ์ œ๊ณต * feat: PostAddDataContextProvider ์ ์šฉ ์ง€์  ๋ณ€๊ฒฝ App -> AddPostPage ์ปดํฌ๋„ŒํŠธ ๋ฐ”๋กœ ์œ„ * feat: ํƒœ๊ทธ ์ถ”๊ฐ€ ํ›„ ํƒœ๊ทธ ์ž…๋ ฅ Input ๋‚ด์šฉ์ด ๋น„์›Œ์ง€๋„๋ก ์„ค์ • * [#161] ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” API ํ† ํฐ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜์ • (#167) * refactor: ํ‘œํ˜„ ๊ณ„์ธต๊ณผ ์‘์šฉ ๊ณ„์ธต์˜ ๋ฐ˜ํ™˜ํ•˜๋Š” DTO ๋„ค์ด๋ฐ ํ†ต์ผ * refactor: ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” API ํ† ํฐ ๊ฒ€์ฆ ๋กœ์ง์„ ์ˆ˜์ •ํ•œ๋‹ค. - ๊ธฐ์กด ๋กœ์ง: ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” API (ex. /api/posts)์—์„œ ํ† ํฐ์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ GuestUser๋กœ ์ฒ˜๋ฆฌ. - ์ˆ˜์ • ๋กœ์ง: ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” API (ex. /api/posts)์—์„œ ํ† ํฐ์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ 401 ์˜ˆ์™ธ ๋ฐœ์ƒ. * chore: ์„ค์ • ์ˆ˜์ • * refactor: ์ƒ์ˆ˜ํ™” * refactor: ํฌ๋งทํŒ… ์ˆ˜์ • * [#128] Infinite Scroll ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#178) * feat: Infinite Scroll ๊ธฐ๋Šฅ ๊ตฌํ˜„ * feat: ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ fetch ๋ฐ›๋„๋ก ์ˆ˜์ • * feat: TagFeedPage & UserFeed ํŽ˜์ด์ง€ ์ถ”๊ฐ€ - ๊ธฐ๋Šฅ ๊ตฌํ˜„ X - PAGE_URL ์ƒ์ˆ˜ ์ถ”๊ฐ€ * feat: ๊ธฐ์กด์˜ ํ‰๋ฌธ์œผ๋กœ ์ œ๊ณต๋˜๋˜ userName ์„ ๋กœ๊ทธ์ธ ๋œ ์œ ์ € ์ด๋ฆ„์ด ์ œ๊ณต๋˜๋„๋ก ๋ณ€๊ฒฝ * [#177] ๊ฒŒ์‹œ๋ฌผ ์‹œ๊ฐ„ ํ˜•์‹ ์ถ”๊ฐ€ (#180) * feat: ๊ฒŒ์‹œ๋ฌผ ์‹œ๊ฐ„ ์ •๋ณด ์ˆ˜์ • * fix: ์‹œ๊ฐ„ ํ˜•์‹ ์ˆ˜์ • * [#181] ์š”์ฒญ์— userName ์ด ๋™์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ (#182) * feat: Infinite Scroll ๊ธฐ๋Šฅ ๊ตฌํ˜„ * feat: ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ fetch ๋ฐ›๋„๋ก ์ˆ˜์ • * feat: TagFeedPage & UserFeed ํŽ˜์ด์ง€ ์ถ”๊ฐ€ - ๊ธฐ๋Šฅ ๊ตฌํ˜„ X - PAGE_URL ์ƒ์ˆ˜ ์ถ”๊ฐ€ * feat: ๊ธฐ์กด์˜ ํ‰๋ฌธ์œผ๋กœ ์ œ๊ณต๋˜๋˜ userName ์„ ๋กœ๊ทธ์ธ ๋œ ์œ ์ € ์ด๋ฆ„์ด ์ œ๊ณต๋˜๋„๋ก ๋ณ€๊ฒฝ * fix: ์š”์ฒญ์— userName ์ด ๋™์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ํ•„์š”์—†๋Š” console.log ์ œ๊ฑฐ * fix: userName ๊ณผ repositoryName ์ด ์—†์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ fetch ๋˜๋Š” ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐ (#186) - userName ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ๋ฌธ์ œ ํ•ด๊ฒฐ * refactor: ํ™ˆํ”ผ๋“œ๋ฅผ ์ตœ์‹  ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋„๋ก ์ˆ˜์ • (#189) (#191) * [#162] ํƒœ๊ทธ ์ถ”์ถœ API ๋ช…์„ธ ๋ณ€๊ฒฝ (#166) * refactor: ํƒœ๊ทธ ์ถ”์ถœ api์—์„œ name ์ œ์™ธ (#162) * [#106] request DTO ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#151) * refactor: Client - Controller DTO๋ช… ๋ณ€๊ฒฝ (#106) * style: ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐœํ–‰ ์ˆ˜์ • (#106) * style: ๋ฉ”์†Œ๋“œ ๊ฐœํ–‰ ์ˆ˜์ • (#106) * test: ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ ๋ฐ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ (#106) * test: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์‚ญ์ œ (#106) * feat: ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€ (#143) * refactor: ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ ‘๊ทผ ์ œ์–ด์ž ๋ณ€๊ฒฝ (#106) * refactor: application-prod.yml ์‚ญ์ œ (#106) * refactor: ์ ์šฉ๋˜์ง€ ์•Š๋Š” Bean Validation ์‚ญ์ œ (#106) * refactor: request DTO์— Bean Validation ์ถ”๊ฐ€ (#106) * refactor: application-prod.yml ์‚ญ์ œ (#106) * refactor: ์„œ๋ธŒ๋ชจ๋“ˆ ์ˆ˜์ • * refactor: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ˆ˜์ • (#106) * refactor: DTO ๋„ค์ด๋ฐ ์ˆ˜์ • (#106) * [#169] ํŒŒ์ผ ์ฃผ์†Œ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • (#170) * fix: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ import๋กœ ์ธํ•œ ๋นŒ๋“œ ์—๋Ÿฌ ์ˆ˜์ • * fix: ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * refactor:์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ * [fix] ํ”„๋ก ํŠธ์—”๋“œ ์ด์Šˆ ์ˆ˜์ • (#171) * fix: ์ƒˆ๋กœ๊ณ ์นจ์‹œ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์ˆ˜์ • * fix: ์˜คํƒ€์ˆ˜์ • * fix: query์— ์ž๊ธฐ ์ด๋ฆ„์œผ๋กœ profileํŽ˜์ด์ง€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ redirect * feat: ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ๋นˆ ๊ฒŒ์‹œ๋ฌผ ํ‘œ์‹œ ์ถ”๊ฐ€ * [fix] ํ”„๋ก ํŠธ์—”๋“œ ๋ฒ„๊ทธ ์ˆ˜์ • (#172) * refactor: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * fix: url ์˜คํƒ€ ์ˆ˜์ • * fix: ๊ฒŒ์‹œ๋ฌผ ํƒœ๊ทธ ๋ฌธ์ž์—ด ํŒŒ์‹ฑ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * [#173] Feature/loader and infinite scroll container (#175) * feat: Loader ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: InfiniteScrollContainer ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * [#90] AddPostPage ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#176) * feat: AddPostPage ๊ตฌ์„ฑ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - PostAddStepHeader ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - PostContentUploader ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - RepositorySelector ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - TagInputForm ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - githube ์•„์ด์ฝ˜ ์ถ”๊ฐ€ * feat: separatorColor theme ์ƒ‰์ƒ ์ถ”๊ฐ€ * feat: AddPostPage ๊ตฌํ˜„ - ImageUploader ์ปดํฌ๋„ŒํŠธ prop ๋ช… ๋ณ€๊ฒฝ - ๊ฒŒ์‹œ๋ฌผ ์—…๋กœ๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋“ค์˜ ํƒ€์ž… ์ถ”๊ฐ€ - ๊ฒŒ์‹œ๋ฌผ ์—…๋กœ๋“œ์— ์‚ฌ์šฉ๋˜๋Š” API_URL, GITHUB_URL, STEPS ์ƒ์ˆ˜ ์ถ”๊ฐ€ - PostAddDataContext & PostAddStepContext ์ถ”๊ฐ€ * fix: Noto Sans ์›นํฐํŠธ๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * feat: requestAddPost ์š”์ฒญ ํ•จ์ˆ˜ ๊ตฌํ˜„ * feat: Input ์ปดํฌ๋„ŒํŠธ์— name prop ์ถ”๊ฐ€ * feat: LIMIT ์ƒ์ˆ˜ ๊ฐ์ฒด์— FEED_COUNT_PER_FETCH ์†์„ฑ ์ถ”๊ฐ€ * feat: requestGetHomeFeedPosts ์š”์ฒญ ํ•จ์ˆ˜์— ๊ธฐ๋ณธ pageIndex ์ œ๊ณต * feat: PostAddDataContextProvider ์ ์šฉ ์ง€์  ๋ณ€๊ฒฝ App -> AddPostPage ์ปดํฌ๋„ŒํŠธ ๋ฐ”๋กœ ์œ„ * feat: ํƒœ๊ทธ ์ถ”๊ฐ€ ํ›„ ํƒœ๊ทธ ์ž…๋ ฅ Input ๋‚ด์šฉ์ด ๋น„์›Œ์ง€๋„๋ก ์„ค์ • * [#161] ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” API ํ† ํฐ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜์ • (#167) * refactor: ํ‘œํ˜„ ๊ณ„์ธต๊ณผ ์‘์šฉ ๊ณ„์ธต์˜ ๋ฐ˜ํ™˜ํ•˜๋Š” DTO ๋„ค์ด๋ฐ ํ†ต์ผ * refactor: ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” API ํ† ํฐ ๊ฒ€์ฆ ๋กœ์ง์„ ์ˆ˜์ •ํ•œ๋‹ค. - ๊ธฐ์กด ๋กœ์ง: ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” API (ex. /api/posts)์—์„œ ํ† ํฐ์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ GuestUser๋กœ ์ฒ˜๋ฆฌ. - ์ˆ˜์ • ๋กœ์ง: ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” API (ex. /api/posts)์—์„œ ํ† ํฐ์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ 401 ์˜ˆ์™ธ ๋ฐœ์ƒ. * chore: ์„ค์ • ์ˆ˜์ • * refactor: ์ƒ์ˆ˜ํ™” * refactor: ํฌ๋งทํŒ… ์ˆ˜์ • * [#128] Infinite Scroll ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#178) * feat: Infinite Scroll ๊ธฐ๋Šฅ ๊ตฌํ˜„ * feat: ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ fetch ๋ฐ›๋„๋ก ์ˆ˜์ • * feat: TagFeedPage & UserFeed ํŽ˜์ด์ง€ ์ถ”๊ฐ€ - ๊ธฐ๋Šฅ ๊ตฌํ˜„ X - PAGE_URL ์ƒ์ˆ˜ ์ถ”๊ฐ€ * feat: ๊ธฐ์กด์˜ ํ‰๋ฌธ์œผ๋กœ ์ œ๊ณต๋˜๋˜ userName ์„ ๋กœ๊ทธ์ธ ๋œ ์œ ์ € ์ด๋ฆ„์ด ์ œ๊ณต๋˜๋„๋ก ๋ณ€๊ฒฝ * [#177] ๊ฒŒ์‹œ๋ฌผ ์‹œ๊ฐ„ ํ˜•์‹ ์ถ”๊ฐ€ (#180) * feat: ๊ฒŒ์‹œ๋ฌผ ์‹œ๊ฐ„ ์ •๋ณด ์ˆ˜์ • * fix: ์‹œ๊ฐ„ ํ˜•์‹ ์ˆ˜์ • * [#181] ์š”์ฒญ์— userName ์ด ๋™์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ (#182) * feat: Infinite Scroll ๊ธฐ๋Šฅ ๊ตฌํ˜„ * feat: ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ fetch ๋ฐ›๋„๋ก ์ˆ˜์ • * feat: TagFeedPage & UserFeed ํŽ˜์ด์ง€ ์ถ”๊ฐ€ - ๊ธฐ๋Šฅ ๊ตฌํ˜„ X - PAGE_URL ์ƒ์ˆ˜ ์ถ”๊ฐ€ * feat: ๊ธฐ์กด์˜ ํ‰๋ฌธ์œผ๋กœ ์ œ๊ณต๋˜๋˜ userName ์„ ๋กœ๊ทธ์ธ ๋œ ์œ ์ € ์ด๋ฆ„์ด ์ œ๊ณต๋˜๋„๋ก ๋ณ€๊ฒฝ * fix: ์š”์ฒญ์— userName ์ด ๋™์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ํ•„์š”์—†๋Š” console.log ์ œ๊ฑฐ * fix: userName ๊ณผ repositoryName ์ด ์—†์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ fetch ๋˜๋Š” ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐ (#186) - userName ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ๋ฌธ์ œ ํ•ด๊ฒฐ * refactor: ํ™ˆํ”ผ๋“œ๋ฅผ ์ตœ์‹  ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋„๋ก ์ˆ˜์ • (#189) (#191) * refactor: ํƒœ๊ทธ ์ถ”์ถœ api์—์„œ name ์ œ์™ธ (#162) Co-authored-by: DAEUN LEE <leede0418@gmail.com> Co-authored-by: Minsung Son <sns2831@gmail.com> Co-authored-by: Tanney102 <57767891+Tanney-102@users.noreply.github.com> Co-authored-by: SONG WON LEE <swon3210@gmail.com> Co-authored-by: binghe819 <56860124+binghe819@users.noreply.github.com> * [#192] ํ”„๋กœํ•„ ํŽ˜์ด์ง€ 401์—๋Ÿฌ ๋ฏธ์ฒ˜๋ฆฌ ์ด์Šˆ ํ•ด๊ฒฐ (#196) * refactor: ๋ณ€์ˆ˜ ์ด๋ฆ„ ์ˆ˜์ •, userName์„ username์œผ๋กœ ํ†ต์ผ * refactor: localStorage๊ด€๋ จ ๋กœ์ง ๋ณ€๊ฒฝ * fix: ์œ ํšจํ•˜์ง€ ์•Š์€ ํ† ํฐ์— ๋Œ€ํ•ด ํ”„๋กœํ•„ ์ •๋ณด ๋ฆฌํŒจ์น˜ * refactor: storage ๋ชจ๋“ˆ์ด ๊ฐ ํ•จ์ˆ˜๋ฅผ export ํ•˜๋„๋ก ๋ณ€๊ฒฝ * fix: ์œ ํšจํ•˜์ง€ ์•Š์€ ํ† ํฐ์— ๋Œ€ํ•ด ํ”„๋กœํ•„ ํ”ผ๋“œ ๋ฆฌํŒจ์น˜ * fix: github tas api url ๋ณ€๊ฒฝ ๋ฐ˜์˜ * refactor: ํƒ€์ž…๊ฐ€๋“œ ์ถ”๊ฐ€ * [#179] Github Repositories ์กฐํšŒ ๊ธฐ๋Šฅ ์ˆ˜์ • (#195) * refactor: ์„œ๋ธŒ๋ชจ๋“ˆ ์ˆ˜์ • * refactor: Github Repository URL๋„ ํ•จ๊ป˜ ์‘๋‹ต (#179) * refactor: htmlUrl -> url ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (#179) * [#197] ๋ ˆ์ด์•„์›ƒ ๋ฐ UI๋ฅผ ๊ฐœ์„  (#198) * feat: ๋” ์ด์ƒ ๋ถˆ๋Ÿฌ์˜ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด Loader ๊ฐ€ ์‚ฌ๋ผ์ง€๋„๋ก Infinite Scroll ๊ธฐ๋Šฅ ์ˆ˜์ • - Feed ๋ฐ์ดํ„ฐ๋ฅผ Page ์—์„œ ๋„˜๊ฒจ์ฃผ๋„๋ก ์žฌ์„ค์ • - ์„ธ๋ถ€ ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์€ TagFeedPage, UserFeedPage ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€(HomeFeedPage ์™€ ํ˜„์žฌ๋Š” ๊ธฐ๋Šฅ ๋™์ผ) - ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์‹œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ผ PageLoading ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: ๋ชจ๋“  ul ํƒœ๊ทธ์˜ margin์„ 0์œผ๋กœ ํ•˜๋Š” ์ „์—ญ ์Šคํƒ€์ผ๋ง ์ ์šฉ * feat: ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์‹œ PageLoading ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋„๋ก ์„ค์ • - Profile, RepositorySelector, TagInputForm ์ปดํฌ๋„ŒํŠธ์— ์ ์šฉ * feat: PostItem ์ปดํฌ๋„ŒํŠธ padding ๊ฐ’ ์ˆ˜์ • * feat: ๋ชจ๋ฐ”์ผ ๋ฐ˜์‘ํ˜• break point ์žฌ์„ค์ • & ๊ฐ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์˜ Container ์— Page ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ ์ ์šฉ * feat: RepositorySelector ์ปดํฌ๋„ŒํŠธ์˜ RepositoryList ์— ๊ณ ์ • ๋†’์ด ๊ฐ’ ์ ์šฉ - ๋‚ด์šฉ๋ฌผ์ด ๋†’์ด๊ฐ’์„ ์ดˆ๊ณผํ•  ์‹œ ์Šคํฌ๋กค์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ์„ค์ • * feat: ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ ์ถ”๊ฐ€ (#203) * [#194] REST Docs ์ ์šฉ (#201) * feat: ๋ฌธ์„œํ™” ์ฝ”๋“œ ์ž‘์„ฑ * feature: ๋ฌธ์„œํ™” ๋กœ์ง ๋ฐ ๊ธฐ๋ฐ˜ ํŒŒ์ผ ๊ตฌ์„ฑ * [#207] ๋ฐฐํฌ ์ž๋™ํ™” ๋ฒ„๊ทธ ์ˆ˜์ • (#208) * refactor: ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ stage๋กœ ํ•ฉ์นจ. * refactor: ๊ธฐ์กด process ์ œ๊ฑฐ ์‹œ SIGKILL๋กœ ๋ณ€๊ฒฝ * fix: ๋ˆ„๋ฝ๋œ ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€. * [#91] Snackbar ๊ตฌํ˜„ (#209) * fix: ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„๊ณผ ์ค‘๋ณต๋˜๋Š” interface ์ด๋ฆ„ ๋ณ€๊ฒฝ * feat: ์Šค๋‚ต๋ฐ” ๊ตฌํ˜„ * chore: ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ api url ๋ถ„๊ธฐ (#211) * chore: ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ ์ปค๋งจ๋“œ ์ˆ˜์ • (#214) * [#200, #205] ํƒœ๊ทธ ๊ด€๋ จ ์ด์Šˆ ํ•ด๊ฒฐ (#216) * fix: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์‹œ, ์ดˆ๊ธฐ์— ๋ถˆ๋Ÿฌ์˜จ ๊ธฐ๋ณธ tag ๋“ค์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ * feat: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์ค‘ ํƒœ๊ทธ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * fix: break point ์— ๋งž๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ตœ๋Œ€ ๋„ˆ๋น„๋ฅผ 375px -> 425px ๋กœ ์กฐ์ • * [#217, #110] ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ์ •๋ฆฌ (#218) * chore: ์ธ์ˆ˜/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฐ common(ํ”ฝ์Šค์ณ ํŒฉํ† ๋ฆฌ, mock api) ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ (#217) * chore: ๊ธฐ์กด ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋“ค์„ unit ํ•˜์œ„๋กœ ์ด๋™ (#217) * refactor: Tag ๊ด€๋ จ Github ํ”Œ๋žซํผ ํด๋ž˜์Šค ์ด๋ฆ„์— Tag ๋ช…์‹œ (#217) * chore: Test ๊ด€๋ จ Configuration ํ†ต์ผ ๋ฐ Github API ๊ด€๋ จ ํด๋ž˜์Šค ํ”„๋กœํ•„ ์„ค์ • (#217) * chore: ๋กฌ๋ณต ์˜์กด์„ฑ ์ถ”๊ฐ€ (#217) * refactor: TestConfiguration ํด๋ž˜์Šค๋ช…์— Infrastructure ๋ช…์‹œ (#217) * refactor: PostFactory ๋นŒ๋” ํŒจํ„ด ์ ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ * refactor: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: UserFactory ๋นŒ๋” ํŒจํ„ด ์ ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ * refactor: PostFactory ์˜๋ฏธ ์—†๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ * refactor: Test Configuration ์ด๋ฆ„ ๋ณ€๊ฒฝ * refactor: user fixture setUp๋กœ์ง ์œ„์น˜ ๋ณ€๊ฒฝ * refactor: DTO Builder ์–ด๋…ธํ…Œ์ด์…˜ ์ ์šฉ ๋ฐ Builder ์ œ๊ณต ํด๋ž˜์Šค ์ œ๊ฑฐ * refactor: gradle.build ํŒŒ์ผ ์ •๋ฆฌ * style: ์˜๋ฏธ์—†๋Š” ๊ณต๋ฐฑ ์ œ๊ฑฐ Co-authored-by: Minsung <sns2831@gmail.com> * [#223, #229] API ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜ ๋ฐ Post ์ค‘๋ณต์ œ๊ฑฐ (#235) * fix: API ๋ช…์„ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜ - image์™€ imageUrl์— ๋Œ€ํ•œ ํ‚ค๊ฐ’ ๊ตฌ๋ถ„ - public repo๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” api ๋ช…์—์„œ username ์ œ๊ฑฐ * refactor: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * feat: ์ƒˆ๋กœ ํŒจ์น˜๋œ post ์ค‘๋ณต์ œ๊ฑฐ * fix: InfiniteScrollContainer effect ์˜์กด์„ฑ ์ˆ˜์ • * refactor: Snackbar ์ปดํฌ๋„ŒํŠธ์˜ ์œ„์น˜๋ฅผ @layout์œผ๋กœ ๋ณ€๊ฒฝ * fix: post interface ์ˆ˜์ • * refactor: ์Šค๋‚ต๋ฐ” ๋ฉ”์‹œ์ง€๋ฅผ push ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋” ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ * fix: ์ค‘๋ณต๋œ key prop ์ˆ˜์ • * feat: http error ์ฒ˜๋ฆฌ ์œ ํ‹ธ ๊ตฌํ˜„ * refactor: HomeFeedPage์˜ ์ƒํƒœ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * [#204] Issue ๋ฐ PR Template ์ˆ˜์ • (#239) * docs: PR ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • * docs: ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ๋“ฑ๋ก * docs: ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • * docs: ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • * [#222] ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ํ”ผ๋“œ ๋ฒ„๊ทธ ์ˆ˜์ • (#242) * refactor: ์ค‘๋ณต๋œ ๊ฒŒ์‹œ๋ฌผ์„ ์ œ๊ฑฐํ•˜๋Š” ๋กœ์ง์„ util๋กœ ๋ถ„๋ฆฌ * feat: ํ”„๋กœํ•„ ํ”ผ๋“œ์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * refactor: profile page์˜ ์ƒํƒœ๋ฅผ context๋กœ ๋ถ„๋ฆฌ * feat: ํŒ”๋กœ์šฐ ๋ฒ„ํŠผ์— ๋กœ๋”ฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ * refactor: ProfilePage ๊ตฌ์กฐ ๊ฐœ์„  - ํ›…์„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ์ˆ˜์ค€์„ ์ž‘์€ ๋ฒ”์œ„๋กœ ์ˆ˜์ • - context๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ * [#219] ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ, ํ•ธ๋“ค๋ง ๊ตฌํ˜„ (#241) * feat: BackDrop & MessageModalPortal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - index.html ์— div#modal ํƒœ๊ทธ ์ถ”๊ฐ€ - MessageModalPortal ์€ ๋ฆฌ์•กํŠธ ํฌํ„ธ์„ ์ ์šฉํ•˜์—ฌ ๊ตฌํ˜„ - ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๋„๋ก useMessageModal ์ปค์Šคํ…€ ํ›… ์ œ์ž‘ * refactor: ํ•„์š” ์—†๋Š” import ๊ตฌ๋ฌธ ์‚ญ์ œ * feat: PostContentUploader ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ImageSlider & ImageUploader ์™€ TextEditor ๊ฐ„์˜ margin ์ถ”๊ฐ€ * feat: ์ƒˆ๋กœ์šด limits, messages ์ƒ์ˆ˜ ์ถ”๊ฐ€ - message -> messages ๋กœ ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ * feat: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ step ๋ผ์šฐํŒ… path ์— ํ•œ๊ธ€์ด ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * fix: ํ•„์š”ํ•œ ๋ณ€์ˆ˜ import ๊ฒฝ๋กœ ์ˆ˜์ • * feat: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์ค‘ ๊ฐ๊ฐ์˜ ์—๋Ÿฌ์— ๋Œ€ํ•œ ์ด์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๊ตฌํ˜„ - PostAddFormData -> PostUploadData์œผ๋กœ ๋ณ€๊ฒฝ - ์ด์šฉ์ž์˜ ๊นƒํ—ˆ๋ธŒ ์ƒ์— ์˜ฌ๋ผ์™€ ์žˆ๋Š” public repository ๊ฐ€ ์—†์œผ๋ฉด ํ”ผ๋“œ๋ฐฑ ํ›„ ์ด์ „ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œํ‚จ๋‹ค. - repository ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€ & ๊ธ€ ์ž‘์„ฑ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ ค ํ•œ๋‹ค๋ฉด ์ด๋ฅผ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์ •ํ•ด์ง„ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ํ…์ŠคํŠธ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง„ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ๋“ค์–ด๊ฐ„ ํƒœ๊ทธ๋“ค ์ค‘ ์ค‘๋ณต์ด ์žˆ์œผ๋ฉด ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ํƒœ๊ทธ์— '-', '_' ๋ฅผ ์ œ์™ธํ•œ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ๋“ค์–ด๊ฐ”๋‹ค๋ฉด ์ด๋ฅผ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. * feat: ErrorResponse ํƒ€์ž… ์ƒ์„ฑ ๋ฐ ์ ์šฉ * feat: API ์š”์ฒญ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ตฌํ˜„ * [#232] ์œ ์ € ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#249) * refactor: ์ฝ”๋“œ ์ •๋ฆฌ (#232) * refactor: ์‚ฌ์šฉ์ž ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์ถ”๊ฐ€ (#232) - ๊ฒŒ์ŠคํŠธ์ธ ๊ฒฝ์šฐ UnauthorizedException ๋ฐœ์ƒ * refactor: DTO ๊ด€๋ จ ๋„ค์ด๋ฐ ์ •๋ฆฌ (#232) * test: ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: Data JPA ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ๋ถˆํ•„์š”ํ•œ ์ƒ์ˆ˜ ์‚ญ์ œ (#232) * test: ์œ ์ € ์ด๋ฆ„ ๋ณ€๊ฒฝ (#232) - loginUser/guestUser -> testUser๋กœ ํ†ต์ผ * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#232) * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * refactor: Builder ์‚ฌ์šฉ (#232) * refactor: Follow ๊ฐ์ฒด์— ์ฑ…์ž„ ์œ„์ž„ (#232) * test: ์ ‘๊ทผ ์ œ์–ด์ž ์ˆ˜์ • (#232) * refactor: DTO ๋ฆฌํŒฉํ† ๋ง (#232) * test: ๋ถˆํ•„์š”ํ•œ ํ•„๋“œ ์‚ญ์ œ (#232) * test: WebEnvironment ์˜ต์…˜์„ RANDOM_PORT -> NONE์œผ๋กœ ๋ณ€๊ฒฝ (#232) * test: @SpringBootTest -> @DataJpaTest ๋ณ€๊ฒฝ (#232) * refactor: API ๋ช…์„ธ์— ๋งž๊ฒŒ ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ (#232) - image -> imageUrl ๋ณ€๊ฒฝ * [#240] Authentication ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#247) * test: authentication ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#240) * test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#240) * refactor: ๊นƒํ—™ ์ธ์ฆ ์˜ˆ์™ธ ๋ณ€๊ฒฝ (#240) * test: Authentication ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ (#240) * test: HttpHeaders.AUTHORIZATION ์œผ๋กœ ๋ณ€๊ฒฝ (#240) * [#226, #227] ํ”„๋กœํ•„ ์ˆ˜์ • ๋ชจ๋‹ฌ ๊ตฌํ˜„ (#255) * feat: Button ์ปดํฌ๋„ŒํŠธ์— padding prop ์ถ”๊ฐ€ * feat: cancel-no-circle ์•„์ด์ฝ˜ ์ถ”๊ฐ€ * refactpr: BackDrop์„ ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ˆ˜์ • * refactor: textEditor ๋ฐฐ๊ฒฝ์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์ˆ˜์ • * chore: eslint no empty function ์˜ต์…˜ off * refactor: css keyframes ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ * feat: ์นด๋ฉ”๋ผ ์•„์ด์ฝ˜ ์ถ”๊ฐ€ * feat: TextEditor ์ปดํฌ๋„ŒํŠธ์— indicator ์ถ”๊ฐ€(#226) * refactor: z-index๋ฅผ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ • * feat: ํ”„๋กœํ•„ ์ˆ˜์ • ๋ชจ๋‹ฌ ๊ตฌํ˜„(#227) * [#246] ๋Œ“๊ธ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง (#250) * refactor: ๋Œ“๊ธ€ ๊ด€๋ จ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ์ผ€๋นˆ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ * refactor: ๋Œ“๊ธ€ ์กฐํšŒ ๋ฐ˜ํ™˜์‹œ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋‚˜์˜ค๋„๋ก ์ˆ˜์ • * [#220, #226] ๋„ค๋น„๊ฒŒ์ด์…˜ ui ์ˆ˜์ • ๋ฐ ์ด๋ฏธ์ง€ ์ธ๋””์ผ€์ดํ„ฐ ์ถ”๊ฐ€ (#256) * refactor: ๋น„๋กœ๊ทธ์ธ ์‹œ์—๋„ ํ™ˆ๋„ค์ด๊ฒŒ์ด์…˜ ๋…ธ์ถœ * fix: header์™€ image slider์˜ ์Œ“์ž„ ์ˆœ์„œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ * feat: ์ด๋ฏธ์ง€ ์ธ๋””์ผ€์ดํ„ฐ ๊ตฌํ˜„ * [#234] ํƒœ๊ทธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง (#245) * refactor: ํƒœ๊ทธ ๋„๋ฉ”์ธ ๋ถ€๋ถ„ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ํƒœ๊ทธ ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ํƒœ๊ทธ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ํƒœ๊ทธ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: connection pool ์‚ฌ์šฉํ•˜๋Š” ์ปค์Šคํ…€ RestTemplate ์ ์šฉ * refactor: Post์™€ Tag ์—ฐ๊ด€๊ด€๊ณ„ ๋ถ€๋ถ„ ํ”„๋กœ๋•์…˜ ๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง * refactor: ์ผ€๋นˆ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ - ParameterizedTest ์ด์šฉํ•˜๋„๋ก ์ˆ˜์ • - ์ค‘๋ณต๋œ ํ…Œ์ŠคํŠธ ์ œ๊ฑฐ * refactor: ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ * refactor: ์†Œ๋ฌธ์ž๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜๋„๋ก ์ˆ˜์ • * refactor: ๋„ˆ์ž˜ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ * refactor: ๊นƒํ—™์—์„œ ํƒœ๊ทธ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋˜๋„๋ก ๋ฆฌํŒฉํ† ๋ง * [#221, #225] ํ”„๋กœํ•„ ํ”ผ๋“œ ํด๋ฆญ์‹œ ์œ ์ € ํ”ผ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ (#260) * fix: ํ—ค๋”์—์„œ height๊ฐ€ ํฐ ์š”์†Œ๋“ค์˜ ๋ ˆ์ด์•„์›ƒ์ด ๊นจ์ง€๋Š” ๋ฒ„๊ทธ ํ•ด๊ฒฐ * fix: slideButtonKind ๋ณต๊ตฌ * refactor: ํƒ€์ž… ๋‹จ์–ธ ์ œ๊ฑฐ * feat: ํ”„๋กœํ•„ํ”ผ๋“œ์—์„œ ํฌ์ŠคํŠธ ํด๋ฆญ์‹œ ์œ ์ € ํ”ผ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ * [#251] Post ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง (#252) * refactor: infrastructure ์œ ๋‹›ํ…Œ์ŠคํŠธ, comment ์œ ๋‹›ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post ๊ด€๋ จ ์œ ๋‹›ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post application ๋ ˆ์ด์–ด ๊ด€๋ จ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: PostControllerTest ๋ฆฌํŒฉํ† ๋ง ์ถ”๊ฐ€ * test: post builder๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ * refactor: ๋ฆฌ๋ฒ ์ด์Šค ํ›„ ๊นจ์ง€๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ • ๋ฐ ๋ˆ„๋ฝ๋œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ * [#183] ๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ (#265) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * feat: HomeFeed ์ปดํฌ๋„ŒํŠธ์—์„œ ๋กœ๊ทธ์ธ ๋œ ์ƒํƒœ์—์„œ ์ž์‹ ์˜ ๊ฐœ์‹œ๊ธ€๋งŒ ์ˆ˜์ • ์•„์ด์ฝ˜์ด ๋œจ๋„๋ก ๋ณ€๊ฒฝ * feat: BottomSliderPortal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: CommentSlider ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * chore: Layout ์ƒ์ˆ˜ ๊ฐ์ฒด ์ด๋ฆ„ LAYOUT ์œผ๋กœ ๋ณ€๊ฒฝ * feat: getLastHash util ํ•จ์ˆ˜ ๊ตฌํ˜„ * feat: getTabTextColor util ํ•จ์ˆ˜ ๊ตฌํ˜„ * feat: useBottomSlider ํ›… ๊ตฌํ˜„ * refactor: PostItem ์ปดํฌ๋„ŒํŠธ ์ˆ˜์ • - ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ๋Œ“๊ธ€ ์ž…๋ ฅ ๊ฐ’ ์ €์žฅ ๋ฐ ์ˆ˜์ •์„ ๋‹ด๋‹นํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ • - ๋Œ“๊ธ€ ์ถ”๊ฐ€ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ ์‚ญ์ œ - Post, CommentData ํƒ€์ž…์˜ id ์†์„ฑ ํƒ€์ž…์„ string -> number ๋กœ ์ˆ˜์ • * feat: ๋Œ“๊ธ€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - Tabs ์ปดํฌ๋„ŒํŠธ๊ฐ€ tabIndicatorKind ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅธ indicator ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • - useFeed -> useFeedMutation ์œผ๋กœ ์ˆ˜์ • - HomeFeedPage ์ƒ์—์„œ useFeed ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ useHomeFeed ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • - COMMENT_INPUT_HEIGHT ๋ ˆ์ด์•„์›ƒ ์ƒ์ˆ˜ ์ถ”๊ฐ€ - ์ž„์‹œ์šฉ UserFeedPage ์™€ TagFeedPage ์—…๋ฐ์ดํŠธ (์—ฌ์ „ํžˆ ์ž„์‹œ์šฉ) * fix: CommentSlider ํ•ด์‹œ ๋ผ์šฐํŒ…์œผ๋กœ ์ธํ•ด ํŠน์ • UserFeedPage ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - CommentSlider ๋ฅผ ํ† ๊ธ€ํ•  ๋•Œ๋„ history.location ์˜ state ์™€ query param ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • - NavigationHeader ์ปดํฌ๋„ŒํŠธ์˜ height: content-fit ์†์„ฑ ์‚ญ์ œ & ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ์˜ padding ๊ฐ’ ์ˆ˜์ • - HomeFeed -> Feed ๋กœ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ์ˆ˜์ • * feat: ๋Œ“๊ธ€ ์ €์žฅ ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ * [#199, #248, #184] ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ & ๊ฒŒ์‹œ๊ธ€ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ (#271) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * feat: ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ & ์ด๋ฏธ์ง€๊ฐ€ ์—†์„ ์‹œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ ๊ตฌํ˜„ - ์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ButtonDrawer ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: TagInputForm ์ƒ์—์„œ Tag ์ž…๋ ฅ ์ค‘ ๋ชจ๋ฐ”์ผ ๊ฐ€์ƒ ํ‚ค๋ณด๋“œ๊ฐ€ ๋ ˆ์ด์•„์›ƒ์„ ๊นจ๋œจ๋ฆฌ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ tag input ์„ blur ์ฒ˜๋ฆฌ * [#243] s3 proxy ๊ด€๋ จ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#244) * chore: s3-proxy properties ํฌ๋งท์„ yaml๋กœ ์ˆ˜์ • (#243) * chore: ํ”„๋กœ๋•์…˜ ํŒจํ‚ค์ง€๋ช… ์ปจ๋ฒค์…˜๋งž๊ฒŒ ์ˆ˜์ • (#243) * test: S3Storage ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#243) * test: StorageService ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€ (#243) * refactor: StorageController ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ๋ถˆํ•„์š”ํ•œ given์ ˆ ์‚ญ์ œ (#243) * refactor: ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ถˆํ•„์š”ํ•œ throws์ ˆ ์‚ญ์ œ (#243) * refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์—๋Ÿฌ ์ฝ”๋“œ ์ถ”๊ฐ€ (#243) * refactor: ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ๋ฐ ๊ตฌ๊ธ€ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ • (#243) * refactor: 1์žฅ์ด๋ผ๋„ ์—…๋กœ๋“œ ์‹คํŒจ์‹œ ์˜ˆ์™ธ ๋ฐœ์ƒํ•˜๋„๋ก ๋ณ€๊ฒฝ (#243) * [#230] ๊ฒ€์ƒ‰ํŽ˜์ด์ง€ ๊ตฌํ˜„ (#274) * feat: ๊ฒ€์ƒ‰ mock data ์ถ”๊ฐ€ * fix: LoginWrapper children ํƒ€์ž… ์ˆ˜์ • * feat: search context ์ถ”๊ฐ€ * feat: SearchHeader์— SearchContext ์ ์šฉ * feat: SearchPage ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * fix: ์˜คํƒ€์ˆ˜์ • * ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * refactor: useFollow๋ถ„๋ฆฌ ๋ฐ follow mutation ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ˆ˜์ค€ ๋ณ€๊ฒฝ * feat: ์œ ์ € ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * fix: ๊ฒ€์ƒ‰ํŽ˜์ด์ง€ ์ง„์ž…์‹œ ์ด์ „ ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์ดˆ๊ธฐํ™” * [#253] Github ํ†ต๊ณ„ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#263) * feat: Github ํ†ต๊ณ„ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#253) * test: ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * style: ๊ฐœํ–‰ ์ถ”๊ฐ€ (#253) * refactor: ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ (#253) - PlatformExtractor -> PlatformContributionExtractor - PlatformApiRequester -> PlatformContributionApiRequester * refactor: @Profile ์ถ”๊ฐ€ (#253) * refactor: ์ƒ์ˆ˜ -> @value ๋ณ€๊ฒฝ (#253) * refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ถ”๊ฐ€ (#253) * test: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#253) * refactor: Calculator ๊ฐ์ฒด๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌ (#253) - Service์— ์žˆ๋˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ Calculator ๊ฐ์ฒด๋กœ ์ด๋™ - ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ * test: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ * refactor: ํŒจํ‚ค์ง€ ์œ„์น˜ ๋ณ€๊ฒฝ (#253) - ์ธํ„ฐํŽ˜์ด์Šค๋Š” domain, ๊ตฌํ˜„์ฒด๋Š” infrastructure์— ์œ„์น˜ * style: ์ ‘๊ทผ ์ œ์–ด์ž ์‚ญ์ œ (#253) * refactor: Calculator ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž… ๋ณ€๊ฒฝ (#253) * refactor: try-catch ๋ฌธ์œผ๋กœ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง (#253) * test: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ˆ˜์ • (#253) * refactor: Calculator ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž… ๋ณ€๊ฒฝ (#253) - DTO -> Domain Object * [#277] useFollow ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#278) * feat: SearchPage ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * refactor: useFollow๋ถ„๋ฆฌ ๋ฐ follow mutation ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ˆ˜์ค€ ๋ณ€๊ฒฝ * refactor: acceessToken์ด ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€ * chore: hook ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ ์„ค์ • * refactor: ErrorCode ํƒ€์ž… ์ถ”๊ฐ€ * refactor: handleHTTPError ๋ชจ๋“ˆ ๋ถ„๋ฆฌ - handleHTTPError ํ•จ์ˆ˜๋ฅผ utils/error.ts๋กœ ์ด๋™ - ์ƒ์ˆ˜ ๋ฐ ํƒ€์ž… ๋ถ„๋ฆฌ * test: useFollow ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * refactor: ํŒŒ์ผ์ด๋ฆ„ ๋ณ€๊ฒฝ - constants/httpError.ts ๋ฅผ constants/error.ts ๋กœ ๋ณ€๊ฒฝ * refactor: useFollow ์—๋Ÿฌ์ฒ˜๋ฆฌ - accesstoken์ด ์—†์„ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ - client error๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด ๊ตฌํ˜„ * [#124, #262, #275, #276] ์š”์ฒญ ๊ด€๋ จ ์ด์Šˆ ํ•ด๊ฒฐ (#280) * fix: ํ”„๋กœํ•„ ์ˆ˜์ • api ํ˜•์‹ ๋ณ€๊ฒฝ - put๋ฉ”์„œ๋“œ์—์„œ post๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝ - ๋ณ€๊ฒฝ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์—†์„๊ฒฝ์šฐ ๋นˆ ํŒŒ์ผ ๊ฐ์ฒด ์ „์†ก - ํ•œ ์ค„ ์†Œ๊ฐœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„๋„ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด๊ธฐ * fix: ๊ฒ€์ƒ‰ api url ๋ณ€๊ฒฝ * fix: github stats ์š”์†Œ ๋ฐ api url ๋ณ€๊ฒฝ * refactor: ์ตœ์ดˆ ํŽ˜์ด์ง€ ์ง„์ž…์‹œ ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ๋กœ๊ทธ์•„์›ƒ * fix: ๋‚ด ๊ฒŒ์‹œ๋ฌผ์˜ ํ”„๋กœํ•„ ์˜์—ญ์„ ํด๋ฆญํ•˜๋ฉด ๋‚ด ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋„๋ก ์ˆ˜์ • * refactor: ์œ ์ €ํ”„๋กœํ•„, ๋‚ดํ”„๋กœํ•„ ๋ถ„๊ธฐ๋ฅผ ProfilePage์—๊ฒŒ ์œ„์ž„ * feat: ์ตœ์ดˆ ์ง„์ž… ์ดํŽ™ํŠธ app์œผ๋กœ ๋ถ„๋ฆฌ * [#257] ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#264) * feat: ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#257) * feat: ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ๋ฐ ์ข‹์•„์š” ์ทจ์†Œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ๊ตฌํ˜„ (#257) * refactor : ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ (#257) * [#236] ๋กœ๊น… ๊ธฐ๋Šฅ ์„ธํŒ… (#237) * chore: ํ™œ์„ฑ ํ”„๋กœํ•„์— ๋”ฐ๋ฅธ logback ํ™˜๊ฒฝ ์„ค์ • (#236) * feat: ์ „์—ญ ์˜ˆ์™ธ ์–ด๋“œ๋ฐ”์ด์ €์— ๋กœ๊ฑฐ ์ถ”๊ฐ€ ๋ฐ DB / ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ ๋ฐ”์ธ๋”ฉ (#236) * chore: s3proxy directory logback ์„ค์ • ์ถ”๊ฐ€ (#236) * feat: s3proxy ์˜ˆ์™ธ ์–ด๋“œ๋ฐ”์ด์ € ์ถ”๊ฐ€ (#236) * refactor: applicationException ํ•ธ๋“ค๋Ÿฌ ์–ด๋“œ๋ฐ”์ด์ € ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ • (#236) * refactor: ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ ๋กœ๊น… ์ „๋žต ์ˆ˜์ • (#236) - ํ…Œ์ŠคํŠธ ๋กœ๊น… ์ „๋žต ์ฝ˜์†”๋กœ ์ˆ˜์ • - DB ๊ด€๋ จ ๋กœ๊ฑฐ ์ข…๋ฅ˜ ํ”„๋กœํ•„๋ณ„ ์žฌ์ •์˜ - ๋ถ€๋ชจ ๋กœ๊ฑฐ๊ฐ€ ์ฐํžˆ์ง€ ์•Š๋„๋ก additivity false ์ถ”๊ฐ€ - ๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธ ์–ด๋“œ๋ฐ”์ด์ €์— ๋กœ๊น… ์–‘์‹ ์ •์˜ * chore: logback-access ์„ค์ • ์ถ”๊ฐ€ ๋ฐ ํ”„๋กœํ•„๋ณ„ ์„ค์ • ๊ตฌ์„ฑ (#236) * chore: s3proxy ํ”„๋กœ์ ํŠธ logback-access ์„ค์ • ์ถ”๊ฐ€ (#236) * refactor: s3proxy, backend ํ”„๋กœ์ ํŠธ log ํฌ๋งท ๋ณ€๊ฒฝ (#236) * chore: backend logger DB, Access ๋“ฑ ์šฉ๋„๋ณ„ ๋ถ„๋ฆฌ (#236) * chore: s3proxy logger DB, Access ๋“ฑ ์šฉ๋„๋ณ„ ๋ถ„๋ฆฌ (#236) * [#254] ์œ ์ € ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ (#266) * feat: User ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * refactor: ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ ๋ฆฌํŒฉํ† ๋ง * refactor: ํ”„๋ก ํŠธ์ธก๊ณผ ํ˜‘์˜ํ•œ ๋ถ€๋ถ„ ๋ฆฌํŒฉํ† ๋ง * fix: ๊ฒ€์ƒ‰ ์š”์ฒญ์‹œ user์™€ tag ๋ถ„๋ฆฌ (#283) * [#267] ํ”„๋กœํ•„ ์ˆ˜์ • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ (#279) * feat: ์œ ์ € ํ”„๋กœํ•„ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„ * refactor: ํ”ผ๋“œ๋ฐฑ ์ ์šฉ * refactor: ํ”ผ๋“œ๋ฐฑ ๋ฆฌํŒฉํ† ๋ง * [#269] ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#272) * feat: ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#269) * fix: ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๊ธฐ๋Šฅ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๊ธฐ๋Šฅ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * fix: ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ ๊ธฐ๋Šฅ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ ๊ธฐ๋Šฅ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๊ธฐ๋Šฅ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ ๊ธฐ๋Šฅ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ ๊ธฐ๋Šฅ ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * test: ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ ๊ธฐ๋Šฅ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#269) * refactor: ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ์‚ญ์ œ (#269) * test: ๋ถˆํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ ์‚ญ์ œ (#269) * refactor: Command, Query ๋ถ„๋ฆฌ (CQS) (#269) * test: verify() ๊ฐ’ ์ง€์ • (#269) * refactor: ์ƒํƒœ๋ณ„๋กœ update() ๋ถ„๋ฆฌ (#269) * fix: ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒŒ์‹œ๋ฌผ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋กœ์ง ์ถ”๊ฐ€ (#269) * [#284] ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#285) * test: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#284) * test: ๋ถˆํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ ์‚ญ์ œ (#284) * fix: Github ํ†ต๊ณ„ ์กฐํšŒ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#287) (#288) * refactor: like ๊ด€๋ จ DTO ํ•„๋“œ๋ช… ๋ฒˆ๊ฒฝ (#289) (#291) * fix: restDocs ํ•„๋“œ๋ช… ์ˆ˜์ • ๋ฐ Boolean์œผ๋กœ ๋ณ€๊ฒฝ (#292) (#297) * [#228] ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#286) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * refactor: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  Page ์ปดํฌ๋„ŒํŠธ์—์„œ ๋‚ด๋ ค์ฃผ๋„๋ก ์ˆ˜์ • * feat: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ useGithubTagsQuery ๋ฉ”์„œ๋“œ ์ˆ˜์ • - EditPostPage ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - PostEditDataContext, PostEditStepContext ์ถ”๊ฐ€ - usePostEdit, usePostStep ํ›… ์ถ”๊ฐ€ * [#258] ์œ ์ € ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#268) * refactor: User ๋„๋ฉ”์ธ ๋ถ€์กฑํ•œ ํŒ”๋กœ์šฐ, ์–ธํŒ”๋กœ์šฐ ๋“ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#258) * refactor: User equals & hashCode ์ •์˜์‹œ getter ์‚ฌ์šฉ (#258) * refactor: Follow ๋„๋ฉ”์ธ equals & hashCode ์ •์˜์‹œ getter ์‚ฌ์šฉ (#258) * refactor: Following, Follwers ๋ฉ”์„œ๋“œ๋ช… ๋ฐ ์„ ์–ธ ์ˆœ์„œ ๋ณ€๊ฒฝ (#258) * refactor: Followings, Followers ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ฑ์ž ์ถ”๊ฐ€ (#258) * refactor: User.profile ๊ด€๋ จ ๋„๋ฉ”์ธ ์ฝ”๋“œ ํฌ๋งทํŒ… ๋ฐ setter ์‚ญ์ œ (#258) * refacotr: User ๋‚ด๋ถ€ Posts์— ์ƒ์„ฑ์ž ๋ณ€๊ฒฝ ๋ฐ UserRepository ์˜์†์„ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#258) * refactor: User ์‘์šฉ ๊ณ„์ธต ๋ฉ”์„œ๋“œ ์ถ”์ถœ ๋ฆฌํŒฉํ† ๋ง ๋ฐ DTO getter ์ถ”๊ฐ€ (#258) * refactor: AppUser์˜ UserService ์นจํˆฌ ์ œ๊ฑฐ ๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ณ„์ธต ๋ถ„๋ฆฌ (#258) - AppUser๊ฐ€ ์„œ๋น„์Šค ์ฝ”๋“œ์— ์นจํˆฌํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด AppUser ์ถ”์ƒ ํด๋ž˜์Šค์— ๋ณ„๋„์˜ ์ด๋ฆ„ ํ˜ธ์ถœ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ * refactor: UserService ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ณ„์ธต์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง (#258) * refactor: AuthUserRequest ์•ˆ์“ฐ๋Š” DTO ๋ฐ ์ƒ์„ฑ์ž ์‚ญ์ œ์™€ ๋ฉ”์„œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช… ํ†ต์ผ (#258) * refactor: User ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ nested ์ ์šฉ (#258) * refactor: User ๋ถˆํ•„์š”ํ•œ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… getter ์‚ญ์ œ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#258) * refactor: User ์—”ํ‹ฐํ‹ฐ ๋‚ด๋ถ€ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ protected๋กœ ๋ณ€๊ฒฝ (#258) * refactor: UserRepository ํ…Œ์ŠคํŠธ nested ์ ์šฉ (#258) * refactor: UserService ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ verify ๊ตฌ์ฒดํ™” ๋ฐ ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ (#258) * refactor: UserService ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฐ˜๋ณต๋˜๋Š” given ๋ถ€๋ถ„ ๋ฉ”์„œ๋“œ ์ถ”์ถœ (#258) * refactor: UserController ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ๋กœ๊ทธ์ธ์—ฌ๋ถ€ ๋ถ„๋ฆฌ ๋ฐ DTO Getter ์ถ”๊ฐ€ (#258) * refactor: User ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฐ˜๋ณต๋˜๋Š” api ํ˜ธ์ถœ ๋ฉ”์„œ๋“œ ํ†ต์ผ (#258) * refactor: ๋ณ‘ํ•ฉ ์ถฉ๋Œ ํ•ด๊ฒฐ (#258) * refactor: UserDataJpaTest Nested C-D-I ๋ช…์„ธ ๋ณ€๊ฒฝ (#258) * refactor: ์œ ์ € ์ปจํŠธ๋กค๋Ÿฌ ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ verify ์ถ”๊ฐ€ ๋ฐ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜ ์ˆ˜์ • (#258) - ๊ธฐ์กด unfollow ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜๋ชป ์ง„ํ–‰๋˜๊ณ  ์žˆ์—ˆ๋˜ ๋ถ€๋ถ„์„ ํ•ด๊ฒฐ * chore: UserService ํ—ฌํผ ๋ฉ”์„œ๋“œ ์œ„์น˜ ์ˆ˜์ • (#258) * refactor: UserController ์‘๋‹ต ์ƒ์„ฑ ํ—ฌํผ ๋ฉ”์„œ๋“œ ์œ„์น˜ ์ด๋™ (#258) * refactor: Follow, Unfollow์‹œ ๋‘ ์œ ์ € ๋™๋“ฑ์„ฑ ๋น„๊ต ๋กœ์ง Follow ํด๋ž˜์Šค๋กœ ์ด๋™ (#258) * refactor: User์˜ ํŒ”๋กœ์šฐ, ์–ธํŒ”๋กœ์šฐ ์กฐ๊ฑด ๊ฒ€์‚ฌ ๋กœ์ง์„ Followers, Followings๋กœ ์ด๋™ (#258) * chore: User.addComment ํ…Œ์ŠคํŠธ ์‚ญ์ œ (#258) * refactor: AuthUserRequestDto์˜ AppUser์— ๋Œ€ํ•œ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ (#258) * refactor: User ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ anyString given/verify ์ธ์ž ๋ณ€๊ฒฝ (#258) * fix: ํ”„๋กœ๋•์…˜ ๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ ๋ฐ SpringBoot ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋กœ ์ธํ•œ Nested ์ œ๊ฑฐ (#258) * refactor: ๋ณ‘ํ•ฉ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐ AppUser๋ฅผ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋ชปํ•˜๋„๋ก ๋ณ€๊ฒฝ (#258) * chore: ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ์ˆœ์„œ ์ •๋ ฌ ๋ฐ DTO ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ (#258) * chore: User ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆœ์„œ ์ •๋ ฌ ๋ฐ ํฌ๋งทํŒ… (#258) * [#293] Logback ์ธ์‹ ๋ถˆ๊ฐ€ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#299) * fix: logback appender ๊ฒฝ๋กœ ์ˆ˜์ • (#293) * chore: rest docs ๋ฌธ์„œ ๋ณ€๊ฒฝ * [#273, #301] profile page ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ˆ˜์ค€ ์ˆ˜์ • ๋ฐ ๊ธฐํƒ€ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#302) * refactor: ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€ ์„œ๋น„์Šค๋กœ์ง ๋ถ„๋ฆฌ ๋ฐ ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ˆ˜์ค€ ์ˆ˜์ • * refactor: ์ค‘๋ณต๋˜๋Š” validation ์ œ๊ฑฐ * refactor: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * feat: ์œ ์ € ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ์œ ์ € ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ๋งํฌ ์ถ”๊ฐ€ * fix: ํ”„๋กœํ•„ ์ˆ˜์ • ํ›„ ๋ฐ˜์˜์ด ์•ˆ๋˜๋Š” ์ด์Šˆ ํ•ด๊ฒฐ * refactor: api url ๋ณ€๊ฒฝ * fix: ๋กœ๊ทธ์ธ์œผ๋กœ ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ์‹œ ๊ฒŒ์ŠคํŠธ๋กœ ์ธ์‹ํ•˜๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ (#298) * [#295] ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ DB ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#300) * refactor: findPostByUser -> findPostByIdAndUser ๋ณ€๊ฒฝ (#295) * test: Data JPA ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#295) * refactor: ์ƒ์„ฑ์ž ์ˆ˜์ • (#295) * test: ์˜ˆ์™ธ ๋ฐœ์ƒ -> Optional.empty() ๊ฒ€์ฆ ๋ณ€๊ฒฝ (#295) * refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ (#295) * refactor: ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒŒ์‹œ๋ฌผ์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ • ์ˆ˜์ • (#295) - DB์—์„œ ์ฒ˜๋ฆฌ -> ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ์ฒ˜๋ฆฌ๋กœ ๋ณ€๊ฒฝ * refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ (#295) * test: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ (#295) * [#290] ์ค‘๊ฐ„ ๋ฐ๋ชจ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐ (#303) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * fix: ์ค‘๊ฐ„ ๋ฐ๋ชจ ๋ฒ„๊ทธ ํ•ด๊ฒฐ - ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ ์†์„ฑ ์ค‘ isLiked -> liked ๋กœ ๋ณ€๊ฒฝ - ๋กœ๊ทธ์ธ ํ–ˆ์„ ๋•Œ๋งŒ ์ข‹์•„์š” ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ์ˆ˜์ • - ๋กœ๊ทธ์ธ ํ–ˆ์„ ๋•Œ๋งŒ ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ์ˆ˜์ • - ์ข‹์•„์š”, ์ข‹์•„์š” ์ทจ์†Œ ์ƒํƒœ ๋ฐ˜์˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ padding ์ˆ˜์ • - ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ๋ฐ”๋กœ ์ถ”๊ฐ€๋œ ๋Œ“๊ธ€์„ ํ™”๋ฉด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ • - ๋Œ“๊ธ€์ด ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ์‹œ์—๋Š” ์ตœ๋Œ€ 10๊ฐœ๋งŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ • - ๊ธฐ์กด์˜ ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ input ์„ ๋Œ“๊ธ€ ์Šฌ๋ผ์ด๋” ํ† ๊ธ€ ๋ฒ„ํŠผ์œผ๋กœ ๋ณ€ํ™˜ * fix: api url ์ˆ˜์ • (#305) * fix: Post - Comments ์˜์†์„ฑ ์ „์ด ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#306) (#307) * [#308] ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#309) * fix: orphanremoval = true ์˜ต์…˜ ์ถ”๊ฐ€ (#308) * test: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#308) * [#310] ํŒ€๋ฐ๋ชจ ๊ฒฐ๊ณผ ๋ฐ˜์˜ - ํ”„๋กœํ•„ ํŽ˜์ด์ง€ (#311) * fix: api url ์˜คํƒ€ ์ˆ˜์ • * fix: ๋ˆ„๋ฝ๋œ key prop ์ถ”๊ฐ€ * fix: ๊นƒํ—™ํ†ต๊ณ„ ๊ธฐ๋Šฅ ์ž„์‹œ api๋กœ ์ˆ˜์ • * ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ํ•˜๋‹จ ๋ ˆ์ด์•„์›ƒ ๋ฒ„๊ทธ ์ˆ˜์ • * [#312] ๋‘๋ฒˆ์งธ ํŒ€ ๋ฐ๋ชจ์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#313) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * fix: ๋‘๋ฒˆ์งธ ํŒ€ ๋ฐ๋ชจ์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ - ๋Œ“๊ธ€ ์ถ”๊ฐ€ ์‹œ ์ตœ๊ทผ ๋Œ“๊ธ€๋กœ ์Šคํฌ๋กค์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€, ์‚ญ์ œ ์‹œ ์Šค๋‚ต๋ฐ”๋ฅผ ํ†ตํ•ด ํ”ผ๋“œ๋ฐฑ - ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š” & ์ข‹์•„์š” ์ทจ์†Œ ๊ฒฐ๊ณผ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ๊ฒŒ์‹œ๊ธ€ tags ์ •๋ณด ํŒŒ์‹ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ (๋ณด๋‚ผ ๋• , ๊ธฐ๋ฐ˜ join ๋ฌธ์ž์—ด๋กœ, ๋ฐ›์„ ๋•Œ๋Š” ์ผ๋ฐ˜ ๋ฌธ์ž์—ด ๋ฐฐ์—ด๋กœ) * fix: ๋ชจ๋ฐ”์ผ ์ƒ์˜ ๋ ˆ์ด์•„์›ƒ ๋ฐ ๊ทธ๋ž˜ํ”ฝ ๋ฌธ์ œ ํ•ด๊ฒฐ - ๋ชจ๋ฐ”์ผ ์ƒ์—์„œ ๋ฒ„ํŠผ์ด๋‚˜ ๋งํฌ ํด๋ฆญ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ธฐ๋ณธ ํ•˜์ด๋ผ์ดํŠธ ์ปฌ๋Ÿฌ ์ œ๊ฑฐ - ๋Œ“๊ธ€ input ํŒจ๋”ฉ ์กฐ์ • - ํ”„๋กœํ•„ ์ž”๋”” ๋ฐฐ๊ฒฝ ํˆฌ๋ช… -> ํฐ์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝ - kind ๊ฐ€ pills ์ธ Tabs ์ปดํฌ๋„ŒํŠธ์˜ hover ์ดํŽ™ํŠธ ์ œ๊ฑฐ(๋ชจ๋ฐ”์ผ ์ƒ์—์„œ ํด๋ฆญ๋œ ๊ธ€์”จ๊ฐ€ ํฌ๋ฏธํ•ด์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ) * [#314] ์„ธ๋ฒˆ์งธ ํŒ€ ๋ฐ๋ชจ์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#315) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * fix: 2์ฐจ ๋ฐ๋ชจ ์„ธ๋ฒˆ์งธ ๋ฒ„๊ทธ ์ˆ˜์ • - ๋Œ“๊ธ€ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€, ์œ ์ € ์ด๋ฆ„์ด ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์‹œ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•œ ๊ณ„์ •์ด ํ•˜๋‚˜๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ์ž„์‹œ ๋ ˆํฌ๋ชฉ๋ก ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * [#316] 3์ฐจ๋ฐ๋ชจ ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ ๋ฐ UI ๊ด€๋ จ ์ด์Šˆ ํ•ด๊ฒฐ (#317) * fix: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์—์„œ ํŒ”๋กœ์šฐ์‹œ ๊นœ๋ฐ•๊ฑฐ๋ฆฌ๋Š” ๋ฒ„๊ทธ ํ•ด๊ฒฐ * feat: ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ์‹œ ์ปจํŽŒ ์ถ”๊ฐ€ * fix: ์ด๋ฏธ์ง€ ๋ฐ ํ…์ŠคํŠธ ์ธ๋””์ผ€์ดํ„ฐ ์‚ฌ์ด์ฆˆ ๊ณ ์ • * feat: ๊ฐ„๋žตํžˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€ * [#318] ๋„ค๋ฒˆ์งธ ํŒ€ ๋ฐ๋ชจ์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#319) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * fix: ๋„ค๋ฒˆ์งธ ํŒ€ ๋ฐ๋ชจ์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ - ๋Œ“๊ธ€ ์Šฌ๋ผ์ด๋” ๊ฐ€๋กœ ์Šคํฌ๋กค๋ง ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ์ด๋ฏธ์ง€๋“ค ์ด ์šฉ๋Ÿ‰ ์ œํ•œ 1MB ๋กœ ์ˆ˜์ • - ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ์˜ ๊ฐœํ–‰์ด ์‹ค์ œ๋กœ ๋ฐ˜์˜๋˜๋„๋ก ์ˆ˜์ • - ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์ค‘ ํƒœ๊ทธ ์ž…๋ ฅ ํ›„ tagInputLength ๊ฐ€ 0 ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜๋„๋ก ์ˆ˜์ • * [#320] ๊ฒŒ์‹œ๋ฌผ ์ถ”๊ฐ€ ์‹œ ์ด๋ฏธ์ง€๊ฐ€ ์—†์œผ๋ฉด alert์ฒ˜๋ฆฌ (#321) * fix: ๊ฒŒ์‹œ๋ฌผ ์ถ”๊ฐ€ ์‹œ ์ด๋ฏธ์ง€๊ฐ€ ์—†์œผ๋ฉด alert ์ฒ˜๋ฆฌ * refactor: ๋”๋ณด๊ธฐ, ๊ฐ„๋žตํžˆ ์ •์ฑ… ๋ณ€๊ฒฝ * [#322] ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ์‹œ ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ์•„๋‹Œ ์ˆ˜์ • ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋œจ๋„๋ก ๋ณ€๊ฒฝ (#323) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * fix: ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ์‹œ ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ์•„๋‹Œ ์ˆ˜์ • ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋œจ๋„๋ก ๋ณ€๊ฒฝ * [#324] ๋‹ค๋ฅธ ์ด์šฉ์ž์˜ UserFeed ์ข‹์•„์š”๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ (#325) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * fix: ๋‹ค๋ฅธ ์ด์šฉ์ž์˜ UserFeed ์ข‹์•„์š”๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - currentUsername(์ ‘์†ํ•œ ์ด์šฉ์ž) -> username(์ด์šฉ์ž ํ”ผ๋“œ ํŽ˜์ด์ง€์˜ ๋Œ€์ƒ ์ด์šฉ์ž) ์œผ๋กœ ๋Œ€์ƒ ๋ณ€๊ฒฝ * [#259] ํฌ์ŠคํŠธ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#270) * refactor: Post ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#252) * refactor: infrastructure ์œ ๋‹›ํ…Œ์ŠคํŠธ, comment ์œ ๋‹›ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post ๊ด€๋ จ ์œ ๋‹›ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post application ๋ ˆ์ด์–ด ๊ด€๋ จ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: PostControllerTest ๋ฆฌํŒฉํ† ๋ง ์ถ”๊ฐ€ * test: post builder๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ * refactor: ๋ฆฌ๋ฒ ์ด์Šค ํ›„ ๊นจ์ง€๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ • ๋ฐ ๋ˆ„๋ฝ๋œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ refactor: Post์˜ Tag๊ด€๋ จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง PostTags๋กœ ์ด๋™ (#259) ์ด๋™๊ณผ ํ•จ๊ป˜ Post์˜ Build ํŒจํ„ด ์ ์šฉ๊ณผ ๋ฆฌํŒฉํ† ๋ง. refactor: PostService์™€ PostController์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ. ๋ฐ s3Storage ํŒŒ์ผ ์ €์žฅ ๋ฐฉ์‹ ์ถ”๊ฐ€ (#259) feed๊ด€๋ จ๊ณผ, ๊ฒŒ์‹œ๋ฌผ ๊ด€๋ จ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋งž์ถค. refactor: ์ „์ฒด์ ์ธ import ์ •๋ฆฌ (#259) refactor: ํŒจํ‚ค์ง€ ์ •๋ฆฌ (#259) refactor: Post์˜ getImageUrl ์ค‘๋ณต ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ (#259) refactor: CommentResponse์˜ ๋„๋ฉ”์ธ ์ฐธ์กฐ ์ œ๊ฑฐ ๋ฐ DtoAssembler ๋ฆฌํŒฉํ† ๋ง (#259) refactor: Feed๊ด€๋ จ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, PostDto์–ด์…ˆ๋ธ”๋Ÿฌ ๋ฆฌํŒฉํ† ๋ง, ๋ ˆ์ด์–ด์— ๋งž์ง€ ์•Š๋Š” DTO ์ด๋™ (#259) refactor: CommentRequestDto ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ ๋ฐ PostController ๋ฆฌํŒฉํ† ๋ง (#259) refactor: PostResponseDto๊ฐ€ presentation~presentation๊นŒ์ง€ ์‚ฌ์šฉ๋˜๋˜๊ฒƒ์„ ๋ถ„๋ฆฌ (#259) refactor: showRepositories -> userRepositories ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ (#259) refactor: RepositoryResponse, domain -> controller๊นŒ์ง€ ์‚ฌ์šฉ ๋˜๋˜๊ฒƒ์„ ๋ถ„๋ฆฌ (#259) style: domain์„ ์ œ์™ธํ•œ ๋ ˆ์ด์–ด์˜ ๊ตฌ๊ธ€ ์ปจ๋ฒค์…˜ ์ฒดํฌ (#259) refactor: PostImageUrlResponseDto Builder ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ refactor: Post ์ปจ๋ฒค์…˜ ๋ฐ ๋ฉ”์„œ๋“œ ์ˆœ์„œ ์ •๋ฆฌ (#259) refactor: Post user ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ช… author๋กœ ๋ณ€๊ฒฝ ๋ฐ ํ•„๋“œ, ๋ฉ”์„œ๋“œ ์ •๋ฆฌ (#249) refactor: PostTag equals getId()๋กœ ๋ณ€๊ฒฝ ๋ฐ ํ•„๋“œ ์ˆœ์„œ ์ •๋ฆฌ (#249) refactor: Like๋ฅผ VO๋กœ ์ทจ๊ธ‰, Likes๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ทจ๊ธ‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ (#249) refactor: Image VO๋กœ ์ทจ๊ธ‰ ๋ฐ ๋„์›€ ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ, PostContent validation๋กœ์ง ๋ณ€๊ฒฝ (#249) refactor: CommentContent VO ์ทจ๊ธ‰, comment ๋„์›€๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ์ฑ…์ž„ ๋ณ€๊ฒฝ (#249) refactor: Post equals getter๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ (#249) refactor: ์—ฐ๊ด€๊ด€๊ณ„ ๋„์›€ ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜๊น‚ ์—†๋„๋ก ๋ณ€๊ฒฝ (#249) style: ๊ตฌ๊ธ€ ์ปจ๋ฒค์…˜ ์ ์šฉ (#249) refactor: ์ถ”์ƒํ™” ์ˆ˜์ค€ ํ‰ํƒ„ํ™” ์ž‘์—… (#249) * refactor: ๋ฆฌ๋ฒ ์ด์Šค ํ›„ ๊นจ์ง€๋Š” ํŒŒ์ผ ์ˆ˜์ • * fix: User ๋น„๊ต ๋กœ์ง ๋ฒ„๊ทธ ํ•ด๊ฒฐ * refactor: ๋ฉ”์„œ๋“œ์˜ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * refactor: ๋””๋ฏธํ„ฐ์˜ ์›์น™ ์ค€์ˆ˜ * refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ * refactor: ๊นจ์ง€๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ • * refactor: ํƒ€์ž… ์ถ”๋ก  ๋ณ€์ˆ˜๋ฅผ ํƒ€์ž…ํ˜•์œผ๋กœ ๋ณ€๊ฒฝ * refactor: ์˜๋ฏธ๊ฐ€ ์—†๋Š” ๋ณ€์ˆ˜๋ช… ์ œ๊ฑฐ like -> ๋ฉ”์„œ๋“œ์ฐธ์กฐ * style: ํŒ€ ์ปจ๋ฒค์…˜ ์ ์šฉ * [#332] Acceptance Test๋ฅผ ์œ„ํ•œ Request builder ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„. (#333) * [#200, #205] ํƒœ๊ทธ ๊ด€๋ จ ์ด์Šˆ ํ•ด๊ฒฐ (#216) * fix: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์‹œ, ์ดˆ๊ธฐ์— ๋ถˆ๋Ÿฌ์˜จ ๊ธฐ๋ณธ tag ๋“ค์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ * feat: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์ค‘ ํƒœ๊ทธ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * fix: break point ์— ๋งž๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ตœ๋Œ€ ๋„ˆ๋น„๋ฅผ 375px -> 425px ๋กœ ์กฐ์ • * [#217, #110] ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ์ •๋ฆฌ (#218) * chore: ์ธ์ˆ˜/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฐ common(ํ”ฝ์Šค์ณ ํŒฉํ† ๋ฆฌ, mock api) ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ (#217) * chore: ๊ธฐ์กด ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋“ค์„ unit ํ•˜์œ„๋กœ ์ด๋™ (#217) * refactor: Tag ๊ด€๋ จ Github ํ”Œ๋žซํผ ํด๋ž˜์Šค ์ด๋ฆ„์— Tag ๋ช…์‹œ (#217) * chore: Test ๊ด€๋ จ Configuration ํ†ต์ผ ๋ฐ Github API ๊ด€๋ จ ํด๋ž˜์Šค ํ”„๋กœํ•„ ์„ค์ • (#217) * chore: ๋กฌ๋ณต ์˜์กด์„ฑ ์ถ”๊ฐ€ (#217) * refactor: TestConfiguration ํด๋ž˜์Šค๋ช…์— Infrastructure ๋ช…์‹œ (#217) * refactor: PostFactory ๋นŒ๋” ํŒจํ„ด ์ ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ * refactor: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: UserFactory ๋นŒ๋” ํŒจํ„ด ์ ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ * refactor: PostFactory ์˜๋ฏธ ์—†๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ * refactor: Test Configuration ์ด๋ฆ„ ๋ณ€๊ฒฝ * refactor: user fixture setUp๋กœ์ง ์œ„์น˜ ๋ณ€๊ฒฝ * refactor: DTO Builder ์–ด๋…ธํ…Œ์ด์…˜ ์ ์šฉ ๋ฐ Builder ์ œ๊ณต ํด๋ž˜์Šค ์ œ๊ฑฐ * refactor: gradle.build ํŒŒ์ผ ์ •๋ฆฌ * style: ์˜๋ฏธ์—†๋Š” ๊ณต๋ฐฑ ์ œ๊ฑฐ Co-authored-by: Minsung <sns2831@gmail.com> * [#223, #229] API ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜ ๋ฐ Post ์ค‘๋ณต์ œ๊ฑฐ (#235) * fix: API ๋ช…์„ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜ - image์™€ imageUrl์— ๋Œ€ํ•œ ํ‚ค๊ฐ’ ๊ตฌ๋ถ„ - public repo๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” api ๋ช…์—์„œ username ์ œ๊ฑฐ * refactor: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * feat: ์ƒˆ๋กœ ํŒจ์น˜๋œ post ์ค‘๋ณต์ œ๊ฑฐ * fix: InfiniteScrollContainer effect ์˜์กด์„ฑ ์ˆ˜์ • * refactor: Snackbar ์ปดํฌ๋„ŒํŠธ์˜ ์œ„์น˜๋ฅผ @layout์œผ๋กœ ๋ณ€๊ฒฝ * fix: post interface ์ˆ˜์ • * refactor: ์Šค๋‚ต๋ฐ” ๋ฉ”์‹œ์ง€๋ฅผ push ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋” ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ * fix: ์ค‘๋ณต๋œ key prop ์ˆ˜์ • * feat: http error ์ฒ˜๋ฆฌ ์œ ํ‹ธ ๊ตฌํ˜„ * refactor: HomeFeedPage์˜ ์ƒํƒœ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * [#204] Issue ๋ฐ PR Template ์ˆ˜์ • (#239) * docs: PR ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • * docs: ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ๋“ฑ๋ก * docs: ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • * docs: ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • * [#222] ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ํ”ผ๋“œ ๋ฒ„๊ทธ ์ˆ˜์ • (#242) * refactor: ์ค‘๋ณต๋œ ๊ฒŒ์‹œ๋ฌผ์„ ์ œ๊ฑฐํ•˜๋Š” ๋กœ์ง์„ util๋กœ ๋ถ„๋ฆฌ * feat: ํ”„๋กœํ•„ ํ”ผ๋“œ์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * refactor: profile page์˜ ์ƒํƒœ๋ฅผ context๋กœ ๋ถ„๋ฆฌ * feat: ํŒ”๋กœ์šฐ ๋ฒ„ํŠผ์— ๋กœ๋”ฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ * refactor: ProfilePage ๊ตฌ์กฐ ๊ฐœ์„  - ํ›…์„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ์ˆ˜์ค€์„ ์ž‘์€ ๋ฒ”์œ„๋กœ ์ˆ˜์ • - context๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ * [#219] ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ, ํ•ธ๋“ค๋ง ๊ตฌํ˜„ (#241) * feat: BackDrop & MessageModalPortal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ - index.html ์— div#modal ํƒœ๊ทธ ์ถ”๊ฐ€ - MessageModalPortal ์€ ๋ฆฌ์•กํŠธ ํฌํ„ธ์„ ์ ์šฉํ•˜์—ฌ ๊ตฌํ˜„ - ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๋„๋ก useMessageModal ์ปค์Šคํ…€ ํ›… ์ œ์ž‘ * refactor: ํ•„์š” ์—†๋Š” import ๊ตฌ๋ฌธ ์‚ญ์ œ * feat: PostContentUploader ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ImageSlider & ImageUploader ์™€ TextEditor ๊ฐ„์˜ margin ์ถ”๊ฐ€ * feat: ์ƒˆ๋กœ์šด limits, messages ์ƒ์ˆ˜ ์ถ”๊ฐ€ - message -> messages ๋กœ ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ * feat: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ step ๋ผ์šฐํŒ… path ์— ํ•œ๊ธ€์ด ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * fix: ํ•„์š”ํ•œ ๋ณ€์ˆ˜ import ๊ฒฝ๋กœ ์ˆ˜์ • * feat: ๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ์ค‘ ๊ฐ๊ฐ์˜ ์—๋Ÿฌ์— ๋Œ€ํ•œ ์ด์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๊ตฌํ˜„ - PostAddFormData -> PostUploadData์œผ๋กœ ๋ณ€๊ฒฝ - ์ด์šฉ์ž์˜ ๊นƒํ—ˆ๋ธŒ ์ƒ์— ์˜ฌ๋ผ์™€ ์žˆ๋Š” public repository ๊ฐ€ ์—†์œผ๋ฉด ํ”ผ๋“œ๋ฐฑ ํ›„ ์ด์ „ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œํ‚จ๋‹ค. - repository ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€ & ๊ธ€ ์ž‘์„ฑ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ ค ํ•œ๋‹ค๋ฉด ์ด๋ฅผ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์ •ํ•ด์ง„ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ํ…์ŠคํŠธ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง„ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ๋“ค์–ด๊ฐ„ ํƒœ๊ทธ๋“ค ์ค‘ ์ค‘๋ณต์ด ์žˆ์œผ๋ฉด ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. - ํƒœ๊ทธ์— '-', '_' ๋ฅผ ์ œ์™ธํ•œ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ๋“ค์–ด๊ฐ”๋‹ค๋ฉด ์ด๋ฅผ ํ”ผ๋“œ๋ฐฑํ•œ๋‹ค. * feat: ErrorResponse ํƒ€์ž… ์ƒ์„ฑ ๋ฐ ์ ์šฉ * feat: API ์š”์ฒญ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ตฌํ˜„ * [#232] ์œ ์ € ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#249) * refactor: ์ฝ”๋“œ ์ •๋ฆฌ (#232) * refactor: ์‚ฌ์šฉ์ž ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์ถ”๊ฐ€ (#232) - ๊ฒŒ์ŠคํŠธ์ธ ๊ฒฝ์šฐ UnauthorizedException ๋ฐœ์ƒ * refactor: DTO ๊ด€๋ จ ๋„ค์ด๋ฐ ์ •๋ฆฌ (#232) * test: ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: Data JPA ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ๋ถˆํ•„์š”ํ•œ ์ƒ์ˆ˜ ์‚ญ์ œ (#232) * test: ์œ ์ € ์ด๋ฆ„ ๋ณ€๊ฒฝ (#232) - loginUser/guestUser -> testUser๋กœ ํ†ต์ผ * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#232) * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * test: ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#232) * refactor: Builder ์‚ฌ์šฉ (#232) * refactor: Follow ๊ฐ์ฒด์— ์ฑ…์ž„ ์œ„์ž„ (#232) * test: ์ ‘๊ทผ ์ œ์–ด์ž ์ˆ˜์ • (#232) * refactor: DTO ๋ฆฌํŒฉํ† ๋ง (#232) * test: ๋ถˆํ•„์š”ํ•œ ํ•„๋“œ ์‚ญ์ œ (#232) * test: WebEnvironment ์˜ต์…˜์„ RANDOM_PORT -> NONE์œผ๋กœ ๋ณ€๊ฒฝ (#232) * test: @SpringBootTest -> @DataJpaTest ๋ณ€๊ฒฝ (#232) * refactor: API ๋ช…์„ธ์— ๋งž๊ฒŒ ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ (#232) - image -> imageUrl ๋ณ€๊ฒฝ * [#240] Authentication ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#247) * test: authentication ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#240) * test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#240) * refactor: ๊นƒํ—™ ์ธ์ฆ ์˜ˆ์™ธ ๋ณ€๊ฒฝ (#240) * test: Authentication ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ (#240) * test: HttpHeaders.AUTHORIZATION ์œผ๋กœ ๋ณ€๊ฒฝ (#240) * [#226, #227] ํ”„๋กœํ•„ ์ˆ˜์ • ๋ชจ๋‹ฌ ๊ตฌํ˜„ (#255) * feat: Button ์ปดํฌ๋„ŒํŠธ์— padding prop ์ถ”๊ฐ€ * feat: cancel-no-circle ์•„์ด์ฝ˜ ์ถ”๊ฐ€ * refactpr: BackDrop์„ ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ˆ˜์ • * refactor: textEditor ๋ฐฐ๊ฒฝ์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์ˆ˜์ • * chore: eslint no empty function ์˜ต์…˜ off * refactor: css keyframes ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ * feat: ์นด๋ฉ”๋ผ ์•„์ด์ฝ˜ ์ถ”๊ฐ€ * feat: TextEditor ์ปดํฌ๋„ŒํŠธ์— indicator ์ถ”๊ฐ€(#226) * refactor: z-index๋ฅผ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ • * feat: ํ”„๋กœํ•„ ์ˆ˜์ • ๋ชจ๋‹ฌ ๊ตฌํ˜„(#227) * [#246] ๋Œ“๊ธ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง (#250) * refactor: ๋Œ“๊ธ€ ๊ด€๋ จ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ์ผ€๋นˆ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ * refactor: ๋Œ“๊ธ€ ์กฐํšŒ ๋ฐ˜ํ™˜์‹œ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋‚˜์˜ค๋„๋ก ์ˆ˜์ • * [#220, #226] ๋„ค๋น„๊ฒŒ์ด์…˜ ui ์ˆ˜์ • ๋ฐ ์ด๋ฏธ์ง€ ์ธ๋””์ผ€์ดํ„ฐ ์ถ”๊ฐ€ (#256) * refactor: ๋น„๋กœ๊ทธ์ธ ์‹œ์—๋„ ํ™ˆ๋„ค์ด๊ฒŒ์ด์…˜ ๋…ธ์ถœ * fix: header์™€ image slider์˜ ์Œ“์ž„ ์ˆœ์„œ ๋ฒ„๊ทธ ํ•ด๊ฒฐ * feat: ์ด๋ฏธ์ง€ ์ธ๋””์ผ€์ดํ„ฐ ๊ตฌํ˜„ * [#234] ํƒœ๊ทธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง (#245) * refactor: ํƒœ๊ทธ ๋„๋ฉ”์ธ ๋ถ€๋ถ„ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ํƒœ๊ทธ ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ํƒœ๊ทธ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: ํƒœ๊ทธ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * refactor: connection pool ์‚ฌ์šฉํ•˜๋Š” ์ปค์Šคํ…€ RestTemplate ์ ์šฉ * refactor: Post์™€ Tag ์—ฐ๊ด€๊ด€๊ณ„ ๋ถ€๋ถ„ ํ”„๋กœ๋•์…˜ ๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง * refactor: ์ผ€๋นˆ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ - ParameterizedTest ์ด์šฉํ•˜๋„๋ก ์ˆ˜์ • - ์ค‘๋ณต๋œ ํ…Œ์ŠคํŠธ ์ œ๊ฑฐ * refactor: ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ * refactor: ์†Œ๋ฌธ์ž๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜๋„๋ก ์ˆ˜์ • * refactor: ๋„ˆ์ž˜ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ * refactor: ๊นƒํ—™์—์„œ ํƒœ๊ทธ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋˜๋„๋ก ๋ฆฌํŒฉํ† ๋ง * [#221, #225] ํ”„๋กœํ•„ ํ”ผ๋“œ ํด๋ฆญ์‹œ ์œ ์ € ํ”ผ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ (#260) * fix: ํ—ค๋”์—์„œ height๊ฐ€ ํฐ ์š”์†Œ๋“ค์˜ ๋ ˆ์ด์•„์›ƒ์ด ๊นจ์ง€๋Š” ๋ฒ„๊ทธ ํ•ด๊ฒฐ * fix: slideButtonKind ๋ณต๊ตฌ * refactor: ํƒ€์ž… ๋‹จ์–ธ ์ œ๊ฑฐ * feat: ํ”„๋กœํ•„ํ”ผ๋“œ์—์„œ ํฌ์ŠคํŠธ ํด๋ฆญ์‹œ ์œ ์ € ํ”ผ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ * [#251] Post ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง (#252) * refactor: infrastructure ์œ ๋‹›ํ…Œ์ŠคํŠธ, comment ์œ ๋‹›ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post ๊ด€๋ จ ์œ ๋‹›ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post application ๋ ˆ์ด์–ด ๊ด€๋ จ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: Post ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง * test: PostControllerTest ๋ฆฌํŒฉํ† ๋ง ์ถ”๊ฐ€ * test: post builder๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ * refactor: ๋ฆฌ๋ฒ ์ด์Šค ํ›„ ๊นจ์ง€๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ • ๋ฐ ๋ˆ„๋ฝ๋œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ * [#183] ๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ (#265) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * feat: HomeFeed ์ปดํฌ๋„ŒํŠธ์—์„œ ๋กœ๊ทธ์ธ ๋œ ์ƒํƒœ์—์„œ ์ž์‹ ์˜ ๊ฐœ์‹œ๊ธ€๋งŒ ์ˆ˜์ • ์•„์ด์ฝ˜์ด ๋œจ๋„๋ก ๋ณ€๊ฒฝ * feat: BottomSliderPortal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: CommentSlider ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * chore: Layout ์ƒ์ˆ˜ ๊ฐ์ฒด ์ด๋ฆ„ LAYOUT ์œผ๋กœ ๋ณ€๊ฒฝ * feat: getLastHash util ํ•จ์ˆ˜ ๊ตฌํ˜„ * feat: getTabTextColor util ํ•จ์ˆ˜ ๊ตฌํ˜„ * feat: useBottomSlider ํ›… ๊ตฌํ˜„ * refactor: PostItem ์ปดํฌ๋„ŒํŠธ ์ˆ˜์ • - ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ๋Œ“๊ธ€ ์ž…๋ ฅ ๊ฐ’ ์ €์žฅ ๋ฐ ์ˆ˜์ •์„ ๋‹ด๋‹นํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ • - ๋Œ“๊ธ€ ์ถ”๊ฐ€ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ ์‚ญ์ œ - Post, CommentData ํƒ€์ž…์˜ id ์†์„ฑ ํƒ€์ž…์„ string -> number ๋กœ ์ˆ˜์ • * feat: ๋Œ“๊ธ€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - Tabs ์ปดํฌ๋„ŒํŠธ๊ฐ€ tabIndicatorKind ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅธ indicator ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • - useFeed -> useFeedMutation ์œผ๋กœ ์ˆ˜์ • - HomeFeedPage ์ƒ์—์„œ useFeed ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ useHomeFeed ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • - COMMENT_INPUT_HEIGHT ๋ ˆ์ด์•„์›ƒ ์ƒ์ˆ˜ ์ถ”๊ฐ€ - ์ž„์‹œ์šฉ UserFeedPage ์™€ TagFeedPage ์—…๋ฐ์ดํŠธ (์—ฌ์ „ํžˆ ์ž„์‹œ์šฉ) * fix: CommentSlider ํ•ด์‹œ ๋ผ์šฐํŒ…์œผ๋กœ ์ธํ•ด ํŠน์ • UserFeedPage ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - CommentSlider ๋ฅผ ํ† ๊ธ€ํ•  ๋•Œ๋„ history.location ์˜ state ์™€ query param ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • - NavigationHeader ์ปดํฌ๋„ŒํŠธ์˜ height: content-fit ์†์„ฑ ์‚ญ์ œ & ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ์˜ padding ๊ฐ’ ์ˆ˜์ • - HomeFeed -> Feed ๋กœ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ์ˆ˜์ • * feat: ๋Œ“๊ธ€ ์ €์žฅ ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ * [#199, #248, #184] ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ & ๊ฒŒ์‹œ๊ธ€ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ (#271) * feat: Feed ์ปดํฌ๋„ŒํŠธ ๋ช…์นญ์„ HomeFeed ๋กœ ๋ณ€๊ฒฝ * feat: ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ & ์ด๋ฏธ์ง€๊ฐ€ ์—†์„ ์‹œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ ๊ตฌํ˜„ - ์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ButtonDrawer ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ * feat: TagInputForm ์ƒ์—์„œ Tag ์ž…๋ ฅ ์ค‘ ๋ชจ๋ฐ”์ผ ๊ฐ€์ƒ ํ‚ค๋ณด๋“œ๊ฐ€ ๋ ˆ์ด์•„์›ƒ์„ ๊นจ๋œจ๋ฆฌ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ tag input ์„ blur ์ฒ˜๋ฆฌ * [#243] s3 proxy ๊ด€๋ จ ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง (#244) * chore: s3-proxy properties ํฌ๋งท์„ yaml๋กœ ์ˆ˜์ • (#243) * chore: ํ”„๋กœ๋•์…˜ ํŒจํ‚ค์ง€๋ช… ์ปจ๋ฒค์…˜๋งž๊ฒŒ ์ˆ˜์ • (#243) * test: S3Storage ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#243) * test: StorageService ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€ (#243) * refactor: StorageController ์Šฌ๋ผ์ด์‹ฑ ํ…Œ์ŠคํŠธ ๋ถˆํ•„์š”ํ•œ given์ ˆ ์‚ญ์ œ (#243) * refactor: ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋ถˆํ•„์š”ํ•œ throws์ ˆ ์‚ญ์ œ (#243) * refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์—๋Ÿฌ ์ฝ”๋“œ ์ถ”๊ฐ€ (#243) * refactor: ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ๋ฐ ๊ตฌ๊ธ€ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ • (#243) * refactor: 1์žฅ์ด๋ผ๋„ ์—…๋กœ๋“œ ์‹คํŒจ์‹œ ์˜ˆ์™ธ ๋ฐœ์ƒํ•˜๋„๋ก ๋ณ€๊ฒฝ (#243) * [#230] ๊ฒ€์ƒ‰ํŽ˜์ด์ง€ ๊ตฌํ˜„ (#274) * feat: ๊ฒ€์ƒ‰ mock data ์ถ”๊ฐ€ * fix: LoginWrapper children ํƒ€์ž… ์ˆ˜์ • * feat: search context ์ถ”๊ฐ€ * feat: SearchHeader์— SearchContext ์ ์šฉ * feat: SearchPage ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * fix: ์˜คํƒ€์ˆ˜์ • * ์ถ”๊ฐ€ * refactor: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ * refactor: useFollow๋ถ„๋ฆฌ ๋ฐ follow mutation ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ˆ˜์ค€ ๋ณ€๊ฒฝ * feat: ์œ ์ € ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * fix: ๊ฒ€์ƒ‰ํŽ˜์ด์ง€ ์ง„์ž…์‹œ ์ด์ „ ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์ดˆ๊ธฐํ™” * [#253] Github ํ†ต๊ณ„ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#263) * feat: Github ํ†ต๊ณ„ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#253) * test: ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * test: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#253) * style: ๊ฐœํ–‰ ์ถ”๊ฐ€ (#253) * refactor: ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ (#253) - PlatformExtractor -> PlatformContributionExtractor - PlatformApiRequester -> PlatformContributionApiRequester * refactor: @Profile ์ถ”๊ฐ€ (#253) * refactor: ์ƒ์ˆ˜ -> @value ๋ณ€๊ฒฝ (#253) * refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ถ”๊ฐ€ (#253) * test: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#253) * refactor: Calculator ๊ฐ์ฒด๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌ (#253) - Service์— ์žˆ๋˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ Calculator ๊ฐ์ฒด๋กœ ์ด๋™ - ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ * test: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ * refactor: ํŒจํ‚ค์ง€ ์œ„์น˜ ๋ณ€๊ฒฝ (#253) - ์ธํ„ฐํŽ˜์ด์Šค๋Š” domain, ๊ตฌํ˜„์ฒด๋Š” infrastructure์— ์œ„์น˜ * style: ์ ‘๊ทผ ์ œ์–ด์ž ์‚ญ์ œ (#253) * refactor: Calculator ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž… ๋ณ€๊ฒฝ (#253) * refactor: try-catch ๋ฌธ์œผ๋กœ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง (#253) * test: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ˆ˜์ • (#253) * refactor: Calculator ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž… ๋ณ€๊ฒฝ (#253) - DTO -> Domain Object * [#277] useFollow ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#278) * feat: SearchPage ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * refactor: useFollow๋ถ„๋ฆฌ ๋ฐ follow mutation ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ˆ˜์ค€ ๋ณ€๊ฒฝ * refactor: acceessToken์ด ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€ * chore: hook ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ ์„ค์ • * refactor: ErrorCode ํƒ€์ž… ์ถ”๊ฐ€ * refactor: handleHTTPError ๋ชจ๋“ˆ ๋ถ„๋ฆฌ - handleHTTPError ํ•จ์ˆ˜๋ฅผ utils/error.ts๋กœ ์ด๋™ - ์ƒ์ˆ˜ ๋ฐ ํƒ€์ž… ๋ถ„๋ฆฌ * test: useFollow ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * refactor: ํŒŒ์ผ์ด๋ฆ„ ๋ณ€๊ฒฝ - constants/httpError.ts ๋ฅผ constants/error.ts ๋กœ ๋ณ€๊ฒฝ * refactor: useFollow ์—๋Ÿฌ์ฒ˜๋ฆฌ - accesstoken์ด ์—†์„ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ - client error๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด ๊ตฌํ˜„ * [#124, #262, #275, #276] ์š”์ฒญ ๊ด€๋ จ ์ด์Šˆ ํ•ด๊ฒฐ (#280) * fix: ํ”„๋กœํ•„ ์ˆ˜์ • api ํ˜•์‹ ๋ณ€๊ฒฝ - put๋ฉ”์„œ๋“œ์—์„œ post๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝ - ๋ณ€๊ฒฝ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์—†์„๊ฒฝ์šฐ ๋นˆ ํŒŒ์ผ ๊ฐ์ฒด ์ „์†ก - ํ•œ ์ค„ ์†Œ๊ฐœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„๋„ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด๊ธฐ * fix: ๊ฒ€์ƒ‰ api url ๋ณ€๊ฒฝ * fix: github stats ์š”์†Œ ๋ฐ api url ๋ณ€๊ฒฝ * refactor: ์ตœ์ดˆ ํŽ˜์ด์ง€ ์ง„์ž…์‹œ ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ๋กœ๊ทธ์•„์›ƒ * fix: ๋‚ด ๊ฒŒ์‹œ๋ฌผ์˜ ํ”„๋กœํ•„ ์˜์—ญ์„ ํด๋ฆญํ•˜๋ฉด ๋‚ด ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋„๋ก ์ˆ˜์ • * refactor: ์œ ์ €ํ”„๋กœํ•„, ๋‚ดํ”„๋กœํ•„ ๋ถ„๊ธฐ๋ฅผ ProfilePage์—๊ฒŒ ์œ„์ž„ * feat: ์ตœ์ดˆ ์ง„์ž… ์ดํŽ™ํŠธ app์œผ๋กœ ๋ถ„๋ฆฌ * [#257] ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#264) * feat: ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#257) * feat: ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ๋ฐ ์ข‹์•„์š” ์ทจ์†Œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ๊ตฌํ˜„ (#257) * refactor : โ€ฆ
1 parent 47bef60 commit c5404a5

File tree

63 files changed

+745
-307
lines changed

Some content is hidden

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

63 files changed

+745
-307
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.woowacourse.pickgit.exception.post;
2+
3+
import org.springframework.http.HttpStatus;
4+
5+
public class FeedRequestUserParameterExtractionException extends PostException {
6+
7+
private static final String ERROR_CODE = "P0011";
8+
private static final HttpStatus HTTP_STATUS = HttpStatus.BAD_REQUEST;
9+
private static final String MESSAGE = "์œ ์ € ๊ด€๋ จ ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ถ”์ถœ ์˜ค๋ฅ˜";
10+
11+
public FeedRequestUserParameterExtractionException() {
12+
this(ERROR_CODE, HTTP_STATUS, MESSAGE);
13+
}
14+
15+
private FeedRequestUserParameterExtractionException(
16+
String errorCode,
17+
HttpStatus httpStatus,
18+
String message
19+
) {
20+
super(errorCode, httpStatus, message);
21+
}
22+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.woowacourse.pickgit.exception.post;
2+
3+
import org.springframework.http.HttpStatus;
4+
5+
public class HomeFeedTypeException extends PostException {
6+
7+
private static final String ERROR_CODE = "P0010";
8+
private static final HttpStatus HTTP_STATUS = HttpStatus.INTERNAL_SERVER_ERROR;
9+
private static final String MESSAGE = "ํ™ˆํ”ผ๋“œ ํƒ€์ž…์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.";
10+
11+
public HomeFeedTypeException() {
12+
this(ERROR_CODE, HTTP_STATUS, MESSAGE);
13+
}
14+
15+
private HomeFeedTypeException(String errorCode, HttpStatus httpStatus, String message) {
16+
super(errorCode, httpStatus, message);
17+
}
18+
}

โ€Žbackend/pick-git/src/main/java/com/woowacourse/pickgit/post/application/PostFeedService.javaโ€Ž

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.woowacourse.pickgit.post.application;
22

33

4+
import com.woowacourse.pickgit.exception.authentication.UnauthorizedException;
45
import com.woowacourse.pickgit.exception.post.PostNotFoundException;
56
import com.woowacourse.pickgit.exception.user.UserNotFoundException;
67
import com.woowacourse.pickgit.post.application.dto.PostDtoAssembler;
@@ -34,13 +35,21 @@ public class PostFeedService {
3435
condition = "#homeFeedRequestDto.guest == true",
3536
unless = "#result == null || #result.empty"
3637
)
37-
public List<PostResponseDto> homeFeed(HomeFeedRequestDto homeFeedRequestDto) {
38+
public List<PostResponseDto> allHomeFeed(HomeFeedRequestDto homeFeedRequestDto) {
3839
Pageable pageable = homeFeedRequestDto.getPageable();
3940

4041
if (homeFeedRequestDto.isGuest()) {
4142
return PostDtoAssembler.postResponseDtos(null, postRepository.findAllPosts(pageable));
4243
}
4344

45+
User requestUser = findUserByName(homeFeedRequestDto.getRequestUserName());
46+
47+
return PostDtoAssembler.postResponseDtos(requestUser, postRepository.findAllPosts(pageable));
48+
}
49+
50+
public List<PostResponseDto> followingHomeFeed(HomeFeedRequestDto homeFeedRequestDto) {
51+
Pageable pageable = homeFeedRequestDto.getPageable();
52+
4453
User requestUser = findUserByName(homeFeedRequestDto.getRequestUserName());
4554
List<Post> result = postRepository.findAllAssociatedPostsByUser(requestUser, pageable);
4655

โ€Žbackend/pick-git/src/main/java/com/woowacourse/pickgit/post/presentation/PostFeedController.javaโ€Ž

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.woowacourse.pickgit.authentication.domain.user.AppUser;
55
import com.woowacourse.pickgit.config.auth_interceptor_register.ForLoginAndGuestUser;
66
import com.woowacourse.pickgit.config.auth_interceptor_register.ForOnlyLoginUser;
7+
import com.woowacourse.pickgit.exception.post.HomeFeedTypeException;
78
import com.woowacourse.pickgit.post.application.PostFeedService;
89
import com.woowacourse.pickgit.post.application.dto.request.HomeFeedRequestDto;
910
import com.woowacourse.pickgit.post.application.dto.request.SearchPostRequestDto;
@@ -12,6 +13,7 @@
1213
import com.woowacourse.pickgit.post.presentation.dto.PostAssembler;
1314
import com.woowacourse.pickgit.post.presentation.dto.request.SearchPostsRequest;
1415
import com.woowacourse.pickgit.post.presentation.dto.response.PostResponse;
16+
import com.woowacourse.pickgit.post.presentation.postfeed.FeedType;
1517
import java.util.List;
1618
import lombok.RequiredArgsConstructor;
1719
import org.springframework.data.domain.Pageable;
@@ -31,15 +33,23 @@
3133
public class PostFeedController {
3234

3335
private final PostFeedService postFeedService;
36+
private final List<FeedType> feedTypes;
3437

3538
@ForLoginAndGuestUser
3639
@GetMapping("/posts")
3740
public ResponseEntity<List<PostResponse>> readHomeFeed(
3841
@Authenticated AppUser appUser,
39-
@PageableDefault Pageable pageable
42+
@PageableDefault Pageable pageable,
43+
@RequestParam(required = false, defaultValue = "all") String type
4044
) {
45+
FeedType selectedFeedType = feedTypes.stream()
46+
.filter(feedType -> feedType.isSatisfiedBy(type))
47+
.findAny()
48+
.orElseThrow(HomeFeedTypeException::new);
49+
4150
HomeFeedRequestDto homeFeedRequestDto = new HomeFeedRequestDto(appUser, pageable);
42-
List<PostResponseDto> postResponseDtos = postFeedService.homeFeed(homeFeedRequestDto);
51+
List<PostResponseDto> postResponseDtos = selectedFeedType.find(homeFeedRequestDto);
52+
4353
List<PostResponse> postResponses = PostAssembler.postResponses((postResponseDtos));
4454

4555
return ResponseEntity.ok(postResponses);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.woowacourse.pickgit.post.presentation.postfeed;
2+
3+
import com.woowacourse.pickgit.post.application.PostFeedService;
4+
import com.woowacourse.pickgit.post.application.dto.request.HomeFeedRequestDto;
5+
import com.woowacourse.pickgit.post.application.dto.response.PostResponseDto;
6+
import java.util.List;
7+
import org.springframework.stereotype.Component;
8+
9+
@Component
10+
public class AllFeedType implements FeedType {
11+
12+
private static final String TYPE = "all";
13+
14+
private final PostFeedService postFeedService;
15+
16+
public AllFeedType(PostFeedService postFeedService) {
17+
this.postFeedService = postFeedService;
18+
}
19+
20+
@Override
21+
public boolean isSatisfiedBy(String type) {
22+
return TYPE.equalsIgnoreCase(type);
23+
}
24+
25+
@Override
26+
public List<PostResponseDto> find(HomeFeedRequestDto homeFeedRequestDto) {
27+
return postFeedService.allHomeFeed(homeFeedRequestDto);
28+
}
29+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.woowacourse.pickgit.post.presentation.postfeed;
2+
3+
import com.woowacourse.pickgit.post.application.dto.request.HomeFeedRequestDto;
4+
import com.woowacourse.pickgit.post.application.dto.response.PostResponseDto;
5+
import java.util.List;
6+
7+
public interface FeedType {
8+
9+
boolean isSatisfiedBy(String type);
10+
11+
List<PostResponseDto> find(HomeFeedRequestDto homeFeedRequestDto);
12+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.woowacourse.pickgit.post.presentation.postfeed;
2+
3+
import com.woowacourse.pickgit.authentication.domain.user.AppUser;
4+
import com.woowacourse.pickgit.exception.authentication.UnauthorizedException;
5+
import com.woowacourse.pickgit.exception.post.FeedRequestUserParameterExtractionException;
6+
import java.util.Arrays;
7+
import org.aspectj.lang.JoinPoint;
8+
import org.aspectj.lang.annotation.Aspect;
9+
import org.aspectj.lang.annotation.Before;
10+
import org.springframework.stereotype.Component;
11+
12+
@Aspect
13+
@Component
14+
public class FeedTypeAuthorizator {
15+
16+
@Before("execution(* com.woowacourse.pickgit.post.presentation.PostFeedController.readHomeFeed(..))")
17+
public void checkAuthorization(JoinPoint joinPoint) {
18+
Object[] args = joinPoint.getArgs();
19+
20+
AppUser appUser = findAppUser(args);
21+
String type = findType(args);
22+
23+
if("followings".equalsIgnoreCase(type) && appUser.isGuest()) {
24+
throw new UnauthorizedException();
25+
}
26+
}
27+
28+
public AppUser findAppUser(Object[] args) {
29+
return (AppUser) Arrays.stream(args)
30+
.filter(arg -> arg instanceof AppUser)
31+
.findAny()
32+
.orElseThrow(FeedRequestUserParameterExtractionException::new);
33+
}
34+
35+
public String findType(Object[] args) {
36+
return (String) Arrays.stream(args)
37+
.filter(arg -> arg instanceof String)
38+
.findAny()
39+
.orElseThrow(FeedRequestUserParameterExtractionException::new);
40+
}
41+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.woowacourse.pickgit.post.presentation.postfeed;
2+
3+
import com.woowacourse.pickgit.post.application.PostFeedService;
4+
import com.woowacourse.pickgit.post.application.dto.request.HomeFeedRequestDto;
5+
import com.woowacourse.pickgit.post.application.dto.response.PostResponseDto;
6+
import java.util.List;
7+
import org.springframework.stereotype.Component;
8+
9+
@Component
10+
public class FollowingsFeedType implements FeedType {
11+
12+
private static final String TYPE = "followings";
13+
14+
private final PostFeedService postFeedService;
15+
16+
public FollowingsFeedType(PostFeedService postFeedService) {
17+
this.postFeedService = postFeedService;
18+
}
19+
20+
@Override
21+
public boolean isSatisfiedBy(String type) {
22+
return TYPE.equalsIgnoreCase(type);
23+
}
24+
25+
@Override
26+
public List<PostResponseDto> find(HomeFeedRequestDto homeFeedRequestDto) {
27+
return postFeedService.followingHomeFeed(homeFeedRequestDto);
28+
}
29+
}

โ€Žbackend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedCacheIntegrationTest.javaโ€Ž

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ void readHomeFeed_Guest_LatestPosts() {
6969

7070
// when
7171
queryCounter.startCount();
72-
postFeedService.homeFeed(homeFeedRequestDto);
72+
postFeedService.allHomeFeed(homeFeedRequestDto);
7373

74-
List<PostResponseDto> postResponseDtos = postFeedService.homeFeed(homeFeedRequestDto);
74+
List<PostResponseDto> postResponseDtos = postFeedService.allHomeFeed(homeFeedRequestDto);
7575

7676
// then
7777
assertThat(postResponseDtos)
@@ -88,7 +88,7 @@ void readHomeFeed_Guest_LatestPosts() {
8888
void writePost_LoginUser_DeleteAllCache() {
8989
// given
9090
createMockPosts();
91-
postFeedService.homeFeed(createMockGuestHomeFeedRequest());
91+
postFeedService.allHomeFeed(createMockGuestHomeFeedRequest());
9292

9393
// when
9494
User user = UserFactory.user(USERNAME);
@@ -111,7 +111,7 @@ void writePost_LoginUser_DeleteAllCache() {
111111

112112
// then
113113
queryCounter.startCount();
114-
postFeedService.homeFeed(createMockGuestHomeFeedRequest());
114+
postFeedService.allHomeFeed(createMockGuestHomeFeedRequest());
115115
assertThat(queryCounter.getCount().getValue()).isEqualTo(6L);
116116
}
117117

โ€Žbackend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_Query.javaโ€Ž

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import static org.assertj.core.api.Assertions.assertThat;
1414

1515
import com.woowacourse.pickgit.acceptance.AcceptanceTest;
16+
import com.woowacourse.pickgit.exception.dto.ApiErrorResponse;
1617
import com.woowacourse.pickgit.post.application.dto.response.PostResponseDto;
1718
import io.restassured.common.mapper.TypeRef;
1819
import java.util.List;
@@ -37,10 +38,22 @@ void setUp() {
3738
DANI.์€๋กœ๊ทธ์ธ์„ํ•˜๊ณ ().ํฌ์ŠคํŠธ์—์ข‹์•„์š”๋ฅผ๋ˆ„๋ฅธ๋‹ค(KEVINPOST);
3839
}
3940

40-
@DisplayName("๋กœ๊ทธ์ธ์ผ๋•Œ ํ™ˆ ํ”ผ๋“œ๋ฅผ ์กฐํšŒํ•œ๋‹ค. - ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š” ์—ฌ๋ถ€ true/false")
41+
@DisplayName("๋กœ๊ทธ์ธ์ผ๋•Œ ์ „์ฒด ํ™ˆ ํ”ผ๋“œ๋ฅผ ์กฐํšŒํ•œ๋‹ค. - ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š” ์—ฌ๋ถ€ true/false")
4142
@Test
42-
void readHomeFeed_LoginUser_Success() {
43-
List<PostResponseDto> response = NEOZAL.์€๋กœ๊ทธ์ธ์„ํ•˜๊ณ ().ํ™ˆํ”ผ๋“œ๋ฅผ_์กฐํšŒํ•œ๋‹ค().as(new TypeRef<>() {
43+
void allHomeFeed_LoginUser_Success() {
44+
List<PostResponseDto> response = NEOZAL.์€๋กœ๊ทธ์ธ์„ํ•˜๊ณ ().์ „์ฒด_ํ™ˆํ”ผ๋“œ๋ฅผ_์กฐํšŒํ•œ๋‹ค().as(new TypeRef<>() {
45+
});
46+
47+
assertThat(response)
48+
.hasSize(3)
49+
.extracting("liked")
50+
.containsExactly(false, false, false);
51+
}
52+
53+
@DisplayName("๋กœ๊ทธ์ธ์ผ๋•Œ ํŒ”๋กœ์ž‰ ํ™ˆ ํ”ผ๋“œ๋ฅผ ์กฐํšŒํ•œ๋‹ค. - ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š” ์—ฌ๋ถ€ true/false")
54+
@Test
55+
void followingHomeFeed_LoginUser_Success() {
56+
List<PostResponseDto> response = NEOZAL.์€๋กœ๊ทธ์ธ์„ํ•˜๊ณ ().ํŒ”๋กœ์ž‰_ํ™ˆํ”ผ๋“œ๋ฅผ_์กฐํšŒํ•œ๋‹ค().as(new TypeRef<>() {
4457
});
4558

4659
assertThat(response)
@@ -51,8 +64,8 @@ void readHomeFeed_LoginUser_Success() {
5164

5265
@DisplayName("๋น„ ๋กœ๊ทธ์ธ์ด์–ด๋„ ํ™ˆ ํ”ผ๋“œ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. - ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ์—ฌ๋ถ€๋Š” ํ•ญ์ƒ null")
5366
@Test
54-
void read_GuestUser_Success() {
55-
List<PostResponseDto> response = GUEST.๋Š”().ํ™ˆํ”ผ๋“œ๋ฅผ_์กฐํšŒํ•œ๋‹ค().as(new TypeRef<>() {
67+
void allHomeFeed_GuestUser_Success() {
68+
List<PostResponseDto> response = GUEST.๋Š”().์ „์ฒด_ํ™ˆํ”ผ๋“œ๋ฅผ_์กฐํšŒํ•œ๋‹ค().as(new TypeRef<>() {
5669
});
5770

5871
assertThat(response)
@@ -61,6 +74,14 @@ void read_GuestUser_Success() {
6174
.containsExactly(null, null, null);
6275
}
6376

77+
@DisplayName("๊ฒŒ์ŠคํŠธ๋Š” ํŒ”๋กœ์šฐ ํ”ผ๋“œ ์กฐํšŒ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.")
78+
@Test
79+
void followingHomeFeed_GuestUser_Success() {
80+
ApiErrorResponse response = GUEST.๋Š”().ํŒ”๋กœ์ž‰_ํ™ˆํ”ผ๋“œ๋ฅผ_์กฐํšŒํ•œ๋‹ค().as(ApiErrorResponse.class);
81+
82+
assertThat(response.getErrorCode()).isEqualTo("A0002");
83+
}
84+
6485
@DisplayName("๋กœ๊ทธ์ธ ์ƒํƒœ์—์„œ ๋‚ด ํ”ผ๋“œ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.")
6586
@Test
6687
void readMyFeed_LoginUser_Success() {

0 commit comments

Comments
ย (0)