Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* etc: ํจํค์ง ๊ตฌ์กฐ ๋ณ๊ฒฝ * refactor: ์ํฐํฐ boolean ํ๋์ด๋ฆ is์ ๊ฑฐ TINYINT(1) ์ถ๊ฐ, ์นด๋์ ์ง๋ฌธ ์ ๋ต 2000์ ์ดํ๋ก ์์ * W07 - ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์ ์ง ์กฐํ์ ์ต์ ์์ผ๋ก ์กฐํ๋ ์ ์๋๋ก ๊ตฌํํ๋ค. (#241) * feat: ์ต์ ์์ผ๋ก Workbook์ด ์กฐํ๋๋๋ก ์์ ๋ฐ ํ ์คํธ ์ฝ๋ ์ถ๊ฐ * feat: admin์ด ๋ฌธ์ ์ง์ ์ถ๊ฐํ ๋ admin์ id๊ฐ ์ ์ฅ๋ ์ ์๋๋ก ์ฝ๋ ์ถ๊ฐ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * C06 - ๋ชจ์๋ณด๊ธฐ์์ ์นด๋๋ฅผ ์ต์ ์์ผ๋ก ์ ๊ณตํ๋ค. (#237) * feat: ๋ชจ์๋ณด๊ธฐ ์์ฒญ์ ์นด๋ ์์ฑ ์๊ฐ ์ญ์์ผ๋ก ์ ๊ณต * refactor: ์ต์ ์์ผ๋ก ์นด๋ ์ ๋ ฌํ๋ ๋ฉ์๋ ๋จ์ํ * refactor: ์ต์ ์์ผ๋ก ์นด๋ ์ ๋ ฌํ๋ ๋ฉ์๋ jpql ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ ๋ฐ CardSimpleResponse ์ ๊ฑฐ * feat: ์นด๋ ์ถ๊ฐ, ์์ , ์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#244) * feat: ์นด๋ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ - FormProvider onBlur ์ถ๊ฐ - ๋ฆฌ์ฝ์ผ ์ํ ๊ด๋ฆฌ ๋ฐฉ์ ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> * feat: cardState ์บ์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ ํธ๋ฆฌ๊ฑฐ ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> * feat: ์นด๋ ์ถ๊ฐ validator ๊ตฌํ * feat: ๋ถ๋งํฌ ์์ ๊ตฌํ - debounce Co-authored-by: dudtjr913 <[email protected]> * feat: filter ํ fetch Co-authored-by: dudtjr913 <[email protected]> * feat: ์นด๋ ์์ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: Kyle <[email protected]> * feat: ์นด๋ ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: Kyle <[email protected]> Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * fix: UPDATE ,DELETE ๋ฉ์๋ CORS ํ์ฉ (#243) * feat: DataLoader ์ค์ ์ด๋๋ฏผ ์ ๋ณด ์ถ๊ฐ * UI11 - ํ์ด์ง -> ๋ชจ๋ฌ (#248) * fix: PublicQnACard ํ์ ์ค๋ฅ ์์ * fix: ๋ถ๋งํฌ ์ ๋ ฌ ์ค๋ฅ ์์ Co-authored-by: dudtjr913 <[email protected]> * refactor: ์นด๋ ์ถ๊ฐ ํ์ด์ง -> ๋ชจ๋ฌ Co-authored-by: dudtjr913 <[email protected]> * refactor: ์นด๋ ์์ ํ์ด์ง => ๋ชจ๋ฌ ๊ต์ฒด Co-authored-by: Kyle <[email protected]> * feat: ์นด๋ ์ญ์ confirm ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> * fix: modal์์ ๋ค๋ก๊ฐ๊ธฐ ์ค๋ฅ ์์ * etc: ํ๋ก ํธ์๋ ํ์ดํ๋ผ์ธ ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ ์ถ๊ฐ * W05 - ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๋ค. (#238) * etc: ํจํค์ง ์์น ๋ณ๊ฒฝ * refactor: null๋ก ๊ฒ์ -> ๋๋ฏธ ๋ฌธ์ ์ง, ""๋ก ๊ฒ์ -> ๊ฒฐ๊ณผ์์ ์ผ๋ก ๋ณ๊ฒฝ * etc: ๋ถํ์ํ import ์ ๊ฑฐ * refactor: ์์ธ๋ช ์์ * refactor: ๊ฒ์์ ๋ฐ๋์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅ๋ฐ๋๋ก ์์ , ์ ๋ ฅ๋ฐ์ง ๋ชปํ ์ ์์ธ ํธ๋ค๋ง ์ถ๊ฐ * refactor: ๊ฒ์์ ๋ฐ๋์ ๊ฒ์์ด๊ฐ ํ์ํ๋๋ก ๋๋ฉ์ธ ์์ *๋๋ฏธ ๋ฌธ์ ์ง ๊ฒ์์ ์ฌ์ฉ๋๋ NoSearchKeyword ์ ๊ฑฐ) * W06 - ๋ฌธ์ ์ง ๋ฌธ์ํ, ์ธ์ ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ค. (#247) * etc: ํจํค์ง ์์น ๋ณ๊ฒฝ * refactor: null๋ก ๊ฒ์ -> ๋๋ฏธ ๋ฌธ์ ์ง, ""๋ก ๊ฒ์ -> ๊ฒฐ๊ณผ์์ ์ผ๋ก ๋ณ๊ฒฝ * test: ๋ฌธ์ ์ง ๋ฌธ์ํ ํ ์คํธ์ ๋นํ์ ์กฐํ, ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ์ถ๊ฐ * refactor: ๋ฌธ์ ์ง๋ณ ์นด๋ ๋ชจ์๋ณด๊ธฐ API์ ๋ชจ๋ ์นด๋ ํ๋๋ฅผ ์ฃผ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฌธ์ ์ง ์กฐํ์ ๊ฒ์์ ํ์ํ ํ๋๋ง ๋ฐํํ๋๋ก ์์ * refactor: ๊ฐ๊ฐ ๋ฌธ์ํ ํ ์คํธ์ ์กด์ฌํ๋ AuthService, MockMvc ๋ถ๋ชจ ํ ์คํธ๋ก ์ด๋ * refactor: ํ์์๋ ์๋ตํ๋ ์ ๊ฑฐ, ํค์๋ ์์ด ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ํ ์คํธ ์ ๊ฑฐ * etc: ์ธ์ฆ๊ด๋ จ ์ธํฐ์ ํฐ์์ /api/workbooks ์ ์ธ, ํ ํฐ ์ถ์ถ์ ์คํจํ๋ฉด null์ ๋ฐํํ๋๋ก ์์ * etc: ์ฝ๋ ์ ๋ฆฌ * test: ๋ฌธ์ ์ง ์ธ์ํ ์คํธ์ ๋นํ์ ๋ฌธ์ ์ง ์กฐํ, ๊ฒ์ ํ ์คํธ ์ถ๊ฐ * refactor: queryParam ์ฌ์ฉํ๋๋ก ์์ * feat: ๋ฌธ์ ์ง์ ์ถ๊ฐ, ์์ , ์ญ์ ํ๋ค. (#252) * feat: ํด์ํ๊ทธ ์ปดํฌ๋ํธ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: Toggle ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฌธ์ ์ง ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฌธ์ ์ง ์์ ๊ธฐ๋ฅ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: ๋ฌธ์ ์ง ์ญ์ ๊ธฐ๋ฅ ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * W08 - ๋ฌธ์ ์ง ์ถ๊ฐ, ์กฐํ, ์์ , ์ญ์ ๊ธฐ๋ฅ์ User๋ฅผ ๋์ ํ๋ค. (#249) * feat: Workbook ์ถ๊ฐ api ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: put ๋ฉ์๋์ params ์ธ์๋ก ๋ฐ๋๋ก ์์ * feat: Workbook ์์ api ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * etc: test yml์ ์๋ show-sql true ์ญ์ * feat: Workbook ์ญ์ api ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ํ์์๋ ๋ฉ์๋ ์ญ์ ๋ฐ ์ผ๋ถ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: ์ํํธ ์ญ์ ๋ฅผ workbook ์ํฐํฐ ๋ณ๊ฒฝ๊ฐ์ง๋ฅผ ์ด์ฉํ๋๋ก ์์ * refactor: ๋ฉ์๋๋ช ์ ์๋ owned๋ฅผ author๋ก ์์ * feat: ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#260) * feat: ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: ๊ณต์ ํ์ด์ง ์์ธ ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * refactor: recoil state ์ ๋ฆฌ - public ์ญ์ - initialState ํ์ผ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * refactor: hook ์ ๋ฆฌ Co-authored-by: dudtjr913 <[email protected]> * refactor: custom hook์ผ๋ก ๋ก์ง ์ด๋ Co-authored-by: Kyle <[email protected]> Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * B37 - ๋ฐฑ์๋ ๋ ์ด๋ธ์ด ๋ถ์ง ์์ ๊ฒฝ์ฐ ๋ฐฑ์๋ ์ ํจ์ค ๋น๋๋ฅผ ํ์ง ์๋๋ค. (#266) * etc: ๋ถํ์ํ Jenkinsfile ์ ๊ฑฐ * etc: ๋ฐฑ์๋ ํ๊ฒฝ ์คํ ๋ฐฉ๋ฒ ์์ * B35 - api ์์ฒญ์ intelliJ ์์ ๋ณด๋ผ ์ ์๋๋ก http ํ์ผ์ ๋ง๋ ๋ค. (#258) * feat: ์นด๋์ ์ํฌ๋ถ ๊ด๋ จ ์์ฒญ ํ์ผ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์ญ์ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * feat: ํด์ฆ ์์ฑ api ์์ฒญ ์ถ๊ฐ * feat: ๊ด๋ฆฌ์ ๋ฌธ์ ์ง ์ถ api ์์ฒญ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๋ฐ ์ ์ ๊ด๋ จ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * B36 - ์ผ๋ฐ ์ ์ ์์ฑ์ DataLoader ์ ์ถ๊ฐํ๋ค. (#263) * feat: ๋ก์ปฌ ํ๊ฒฝ์ ์ผ๋ฐ ์ ์ ์ ๋ณด ์ถ๊ฐ * refactor: DataJpaTest ์์ show sql ์ค์ false ๋ก ๋ณ๊ฒฝ * refactor: dml์ ์์๋ก ์์ฑํ ์ ์ ์ ๋ณด ์ถ๊ฐ * feat: DataLoader๋ก ์ ์ฅ๋๋ ๋ฌธ์ ์ง ์ค ์ฒซ ์ธ ๊ฐ๋ ์ด๋๋ฏผ์ผ๋ก ๋ฑ๋กํ๊ณ ๋๋จธ์ง๋ ์ผ๋ฐ ์ ์ ๋ก ๋ฑ๋ก * C07 - Card CRUD์ ์ ์ ์ถ๊ฐ (#256) * fix&feat: CardUpdate ์ 2๊ฐ ์ถ๊ฐ๋๋ ๋ฒ๊ทธ ์์ ๋ฐ ๋ก๊ทธ์ธํ ํ์๋ง ์นด๋ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat&test: ์นด๋ ์์ , ์ญ์ ๊ธฐ๋ฅ์ ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ๊ฐ๋ฅํ๋๋ก ๊ตฌํ ๋ฐ ํ ์คํธ * refactor&test: soft delete ๋ฐฉ์ ์์ ๋ฐ ์นด๋ CUD ๋ฐ ๋๋ฉ์ธ ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * refactor: Workbook null ํ์ฉํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ ์ํฌ๋ถ ์ ๊ฑฐ * etc: jenkins ํ ์คํธ ์ปค๋ฐ * feat: ์นด๋ ์ญ์ ์ ๋ฌธ์ ์ง์์๋ ์ญ์ ๋๋๋ก ๋ณ๊ฒฝ * fix: ์นด๋ ์ญ์ ์ workbook์ด ๋์ผ ๋ ์กฐ๊ฑด ์ถ๊ฐ ๋ฐ C07 ๋ฐ์ ์๋ ๋ณ๊ฒฝ์ฌํญ ์ถ๊ฐ (#273) * feat: ๋ฐ๋ก ํ์ด๋ณด๊ธฐ ๊ธฐ๋ฅ ๋ฐ ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ UI๋ฅผ ๊ตฌํํ๋ค (#276) * etc: ํ๊ฒฝ์ค์ - react-refresh - fort-ts-checker-webpack-plugin Co-authored-by: dudtjr913 <[email protected]> * etc: ํ๊ฒฝ์ค์ - babel.config.js ์ ๋ฆฌ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฐ๋ก ํ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ * etc: cross-env ์ถ๊ฐ - QuizPage์์ผ๋ก Header ์ด๋ Co-authored-by: Kyle <[email protected]> * fix: ๋ฌธ์ ์ง์ด ์์ ๊ฒฝ์ฐ ํด์ฆ ์ค์ ํ์ด์ง๋ก ์ด๋ ๋ชปํ๋๋ก ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> * feat: SelectBox ์ปดํฌ๋ํธ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: SelectBox Modal UI ๊ตฌํ ์๋ฃ Co-authored-by: Kyle <[email protected]> * etc: ํ์ดํ๋ผ์ธ ์์ ๋ณ๊ฒฝ - test ํ build Co-authored-by: Kyle <[email protected]> Co-authored-by: imgwang-yeol <[email protected]> * fix: http-file-appender.xml ์คํ ์์ * fix: ์คํ๋ง ์ฌ์์์ ๋ก๊ทธ ํ์ผ ์ ๋ชฉ์ ๋ ์ง ํฌํจ๋๋๋ก ์์ (#278) * feat: ๋ค์์ ๋ ๋ณด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (#280) Co-authored-by: dudtjr913 <[email protected]> * fix: ํด์ฆ ์์ฑ์ ๋ ๋ณด๊ธฐ ์ทจ์ ๊ธฐ๋ฅ ์ค์๋ ์์ * etc: application ์ค์ ์์ ๋ก๊น ์ค์ ์ ๊ฑฐ (#282) * feat: ๋ด ๋ฌธ์ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๊ธฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#284) * etc: import ์ ๋ฆฌ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฌธ์ ์ง์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * fix: ์ ์ฒด์ ์ธ ์ฝ๋ ํ๋ฆ ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> Co-authored-by: imgwang-yeol <[email protected]> * F18 - ์ ์ฒด์ ์ธ ๋์์ธ ๋ฆฌํฐ์น (#286) * feat: ๊ฒ์ ์ค ๊ฐ๊ตฌ๋ฆฌ ์ด๋ฏธ์ง ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: PublicCardLoadable ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * etc: textarea ํฌ์ปค์ค ์ ์ฉ Co-authored-by: dudtjr913 [email protected] [email protected] <[email protected]> Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * W09 - ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ๊ฐ๊ธฐ (#267) * fix&feat: CardUpdate ์ 2๊ฐ ์ถ๊ฐ๋๋ ๋ฒ๊ทธ ์์ ๋ฐ ๋ก๊ทธ์ธํ ํ์๋ง ์นด๋ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat&test: ์นด๋ ์์ , ์ญ์ ๊ธฐ๋ฅ์ ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ๊ฐ๋ฅํ๋๋ก ๊ตฌํ ๋ฐ ํ ์คํธ * refactor&test: soft delete ๋ฐฉ์ ์์ ๋ฐ ์นด๋ CUD ๋ฐ ๋๋ฉ์ธ ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * feat: ๋ด ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ ์ด์ ๊ตฌํ * refactor: Workbook null ํ์ฉํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ ์ํฌ๋ถ ์ ๊ฑฐ * feat: Card ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * refactor: workbook์์ ์นด๋๋ฅผ ์ถ๊ฐํ๋๋ก ์์ * refactor: scrapCard ๋ฉ์๋ ์์ * refactor&test: ๋ฉ์๋ ๋ถ๋ฆฌ ๋ฐ ํ ์คํธ ์ถ๊ฐ * test: ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ์ค๊ธฐ ๊ด๋ จ ํ ์คํธ ๊ตฌํ * fix: ํ ์คํธ ๋ฉ์๋๋ฅผ delete -> post๋ก ์์ * feat: ํผ์ผ์ด, ์ค์ฆ ๋ฆฌ๋ทฐ ๋ฐ์ ๋ฐ DataLoader ์ด๋๋ฏผ์ ์ profile url ๋ณ๊ฒฝ * refactor: ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ์ค๊ธฐ ์๋ต ๋ณ๊ฒฝ * refactor: ์นด๋ ์คํฌ๋ฉ ์ ์นด๋ ์์ด๋์ ๋ํ ๊ฒฝ์ฐ์ ์ ์ถ๊ฐ ๋ฐ ํ ์คํธ ์ถ๊ฐ * test: ์์ฒญ์ด ๋น์ด์๋ ๊ฒฝ์ฐ์ ๋ํ ํ ์คํธ ์ถ๊ฐ * refactor: ํผ์ผ์ด ๋ฆฌ๋ทฐ ๋ฐ์ ๋ฐ ํ ์คํธ ์ถ๊ฐ * W10 - ๋ฌธ์ ์ง ์ญ์ ์ ๊ฐ์ง๊ณ ์๋ ์นด๋๋ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ฝ๋ ์ผ๋ถ๋ฅผ ๋ฆฌํฉํฐ๋งํ๋ค. (#271) * refactor: WorkbookService ๋ด ๋ฉ์๋ ๋ถ๋ฆฌ * feat: ๋ฌธ์ ์ง ์ญ์ ์ ์นด๋๋ ์ญ์ ๋๋๋ก ์์ * refactor: ์์ฑ์ ๊ฒ์ฆ ๋ก์ง์ ์๋น์ค๋ก ์ด๋ ๋ฐ ํ ์คํธ ์์ * refactor: ๋ฌธ์ ์ง ์ญ์ ์ ์นด๋ ์ญ์ ํ ์คํธ ์ถ๊ฐ ๋ฐ ๊ด๋ จ ๋ฉ์๋ ์์ * refactor: ๋ฌธ์ ์ง ์์ฑ api created uri ๋ณ๊ฒฝ * refactor: ํผ์ผ์ด ๋ฆฌ๋ทฐ ๋ฐ์ * refactor: ์ค๊ฐ๊ณฐ ๋ฆฌ๋ทฐ ๋ฐ์ * refactor: ํ์์๋ ๋ฉ์๋ ์ญ์ ๋ฐ ๋ฉ์๋๋ช ์์ * refactor: ๋ผ์ฐํฐ ์ ๋ฆฌ (#290) Co-authored-by: dudtjr913 <[email protected]> * etc: react-ga ์ถ๊ฐ (#293) Co-authored-by: Kyle <[email protected]> * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ Co-authored-by: Kyle <[email protected]> * etc: main.js ํ์ผ ์ด๋ฆ ๋ฒ์ ์ ๋ง๋๋ก ๋ณ๊ฒฝ * T01 - ๋ฌธ์ ์ง CRUD์ ํ๊ทธ ์ถ๊ฐ (#275) * feat: TagName ๋๋ฉ์ธ ์์ฑ * feat: TagNames ๋๋ฉ์ธ ์์ฑ * feat: ํ๊ทธ ์ํฐํฐ ์์ฑ * feat: TagRepository ์ถ๊ฐ * feat: Tag ์์ฑ ์ null ๊ฒ์ฆ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง๊ณผ ํ๊ทธ์ n:m ๊ด๊ณ์ ์ค๊ฐ ํ ์ด๋ธ ์์ฑ ๋ชฉ์ ์ผ๋ก WorkbookTag ์ํฐํฐ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ์ฐ์ด๋ DTO์ ํ๊ทธ ๊ด๋ จ ํ๋ ๋ฐ ๊ฒ์ฆ ์ถ๊ฐ * feat: Tag๋ฅผ String์ผ๋ก ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * feat: TagService ์ถ๊ฐ * feat: ์์ฑ์ ์ธ์๋ฅผ ํ๋์ ๊ฐ์ ํ์ ์ผ๋ก ์์ , null ํ ์คํธ ์ถ๊ฐ * feat: ์์ธ ๋ฉ์์ง ์์ * feat: Tags ๋ถ๋ฆฌ * feat: ๋ฌธ์ ์ง ์ถ๊ฐ์ ํจ๊ป ํ๊ทธ๋ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ๊ณผ ์ญ์ ์ ํ๊ทธ ์ถ๊ฐ * feat: ๋ฌธ์ํ ํ ์คํธ ์์ * etc: import ์ ๋ฆฌ * etc: ddl, dml, DataLoader ์ถ๊ฐ * etc: ํ ์ด๋ธ ์์ฑ ์ ํ๋ ์ด๋ฆ name์ผ๋ก ์์ฑ๋๊ฒ ๋ณ๊ฒฝ * feat: WorkbookTagRepository ์ถ๊ฐ * test: Workbook ์ถ๊ฐ, ์ญ์ ์ WorkbookTag ์ Tag์ cascade์ ๋ํ ํ ์คํธ ์ถ๊ฐ * test: ๋ฌธ์ ์ง ์์ ์์ฒญ์์ opened ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ํตํฉ ํ ์คํธ์์ ๋ฐ์ดํฐ ๋ก๋๊ฐ ์คํ๋์ด ์ถ๊ฐ * refactor: TagService๋ก TagRequest๋ฅผ ์ ๋ฌํ๋๋ก ์์ , TagNames ์ญ์ ์ค๋ณต ์ ๊ฑฐ ๋ก์ง์ converTags ๋ฉ์๋๋ก ์์ * feat: WorkbookTag ์ํํธ ๋๋ฆฌํธ๋ก ์์ * feat: ์กฐ์ค ๋ฆฌ๋ทฐ ๋ฐ์ (from -> of, new ArrayList<>() ์ญ์ ) * fix: Post ์์ฒญ์ tags๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๋ฐ์ํ๋ ์๋ฌ ์์ * fix: ๋ฌธ์ ์ง api ์์ (#296) Co-authored-by: Kyle <[email protected]> * W13 - ๊ณต์ ๋ฌธ์ ์ง ์์ธ๋ณด๊ธฐ api๋ฅผ ๊ตฌํํ๋ค. (#295) * feat: TagName ๋๋ฉ์ธ ์์ฑ * feat: TagNames ๋๋ฉ์ธ ์์ฑ * feat: ํ๊ทธ ์ํฐํฐ ์์ฑ * feat: TagRepository ์ถ๊ฐ * feat: Tag ์์ฑ ์ null ๊ฒ์ฆ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง๊ณผ ํ๊ทธ์ n:m ๊ด๊ณ์ ์ค๊ฐ ํ ์ด๋ธ ์์ฑ ๋ชฉ์ ์ผ๋ก WorkbookTag ์ํฐํฐ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ์ฐ์ด๋ DTO์ ํ๊ทธ ๊ด๋ จ ํ๋ ๋ฐ ๊ฒ์ฆ ์ถ๊ฐ * feat: Tag๋ฅผ String์ผ๋ก ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * feat: TagService ์ถ๊ฐ * feat: ์์ฑ์ ์ธ์๋ฅผ ํ๋์ ๊ฐ์ ํ์ ์ผ๋ก ์์ , null ํ ์คํธ ์ถ๊ฐ * feat: ์์ธ ๋ฉ์์ง ์์ * feat: Tags ๋ถ๋ฆฌ * feat: ๋ฌธ์ ์ง ์ถ๊ฐ์ ํจ๊ป ํ๊ทธ๋ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ๊ณผ ์ญ์ ์ ํ๊ทธ ์ถ๊ฐ * feat: ๋ฌธ์ํ ํ ์คํธ ์์ * etc: import ์ ๋ฆฌ * etc: ddl, dml, DataLoader ์ถ๊ฐ * etc: ํ ์ด๋ธ ์์ฑ ์ ํ๋ ์ด๋ฆ name์ผ๋ก ์์ฑ๋๊ฒ ๋ณ๊ฒฝ * feat: WorkbookTagRepository ์ถ๊ฐ * test: Workbook ์ถ๊ฐ, ์ญ์ ์ WorkbookTag ์ Tag์ cascade์ ๋ํ ํ ์คํธ ์ถ๊ฐ * test: ๋ฌธ์ ์ง ์์ ์์ฒญ์์ opened ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ํตํฉ ํ ์คํธ์์ ๋ฐ์ดํฐ ๋ก๋๊ฐ ์คํ๋์ด ์ถ๊ฐ * refactor: TagService๋ก TagRequest๋ฅผ ์ ๋ฌํ๋๋ก ์์ , TagNames ์ญ์ ์ค๋ณต ์ ๊ฑฐ ๋ก์ง์ converTags ๋ฉ์๋๋ก ์์ * feat: WorkbookTag ์ํํธ ๋๋ฆฌํธ๋ก ์์ * feat: ์กฐ์ค ๋ฆฌ๋ทฐ ๋ฐ์ (from -> of, new ArrayList<>() ์ญ์ ) * feat: ์ธํฐ์ ํฐ ํต๊ณผํ์ง ์๋ ๊ณต์ ๋ฌธ์ ์ง ์กฐํ ๊ฒฝ๋ก ์ถ๊ฐ * feat: ์ํฉ์ ๋ฐ๋ฅธ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํด CardResponse์ JsonInclude ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ์กฐํ api ๊ตฌํ * test: ๊ณต์ ๋ฌธ์ ์ง ์์ธ์กฐํ api ํ ์คํธ ์ถ๊ฐ * refactor: WorkbookCardResponse ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ๋ณด๊ธฐ api ๋ฌธ์ํ ๋ฐ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * refactor: WorkbookCardResponse ์ ํ๊ทธ ์๋ต ํ๋ ์ด๋ฆ ๋ณ๊ฒฝ Co-authored-by: seunghyun <[email protected]> * etc: ddl, dml ๋ณ๊ฒฝ * refactor: ์ ์ฒด์ ์ธ ๋์์ธ ์์ ๋ฐ ๋ฒ๊ทธ ํด๊ฒฐ (#299) Co-authored-by: Kyle <[email protected]> * fix: ๊ณต์ ํ์ด์ง์ ํน์ ์์ ์ ์บ์ฑ ๋ฌดํจํ Co-authored-by: Kyle <[email protected]> * etc: ๋ฒ์ 0.2.0 ์ ๋ฐ์ดํธ Co-authored-by: Kyle <[email protected]> * C09 - ๋ก๊ทธ์ธํ ํ์๋ง ๋ค์์ ๋๋ณด๊ธฐ ๊ฐ๋ฅํ๋๋ก API ์์ (#288) * feat&test: ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ๋ค์์ ๋๋ณด๊ธฐ ๊ฐ๋ฅํ๋๋ก ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ํ ์คํธ * etc: ์คํ ์์ * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ * etc: ๋ก๊ทธ์ธ oauth ์ ๋ณด botobo-team ์ ๋ณด๋ก ๊ต์ฒด (#306) * refactor: ๋ชจ๋ฌ ๊ด๋ จ ์ด์ ์ ๋ฆฌ (#309) - ์นด๋ ์ถ๊ฐ, ์์ - selectbox Co-authored-by: dudtjr913 <[email protected]> * refactor: ์๊ท๋ชจ ๋ฆฌํฉํ ๋ง (#317) * etc: ์ถฉ๋ ํด๊ฒฐ * refactor: CardsPage ๋ฆฌํฉํ ๋ง - cardInfo ์ง์ญ ์ํ๋ก ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> * refactor: ์ ์ญ ์ํ -> ์ง์ญ ์ํ๋ก ๋ณ๊ฒฝ - publicCardState Co-authored-by: dudtjr913 <[email protected]> * etc: xmldom ์ทจ์ฝ์ฑ ํด๊ฒฐ Co-authored-by: Kyle <[email protected]> Co-authored-by: seovalue <[email protected]> Co-authored-by: Kyle <[email protected]> * refactor: ํ์ด์ง ํค๋ -> ๋ฉ์ธ ํค๋ ๊ต์ฒด (#319) Co-authored-by: Kyle <[email protected]> * refactor: ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง (#321) * refactor: ๋ฆฌํฉํ ๋ง - cardform autofocus - workbookadd ๋น ํ๊ทธ ์ ๋ ฅ ์ค๋ฅ ์์ - route ๊ฒฝ๋ก ์ ๋ฆฌ - ๋ก๋ฉ ์ ๋๋ฉ์ด์ ์์ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ด ๋ฌธ์ ์ง์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ default option ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * C10 - ๋ ๋ณด๊ธฐ ์นด๋ ๋ฑ๋ก ๊ด๋ จ ํ ์คํธ ๋ฆฌํฉํ ๋ง์ ํ๋ค. (#303) * test: ํด์ฆ๋ฅผ ์ํ ์นด๋์ ๋๋ณด๊ธฐ ์ต์ ์ด false ๋ก ๋ฐ๋์๋์ง ํ์ธํ๋ค * etc: ์นดํ ๊ณ ๋ฆฌ ๊ด๋ จ ๋ด์ฉ ์์ * etc: import.sql ์ ๊ฑฐ * fix: ๋ ๋ณด๊ธฐ ํฌํจ ํด์ฆ ์์ฑ ์ธ์ ํ ์คํธ ๋ฒ๊ทธ ์์ * etc: ์กฐ์ค ๋ฆฌ๋ทฐ ๋ฐ์ ๋ฐ ํด์ฆ ์์ฒญ ์ ๋ณด Host ๋ณ๊ฒฝ * W11, W12, W14 - ์์ ์ ๋ฌธ์ ์ง๋ง ์นด๋ ๋ชจ์๋ณด๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฌธ์ ์ง ์ธ์ํ ์คํธ ๋ฆฌํฉํฐ๋ง (#307) * feat: ์นด๋ ๋ชจ์๋ณด๊ธฐ์์ ์์ ์ ๋ฌธ์ ์ง๋ง ๋ณผ ์ ์๋๋ก ์์ * refactor: ๋ฌธ์ ์ง ์ธ์ํ ์คํธ ์ ์ฒด ๋ฆฌํฉํฐ๋ง * docs: ๋ฌธ์ ์ง ๊ฐ์ ธ์ค๊ธฐ asciidoc ์ถ๊ฐ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * refactor: ์ค๊ฐ๊ณฐ ํผ๋๋ฐฑ ๋ฐ์ * B38 - RequestBuilder ๋ฆฌํฉํ ๋ง (#310) * refactor: RequestBuilder ๋ฆฌํฉํ ๋ง ๋ฐ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ ๊ฑฐ * etc: DocumentationUtils host๋ฅผ botobo.kro.kr๋ก ๋ณ๊ฒฝ * refactor: PK ๋ฆฌ๋ทฐ ๋ฐ์ * refactor: parameter ์์ด ์ฌ์ฉํ๋ ์ ์ ์์ ํ ์คํธ ์ ์ฌ์ฉํ๋ auth๋ฅผ failAuth๋ก ๋ช ์นญ ๋ณ๊ฒฝ * etc: requestBuilder ์ค๋ช ์ถ๊ฐ * refactor: ๋ฌธ์ ์ง ๊ฐ์ ธ๊ฐ๊ธฐ์์ [๊ณต์ ] ์ถ๊ฐ (#324) Co-authored-by: Kyle <[email protected]> * etc: submodule ๋๊ธฐํ * B41 - ๊ฒฝ๋ก์ HttpMethod๋ฅผ ์ด์ฉํด ์ธํฐ์ ํฐ ์ค์ ๊ฐ๋ฅํ๋๋ก ์์ ๋ฐ /api/workbooks ๊ฒฝ๋ก๋ฅผ ์ธํฐ์ ํฐ์ ์ถ๊ฐํ๋ค. (#322) * feat: ๊ฒฝ๋ก์ HttpMethod๋ก interceptor ์ค์ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * test: PathMatcherInterceptor ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * feat: ํด์ฆ ํ์ด์ง์ ์นด๋ ์ฌ๋ผ์ด๋๋ฅผ ๊ตฌํํ๋ค (#326) * feat: ์นด๋ ์ฌ๋ผ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ * fix: ์นด๋ ์์ง์ด๋ ์๊ฐ 0.1์ด๋ก ์์ * Q15 - ํด์ฆ ์ค์ ์ ํด์ฆ ๊ฐ์๋ฅผ ์ถ๊ฐํ๋ค. (#316) * feat&test: Quiz ์์ฑ ์ ํ์์ธ์ง ํ์ธ ๋ฐ ํด์ฆ ์์ฒญ์ ๊ฐ์ ์ถ๊ฐ * etc: develop ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * feat: ๋ด ์ํฌ๋ถ์์ ์์ฑ๋ ํด์ฆ์ธ์ง ๊ฒ์ฆ ์ถ๊ฐ * feat: ๋ฉ์ธ ํค๋์ ๋ฉ๋ด๋ฅผ ๊ตฌํํ๋ค (#330) * feat: ๋๋กญ๋ค์ด ๋ฉ๋ด ๊ตฌํ * feat: LogoutPage ๊ตฌํ * etc: ๋ฆฌ๋ทฐ ๋ฐ์ - ์ปจ๋ฒค์ - role naming - ์ ๋๋ฉ์ด์ ์๋ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * feat: ์ ์ ์ ๋ง์ด ํ์ด์ง๋ฅผ ๊ตฌํํ๋ค (#333) * etc: ํ์์๋ import ๊ตฌ๋ฌธ ์ ๋ฆฌ * feat: ์ ์ ํ๋กํ ํ์ด์ง ๊ตฌํ * etc: ImageEditor ์์น ๊ณ ์ * feat: TextField ์ถ๊ฐ * fix: z-index ์ค๋ฅ ์์ * etc: ํ์์๋ css ์์ฑ ์ ๊ฑฐ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * U06 - ๋ง์ดํ์ด์ง ํ๋กํ ์ฌ์ง ์์ api ๊ตฌํ (#332) * feat: ๋ด ์ ๋ณด ์์ api ๋ผ๋ ์ฝ๋ ์์ฑ * feat: S3 ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: Multipartfile ์ ๋ก๋ ๊ด๋ จ ์ค์ ์ถ๊ฐ * feat: FileNameGenerator์ BASE DIR์ถ๊ฐ ๋ฐ ์๋ต ๋ฐํํ๋๋ก ์์ * feat: ์๋ธ๋ชจ๋ ์์ ๋ฐ build.gradle ์ ๋ฐ์ดํธ * etc: ์๋ธ๋ชจ๋ ์์ ๋ฐ์ * Merge develop into feature/U06-B * feat: S3Uploader, FileNameGenerator url ๋ฃจํธ ๋ณ๊ฒฝ * feat: S3 ๊ด๋ จ ์์ธ ํด๋์ค ์ถ๊ฐ ๋ฐ ํธ๋ค๋ง * etc: ํ ์คํธ์ ํ์ํ ๋ฆฌ์์ค ํ์ผ ์ถ๊ฐ * test&feat: S3 ํ ์คํธ๋ฅผ ์ํ ์ค์ ํ์ผ ์ถ๊ฐ ๋ฐ ํ ์คํธ ๊ตฌํ * etc: ์ฝ๋ ํฌ๋งทํ * feat: 10MB ์ด์์ ํ์ผ ์์ฒญ ์ ์์ธ์ฒ๋ฆฌ ๊ตฌํ * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ * etc: Merge develop into feature/U06-B * feat&test: MultipartFile์ด ๋น์ด์๊ฑฐ๋ ์๋ ๊ฒฝ์ฐ ๋ํดํธ ์ด๋ฏธ์ง๋ก ๋์ฒด * etc: println ์ญ์ * refactor: ๋ถํ์ํ ์ฃผ์ ์ญ์ ๋ฐ ์ค์ฆ ๋ฆฌ๋ทฐ ๋ฐ์ * feat: ์ค๊ฐ๊ณฐ ๋ฆฌ๋ทฐ ๋ฐ์ * feat: ๊ฒ์ ํ์ด์ง UI ๋ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#334) * feat: ๊ณต์ ๊ฒ์ ํ์ด์ง ๋ผ์ฐํ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ญ์ * feat: util type ์ถ๊ฐ - ValueOf: ๊ฐ์ฒด์ value๋ฅผ ํ์ ์ผ๋ก ์ง์ ํด์ฃผ๋ ์ญํ * feat: ๊ฒ์ ๊ธฐ๋ฅ api์ ์ฉ * feat: searchState ํ์ผ ์ถ๊ฐ - search ๊ด๋ จ recoil(atom) ๋ชจ์ * feat: ํ๊ทธ, ์์ฑ์ ๊ฒ์ UI ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๊ฒ์ ์ปดํฌ๋ํธ์ ํ์ฅ์ฑ์ ์ํด ์ ์ฐํ๊ฒ ๋ณ๊ฒฝ * refactor: ๋ณ์ ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์ถ์ํ๋ searchResponse ์ ๊ฑฐ - response๋ผ๋ ์ด๋ฆ์ด ์ ์ ํ์ง ์์ ๊ฒ ๊ฐ์์ result๋ก ๋ณ๊ฒฝ - searchResponse์์ ๋ ๊ฐ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ณด๋ ํ์ฅ์ฑ์ด ์ด๋ ต๊ณ , ํ์ ๊ฐ๋๋ฅผ ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ ๋ณ๊ฒฝ * feat: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ํํฐ ๊ธฐ๋ฅ ์ถ๊ฐ ๊ตฌํ * fix: ๊ฒ์ํ ๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด์ง ์๋๋ก ์์ * fix: ํค์๋๊ฐ ์ ๋ ฅ๋์ง ์์์ ๋ api ์์ฒญ ๋ณด๋ด๋ ๋ฒ๊ทธ ์์ * fix: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง์ ์ฒซ ๋๋๋ง ์ ๋๊ธฐํ๊ฐ ๋์ง ์๋ ๋ฒ๊ทธ ํด๊ฒฐ * feat: intersection Observer ์ ์ฉ - ์ธํผ๋ํฐ ์คํฌ๋กค * refactor: ๊ณต์ ๋ฌธ์ ์ง ์ปดํฌ๋ํธ๋ก intersection ์ด๋ - ๊ณต์ ๊ฒ์ ํ์ด์ง์ ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ๋ ๊ตฐ๋ฐ์์ ์ฌ์ฉํด์ผ ํ๊ธฐ์ ๋์ ๊ณตํต์ ์ธ ๊ณต์ ๋ฌธ์ ์ง ์ปดํฌ๋ํธ๋ก ์ด๋ * refactor: keyword, type์ recoil์์ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๋๋ก ๋ณ๊ฒฝ - onClickItem ์ญ์ , ์ด์ ๋ ํ์ํ์ง ์์ ์ ๋ณด์๊ธฐ ๋๋ฌธ - ๊ฒ์ ํ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํ์ ๋, ํด๋น ํญ์ด ์ ์ง๋๋๋ก ๋ณ๊ฒฝ * refactor: ๊ฒ์ ํ ๋ค์ ๋์์์ ๋, ๋ฐ์ดํฐ๊ฐ ๋ณด์กด๋๋๋ก ๋ณ๊ฒฝ * fix: ๋ฌดํ ์คํฌ๋กค ๋ฒ๊ทธ ์์ ๋ฐ startIndex 1์ฉ ์ฆ๊ฐํ๋๋ก ๋ณ๊ฒฝ * fix: ํค์๋์ ์ ๋ชฉ์ผ๋ก ๊ฒ์ํ ์ ์๋๋ก ์์ - ๊ฒ์ ํ์ด์ง์ ๋ค์ด์์ ๋ ํญ์ ๊ฒ์์ด๊ฐ ์ด๊ธฐํ๋๋๋ก ๋ณ๊ฒฝ - ๊ฒ์ ์๋ ์ค์ผ ๋ loading true๋ก ๋ณ๊ฒฝ * fix: ํํฐ๋ง ๋ฒํผ ํด๋ฆญ ์ ์ด์ ๋ฐ์ดํฐ ๋์ ๋๋ ๋ฒ๊ทธ ํด๊ฒฐ * refactor: ์ข์์ like => heart ๋ณ๊ฒฝ * feat: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ค์ผ๋ ํค ๊ตฌํ * fix: searchKeyword๊ฐ ์ธํ ๋๊ธฐ ์ ์ ๋ผ์ฐํ ํ๋ ๋ฌธ์ ํด๊ฒฐ * fix: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ค์ผ๋ ํค์ title height ์์ * refactor: ๋ก๋ฉ์ setํ๋ ๋ถ๋ถ์ ํ์ด์ง๋ก ์์ * fix: ์ฌ์ฉํ์ง ์๋ snackbar ์ญ์ * refactor: PublicWorkbook => PublicSearchResultPage * etc: eol ํด๊ฒฐ * refactor: Intersection Observer์ entries =>[entry] * fix: MainHeader์ z-index ์ถ๊ฐ * fix: ํํฐ ํด๋ฆญ ์ startIndex๊ฐ ์ฆ๊ฐํ๋ ๋ฒ๊ทธ ์์ * refactor: query๋ก ์๋ก๊ณ ์นจ ์์๋ ๊ฒ์์ด ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝ * refactor: searchForKeyword ๋ถ๋ฆฌ * etc: ๋ณ์ ๋ช ๋ณ๊ฒฝ searchInfo => searchInfos * fix: input์ ๊ฐ ์ ๋ ฅ ์ start๊ฐ 0์ผ๋ก ๋์ง ์๋ ๋ฒ๊ทธ ์์ * feat: ๊ฒ์ ์ฐฝ sticky ์์ฑ ์ ์ฉ * etc: ์ฝ์๋ก๊ทธ ์ญ์ * W15 - ์ ์ ๋ง๋ค ๋ฌธ์ ์ง์ ํํธ๋ฅผ ๋๋ฅด๊ณ ์ทจ์ํ ์ ์๋ ํ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. (#336) * feat: Heart ์ํฐํฐ ์์ฑ * feat: Hearts ์ผ๊ธ์ปฌ๋ ์ ์์ฑ * feat: Workbook์ Heart ์ฐ๊ฒฐ * feat: WorkbookService์ ํํธ ํ ๊ธ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: ์ข์์์ ๊ฒฐ๊ณผ์ธ HeartResponse ๋ฐํํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: ํํธ ํ ๊ธ api ์ถ๊ฐ * feat: heartCount ์ถ๊ฐ์ ๊ทธ์ ๋ฐ๋ฅธ ํ ์คํธ ์ถ๊ฐ, ๋ณ๊ฒฝ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ ์กฐํ์๋ heartCount ๋์ค๋๋ก ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ์กฐํ api ์์ - ํด๋น api๋ฅผ ์ฌ์ฉํ๋ ์ ์ ๊ฐ ํด๋น ๋ฌธ์ ์ง์ ํํธ๋ฅผ ๋๋ ๋์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ฃผ๋ heart ํ๋ ์ถ๊ฐ * refactor: ๋ฌธ์ํ ํ ์คํธ์์ botobo.access.token์ ์ฌ์ฉํ๋ ์์ฒญ์ด AppUser๋ฅผ ๋ง๋ค์ด ๋ด๋๋ก findAppUserByToken ๋ฉ์๋๋ฅผ ๋ชจํน // ๋ฌธ์ ์ง ๋ฌธ์ํ ํ ์คํธ์ ์ ์ฉ * feat: Token์ ์ ๋ ฅํ์ง ์์ ๊ฒฝ์ฐ ๋นํ์์ผ๋ก ๋ฐํํ๋๋ก ๋ชจํน * feat: ํ ์คํธ์์ body๊ฐ ์๋ ์์ฒญ์ ์์๋ก DummyRequest๋ฅผ ์ฌ์ฉํ๋ ๋์ putWithoutBody ๋ฉ์๋๋ฅผ ์ฌ์ฉ * etc: heart ddl ์ถ๊ฐ * refactor: ๋นํ์์ด ๊ณต์ ๋ฌธ์ ์ง ์์ธ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝ * etc: build ์ copyDev๊ฐ ์คํ๋๋๋ก ๋ณ๊ฒฝ * feat: ์นด๋ ์์ธ ํ์ด์ง์ ํํธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค (#340) * feat: ํํธ ๊ธฐ๋ฅ ๊ตฌํ * fix: ํํธ ํ ๊ธ ๋ก์ง ๋ณ๊ฒฝ * feat: ์นด๋ ์ฌ๋ผ์ด๋ ๋ฉ์์ง๊ฐ ๋ชจ๋ฐ์ผ์์๋ง ๋ณด์ด๋๋ก ์์ ํ๋ค (#348) * feat: ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ํ์ธ ๊ธฐ๋ฅ ์ถ๊ฐ * fix: ๋นํ์์ธ ๊ฒฝ์ฐ key๊ฐ 0์ธ ๋ฒ๊ทธ ์์ * fix: isMobile ๋ก์ง ๋ณ๊ฒฝ ๋ฐ GUEST์ผ ๋ id๊ฐ ์ค์ * fix: ๊ฐํ ๋ฐ ๋์ด์ฐ๊ธฐ ์ ์ง๋๋๋ก ๋ณ๊ฒฝ (#352) * U07 - ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ค (#337) * refactor: OauthManager ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ๋ฐ ์์ ๋ก๊ทธ์ธ ์ฝ๋ ๋ฆฌํฉํฐ๋ง * feat: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: interceptor url ์์ ๋ฐ import ๋ณ๊ฒฝ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * refactor: ๋ฉ์๋๋ช ์์ ๋ฐ ํ์์๋ ์ฝ๋ ์ญ์ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * feat: ๋ง์ดํ์ด์ง์ ์ ๋ณด๋ฅผ ์์ ํ๋ค (#354) * etc: UserInfo ํ์ ์ bio ํ๋ ์ถ๊ฐ * etc: ProfilePage UI ๋ณด์ * feat: ํ๋กํ ์์ ๊ตฌํ * feat: ์ด๋ฏธ์ง ์ ๋ก๋ ๊ตฌํ * etc: ํฌ์ธํฐ ๋ณ๊ฒฝ * feat: ์ ์ ์ด๋ฆ validation ๊ฐํ * etc: ์ฝ๋ ์คํ์ผ ์ ๋ฆฌ * U11 - ๋ง์ดํ์ด์ง ํ๋กํ ๋๋ค์ ๋ฐ ๋ฐ์ด์ค ์์ api ๊ตฌํ, U12 - ํ์๋ช ์ค๋ณต ๊ฒ์ฌ api๋ฅผ ๊ตฌํํ๋ค. (#343) * feat: User ์ํฐํฐ์ bio ํ๋ ์ถ๊ฐ * feat: ๋ด ์ ๋ณด ์์ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ด ์ ๋ณด ์์ Acceptance Test * test: UserUpdateRequest Validation ํ ์คํธ ์ถ๊ฐ * test: UserDocumentationTest ์ถ๊ฐ * test: ๋ด ์ ๋ณด ์์ ๊ด๋ จ UserServiceTest ๋ฐ UserTest ์ถ๊ฐ * feat&test: ์ ์ ์ด๋ฆ ์ค๋ณต ๊ฒ์ฆ ์ถ๊ฐ ๋ฐ ํ ์คํธ ๊ตฌํ * feat: ํ์๋ช ์ค๋ณต์กฐํ api ๊ตฌํ * test: ํ์๋ช ์ค๋ณต ์กฐํ ํ ์คํธ ๊ตฌํ * refactor: ์ค๋ณต ๋ฉ์๋ ์์ํ๋๋ก ๋ณ๊ฒฝ * feat&test: pk ๋ฆฌ๋ทฐ ๋ฐ์, ํ์๋ช ๊ณต๋ฐฑ ๋ถ๊ฐ ๊ฒ์ฆ ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ์ถ๊ฐ๋ User ๋์ ๋ฐ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ * fix: UserDocumentTest ์๋ต ์์ ๋ฐ ์์ ์ฒ๋ฆฌ * refactor: ํ์ ์ ๋ณด ์์ ์ ํ์๋ช ์ค๋ณต ์กฐํ๋ฅผ ์ฐ์ ํ๋๋ก ์์ * etc: ์ฝ๋ ์ ๋ฆฌ ๋ฐ http ํ์ผ ์ถ๊ฐ * feat: UserName ์ปค์คํ Validator ์ถ๊ฐ * feat: sonarqube ๋์ ๋ฐ CORS ์ค์ ๋ณ๊ฒฝ (#362) * B45 - ์๋ํ๋ธ๋ฅผ CI ๊ณผ์ ์ ๋์ ํ๋ค - 2 (#364) * feat: sonarqube ๋์ ๋ฐ CORS ์ค์ ๋ณ๊ฒฝ * fix: build.gradle ํ๋ฌ๊ทธ์ธ ๋ถํ์ํ ์ค์ ์ ๊ฑฐ * feat: ํด์ฆ ์ค์ ํ์ด์ง UI ๋ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#356) * refactor: SelectBox์์ list์ height๋ฅผ ๋ฐ์ ์ ์๊ฒ ๋ณ๊ฒฝ * feat: ํด์ฆ ์ค์ ํ์ด์ง UI ๊ตฌํ * feat: ํด์ฆ ์ค์ ๊ธฐ๋ฅ ๊ตฌํ * feat: ํด์ฆ ํ์ด์ง ์๊ฐ ๊ธฐ๋ฅ ๊ตฌํ * fix: ์๊ฐ ๊ตฌํ๋ ์ ํธ ํจ์ ๋ณ๊ฒฝ * feat: ํด์ฆ ๊ฒฐ๊ณผ ํ์ด์ง ์๊ฐ ํ์ ๊ธฐ๋ฅ ๊ตฌํ * feat: useInterval ์ถ๊ฐ * fix: alert => snackbar ๊ต์ฒด * feat: ํด์ฆ ์ธํ ํ์ด์ง ์ค์ผ๋ ํค ๊ตฌํ * etc: ํ์ํ์ง ์์ style ์ญ์ * refactor: ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ํฐ์น ์ฌ๋ผ์ด๋ ๋ฐ ๊ตฌํ * etc: Clock => Timer ๋ณ๊ฒฝ ๋ฐ ๋ณ์๋ช ์์ * etc: import ๋ณ๊ฒฝ * feat: ๋ง์ฃผ์น ํ์๋ฅผ ํ์ํ๋ค(ํด์ฆ ํ์ด์ง ๋ฐ ์นด๋ ๋ชจ์๋ณด๊ธฐ ํ์ด์ง) (#350) * feat: ํ์ด๋ณธ ํ์ ๊ธฐ๋ฅ ์ถ๊ฐ * fix: resize ์ด๋ฒคํธ ๋ฐ์ ์ ์นด๋ width๊ฐ ๋ณํ์ง ์๋ ๋ฒ๊ทธ ํด๊ฒฐ * fix: resize ์ ์ฆ์ ์นด๋ ๋ณ๊ฒฝ๋๋๋ก ๋ณ๊ฒฝ * etc: ์ ์ ์ ๋ณด ์์ ํ๋์์ id ์ ๊ฑฐ (#363) * feat: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ค (#359) * feat: OAtuh component ํ์ฅ ๊ฐ๋ฅํ ํํ๋ก ๋ณ๊ฒฝ * feat: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ๊ตฌํ * etc: oauth ์คํ์ผ ๋ฐฉ์ ๋ณ๊ฒฝ * refactor: OAuthCallbackPage๋ก ํต์ผ * fix: ๋ฌธ์ ์ง ์ถ๊ฐ ํ์ด์ง์์ ๋ฐ์ํ๋ ๋ฉ์ธ ํค๋ z-index ์ค๋ฅ๋ฅผ ์์ ํ๋ค (#366) * fix: ๋ฌธ์ ์ง ์ถ๊ฐ ํ์ด์ง์์ z-index ์ค๋ฅ ์์ * etc: ๋ฉ์ธ ํค๋์ shadow prop ๋ฐ๊ฒ ์์ * etc: CORS ์ค์ ๋ณ๊ฒฝ * etc: ๋ฒ๋ค ์ฌ์ด์ฆ ์ค์ด๊ธฐ (#368) - ํฐํธ html๋ก ์ด๋(๋ค์ด๋๋ฏน import) - gzip ์ต์ ์ถ๊ฐ - browser ๋ชฉ๋ก ์ถ๊ฐ * S01 - ํ๊ทธ, ์์ฑ์ ๊ธฐ์ค์ผ๋ก ๊ฒ์ ๊ฐ๋ฅํ๋๋ก ์ธ๋ถํํ๋ค. (#341) * feat: ๋ฌธ์ ์ง ์ด๋ฆ, ํ๊ทธ, ๊ทธ๋ฆฌ๊ณ ์์ฑ์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์ ์ง ์กฐํ ์ฟผ๋ฆฌ ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์กฐํ ๋ฐฉ์ ๋ณ๊ฒฝ * feat: ๊ฒ์ ์์ฒญ ๊ด๋ จ ์ด๋ ธํ ์ด์ ๋ฐ ๋ฆฌ์กธ๋ฒ ์ถ๊ฐ * test: ๊ฒ์ ๊ด๋ จ ์ ๋ ํ ์คํธ ์ถ๊ฐ * test: ๋ฌธ์ ์ง ๊ฒ์ ๊ด๋ จ ์ธ์ํ ์คํธ ์ถ๊ฐ * etc: ๋ถํ์ํ ํ์ผ ์ญ์ * etc: ๋ถํ์ํ ๊ธฐ๋ฅ ์ ๊ฑฐ ๋ฐ ์ฝ๋ ์ ๋ฆฌ * feat: ํ๊ทธ ๊ฒ์ ์๋์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: ์ ์ ๊ฒ์ ์๋์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ * ํ๊ทธ, ์ ์ , ๋ฌธ์ ์ง ์ด๋ฆ์ผ๋ก ์ฐพ๊ธฐ ๊ฐ๋ฅ * ์นด๋ ์, ๋ฌธ์ ์ง ์ด๋ฆ, ์ต์ ์ ์ ๋ ฌ ๊ฐ๋ฅ * ์ ๋ ฌ ๋ฐฉ์ ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ์ ํ ๊ฐ๋ฅ * feat: ์นด๋ ์ 0๊ฐ์ธ ๋ฌธ์ ์ง ๊ฒ์์์ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฌธ์ ์ง ๊ฒ์ ๊ด๋ จ ์ธ์ ํ ์คํธ ์ถ๊ฐ * test: ์ ์ , ํ๊ทธ ์๋์์ฑ ๊ด๋ จ ์ธ์ํ ์คํธ ์ถ๊ฐ * feat: ํ๊ทธ ์๋์์ฑ ์ ๋์ ๊ตฌ๋ถํ์ง ์๋๋ก ๋ณ๊ฒฝ * feat: ๋ฌธ์ ์ง ๊ฒ์์ ๋ฌธ์ ์ง ์ด๋ฆ๊ณผ ํ๊ทธ ํค์๋์ ๊ฒฝ์ฐ ๋์ ๊ตฌ๋ถํ์ง ์๋๋ก ๋ณ๊ฒฝ * refactor: ์ ์ ์ด๋ฆ ์๋์์ฑ ์๋ต ํ๋ userName ์์ name ์ผ๋ก ๋ณ๊ฒฝ * etc: ๋ฐ์ดํฐ๋ก๋ ๋ฐ ๋๋ฏธ๋ฐ์ดํฐ ๋ณ๊ฒฝ * refactor: ์ ์ ์๋์์ฑ ์๋ต ํด๋์ค ์ด๋ฆ ๋ณ๊ฒฝ * test: ๊ฒ์ ๊ด๋ จ ๋ํ๋จผํธ ํ ์คํธ ๋ฐ ์์คํค๋ ์ถ๊ฐ * test: ๊ฒ์ ์๋น์ค ํ ์คํธ ์ถ๊ฐ * refactor: ๊ฒ์ ๊ธฐ๋ฅ ๋ฆฌํฉํ ๋ง * etc: ๋ถํ์ํ ์ํฌํธ๋ฌธ ์ ๊ฑฐ * etc: feature/W15-B ๋ธ๋์น ์ค์ฟผ์ ๋จธ์ง * feat: ๊ฒ์ ๊ฒฐ๊ณผ ์ข์์ ์ ์ ๋ ฌ ๊ธฐ๋ฅ ์ถ๊ฐ * test: ๊ฒ์์ ํํธ ์ ๋ ฌ ๊ด๋ จ ์ธ์ํ ์คํธ ์ถ๊ฐ * etc: DataLoader ํํธ ์ ๋ณด ์ถ๊ฐ * etc: ์ค๋ณต๋๋ ๋ฉ์๋ ์ ๊ฑฐ * refactor: ๊ฒ์์ด trim ๊ธฐ๋ฅ ์ญ์ ๋ฐ ์ ์ ์๋์์ฑ ๊ฒฐ๊ณผ ์ ์ ํ * refactor: ๋ฉ์๋ ๋ฆฌํฉํ ๋ง * refactor: merge ํ ์ ๋ฆฌ ๋ฐ Exception ๋ก๊น ๋ฐฉ์ ๋ณ๊ฒฝ * feat: ๊ฒ์ ์์ฒญ http ์ ๋ณด ์ถ๊ฐ Co-authored-by: seunghyun <[email protected]> * fix: ์ ์ ์ด๋ฆ ์ค๋ณต ์กฐํ ์ค๋ฅ๋ฅผ ์์ ํ๋ค (#370) * fix: ์ ์ ์ด๋ฆ ์ค๋ณต ์กฐํ ์ค๋ฅ ์์ * fix: ํ์์๋ return ์ ๊ฑฐ * fix: ๊ณต์ ์นด๋ ํ์ด์ง์ ํํธ ๊ธฐ๋ฅ์ ์ค์๋์ ์์ ํ๋ค (#373) * fix: ์ฒ์ ํํธ ๊ฐ์๊ฐ ์ด๊ธฐํ๋๋ ๋ฒ๊ทธ ์์ * etc: ๊ฐํ ์ ๊ฑฐ * fix: ๊ณต์ ์นด๋ ํ์ด์ง ๋ฉ์ธ ํค๋์ shadow ํด์ (#375) * refactor: ์ค์ผ๋ ํค UI๋ฅผ ๋ฆฌํฉํ ๋งํ๋ค (#377) * refactor: ์ค์ผ๋ ํค์ ์กฐ๊ธ ๋ ์ธ๋ถ์ ์ผ๋ก ๊พธ๋ฐ ์ ์๋๋ก ๋ณ๊ฒฝ * refactor: ํค๋์ ์์ด์ฝ ๋์ ํ๋ฒ๊ฑฐ ๋ฉ๋ด ์ฝ์ * feat: ํ๋กํ ํ์ด์ง ์คํฌ๋กค ๊ฐ๋ฅํ๊ฒ ๋ณ๊ฒฝ (#381) * etc: ํ์ํ์ง ์์ webpack ์ค์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ญ์ (#383) * etc: compression-webpack-plugin ์ญ์ * etc: cross-env ์ญ์ * etc: react-ga ์ญ์ ๋ฐ script tag๋ก ๋ณ๊ฒฝ * etc: ์ทจ์ฝ์ฑ ํด๊ฒฐ * etc: ์ทจ์ฝ์ฑ ํด๊ฒฐ * refactor: ๋นํ์๋ ๊ฒ์์ด ๊ฐ๋ฅํ๋๋ก ์์ ํ๊ธฐ (#386) * fix: ๋นํ์์ธ ๊ฒฝ์ฐ์๋ Bearer์ด ๋ค์ด๊ฐ๋ ๋ฒ๊ทธ ์์ - ๋ก๊ทธ์์ ํ์ด์ง๋ ๋ก๊ทธ์ธ ํ์ด์ง์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ด๊ฐ๋ฉด ๋ฐ๋ก ์คํ๋ ์ ์๋๋ก ๋ณ๊ฒฝ - ํ ํฐ์ setํ๊ณ removeํ๋ ๊ฒ์ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ๋ฉ์๋๊ฐ ๋ด๋น * refactor: ๋นํ์๋ ๊ฒ์์ด ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝ * fix: ๋ฌธ์ ์ง ๊ฐ์ ธ๊ฐ๊ธฐ ์ z-index ๋ฌธ์ ํด๊ฒฐ * fix: ๋ฌธ์ ์ง ์์ ํ์ด์ง ํค๋ shadow ์ ๊ฑฐ * B46 - sonarqube ์ปค๋ฒ๋ฆฌ์ง ๊ธฐ์ค์ ์ค์ ํ๋ค (#387) * jacoco ์ปค๋ฒ๋ฆฌ์ง ๊ฒ์ฆ task ๋ฐ ๋กฌ๋ณต ๋ฌด์ ์ค์ ์ถ๊ฐ * test: ๋๋ฝ๋ ํ ์คํธ ์ถ๊ฐ * test: sonarqube exclusion ์ค์ ์ถ๊ฐ * feat: flyway ์ ์ฉ ๋ฐ ์ค์ ์ถ๊ฐ * feat: custom ga ์ ์ฉ * etc: ga script ์ถ๊ฐ * etc: ga devserver ์ค์ * refactor: active profiles ๋ฐ test yml flyway ์ค์ ์ถ๊ฐ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * etc: ddl, dml, flyway sql ์์ * etc: ํ๋น์ฝ ์ถ๊ฐ ๋ฐ meta og ์์ฑ ์ถ๊ฐ (#391) * etc: ์๊ฐ ๋ณ๊ฒฝ * refactor: ํด์ํ๊ทธ ์ ๋ณ๊ฒฝ * feat: ํ๊ทธ ์ต๋ ๊ฐ์ ์ฆ๊ฐ ๋ฐ sonarqube ์ค์ ๋ณ๊ฒฝ (#395) * feat: ๊ฒ์ ๋ก๋ฉ ์ ๋๋ฉ์ด์ ์์ (#393) * feat: ๊ฒ์์ด ์ ์ trim ๊ธฐ๋ฅ ์ ๊ฑฐ ๋ฐ ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ (#398) * feat: ํํธ ์์น ๋ณ๊ฒฝ ๋ฐ ํ๊ทธ ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ (#402) * fix: ํด์ํ๊ทธ 20๊ธ์ ์ ํ * fix: LoadImage ๋ง์ง ๋ณ๊ฒฝ * fix: ์ ๋ชฉ์ ์์ด๋ก width๊ฐ ๋์ด๊ฐ ๊ฒฝ์ฐ ํ๋ฉด์ ๋์ด๊ฐ๋ ๋ฒ๊ทธ ์์ * refactor: selectBox์ (์ผ) ์ถ๊ฐ * feat: ํํธ ์์น ๋ณ๊ฒฝ ๋ฐ ์คํ์ผ ๋ณ๊ฒฝ, ํ๊ทธ ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ - ํ๊ทธ inline-block์ผ๋ก ๋ณ๊ฒฝ(์์์ ๋์ด๋ฅผ ๊ทธ๋๋ก ๊ฐ์ง๊ธฐ ์ํจ) - ํ๊ทธ ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ * fix: ํด์ํ๊ทธ ๋ฉ์์ง ๋ด์ฉ ์์ * E01 - ์๋ฌ๋ฅผ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ค. (#378) * feat: ErrorType ์์ฑ, ์์ ์์ธ ์์ฑ * feat: ์ค๊ฐ ๊ณ์ธต ์์ธ ์ถ๊ฐ, ์ถํ์ Botobo prefix ์ญ์ ์์ * feat: ErrorResponse ์์ , ControllerAdvice ์์ * feat: Request message๋ฅผ ์๋ฌ์ฝ๋๋ก ์์ * feat: ์ปค์คํ ์์ธ ์์ , ์ญ์ , ์ ์ฉ * test: ๋ฌธ์ ์ง ๊ด๋ จ ์์ ๋ ์ฝ๋ ํ ์คํธ์๋ ๋ฐ์ * feat: ์ธ์ฆ, ์ ์ ๊ด๋ จ ์์ธ ์ถ๊ฐ, ํ ํฐ ๋ง๋ฃ ์์ธ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ๊ด๋ จ ErrorType ์ถ๊ฐ * feat: Card ๊ด๋ จ Request ๋ฉ์์ง ์ฝ๋๋ก ์์ , ์์ธ ์ถ๊ฐ * feat: ํด์ฆ ๊ด๋ จ ์์ธ ์ฝ๋ ์ถ๊ฐ * etc: ๊ฒ์ ๊ด๋ จ ์ฝ๋ ์ญ์ * feat: Auth, User ๊ด๋ จ ์ฝ๋ ์ถ๊ฐ * feat: ๊ด๋ฆฌ์ Request ๊ด๋ จ code ์ถ๊ฐ * feat: ๋๋ฉ์ธ ๊ด๋ จ ์๋ฌ Internal Error ๊ณ์ธต ๊ด๊ณ ์ถ๊ฐ * test: ์คํจํ๋ ํ ์คํธ ์์ * etc: ๊ธฐ์กด common์ ์์ธ๋ฅผ ์ง์ฐ๊ณ , botobo http ์์ธ๋ก ์์ * etc: import ๋ฌธ ์ ๋ฆฌ * etc: DisplayName์ ์ฑ๊ณต, ์คํจ ๋น ์ง ํ ์คํธ์ ์ถ๊ฐ * feat: ์ ์ ์์ , ๋๋ค์ ์ฒดํฌ ๊ด๋ จ ErrorType ์ถ๊ฐ * test: ErrorType ํ ์คํธ ์ถ๊ฐ * feat: ๊ฒ์ ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ํ ErrorType ์ถ๊ฐ ๋ฐ Controller Advice ์์ * feat: Controller Advice์ ๋ก๊ทธ ๋ฉ์์ง ์ ๋ฆฌ * feat: InternalServerError ๋ถ๋ถ ๋ก๊ทธ ๋ฉ์ธ์ง ์์ * fix: ํ ํฐ ๋ง๋ฃ ์์ธ๊ฐ ๋ฐ์ํ๋๋ก ์์ * fix: ๋ณํฉ ๊ณผ์ ์์ ๋ฐ์ํ ์คํจํ๋ ํ ์คํธ ์์ * refactor: ์ ์ฒด ๋ฉ์์ง ์์ ๋ฐ ํผ ๋น๊ฐ ์ ๋ ฅ ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ํ๋ธ๋ค (#404) * etc: FormProvider์์ ๋น๊ฐ์ ๋ํ ์ฒ๋ฆฌ ๊ตฌํ * etc: ๋ฉ์์ง ๋์์ค ์์ (~ํฉ๋๋ค -> ~์) * etc: ๋น๊ฐ ์ฒ๋ฆฌ ์กฐ๊ฑด๋ฌธ ์์ * etc: return ๋ฌธ ์ถ๊ฐ * refactor: api ๋ ์ด์ด ์ ๋ฆฌ (#406) * etc: ๋ฌธ์ ์ง ๊ฐ์ ธ๊ฐ๊ธฐ ๋ชจ๋ฌ ๊ธฐ๋ณธ๊ฐ ์ค์ (#408) * feat: ๋ก๋ฉ ์คํผ๋ ๋ง๋ค๊ธฐ (#410) * feat: ๋ก๋ฉ ์คํผ๋ ๊ตฌํ * refactor: ๋ก๋ฉ ์คํผ๋ ์ ์ฉ ๋ฐ ํ์ํ์ง ์์ ๊ตฌ๋ฌธ ์ญ์ - isLastItem์ด ํ์ํ์ง ์์์ -> ํญ์ ์ต์ ๋ฒ ํ์๋ ์ต์ ๋ฒ๋ฅผ ํด์ ํ๊ณ ์๊ธฐ ๋๋ฌธ * refactor: ์์ธ์ฒ๋ฆฌ๋ฅผ ์์ ํ๋ค (#389) * refactor: ์์ธ์ฒ๋ฆฌ ๋ฐฉ์ ๋ณ๊ฒฝ Co-authored-by: dudtjr913 <[email protected]> * refactor: ์์ธ์ฒ๋ฆฌ ์์ Co-authored-by: dudtjr913 <[email protected]> * B43 - ์ธ์ํ ์คํธ ๋ฆฌํฉํ ๋ง (#396) * feat: dirties context ์ ๊ฑฐ ๋ฐ db cleaner ๊ฐ์ฒด ์ถ๊ฐ * refactor: ์ธ์ํ ์คํธ ๋ฆฌํฉํ ๋ง * U14 - ์ด๋ฏธ์ง ์์ /์ญ์ ์ ๊ธฐ์กด์ ๋ฑ๋ก๋ ์ด๋ฏธ์ง๋ฅผ s3์์ ์ญ์ ํ๋ค. (#409) * feat: S3 ํ์ผ ์ ๋ก๋ ์ ๊ธฐ์กด ํ์ผ์ด default๊ฐ ์๋๋ฉด ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: user update ์คํจ ์ ์ด์ ์ฌ์ง์ด ์ญ์ ๋์ง ์๋๋ก ์์ * etc: ์ฝ๋ ์ ๋ฆฌ * fix: ImageExtensionException์ BADREQUEST๋ก ์์ * feat: ๋ฐ์ํ ๊ตฌํ (#413) Co-authored-by: Kyle <[email protected]> * refactor: ๋ฐ์ํ์ ๊ตฌํํ๋ค (#416) * refactor: ๋ฐ์ํ ๊ตฌํ * refactor: ๊ฒ์ ๊ฒฐ๊ณผ ์์ ๋ ์๋ฆผ ํ์ Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * fix: ๋นํ์ ๊ธฐ๋ฅ์์ ์ ํจํ์ง ์์ ํ ํฐ ๊ด๋ จ ์๋ ค ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๋ ฅํ๋๋ก ์์ * feat: ๊ฒ์ ์ฐฝ ๋ฏธ๋์ด ์ฟผ๋ฆฌ ์ ์ฉ Co-authored-by: Kyle <[email protected]> * feat: ์ธ๋ก ํ์ px์ธ ๋ชจ๋ฐ์ผ์ ๋ง์ถฐ width ํฌ๊ธฐ 1% ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * B50 - ๋ฌธ์ํ ํ ์คํธ ๋ฆฌํฉํฐ๋ง (#415) * etc: ์๋ฌ์ฝ๋ ๊ด๋ จ adoc ์ถ๊ฐ * test: ์ ์ฒด์ ์ผ๋ก ๋ฌธ์ํ ํ ์คํธ ๋ฆฌํฉํฐ๋ง - ๋ชจ๋ ํ ์คํธ any(xxxx.class)๋ก ๊ท ์ผํ๊ฒ ๋ณ๊ฒฝ - ๋ฆฌ์กธ๋ฒ ํ ์คํธ ๊ด๋ จ ์์ - ์คํจํ๋ ํ ์คํธ ์ญ์ - ์์ฑ๋ ๋ฌธ์์ ํ์ธํ์ฌ ๋น ์ง ํ๋, ์๋ต ์๋ ๋ถ๋ถ ์ฒดํฌ * etc: ๋ฒ์ 1.0.0์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ga main์ผ๋ก ์ ์ฉ Co-authored-by: Kyle <[email protected]> * fix: ๋์ผํ ์ด๋ฏธ์ง ์ ๋ก๋ ์ค๋ฅ ์์ * etc: textarea resize ์ด๋ฒคํธ ์ ๊ฑฐ * etc: Guest Quiz์์ ํ์ด๋ณธ ํ์ ํ์ ํ์ง ์๊ฒ ์์ * etc: textAreaHeight ์ํ ๋ณ์๋ก ๊ณ ์ * fix: ์คํฌ๋กค ๋ฒ๊ทธ ์์ * etc: BotoboException ๊ด๋ จ ๋ก๊ทธ์ ๋ฉ์์ง ๋์ค๋๋ก ๋ณ๊ฒฝ * docs: README ์์ฑ * etc: submodule ๋๊ธฐํ * feat: ๊ฒ์ ํ์ด์ง์ ๋ฌธ์ ์ง, ํ๊ทธ, ์์ฑ์ UI๋ฅผ ์ญ์ ํ๋ค (#446) * refactor: PublicSearchPage UI ๋ณ๊ฒฝ * etc: SearchInput ๋ง์ง๊ฐ ์กฐ์ * feat: ๊ฒ์ ์์ธ ํ์ด์ง์์ ์์ฑ์ ์, ํ๊ทธ ์ UI๋ฅผ ์ถ๊ฐํ๋ค (#447) * feat: ์์ฑ์, ํ๊ทธ ํํฐ๋ง ์ถ๊ฐ * feat: ์ด๊ธฐํ UI ๋ฐ ๊ธฐ๋ฅ ์ถ๊ฐ * etc: submodule ๋๊ธฐํ * S01 - ์ถ์ฒ ํ๊ทธ API ๊ตฌํ (#451) * feat: ๊ธฐ์กด์ ํ๊ทธ ๊ฒ์์ ์ถ์ฒ ํ๊ทธ๋ก ๋ณ๊ฒฝํ๊ณ ํ ์คํธํ๋ค. * etc: adoc ํ ํ์ค ์ถ๊ฐ * feat: ํผ์ผ์ด ๋ฆฌ๋ทฐ ๋ฐ์ ๋ฐ ๋ฌธ์์ด ์ ์ฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ถ๊ฐ * fix: ์๋ชป๋ ์ธ์ ์์ * feat: ์ค๊ฐ๊ณฐ ๋ฆฌ๋ทฐ ๋ฐ์, ์ค์ฝ์ด๊ฐ ๋์ผํ ๊ฒฝ์ฐ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ์ถ๊ฐ * etc: ์คํ ์์ * fix/S01: SearchRelated ํ ์คํธ ์ถ๊ฐ (#455) * test: SearchRelated ํ ์คํธ ์ถ๊ฐ * test: SearchRelated#create ํ ์คํธ ์ถ๊ฐ * W01 - ๋ค์ํ ๋ฌธ์ ์ง ๋ณด๋ฌ๊ฐ๊ธฐ API ๊ตฌํ (#448) * feat&test: ๋ค์ํ ๋ฌธ์ ์ง ๋ณด๋ฌ๊ฐ๊ธฐ API ๊ตฌํ ๋ฐ ํ ์คํธ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * feat: AuthenticationPrincipalConfg#authPathMatcherInterceptor์ public ์ ์ธ * etc: getPublicWorkbookAsync -> getSearchResultAsync * feat: PublicSearchPage ์ง์ ์ ๋ค์ํ ๋ฌธ์ ์ง ๋ณด์ฌ์ฃผ๊ธฐ * etc: dev, prod profile์ ๋ฐ๋ผ query log ์ค์ ๋ณ๊ฒฝ Co-authored-by: imgwang-yeol <[email protected]> Co-authored-by: DESKTOP-VDP6SAT\xntm3 <[email protected]> * feat: ๊ฒ์ ํ์ด์ง์์ ์ด๊ธฐ ๋ฌธ์ ์ง 100๊ฐ๋ฅผ ๋ณด์ฌ์ค๋ค (#453) * etc: getPublicWorkbookAsync -> getSearchResultAsync * feat: PublicSearchPage ์ง์ ์ ๋ค์ํ ๋ฌธ์ ์ง ๋ณด์ฌ์ฃผ๊ธฐ * refactor: publicWorkbooks ์ง์ญ ์ํ๋ก ๋ณ๊ฒฝ * refactor: Intersection Observer ์์กด์ฑ ๋ณ๊ฒฝ * refactor: isLoading ์ด๊ธฐ ์ํ ๋ณ๊ฒฝ * feat: ๊ฒ์ ์์ธ ํ์ด์ง์์ ๋ฐํ ๋ชจ๋ฌ์ ์ถ๊ฐํ๋ค(ํ๊ทธ, ์์ฑ์ ํํฐ๋ง) (#454) * feat: ๊ฒ์ ํํฐ๋ง ๋ฐํ ๋ชจ๋ฌ UI ๊ตฌํ * fix: ๋ชจ๋ฌ open ํ ๋ body๊ฐ ์คํฌ๋กค๋๋ ๋ฒ๊ทธ ํด๊ฒฐ * refactor: ํํฐ๋ง ์คํฐํค ์ ์ฉ * refactor: isMobile ํจ์ ๋ฆฌํฉํ ๋ง - userAgent๋ฅผ ํ์ฉํด์ ๋ชจ๋ฐ์ผ๊ณผ ํ๋ธ๋ฆฟ์ ๊ตฌ๋ถํ ์ ์๋๋ก ํจ - platform์ deprecated๋ ๊ฒ์ด์์ * refactor: ๊ฒ์ ๊ฒฐ๊ณผ ํ์ด์ง ๋ก๋๋ธ ๋ฆฌํฉํ ๋ง * refactor: Mac OS => Macintosh๋ก ๋ณ๊ฒฝ * refactor: ํ์ธ ๋ฒํผ์ ๋๋ ์ ๋ ๋ฐ์๋๋๋ก ๋ณ๊ฒฝ - ์๋ฒ๋ก๋ถํฐ ์์ฒญํด ๋ฐ์์ค๋ ๋ฐ์ดํฐ(ํ๊ทธ, ์์ฑ์)๋ฅผ ์ธ์ ๋ฐ์์ฌ์ง ๊ณ ๋ฏผ ์ค * feat: ํ๊ทธ, ์์ฑ์ UI ๋ฐ ํด๋ฆญ ์ ์ญ์ ๋๋๋ก ๊ตฌํ * refactor: ์ด๊ธฐ ํํฐ๋ง ๋ฐ์ดํฐ ์ธํ ์ ํ์ด์ง๊ฐ ๋ด๋นํ๋๋ก ๋ณ๊ฒฝ * refactor: data => values๋ก ์ด๋ฆ ๋ณ๊ฒฝ * refactor: interface, type ๋ถ๋ฆฌ * fix: axios upgrade * feat: ๊ฒ์ ํ์ด์ง์์ ์ถ์ฒ ๊ฒ์์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#457) * etc: Error unknown ํ์ ๊ฐ๋ ์ถ๊ฐ * feat: ๊ฒ์ ํ์ด์ง ์๋์์ฑ, ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์ * refactor: width => scale๋ก ๋ณ๊ฒฝ * fix: useEffect cleanup function ์ ์ธ Co-authored-by: dudtjr913 <[email protected]> * etc: ๊ฐ์ด๋ ์์ (#458) * T01- (ํํฐ) ๊ฒ์์ด์ ํด๋นํ๋ ๋ฌธ์ ์ง์ ๋ฑ๋ก๋ ๋ชจ๋ ํ๊ทธ๋ฅผ ๊ฐ์ ธ์จ๋ค. (#456) * feat: ํํฐ ํ๊ทธ ๊ธฐ๋ฅ ์ผ๋ถ ๊ตฌํ * feat: ํํฐ ํ๊ทธ ๊ธฐ๋ฅ ์ผ๋ถ ๊ตฌํ * feat&test: ํ๊ทธ ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ํ ์คํธ * fix: AdminWorkbookRequest#opened ๊ธฐ๋ณธ๊ฐ true๋ก ์ง์ * refactor: ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ * refactor: WorkbookName -> FilterCriteria๋ก ํด๋์ค๋ช ๋ณ๊ฒฝ * etc: TODO ์ญ์ * U01 - (ํํฐ) ๊ฒ์์ด์ ํด๋นํ๋ ๋ฌธ์ ์ง์ ์์ฑ์๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์จ๋ค. (#463) * feat: ๋ฌธ์ ์ง๋ช ์ด ํฌํจ๋ ๋ฌธ์ ์ง์ ์ ์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ ๊ตฌํ * test: UserRepositoryTest#findAllByContainsWorkbookName ํ ์คํธ ๊ตฌํ * test: ์ธ์ ํ ์คํธ ๋ฐ Service ํ ์คํธ ๊ตฌํ * feat&test: UserFilterResponse๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฌธ์ํ ํ ์คํธ ์ถ๊ฐ * refactor: Repository ๋ถํ์ํ ์กฐ๊ฑด์ ์ ๊ฑฐ ๋ฐ ์ฌ์ฉํ์ง ์๋ ํจ์ ์ ๊ฑฐ * refactor: DomainAcceptanceTest#์๋ก_๋ค๋ฅธ_์ ์ ์_์ฌ๋ฌ๊ฐ_๋ฌธ์ ์ง_์์ฑ_์์ฒญ์ ์ธ์๋ก Users ๋ฐฐ์ด ๋ฐ๋๋ก ๋ณ๊ฒฝ * refactor: Test์์ stream ๋์ extracting ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: fixture ์ ์ ์ id, role, SocialType ๋ถ์ฌ * refactor: index.adoc์ tags.adoc ์ถ๊ฐ * refactor: ๋ฌธ์ํ ํ ์คํธ ์๋ก ๋ค๋ฅธ ์ ์ ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ด๋ ๋ถ์ฌ * fix: DomainAcceptanceTest#์๋ก_๋ค๋ฅธ_์ ์ ์_์ฌ๋ฌ๊ฐ_๋ฌธ์ ์ง_์์ฑ_์์ฒญ์์ i++ ์ถ๊ฐ * refactor: ์ด๋๋ฏผ์ธ ๊ฒฝ์ฐ ๋ช ์นญ์์ ๊ด๋ฆฌ์์์ด ๋๋ฌ๋๋๋ก ์์ * refactor: Workbook#createBy, Workbook#taggedBy๋ฅผ ๋ชจ๋ setter๋ก ๋ณ๊ฒฝ * etc: ์ฝ๋ ์ ๋ฆฌ * fix: UserFilterResponse#userName -> name์ผ๋ก ๋ณ๊ฒฝ (#466) * feat: ๊ฒ์ ์์ธ ํ์ด์ง์์ ์์ฑ์, ํ๊ทธ ์ ํํฐ๋ง ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. (#460) * feat: ํ๊ทธ/์์ฑ์ ํํฐ๋ง ์ ๊ทํํ์์ผ๋ก ๊ตฌํ - ์ต์ ์คํ์ธ replaceAll์ ์ฌ์ฉํ๊ธฐ ์ํด lib์ ESNest ์ถ๊ฐ, DOM์ window๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ * feat: ํ๊ทธ/์์ฑ์ api๋ก ๋ถ๋ฌ์ค๋๋ก ๊ตฌํ * refactor: authors => users ๋ณ๊ฒฝ * refactor: api ๋ณ๋์ผ๋ก ์ธํ type ์ญ์ ๋ฐ tags, users ์ถ๊ฐ * refactor: ModalProvider์์ router ๊ธฐ๋ฅ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * fix: ์ ๋ ฅ๋์ง ์์ & ์ถ๊ฐ * feat: ํํฐ๋ง ์ ํด๋น ๋ฌธ์ ์ง ๊ฒ์ํ๋๋ก ๊ตฌํ - ๋ค์ค ํํฐ๋ง์ ํ๊ทธ์ ์์ฑ์๋ฅผ type๊ณผ name์ผ๋ก ๊ตฌ๋ถ * refactor: ์ด๊ธฐํ ๋ฒํผ ํด๋ฆญ์ query๋ ์ด๊ธฐํ๋๋๋ก ๋ณ๊ฒฝ * feat: ํํฐ๋ง ์ญ์ ์ ๋ฐ์ดํฐ ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: usePublicSearch ์ด๋ฆ ๋ณ๊ฒฝ * refactor: ์ค์ผ๋ ํค์ด ์คํฌ๋กค์ ํ์ง ์๋๋ก ๋ณ๊ฒฝ * refactor: ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ ๋์ UI ๋ณ๊ฒฝ * feat: ๊ฒ์ ๊ฒฐ๊ณผ ์ ์ญ ์ํ๋ก ๋ณ๊ฒฝ ๋ฐ ์ด๊ธฐ ๋ก๋ฉ์์๋ง ์ค์ผ๋ ํค ์ถ๋ ฅ * refactor: startIndex๋ฅผ atom์ผ๋ก ๊ด๋ฆฌ * refactor: ๊ฒ์ ์์ธ ํ์ด์ง์ ์ด๊ธฐ๊ฐ์ atom์์ ๊ด๋ฆฌํ๋๋ก ๋ณ๊ฒฝ * fix: replaceAll => replace ๋ณ๊ฒฝ * refactor: ์๋น์ค ๋ก์ง ํ ์ผ๋ก ์ด๋ * fix: ๋น ๋ฅด๊ฒ ํํฐ๋ง์ key๋ก ์ธํด ์ด์ element๋ฅผ ์ฐธ์กฐํ๋ ๋ฒ๊ทธ ํด๊ฒฐ * refactor: singleFilter atom์ผ๋ก ์ด๋ ๋ฐ ํํฐ๋ง scrollIntoView ์ ์ฉ * feat: ๊ฒ์ ์คํจ์ ์ค๋ต๋ฐ ๊ตฌํ * refactor: ๋ค์ค ํํฐ๋ง์ด ์์ ๋ ๋์๊ฐ๊ธฐ ๋ฒํผ ์ญ์ * etc: ๊ฒ์ api ๋์ค๊ธฐ ์ด์ ์ ๊ฒ์ ๋๋๋ก ์์ ์ค์ * refactor: api ํจ์ ๋ช ๋ณ๊ฒฝ * refactor: type๋ช ๋จ์๋ก ๋ณ๊ฒฝ * refactor: type์ returnType ๋ช ์ผ๋ก ๋ณ๊ฒฝ * refactor: ๋ก์ง์ ํจ์๋ก ๋ณ๊ฒฝ * fix: ๋ชจ๋ฌ ์คํ ์ ์คํฌ๋กค ์ด์ ํด๊ฒฐ * fix: criteria๊ฐ ์ด๊ธฐํ๋๋ ๋ฒ๊ทธ ์์ * refactor: tags, users ๋ถ๋ฆฌ * fix: ๋ชจ๋ฌ ์คํ ์ ์คํฌ๋กค ์ด์ re ํด๊ฒฐ * feat: ์์ฑ์, ํ๊ทธ ์์ฒญ์ด ์คํจํ์ ๋ ๋ชจ๋ฌ์์ ๋ค์ ์์ฒญ ๋ณด๋ด๋๋ก ๊ตฌํ * refactor: ๊ฒ์ ์์ ํ์ด์ง ์ํ atom์ผ๋ก ๋ค์ ์ด์ * feat: ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฒํผ disableํ๋๋ก ์ค์ * refactor: ๋ณ๊ฒฝ๋ ๊ฒ์ api๋ก ๋ณ๊ฒฝ * refactor: isNew => isReset์ผ๋ก ๋ณ๊ฒฝ * feat: ํํฐ๋ง์ด ๋์ง ์์ ๊ฒฝ์ฐ ๋ค์ ๋ก๋ฉ์ ํ์ง ์๋๋ก ๋ณ๊ฒฝ * feat: ssr์ ์ ์ฉํ๋ค.(๋ฉ์ธํ์ด์ง) (#468) * feat: ssr ๊ตฌํ Co-authored-by: Kyle <[email protected]> * feat: ssr ๊ตฌํ - 2 Co-authored-by: dudtjr913 <[email protected]> * feat: ssr ์ ์ฉ * chore: package.json, yarn.lock copy * chore: yarn.lock ์ ๊ฑฐ * fix: ๊ฒฝ๋ก ์์ * etc: ํ ์คํธ * etc: ํ ์คํธ ์๋ฃ * fix: split์ undefined๊ฐ ์ฌ ์ ์๋ ๋ฒ๊ทธ ์์ * feat: ์๋ฌ ์ฒ๋ฆฌ ์ถ๊ฐ ๋ฐ ํค๋ ์บ์ ์ค์ * fix: ๋ก๊ทธ์์ ์ ๋ฌธ์ ์ง ์ญ์ ํ๋๋ก ๋ณ๊ฒฝ * etc: ํ ์คํธ * etc: ํ ์คํธ * fix: ์ฟ ํค๊ฐ ์ฌ๋ผ์ง์ง ์๋ ๋ฒ๊ทธ ํด๊ฒฐ Co-authored-by: Kyle <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * fix: ๊ฒ์์ด ์ ๋ ฅ ์ ์๋์์ฑ ์ค๋ฅ ์์ (#470) * S02 - ๋ณ๊ฒฝ๋ ๊ฒ์ API์ ๋ง๊ฒ ๊ธฐ๋ฅ ๊ตฌํํ๋ค. (#464) * feat: ๋ณ๊ฒฝ๋ ๊ฒ์ api์ ๋ง๊ฒ ์ฝ๋ ์์ ๋ฐ QueryDSL ์ ์ฉ * refactor: ๊ฒ์ ๊ด๋ จ ํ ์คํธ ๋ณ๊ฒฝ๋ api์ ๋ง๊ฒ ๋ฆฌํฉํ ๋ง * docs: ๊ฒ์ api ํ ์์ * refactor: ํ์์๋ ์ฝ๋ ์ญ์ ๋ฐ ๋ฉ์๋ ์์ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * test: WorkbookSearchRepositoryTest ์ถ๊ฐ * refactor: ํ ์คํธ ํผ๋๋ฐฑ ๋ฐ์ * etc: Qํด๋์ค๋ฅผ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์์ ์ ์ธ์ํค๋๋ก ์ค์ * refactor: SearchAcceptanceTest ์ฝ๋ ์์ * feat: ํ์ฌ ์ฌ์ฉ ์ค์ธ profile ์ ๋ณด ํ์ธํ๋ api ์์ฑ (#473) * feat: health check ์ํ api ์์ฑ (#475) * fix: infra ๊ด๋ จ api ํ ํฐ ์์ด ์ฌ์ฉํ๋๋ก ์์ (#476) * fix: jar ๋น๋์ ์ฌ๋ฐ๋ฅธ ์ค์ ํ์ผ ์๋ธ๋ชจ๋๋ก๋ถํฐ ๋ณต์ฌ (#477) * etc: ๋ก๊น ํ์ผ ๋ด ํ๋กํ ์ด๋ฆ ๋ณ๊ฒฝ (#478) * feat: ๋ฌธ์ ์ง ๊ฒ์ ์ ์ด๊ธฐํ๊ฐ ๋์ง ์๋ ๋ฒ๊ทธ ์์ (#472) * fix: ๊ฒ์ ์ ์ด์ ๋ฐ์ดํฐ๊ฐ ๋จ์์๋ ๋ฒ๊ทธ ์์ * fix: ์ด๊ธฐ ์์ฒญ์ 2๋ฒ ๋ณด๋ด๋ ๋ฒ๊ทธ ์์ - ์ต๋ ์์ฒญ ์๋๋ณด๋ค ์ ๊ฒ ๋ฐ์์ ๋ ์์ฒญ์ ๋ณด๋ด์ง ์๋๋ก ์์ * refactor: ํ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ฆฌํฉํ ๋ง(๊ฒ์ ์) * refactor: ํ์ํ์ง ์์ useEffect์ญ์ * refactor: setTimeout ์ญ์ * refactor: ๋จ์ถ ๋ฌธ๋ฒ ์ฌ์ฉ * refactor: publicCards/:id๋ก ๋ณ๊ฒฝ (#490) * feat: S3์ ์ด๋ฏธ์ง ์ ๋ก๋ ์ CacheControl ์ ๋ณด ์ถ๊ฐ (#492) * refactor: ๊ฒ์ ํ์ด์ง ๋๋ค ๋ฐ์ดํฐ ์บ์ฑ (#491) * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * fix: test, local, dev ์ํฉ์์ ๋ก๊น ์ค์ ๋ณ๊ฒฝ (#494) * refactor: ๋ค์ํ ๋ฌธ์ ์ง ๊ฐ์ ธ์ค๊ธฐ api ์๋ต ๋ฐํ ๋ฉ์๋ ๋ณ๊ฒฝ ๋ฐ ํ ์คํธ ์์ (#496) * etc: ec2 ๊ด๋ จ ๋ก๊น ์ค์ ์์น ๋ณ๊ฒฝ (#502) * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ (#503) * etc: ์ฝ๋ ์คํ๋ฆฌํ (#498) * refactor: ๋ผ์ฐํ ์ปดํฌ๋ํธ ์ฝ๋ ์คํ๋ฆฌํ * etc: ์ฝ๋ ์คํ๋ฆฌํ chunk name ์ง์ * feat: @Transactional์ readonly ๊ฐ์ ๋ฐ๋ผ Master, Slave ๋ฐ์ดํฐ์์ค๋ก ๋ผ์ฐํ ํ๋ค. (#497) * feat: @Transactional์ readonly ๊ฐ์ ๋ฐ๋ผ Master, Slave ๋ฐ์ดํฐ์์ค๋ก ๋ผ์ฐํ ํ๋ค. * etc: application-dev1, dev2.yml ๋ณ๊ฒฝ ๋ฐ ์ฃผ์ ์ ๊ฑฐ * etc: ์ฃผ์ ์ญ์ , config.datasource ์์ฝ์ฝ์์ ์ ์ธ (#508) * etc: ์๋ธ๋ชจ๋ ๋ณ๊ฒฝ (flyway enabled false) (#509) * etc: DataSourceConfig์ dev, prod ๊ด๋ จ ํ๋กํ์ผ ์ด๋ฆ ์ถ๊ฐ (#510) * fix: EntityManagerFactory ๋น ์์ฑํ๋ ๋ถ๋ถ ๋ณ๊ฒฝ (#511) * fix: EntityManagerFactoryBuilder ๋ฅผ ์๋ก ์์ฑํ๋๋ก ๋ณ๊ฒฝ, HibernateJpaVendorAdapter ์ถ๊ฐ (#512) * fix: DataSourceConfig @Profile ๋ณ๊ฒฝ (#513) * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ, ์ฝ๋ ์ ๋ฆฌ (#514) * etc: application-prod ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ค์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ (#515) * etc: dev, prod ์ค์ ํ์ผ์ ddl-auto ์ญ์ (#516) * refactor: ์ ์ฒด์ ์ธ UI ๊ตฌ์ฑ ๋ณ๊ฒฝ (#500) * refactor: Cardsํ์ด์ง์ Id ๋ฃ๊ธฐ (#504) * feat: Cards, workbookEditPage๋ฅผ id๋ก ์ ๊ทผํ๋๋ก ๋ณ๊ฒฝ * refactor: divํ๊ทธ -> a ํ๊ทธ๋ก ๋ณ๊ฒฝ * refactor: isCursor => isClicable ๋ณ๊ฒฝ * ๋ค์ํ ๋ฌธ์ ์ง ๋ณด๋ฌ๊ฐ๊ธฐ 0๊ฐ ๋ฌธ์ ์ง ์ ์ธํ๊ธฐ (#507) * feat&test: WorkbookRepository#findRandomPublicWorkbooks 1๊ฐ ์ด์์ ์นด๋๋ฅผ ๊ฐ์ง ๋ฌธ์ ์ง์ ๊ฐ์ ธ์ค๋๋ก ์์ * test: ๋ค์ํ ๋ฌธ์ ์ง ์กฐํ ์ ์นด๋์ ๊ฐ์๊ฐ 1๊ฐ ์ด์์ธ ๊ฒ๋ค๋ง ์กฐํ๋๋๋ก ํ ์คํธ ์ถ๊ฐ * feat: ํ๊ทธ ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ (#517) * refactor: ๊ณต์ ๋ฌธ์ ์ง์ ํ๊ทธ, ์ข์์๋ฅผ ๋ณด์ฌ์ค๋ค (#499) * refactor: ๊ณต์ ๋ฌธ์ ์ง ๋ ์ด์์ ์์ * refactor: ๊ณต์ ๋ฌธ์ ์ง ๋ฆฌ์คํธ ๋ฐ์ํ ๊ตฌํ * refactor: ๋ฌธ์ ์ง ์ด๋ฆ, ํ๊ทธ ๊ธธ์ด๊ฐ ๊ธธ ๋ ... ์ฒ๋ฆฌ * feat: PublicSearchPage์ ๋ฌธ๊ตฌ ์ถ๊ฐ * refactor: PublicSearchLoadable ์ค์ผ๋ ํค ์ถ๊ฐ * etc: ๊ธด ๋ฌธ์์ด break-all ์ฒ๋ฆฌ * etc: ๊ธด ๋ฌธ์์ด ... ์ฒ๋ฆฌ * etc: ์ ๋ ํฐ ๋ฌธ์ ์ง ์ด๋ฆ ๋๋น ๊ณ ์ * chore: Webpack chunk ๋ถ๋ฆฌ, font preload (#518) * refactor: ํฐํธ preload ์ค์ * chore: chunk ์ค์ * chore: moduleIds ์ถ๊ฐ * chore: dist, dist-server๋ถ๋ฆฌ * chore: ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ฌ์ค์ * chore: ์ฝ๋ ์คํ๋ฆฌํ (vendor ๋ถ๋ฆฌ) * refactor: ๋ก๊ทธ์์ ํ์ด์ง ์์ฑ * fix: ์นด๋, ๋ฌธ์ ์ง์ ๋น ๋ฅด๊ฒ ์ญ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๋ฒ๊ทธ ์์ * fix: ํน์ ํ์ด์ง์์ scrollToTop ์ญ์ * fix: ํํธ ํ ๊ธ ์ ๊ฒ์ ํ์ด์ง์๋ ๋ฐ์ * refactor: S3 ํ์ผ ์ ๋ก๋ ์ userName ๋์ userId๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * chore: ๋ฒ์ ๋ณ๊ฒฝ * etc: spring dev, prod profile ํ๋๋ก ํตํฉ (#537) * refactor: ๋ฌธ์ ์ง ์์ธ๋ณด๊ธฐ ์๋ต์ ํํธ ์์ ํ๊ทธ ํฌํจ (#540) * R01 - S3๋ฅผ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ถ๋ฆฌํ๋ฉฐ, ๋ก์ปฌ์์๋ Fake ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. (#532) * refactor: S3Config dev,prod ํ๊ฒฝ ๋ถ๋ฆฌ * refactor: S3Uploader๋ฅผ FileUploader๋ก ํ๋จ๊ณ ์ถ์ํ ๋ฐ S3Uploader์์ IO์์ ์ด ์ผ์ด๋์ง ์๋๋ก ์์ * refactor: FakeS3Uploader#upload ์ ๊ธฐ์กด์ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋๋ก ๋ณ๊ฒฝ * etc: ์๋ธ๋ชจ๋ ์์ ๋ฐ์ * feat: S3Uploader ์ ๋ก๋ ์คํจ ์ ์์ธ ์ฒ๋ฆฌ * docs: errors.adoc์ ์ถ๊ฐํ ErrorCode ์์ฑ * etc: yaml ์ค์ ํ์ผ ๋ณ๊ฒฝ * etc: FakeS3Uploader ์ฌ์ฉํ์ง ์๋ ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * feat: UploadFileDto ์์ฑ * test: ImageTypeTest ์ถ๊ฐ * test: FileNameGeneratorTest ๋ณด์ * feat: FakeS3Uploader์ ๊ฒฝ์ฐ resources/static์ ๋ํดํธ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋๋ก ์์ * refactor: U013 ErrorType ์ ๊ฑฐ * etc: yml ํ์ผ ์ ๋ฐ์ดํธ * etc: jacoco ์ค์ ๋ณ๊ฒฝ * etc: logback-spring.xml ์์ * feat: test yaml ๋ฆฌํฉํ ๋ง ๋ฐ s3uploaderTest ๋ณด์ * etc: logging ์ ์ญ ์ค์ ์ถ๊ฐ * etc: errors.adoc ์์ * refactor: UploadFileDto ๋ช ์นญ ๋ณ๊ฒฝ ๋ฐ application.properties ์ ๊ฑฐ * B08 - DataSourceConfig ์์ (#535) * refactor: DataSourceConfig ์์ * refactor: @Profile({"dev", "prod"}) ๋ก ๋ณ๊ฒฝ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * refactor: ๋ฉ์ธ ํ์ด์ง ๋ฐ ์นด๋ ํ์ด์ง์ UI๋ฅผ ๋ณ๊ฒฝํ๋ค. (#547) * refactor: ๋ฉ์ธ ํ์ด์ง์ heart์ tag ์ ์ฉ - PublicWorkbook => Workbook์ผ๋ก ๋ณ๊ฒฝ(์ถ์ํ) - ์์ํ ์คํ์ผ ๋ณ๊ฒฝ(margin ์ค์ด๊ธฐ) - WorkbookList css ์คํ์ผ ์ถ๊ฐ(grid ์์ฑ์ด ์ค๋ณต๋์ด์ ์ถ์ถ) * refactor: ๋ฌธ์ ์ง ์์ธ๋ณด๊ธฐ ์๋ต์ ํํธ ์์ ํ๊ทธ ํฌํจ * feat: Cards ํ์ด์ง์ ํ๊ทธ์ ํํธ ๊ฐ์ ์ถ๊ฐ * fix: ์์ ์ ๋ฌธ์ ์ง ํํธ๋ฅผ ํ ๊ธํ์ ๋ ๋ฉ์ธ ํ์ด์ง์ ๊ฐฑ์ ๋์ง ์๋ ๋ฌธ์ ํด๊ฒฐ * refactor: ์ค์ผ๋ ํค ์คํ์ผ ๋ณ๊ฒฝ * etc: ํ๊ทธ ๋ซ์ Co-authored-by: Eugine Park <[email protected]> * fix/S01,S02 - ๊ฒ์ ์ private ๋ฌธ์ ์ง์ ์ ์ธํ๋ฉฐ, ๊ฒ์์ด๊ฐ ํ๊ทธ ๋๋ ๋ฌธ์ ์ง๋ช ์ ํฌํจ๋ ๋ฌธ์ ์ง์ ๊ฐ์ ธ์จ๋ค. (#544) * feat&test: ๊ฒ์ ์ ๊ณต๊ฐ ๋ฌธ์ ์ง๋ง ์กฐํ๋๋๋ก ์กฐ๊ฑด ์ถ๊ฐ * fix: ๊ฒ์ ์ ๊ฒ์์ด๊ฐ ํ๊ทธ์ ํฌํจ๋๊ฑฐ๋, ๋ฌธ์ ์ง๋ช ์ ํฌํจ๋ ๋ฌธ์ ์ง์ ๊ฒฐ๊ณผ๋ก ๊ฐ์ ธ์จ๋ค. * fix/U01, T01 - ํํฐ์์ ์กฐํ๋๋ ์ ์ ์ ํ๊ทธ๊ฐ ๋ฌธ์ ์ง์ ์นด๋๊ฐ 0๊ฐ์ผ ๋๋ ์กฐํ๋์ง ์๋๋ก ์์ ํ๋ค. (#549) * fix: ํํฐ์์ ์กฐํ๋๋ ์ ์ ์ ํ๊ทธ๊ฐ ๋ฌธ์ ์ง ์นด๋๊ฐ 0๊ฐ์ผ ๋ ์กฐํ๋์ง ์๋๋ก ์์ * feat: TagFilterRepository ์ถ๊ฐ * feat&test: ์ ์ ํํฐ ์กฐํ๋ฅผ querydsl๋ก ๋ณ๊ฒฝ * refactor: TagFilterRepository๋ก ๋ถ๋ฆฌ ๋ฐ TagService ๋ก์ง ์ญ์ * refactor,test: ์ฝ๋ ํฌ๋งทํ ๋ฐ ์๋น์ค ํ ์คํธ ์ถ๊ฐ Co-authored-by: seovalue <[email protected]> * B07 - ๋น๋๊ธฐ ๋ก๊น ์ ์ฉ ๋ฐ ๋ก๊น ๊ฐ๋ ์ฑ์๊ฒ ๊ฐ์ ํ๊ธฐ (#550) * refactor: Json Pretty Print ์ค์ ์ local, test์์๋ง ์ ์ฉํ๋๋ก ๋ณ๊ฒฝ * feat: query pattern ๋ณ๊ฒฝ * refactor: file๊ณผ console ํจํด ๋ถ๋ฆฌ * feat: AsyncAppender ๋์ * refactor: utf8 ์ ๊ฑฐ * refactor: AsyncAppender ์ค์ ๋ณ๊ฒฝ * refactor: Config ํ์ผ ๋ถ๋ฆฌ * fix/UT01 - UserFilterRepositoryTest ๋ธ๋์น ์ปค๋ฒ๋ฆฌ์ง ๋ง์กฑํ๋๋ก ์์ (#553) * refactor: Json Pretty Print ์ค์ ์ local, test์์๋ง ์ ์ฉํ๋๋ก ๋ณ๊ฒฝ * feat: query pattern ๋ณ๊ฒฝ * refactor: file๊ณผ console ํจํด ๋ถ๋ฆฌ * feat: AsyncAppender ๋์ * refactor: utf8 ์ ๊ฑฐ * refactor: AsyncAppender ์ค์ ๋ณ๊ฒฝ * refactor: Config ํ์ผ ๋ถ๋ฆฌ * fix: branch coverage ๋ง์กฑํ๋๋ก ํ ์คํธ ์ถ๊ฐ * fix: URI ์๋ฌ ๋ฐ ๊ฐ์ข ๋ฒ๊ทธ๋ฅผ fixํ๋ค. (#552) * fix: URI ๊ด๋ จ ์๋ฌ ์์ (URLSearchParams) * fix: ์์ฝ์ด๋ก ์ธํ ์ ๊ทํํ์ ์๋ฌ ๋ฐ ๋ชจ๋ฌ ๋ฒ๊ทธ ์์ * fix: ์๋ก๊ณ ์นจ ์ ํ๊ทธ์ ์์ฑ์๊ฐ ์ฌ๋ผ์ง๋ ๋ฒ๊ทธ ์์ * fix: ๋น ๋ฅด๊ฒ ๊ฒ์ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์งํ๋๋ก ์ค์ * B06 - cors ๊ด๋ จ allowedOrigins ๊ฐ์ ํ๊ฒฝ๋ณ Profile์์ ๊ด๋ฆฌ (#538) * etc: cors ๊ด๋ จ allowedOrigins ๊ฐ์ ํ๊ฒฝ๋ณ Profile์์ ๊ด๋ฆฌ * refector: Acceptance ํ ์คํธ์์ ํด๋น ์์ฑ์ด ํ์ํ์ฌ : ์ ์ ์ด์ค ${property:default value} ํ์์ธ๋ฐ ๋น์๋๋๊น ๋น์ด์๋ ๋ฐฐ์ด๋ก ์์ฑ * refactor: /api prefix ์ ๊ฑฐ (#558) * refactor: asciidoc index.html ์ด๋ * fix: filter๋ฅผ ๊ฐ์ ธ์ฌ ๋, tag์๋ง ํฌํจ๋์ด์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ ธ์ค๋๋ก ์์ (#555) * fix: filter๋ฅผ ๊ฐ์ ธ์ฌ ๋, tag์๋ง ํฌํจ๋์ด์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ ธ์ค๋๋ก ์์ * etc: ์ฃผ์ ์ ๊ฑฐ * fix: AcceptanceTest /api prefix ์ ๊ฑฐ * fix: ๊ฒฝํฉ ์กฐ๊ฑด ํด๊ฒฐ Co-authored-by: Kyle <[email protected]> * fix: ์คํฌ๋กค ๋ฒ๊ทธ ์์ * fix/T01 - ์ฐ๊ด ํ๊ทธ ๊ฒ์ ์ ๋ฌธ์ ์ง์ด ๋น๊ณต๊ฐ์ด๊ฑฐ๋, ์นด๋๊ฐ 0๊ฐ์ธ ๋ฌธ์ ์ง์ ํฌํจ๋ ํ๊ทธ๋ ์กฐํํ์ง ์๋๋ค. (#560) * fix: ์ฐ๊ด ํ๊ทธ ์กฐํ ์ ๋ฌธ์ ์ง์ด private์ด๊ฑฐ๋ card๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ์ ํ๊ทธ๋ ์กฐํํ์ง ์๋๋ค. * test: add branch coverage test * chore: ๋ฒ์ ์์ * fix: ๋ฌธ์ ์ง์ ํ๊ทธ ์ด๋ฆ์ผ๋ก ๊ฒ์ํ์ ๊ฒฝ์ฐ ํ๊ทธ ํํฐ๋ง ์๋๋ ๋ฒ๊ทธ ์์ * etc: ํซํฝ์ค merge (#567) * 5์ฐจ release (#562) * B14 - ๋ก๊น ์ ๋ต wiki ๋ฌธ์ํ ๋ฐ xml ์ฝ๋ ์ ๋ฐ์ (#172) * etc: ์๋ธ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ * feat: http๊ด๋ จ ๋ก๊น ์ค์ * feat: ๊ธฐ์กด ๋ก๊ทธ ํจํด ์์ ๋ฐ ์ ์ฅ ๋ ๋ฒจ ๋ณ๊ฒฝ * feat: ๋ก๊ทธ ๋ ๋ฒจ ๋ณ ํ์ผ ๋ถ๋ฆฌ * etc: ๋ก๊น ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ * feat: ํ์ผ, ์ฝ์ ๋ก๊น ์ดํ๋ ์ถ๊ฐ * feat: logback ํ์ผ์ ๋ถ๋ฆฌ๋ ์ดํ๋ ์ถ๊ฐ * feat: http ์์ฒญ, ์๋ต body ์ถ๋ ฅ ๊ด๋ จ ์ค์ ์ถ๊ฐ Co-authored-by: seunghyun <[email protected]> * U03 - ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์์ ๊ด๋ จ์๋ /users/me api ๋ฐ User ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ค. (#175) * feat: /users/me api ๋ฐ ์ธ์ํ ์คํธ ์ถ๊ฐ * test: user ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * refactor: ํ์์๋ ๋ฉ์๋ ์ ๊ฑฐ ๋ฐ ํจํค์ง ๊ตฌ์กฐ ๋ณ๊ฒฝ * B28 - ๋ก์ปฌ์์ ์คํ ์ ํ์ํ ์ด๊ธฐ๋ฐ์ดํฐ๋ฅผ ์ํ ๋ฐ์ดํฐ๋ก๋ ๋ฆฌํฉํ ๋ง (#176) * etc: application.yml ์์ * refactor: ๋ฐ์ดํฐ๋ก๋ ๋ฆฌํฉํฐ๋ง * etc: ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ก ์ฌ์ฉํ ์ฟผ๋ฆฌ ์์ฑ * C04 - ์นด๋์ '๋ค์์ ๋ ๋ณด๊ธฐ' ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๋ค. (#178) * UI05 - ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง UI๋ฅผ ๊ตฌํํ๋ค (#165) * feat: ๊ณต์ ํ์ด์ง UI ์ถ๊ฐ * etc: ์๋ฒ url ๋ณ๊ฒฝ (localhost:8080) Co-authored-by: dudtjr913 <[email protected]> * etc: SearchPage ์ญ์ Co-authored-by: dudtjr913 <[email protected]> * etc: path ๋ณ๊ฒฝ (sharedWorkbookDetail -> SharedCards) Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: imgwang-yeol <[email protected]> * refactor: Cards ์ฌ์ฉํ์ง ์๋ ์์ฑ์ ์ ๊ฑฐ * feat: ๋ฌธ์ ์ง์ ์นด๋ ์๋ ๊ฒฝ์ฐ ์์ธ ๋ฐ์ํ์ง ์๋๋ก ๋ณ๊ฒฝ - ๋ฉ์๋ ์ด๋ฆ ์์ - ๋ฌธ์ ์ง์ ์นด๋ ์๋ ๊ฒฝ์ฐ๋ฅผ ํ ์คํธํ๋ ๋ถ๋ถ ์ ๊ฑฐ * feat: Card ๋ ๋ณด๊ธฐ ๋ณ๊ฒฝ ๋ฉ์๋ ์ถ๊ฐ * feat: CardRepository ์ฌ๋ฌ id๋ก ์นด๋ ์กฐํํ๋ ๋ฉ์๋ ์ถ๊ฐ * etc: ํ ์คํธ ๋๋ ํ ๋ฆฌ ์ ์๋ฆฌ๋ก ์ด๋ * feat: CardService, ๋ ๋ณด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * feat: CardController ์ถ๊ฐ ๋ฐ ๋ ๋ณด๊ธฐ api ์์ฑ * refactor: ์ธ์ ํ ์คํธ์์ ์นด๋ & ๋ฌธ์ ์ง ์์ฑ ๋ฉ์๋ AuthAcceptanceTest๋ก ์ด๋ * test: ๋ ๋ณด๊ธฐ ์นด๋ ์ ํ ๊ธฐ๋ฅ ์ธ์ ํ ์คํธ ์ถ๊ฐ * docs: ๋ ๋ณด๊ธฐ ์นด๋ ์ ํ api ๋ฌธ์ํ - workbook ๊ด๋ จ ์์คํค๋ ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ * B14 - ๋ก๊น ์ ๋ต wiki ๋ฌธ์ํ ๋ฐ xml ์ฝ๋ ์ ๋ฐ์ (#172) * etc: ์๋ธ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ * feat: http๊ด๋ จ ๋ก๊น ์ค์ * feat: ๊ธฐ์กด ๋ก๊ทธ ํจํด ์์ ๋ฐ ์ ์ฅ ๋ ๋ฒจ ๋ณ๊ฒฝ * feat: ๋ก๊ทธ ๋ ๋ฒจ ๋ณ ํ์ผ ๋ถ๋ฆฌ * etc: ๋ก๊น ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ * feat: ํ์ผ, ์ฝ์ ๋ก๊น ์ดํ๋ ์ถ๊ฐ * feat: logback ํ์ผ์ ๋ถ๋ฆฌ๋ ์ดํ๋ ์ถ๊ฐ * feat: http ์์ฒญ, ์๋ต body ์ถ๋ ฅ ๊ด๋ จ ์ค์ ์ถ๊ฐ Co-authored-by: seunghyun <[email protected]> * refactor: DomainAcceptanceTest ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: imgwang-yeol <[email protected]> Co-authored-by: seunghyun <[email protected]> * F09 - api ์ฃผ์ ๋ฐ ๋ณ์ ๋ช ๋ณ๊ฒฝ (#182) * etc: category -> workbook ์ด๋ฆ ์์ - axios ํ์ ์ฒ๋ฆฌ * refactor: ๋ก๊ทธ์ธ ๋ฐ ๋ก๊ทธ์์ ์ฝ๋ ์์ - localStorage์ ํ ํฐ ์ ์ฅ Co-authored-by: Kyle <[email protected]> * fix: ํ ์คํธ ์ฝ๋ ์ค๋ฅ ์์ - setupFiles ๋ฐ setupFilesAfterEnv ์ค์ Co-authored-by: Kyle <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * feat: recoil ๊ด๋ จ ์ด๊ธฐ ์ค์ ๊ธฐ๋ฅ ์ถ๊ฐ(ํ ์คํธ) (#186) - initializeState Co-authored-by: Kyle <[email protected]> * docs: ๋ฐฑ์๋ ์๋ฒ ์คํ ๋ฐฉ๋ฒ ์์ฑ (#187) * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ ํ์ด์ง UI๋ฅผ ๊ตฌํํ๋ค (#191) * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ ํ์ด์ง ์ถ๊ฐ - ๋ผ์ฐํฐ ์ ์ฉ - check svg ์์ฑ - Checkbox ์ปดํฌ๋ํธ ์์ฑ - SharedQnACard ์ปดํฌ๋ํธ ์์ฑ - SharedCardsPage ์์ฑ * refactor: PageHeader ๋ฐ ๋์์ธ ๋ฆฌํฐ์น - PageHeader sticky, rightContent ์ถ๊ฐ - ์ ์ฒด์ ์ผ๋ก ๋์์ธ ๋ฆฌํฐ์น Co-authored-by: Kyle <[email protected]> * refactor: shared => public ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> Co-authored-by: Kyle <[email protected]> * feat: ๋ฌธ์ ์ง ์ถ๊ฐ ํ๋ฉด์ ๊ตฌํํ๋ค. (#189) * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * feat: ๋ฌธ์ ์ง ์ถ๊ฐ ํ์ด์ง ๊ตฌํ * test: ๋ฌธ์ ์ง ์ถ๊ฐ ํ์ด์ง ํ ์คํธ ์ฝ๋ ์์ฑ * etc: ์ํฌ๋ถ ๋์ด ์์ * refactor: ๋์์ธ ๋ฆฌํฐ์น - workbook, skeleton height ๋ณ๊ฒฝ Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * feat: ๋นํ์ ํด์ฆ ํ๊ธฐ ๊ตฌํ (#193) * feat: ๋นํ์ ํด์ฆ ํ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: Kyle <[email protected]> * refactor: history ์ ๋ฆฌ - useRouter ํ ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * B29 - ํ ์คํธ๋ฅผ ๋ฆฌํฉํ ๋งํ๋ค. (#181) * refactor: oauth ์ธ์ฆ์ ์๊ตฌํ์ง ์๋ GET ๋ฉ์๋ ๋ฆฌํฉํ ๋ง * refactor: auth๊ฐ ํ์ํ GET ์์ฒญ ๋ฆฌํฉํ ๋ง * refactor: acceptanceTest์ post, put, delete ๋ฉ์๋ ๋ฆฌํฉํ ๋ง * refactor: UserAcceptanceTest ๋ฆฌํฉํ ๋ง * refactor: Documentation Test ๋ฆฌํฉํ ๋ง * refactor: CardAcceptanceTest ๋ฐ DomainAcceptanceTest ๋ฆฌํฉํ ๋ง * etc: ์นดํ ๊ณ ๋ฆฌ์์ ๋ฌธ์ ์ง์ผ๋ก ๋ช ์นญ ์์ * refactor: Document ํ ์คํธ util ํจํค์ง ์์ฑ * refactor: RestAssuredTest์ log ์ต์ ์ ์ ํํ ์ ์๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฉ์๋๋ช ๊ฐ๋ ์ฑ์๊ฒ ๋ณ๊ฒฝ ๋ฐ document์ status, identifier ๋ถ๋ฆฌ * etc: env ํด๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ค์ ์ค์ ํ๋ค (#196) * etc: submodule ๋๊ธฐํ Co-authored-by: Kyle <[email protected]> * etc: script ๋ช ๋ น์ด ๋ณ๊ฒฝ - build:dev - build:prod Co-authored-by: Kyle <[email protected]> Co-authored-by: Kyle <[email protected]> * fix: DataLoader์์ ํ์ผ ์ฝ์ ๋ UTF-8 ์บ๋ฆญํฐ์ ์ฌ์ฉํ๋๋ก ์์ (#199) * feat: ๋ก๊ทธ์ธ ํ ์ ์ ์ ๋ณด ๋ฐ์์ค๊ธฐ (#200) Co-authored-by: dudtjr913 <[email protected]> * refactor: ์นด๋ ํ ํ๋ฆฟ ์ถ๊ฐ (#202) Co-authored-by: Kyle <[email protected]> Co-authored-by: Kyle <[email protected]> * refactor: ๋ฆฌํฉํ ๋ง (#204) * etc: WorkbookResponse ์์ - logoUrl, description ์ญ์ Co-authored-by: dudtjr913 <[email protected]> * etc: ๋ฌธ์ ์ง ์ถ๊ฐ ๋ฒํผ ๋ณ๊ฒฝ Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * feat: ModalProvider ์ถ๊ฐ (#206) Co-authored-by: Kyle <[email protected]> Co-authored-by: Kyle <[email protected]> * Q05 - ํด์ฆ์์ '๋ ๋ณด๊ธฐ' ์นด๋๋ฅผ ๋จผ์ ๋ด์ ์ ์ ์๊ฒ ์ ๊ณตํ๋ค (#190) * feat: QuizResponse์ ๋ง์ฃผ์น ํ์ ํ๋ ์ถ๊ฐ * feat: ๋ค์์ ๋๋ณด๊ธฐ๊ฐ ํฌํจ๋ ํด์ฆ ์์ฑ * feat: ๋ค์์ ๋ ๋ณด๊ธฐ์ ์ถ๊ฐ๋ ์นด๋์ ๋๋ณด๊ธฐ ์ต์ ์ทจ์ ๊ตฌํ * refactor&test: Quiz ํด๋์ค ์์ฑ ๋ฐ createQuiz ์ฑ ์ ๋ถ๋ฆฌ, ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * etc: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ญ์ * feat: ํ์, ๋นํ์ ๋๋ Role ์ถ๊ฐ (#195) * etc: pull request template ์ถ๊ฐ * etc: Jenkinsfiles ์ถ๊ฐ * W03- Workbook์ User์ถ๊ฐ, /workbooks//{id}/cards API์ ํ๋ ์ถ๊ฐ (#208) * feat: Workbook์ User ํ๋ ์ถ๊ฐ * refactor: ์ผ๋ถ ์ฃผ๊ด์ ์ธ ์คํ์ผ์ ๋ฐ์ * feat: CardResponse์ ํ๋ ์ถ๊ฐ * refactor: ํจํค์ง ์ด๋ dto -> dto/workbook // workResponse ํ๋ ์์ * feat: ๋ฌธ์ ์ง์ ์ฃผ์ธ์ ์์๋ด๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: User ํ ์ด๋ธ์ Role ์ถ๊ฐ * etc: ddl, dml ์์ * refactor: DataLoader์์ ADMIN์ผ๋ก ์ ์ ์์ฑ ํ ๋ฐ์ดํฐ ์ด๊ธฐํ ์ ์ ๋ก ์ด์ฉ * refactor: CardResponse ํ๋ ์กฐ์ * refactor: ๋ฐ์ดํฐ๋ก๋์ ๋๋ฏธ ๋ฌธ์ ์ง ๊ณต๊ฐ์ฌ๋ถ true๋ก ๋ณ๊ฒฝ * refactor: ํ ์คํธ ์ฑ๊ณตํ๋๋ก ์์ * etc: api ๋ฌธ์ ๊ฒฝ๋ก ๋ณ๊ฒฝ (#212) * etc: Jenkinsfiles์ slack ์ค์ ์ถ๊ฐ * C05 - ์นด๋๋ฅผ ์ถ๊ฐ, ์์ , ์ญ์ ํ๋ api๋ฅผ ๋ง๋ ๋ค. (#210) * feat: ๋ชจ์๋ณด๊ธฐ ํ๋ฉด์์ ๋ณด์ฌ์ฃผ๋ ์นด๋์ ์ ๋ณด์ ๋ถ๋งํฌ ์ฌ๋ถ์ ๋ง์ฃผ์น ํ์ ์ถ๊ฐ * feat: ์นด๋ ์์ฑ api ์ถ๊ฐ * test: ์นด๋ ์์ฑ ๊ด๋ จ ์ธ์ ํ ์คํธ์ ์๋น์ค ํ ์คํธ ์ถ๊ฐ * feat: ์นด๋ ์์ฑ ์์ฒญ ๋ฐ ๋ ๋ณด๊ธฐ ์์ฒญ ๊ด๋ จ ๊ฒ์ฆ ์ถ๊ฐ * feat: ์นด๋ ์์ ๊ธฐ๋ฅ api ์ถ๊ฐ * test: ์นด๋ ์์ ๊ด๋ จ ์๋น์ค ํ ์คํธ ๋ฐ ์ธ์ ํ ์คํธ ์ถ๊ฐ * etc: Jenkinsfiles ์ถ๊ฐ * etc: Jenkinsfiles ์์ * etc: tools ์ถ๊ฐ * etc: frontend ๊ฒฝ๋ก ์ถ๊ฐ ์ค์ * etc: ssh ์ค์ ์ถ๊ฐ * docs: ์นด๋ ์์ฑ ๋ฐ ์์ api ๋ฌธ์ํ * refactor: Cards ๊ด๋ จ ํ ์คํธ ๋ณ๊ฒฝ๋ ํ ์คํธ ๋ฐฉ์ ์ ์ฉ * feat: ์นด๋ ์ญ์ ๊ด๋ จ api ์์ฑ ๋ฐ ๊ด๋ จ ํ ์คํธ, ๋ฌธ์ ์ถ๊ฐ * etc: ์ฝ๋ ์ ๋ฆฌ * test: ๋๋ฝ๋ ์นด๋ ์ถ๊ฐ ์คํจ ํ ์คํธ ์ถ๊ฐ * refactor: workbook ๊ด๋ จ ์๋ต์์ workbookName์ name์ผ๋ก ์์ * test: CardAcceptanceTest ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * feat: ์นด๋ ์์ api ์์ฒญ๊ณผ ์๋ต ์์ ๋ณ๊ฒฝ * refactor: CardService workbook ์ฐพ๋ ๋ฉ์๋ ์ถ์ถ Co-authored-by: joanne <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * feat: form context ์ถ๊ฐ (#219) Co-authored-by: dudtjr913 <[email protected]> * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ (#221) Co-authored-by: dudtjr913 <[email protected]> * feat: ํ ์คํธ ํ์ผ ์์ (#224) * test: ํ ์คํธ ํ์ผ ์ญ์ Co-authored-by: Kyle <[email protected]> * feat: ๊ณต์ ํ์ด์ง ์ด๋ ๋ฐฐ๋ ๋ง๋ค๊ธฐ (#226) * refactor: inputField focus ์ํ ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์ด๋ ๋ฐฐ๋ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * Q04 - ๋ฐ๋ก ํ์ด๋ณด๊ธฐ API๋ฅผ ๊ตฌํํ๋ค (#216) * feat&test: ๋ฌธ์ ์ง์์ ๋ฐ๋ก ํ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * test: increaseEncounterCount ํ ์คํธ ์ถ๊ฐ * test: Quiz ๋๋ฉ์ธ์ incrementEncounterCount Test ์ถ๊ฐ * fix: ๋ฌธ์ ์ง์์ ๋ฐ๋กํ๊ธฐ ์ ๋ง์ฃผ์น ํ์ ์ฆ๊ฐ๋์ง ์๋๋ก ์์ * refactor: ๋ฌธ์ ์ง์์ ๋ฐ๋กํ๊ธฐ ์ ๋ค์์ ๋๋ณด๊ธฐ ์ทจ์ ๊ธฐ๋ฅ ์ญ์ * feat: ๋ฌธ์ ์ง์ด public์ธ์ง ํ์ธํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: CardAddPage, CardEditPage ๊ตฌํ (#229) Co-authored-by: dudtjr913 <[email protected]> * U05 - Role์ด admin์ธ User๋ง admin api์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก AdminInterceptor๋ฅผ ์ถ๊ฐํ๋ค. (#217) * feat: GithubUserInfoResponse์์ Role์ ์ถ๊ฐํด์ User๋ก ๋ณํ๋๋๋ก ์ถ๊ฐ * feat: AdminInterceptor ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: AdminAcceptanceTest๋ด Category๋ฅผ Workbook์ผ๋ก ์์ * UI10 - ์คํฌ๋กค ๋ฐ๋ฅผ ์ปค์คํ ํ๋ค (#233) * refactor: ์ปค์คํ ์คํฌ๋กค ๋ฐ ๊ตฌํ Co-authored-by: Kyle <[email protected]> * W04 - Workbook์ ์กฐํํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๋ค. (#218) * feat: Workbook์ User ํ๋ ์ถ๊ฐ * refactor: ์ผ๋ถ ์ฃผ๊ด์ ์ธ ์คํ์ผ์ ๋ฐ์ * feat: CardResponse์ ํ๋ ์ถ๊ฐ * refactor: ํจํค์ง ์ด๋ dto -> dto/workbook // workResponse ํ๋ ์์ * feat: ๋ฌธ์ ์ง์ ์ฃผ์ธ์ ์์๋ด๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: User ํ ์ด๋ธ์ Role ์ถ๊ฐ * etc: ddl, dml ์์ * refactor: DataLoader์์ ADMIN์ผ๋ก ์ ์ ์์ฑ ํ ๋ฐ์ดํฐ ์ด๊ธฐํ ์ ์ ๋ก ์ด์ฉ * refactor: CardResponse ํ๋ ์กฐ์ * refactor: ๋ฐ์ดํฐ๋ก๋์ ๋๋ฏธ ๋ฌธ์ ์ง ๊ณต๊ฐ์ฌ๋ถ true๋ก ๋ณ๊ฒฝ * refactor: ํ ์คํธ ์ฑ๊ณตํ๋๋ก ์์ * refactor: TestUtils์ ๋ฌธ์์ด ์์ฑ ๋ฉ์๋ ์ด๋ฆ ๋ณ๊ฒฝ * feat: ๊ฒ์์ด ๊ฐ์ฒด์ธ SearchKeyword ์์ฑ * feat: ๊ฒ์ ์กฐ๊ฑด ๊ฐ์ฒด์ธ WorkbookCriteria ์์ฑ * feat: ๋ฌธ์ ์ง ๊ฒ์์ ์ํ resolver ์์ฑ ๋ฐ API์ ์ ์ฉ * feat: ๊ฒ์์ ํ์ฉํ AccessType ํด๋์ค ๊ตฌํ * refactor: boolean ๋์ AccessType์ ์ฌ์ฉํ๋๋ก ์์ * refactor: ํญ ๋ฌธ์์ ๊ฐํ ๋ฌธ์๋ฅผ ๊ณ ๋ คํ์ฌ ์์ * refactor: ํ๋๋ช ์์ (workbookName -> name) * etc: dml ์์ * feat: ๋ฌธ์ ์ง์ ์ด๋ฆ์ ๋จ์ด๊ฐ ํฌํจ๋์ด ์๋์ง ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: ๊ฒ์์ ์ฃผ์ธ์ ์ค์ ํ๋ OwerType ํด๋์ค ์์ฑ * refactor: ์์ธ๋ช ๋ณ๊ฒฝ, ์ด์ธ ์์ํ ์์ * feat: ์์ ์๋น์ค ๋ก์ง ์ถ๊ฐ * feat: ๊นจ์ง๋ ํ ์คํธ๋ฅผ ์์ (๋ก๊ทธ์ธ ๋ฐ ๋ฌธ์ ์ง ๊ณต๊ฐ) * feat: RequestBuilder์ query parameter๋ฅผ ์ํ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: lombok.EqualsAndHashCode ์ฌ์ฉ * refactor: ํ ์คํธ ๊ตฌ์กฐ ์์ ๋ณต๊ตฌ * refactor: workbook resolver ์ญ์ * refactor: ๋๋ฉ์ธ์ผ๋ก์ ๋์์ด ์ ํฉํ๋๋ก WorkbookCriteria ์์ * feat: WorkbookCriteria๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ์ง์ ํํฐ๋งํ๋ ํด๋์ค ์์ฑ * feat: ๋ฌธ์ ์ง ์กฐํ, ๊ฒ์ Service ๋ฉ์๋ ๊ตฌํ * feat: ๋ก๊ทธ์ธ ์ ์ ๋ฌธ์ ์ง ์กฐํ API, ๋ฌธ์ ์ง ๊ฒ์ API ์ถ๊ฐ * refactor: ์คํจํ๋ ํ ์คํธ ์์ * refactor: @Param ์ถ๊ฐ ๋ฐ ํ ์คํธ ์์ * etc: ํจํค์ง ๊ตฌ์กฐ ๋ณ๊ฒฝ * refactor: ์ํฐํฐ boolean ํ๋์ด๋ฆ is์ ๊ฑฐ TINYINT(1) ์ถ๊ฐ, ์นด๋์ ์ง๋ฌธ ์ ๋ต 2000์ ์ดํ๋ก ์์ * W07 - ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์ ์ง ์กฐํ์ ์ต์ ์์ผ๋ก ์กฐํ๋ ์ ์๋๋ก ๊ตฌํํ๋ค. (#241) * feat: ์ต์ ์์ผ๋ก Workbook์ด ์กฐํ๋๋๋ก ์์ ๋ฐ ํ ์คํธ ์ฝ๋ ์ถ๊ฐ * feat: admin์ด ๋ฌธ์ ์ง์ ์ถ๊ฐํ ๋ admin์ id๊ฐ ์ ์ฅ๋ ์ ์๋๋ก ์ฝ๋ ์ถ๊ฐ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * C06 - ๋ชจ์๋ณด๊ธฐ์์ ์นด๋๋ฅผ ์ต์ ์์ผ๋ก ์ ๊ณตํ๋ค. (#237) * feat: ๋ชจ์๋ณด๊ธฐ ์์ฒญ์ ์นด๋ ์์ฑ ์๊ฐ ์ญ์์ผ๋ก ์ ๊ณต * refactor: ์ต์ ์์ผ๋ก ์นด๋ ์ ๋ ฌํ๋ ๋ฉ์๋ ๋จ์ํ * refactor: ์ต์ ์์ผ๋ก ์นด๋ ์ ๋ ฌํ๋ ๋ฉ์๋ jpql ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ ๋ฐ CardSimpleResponse ์ ๊ฑฐ * feat: ์นด๋ ์ถ๊ฐ, ์์ , ์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#244) * feat: ์นด๋ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ - FormProvider onBlur ์ถ๊ฐ - ๋ฆฌ์ฝ์ผ ์ํ ๊ด๋ฆฌ ๋ฐฉ์ ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> * feat: cardState ์บ์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ ํธ๋ฆฌ๊ฑฐ ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> * feat: ์นด๋ ์ถ๊ฐ validator ๊ตฌํ * feat: ๋ถ๋งํฌ ์์ ๊ตฌํ - debounce Co-authored-by: dudtjr913 <[email protected]> * feat: filter ํ fetch Co-authored-by: dudtjr913 <[email protected]> * feat: ์นด๋ ์์ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: Kyle <[email protected]> * feat: ์นด๋ ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: Kyle <[email protected]> Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * fix: UPDATE ,DELETE ๋ฉ์๋ CORS ํ์ฉ (#243) * feat: DataLoader ์ค์ ์ด๋๋ฏผ ์ ๋ณด ์ถ๊ฐ * UI11 - ํ์ด์ง -> ๋ชจ๋ฌ (#248) * fix: PublicQnACard ํ์ ์ค๋ฅ ์์ * fix: ๋ถ๋งํฌ ์ ๋ ฌ ์ค๋ฅ ์์ Co-authored-by: dudtjr913 <[email protected]> * refactor: ์นด๋ ์ถ๊ฐ ํ์ด์ง -> ๋ชจ๋ฌ Co-authored-by: dudtjr913 <[email protected]> * refactor: ์นด๋ ์์ ํ์ด์ง => ๋ชจ๋ฌ ๊ต์ฒด Co-authored-by: Kyle <[email protected]> * feat: ์นด๋ ์ญ์ confirm ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> * fix: modal์์ ๋ค๋ก๊ฐ๊ธฐ ์ค๋ฅ ์์ * etc: ํ๋ก ํธ์๋ ํ์ดํ๋ผ์ธ ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ ์ถ๊ฐ * W05 - ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๋ค. (#238) * etc: ํจํค์ง ์์น ๋ณ๊ฒฝ * refactor: null๋ก ๊ฒ์ -> ๋๋ฏธ ๋ฌธ์ ์ง, ""๋ก ๊ฒ์ -> ๊ฒฐ๊ณผ์์ ์ผ๋ก ๋ณ๊ฒฝ * etc: ๋ถํ์ํ import ์ ๊ฑฐ * refactor: ์์ธ๋ช ์์ * refactor: ๊ฒ์์ ๋ฐ๋์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅ๋ฐ๋๋ก ์์ , ์ ๋ ฅ๋ฐ์ง ๋ชปํ ์ ์์ธ ํธ๋ค๋ง ์ถ๊ฐ * refactor: ๊ฒ์์ ๋ฐ๋์ ๊ฒ์์ด๊ฐ ํ์ํ๋๋ก ๋๋ฉ์ธ ์์ *๋๋ฏธ ๋ฌธ์ ์ง ๊ฒ์์ ์ฌ์ฉ๋๋ NoSearchKeyword ์ ๊ฑฐ) * W06 - ๋ฌธ์ ์ง ๋ฌธ์ํ, ์ธ์ ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ค. (#247) * etc: ํจํค์ง ์์น ๋ณ๊ฒฝ * refactor: null๋ก ๊ฒ์ -> ๋๋ฏธ ๋ฌธ์ ์ง, ""๋ก ๊ฒ์ -> ๊ฒฐ๊ณผ์์ ์ผ๋ก ๋ณ๊ฒฝ * test: ๋ฌธ์ ์ง ๋ฌธ์ํ ํ ์คํธ์ ๋นํ์ ์กฐํ, ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ์ถ๊ฐ * refactor: ๋ฌธ์ ์ง๋ณ ์นด๋ ๋ชจ์๋ณด๊ธฐ API์ ๋ชจ๋ ์นด๋ ํ๋๋ฅผ ์ฃผ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฌธ์ ์ง ์กฐํ์ ๊ฒ์์ ํ์ํ ํ๋๋ง ๋ฐํํ๋๋ก ์์ * refactor: ๊ฐ๊ฐ ๋ฌธ์ํ ํ ์คํธ์ ์กด์ฌํ๋ AuthService, MockMvc ๋ถ๋ชจ ํ ์คํธ๋ก ์ด๋ * refactor: ํ์์๋ ์๋ตํ๋ ์ ๊ฑฐ, ํค์๋ ์์ด ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ํ ์คํธ ์ ๊ฑฐ * etc: ์ธ์ฆ๊ด๋ จ ์ธํฐ์ ํฐ์์ /api/workbooks ์ ์ธ, ํ ํฐ ์ถ์ถ์ ์คํจํ๋ฉด null์ ๋ฐํํ๋๋ก ์์ * etc: ์ฝ๋ ์ ๋ฆฌ * test: ๋ฌธ์ ์ง ์ธ์ํ ์คํธ์ ๋นํ์ ๋ฌธ์ ์ง ์กฐํ, ๊ฒ์ ํ ์คํธ ์ถ๊ฐ * refactor: queryParam ์ฌ์ฉํ๋๋ก ์์ * feat: ๋ฌธ์ ์ง์ ์ถ๊ฐ, ์์ , ์ญ์ ํ๋ค. (#252) * feat: ํด์ํ๊ทธ ์ปดํฌ๋ํธ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: Toggle ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฌธ์ ์ง ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฌธ์ ์ง ์์ ๊ธฐ๋ฅ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: ๋ฌธ์ ์ง ์ญ์ ๊ธฐ๋ฅ ์ถ๊ฐ Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * W08 - ๋ฌธ์ ์ง ์ถ๊ฐ, ์กฐํ, ์์ , ์ญ์ ๊ธฐ๋ฅ์ User๋ฅผ ๋์ ํ๋ค. (#249) * feat: Workbook ์ถ๊ฐ api ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: put ๋ฉ์๋์ params ์ธ์๋ก ๋ฐ๋๋ก ์์ * feat: Workbook ์์ api ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * etc: test yml์ ์๋ show-sql true ์ญ์ * feat: Workbook ์ญ์ api ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ํ์์๋ ๋ฉ์๋ ์ญ์ ๋ฐ ์ผ๋ถ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: ์ํํธ ์ญ์ ๋ฅผ workbook ์ํฐํฐ ๋ณ๊ฒฝ๊ฐ์ง๋ฅผ ์ด์ฉํ๋๋ก ์์ * refactor: ๋ฉ์๋๋ช ์ ์๋ owned๋ฅผ author๋ก ์์ * feat: ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#260) * feat: ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: ๊ณต์ ํ์ด์ง ์์ธ ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * refactor: recoil state ์ ๋ฆฌ - public ์ญ์ - initialState ํ์ผ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * refactor: hook ์ ๋ฆฌ Co-authored-by: dudtjr913 <[email protected]> * refactor: custom hook์ผ๋ก ๋ก์ง ์ด๋ Co-authored-by: Kyle <[email protected]> Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * B37 - ๋ฐฑ์๋ ๋ ์ด๋ธ์ด ๋ถ์ง ์์ ๊ฒฝ์ฐ ๋ฐฑ์๋ ์ ํจ์ค ๋น๋๋ฅผ ํ์ง ์๋๋ค. (#266) * etc: ๋ถํ์ํ Jenkinsfile ์ ๊ฑฐ * etc: ๋ฐฑ์๋ ํ๊ฒฝ ์คํ ๋ฐฉ๋ฒ ์์ * B35 - api ์์ฒญ์ intelliJ ์์ ๋ณด๋ผ ์ ์๋๋ก http ํ์ผ์ ๋ง๋ ๋ค. (#258) * feat: ์นด๋์ ์ํฌ๋ถ ๊ด๋ จ ์์ฒญ ํ์ผ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์ญ์ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ๊ฒ์ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * feat: ํด์ฆ ์์ฑ api ์์ฒญ ์ถ๊ฐ * feat: ๊ด๋ฆฌ์ ๋ฌธ์ ์ง ์ถ api ์์ฒญ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๋ฐ ์ ์ ๊ด๋ จ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * B36 - ์ผ๋ฐ ์ ์ ์์ฑ์ DataLoader ์ ์ถ๊ฐํ๋ค. (#263) * feat: ๋ก์ปฌ ํ๊ฒฝ์ ์ผ๋ฐ ์ ์ ์ ๋ณด ์ถ๊ฐ * refactor: DataJpaTest ์์ show sql ์ค์ false ๋ก ๋ณ๊ฒฝ * refactor: dml์ ์์๋ก ์์ฑํ ์ ์ ์ ๋ณด ์ถ๊ฐ * feat: DataLoader๋ก ์ ์ฅ๋๋ ๋ฌธ์ ์ง ์ค ์ฒซ ์ธ ๊ฐ๋ ์ด๋๋ฏผ์ผ๋ก ๋ฑ๋กํ๊ณ ๋๋จธ์ง๋ ์ผ๋ฐ ์ ์ ๋ก ๋ฑ๋ก * C07 - Card CRUD์ ์ ์ ์ถ๊ฐ (#256) * fix&feat: CardUpdate ์ 2๊ฐ ์ถ๊ฐ๋๋ ๋ฒ๊ทธ ์์ ๋ฐ ๋ก๊ทธ์ธํ ํ์๋ง ์นด๋ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat&test: ์นด๋ ์์ , ์ญ์ ๊ธฐ๋ฅ์ ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ๊ฐ๋ฅํ๋๋ก ๊ตฌํ ๋ฐ ํ ์คํธ * refactor&test: soft delete ๋ฐฉ์ ์์ ๋ฐ ์นด๋ CUD ๋ฐ ๋๋ฉ์ธ ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * refactor: Workbook null ํ์ฉํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ ์ํฌ๋ถ ์ ๊ฑฐ * etc: jenkins ํ ์คํธ ์ปค๋ฐ * feat: ์นด๋ ์ญ์ ์ ๋ฌธ์ ์ง์์๋ ์ญ์ ๋๋๋ก ๋ณ๊ฒฝ * fix: ์นด๋ ์ญ์ ์ workbook์ด ๋์ผ ๋ ์กฐ๊ฑด ์ถ๊ฐ ๋ฐ C07 ๋ฐ์ ์๋ ๋ณ๊ฒฝ์ฌํญ ์ถ๊ฐ (#273) * feat: ๋ฐ๋ก ํ์ด๋ณด๊ธฐ ๊ธฐ๋ฅ ๋ฐ ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ UI๋ฅผ ๊ตฌํํ๋ค (#276) * etc: ํ๊ฒฝ์ค์ - react-refresh - fort-ts-checker-webpack-plugin Co-authored-by: dudtjr913 <[email protected]> * etc: ํ๊ฒฝ์ค์ - babel.config.js ์ ๋ฆฌ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฐ๋ก ํ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ * etc: cross-env ์ถ๊ฐ - QuizPage์์ผ๋ก Header ์ด๋ Co-authored-by: Kyle <[email protected]> * fix: ๋ฌธ์ ์ง์ด ์์ ๊ฒฝ์ฐ ํด์ฆ ์ค์ ํ์ด์ง๋ก ์ด๋ ๋ชปํ๋๋ก ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> * feat: SelectBox ์ปดํฌ๋ํธ ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: SelectBox Modal UI ๊ตฌํ ์๋ฃ Co-authored-by: Kyle <[email protected]> * etc: ํ์ดํ๋ผ์ธ ์์ ๋ณ๊ฒฝ - test ํ build Co-authored-by: Kyle <[email protected]> Co-authored-by: imgwang-yeol <[email protected]> * fix: http-file-appender.xml ์คํ ์์ * fix: ์คํ๋ง ์ฌ์์์ ๋ก๊ทธ ํ์ผ ์ ๋ชฉ์ ๋ ์ง ํฌํจ๋๋๋ก ์์ (#278) * feat: ๋ค์์ ๋ ๋ณด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (#280) Co-authored-by: dudtjr913 <[email protected]> * fix: ํด์ฆ ์์ฑ์ ๋ ๋ณด๊ธฐ ์ทจ์ ๊ธฐ๋ฅ ์ค์๋ ์์ * etc: application ์ค์ ์์ ๋ก๊น ์ค์ ์ ๊ฑฐ (#282) * feat: ๋ด ๋ฌธ์ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๊ธฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#284) * etc: import ์ ๋ฆฌ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ฌธ์ ์ง์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * fix: ์ ์ฒด์ ์ธ ์ฝ๋ ํ๋ฆ ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> Co-authored-by: imgwang-yeol <[email protected]> * F18 - ์ ์ฒด์ ์ธ ๋์์ธ ๋ฆฌํฐ์น (#286) * feat: ๊ฒ์ ์ค ๊ฐ๊ตฌ๋ฆฌ ์ด๋ฏธ์ง ์ถ๊ฐ Co-authored-by: Kyle <[email protected]> * feat: PublicCardLoadable ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * etc: textarea ํฌ์ปค์ค ์ ์ฉ Co-authored-by: dudtjr913 [email protected] [email protected] <[email protected]> Co-authored-by: dudtjr913 <[email protected]> Co-authored-by: dudtjr913 <[email protected]> * W09 - ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ๊ฐ๊ธฐ (#267) * fix&feat: CardUpdate ์ 2๊ฐ ์ถ๊ฐ๋๋ ๋ฒ๊ทธ ์์ ๋ฐ ๋ก๊ทธ์ธํ ํ์๋ง ์นด๋ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat&test: ์นด๋ ์์ , ์ญ์ ๊ธฐ๋ฅ์ ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ๊ฐ๋ฅํ๋๋ก ๊ตฌํ ๋ฐ ํ ์คํธ * refactor&test: soft delete ๋ฐฉ์ ์์ ๋ฐ ์นด๋ CUD ๋ฐ ๋๋ฉ์ธ ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * feat: ๋ด ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ ์ด์ ๊ตฌํ * refactor: Workbook null ํ์ฉํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ ์ํฌ๋ถ ์ ๊ฑฐ * feat: Card ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * refactor: workbook์์ ์นด๋๋ฅผ ์ถ๊ฐํ๋๋ก ์์ * refactor: scrapCard ๋ฉ์๋ ์์ * refactor&test: ๋ฉ์๋ ๋ถ๋ฆฌ ๋ฐ ํ ์คํธ ์ถ๊ฐ * test: ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ์ค๊ธฐ ๊ด๋ จ ํ ์คํธ ๊ตฌํ * fix: ํ ์คํธ ๋ฉ์๋๋ฅผ delete -> post๋ก ์์ * feat: ํผ์ผ์ด, ์ค์ฆ ๋ฆฌ๋ทฐ ๋ฐ์ ๋ฐ DataLoader ์ด๋๋ฏผ์ ์ profile url ๋ณ๊ฒฝ * refactor: ๋ฌธ์ ์ง์ผ๋ก ์นด๋ ๊ฐ์ ธ์ค๊ธฐ ์๋ต ๋ณ๊ฒฝ * refactor: ์นด๋ ์คํฌ๋ฉ ์ ์นด๋ ์์ด๋์ ๋ํ ๊ฒฝ์ฐ์ ์ ์ถ๊ฐ ๋ฐ ํ ์คํธ ์ถ๊ฐ * test: ์์ฒญ์ด ๋น์ด์๋ ๊ฒฝ์ฐ์ ๋ํ ํ ์คํธ ์ถ๊ฐ * refactor: ํผ์ผ์ด ๋ฆฌ๋ทฐ ๋ฐ์ ๋ฐ ํ ์คํธ ์ถ๊ฐ * W10 - ๋ฌธ์ ์ง ์ญ์ ์ ๊ฐ์ง๊ณ ์๋ ์นด๋๋ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ฝ๋ ์ผ๋ถ๋ฅผ ๋ฆฌํฉํฐ๋งํ๋ค. (#271) * refactor: WorkbookService ๋ด ๋ฉ์๋ ๋ถ๋ฆฌ * feat: ๋ฌธ์ ์ง ์ญ์ ์ ์นด๋๋ ์ญ์ ๋๋๋ก ์์ * refactor: ์์ฑ์ ๊ฒ์ฆ ๋ก์ง์ ์๋น์ค๋ก ์ด๋ ๋ฐ ํ ์คํธ ์์ * refactor: ๋ฌธ์ ์ง ์ญ์ ์ ์นด๋ ์ญ์ ํ ์คํธ ์ถ๊ฐ ๋ฐ ๊ด๋ จ ๋ฉ์๋ ์์ * refactor: ๋ฌธ์ ์ง ์์ฑ api created uri ๋ณ๊ฒฝ * refactor: ํผ์ผ์ด ๋ฆฌ๋ทฐ ๋ฐ์ * refactor: ์ค๊ฐ๊ณฐ ๋ฆฌ๋ทฐ ๋ฐ์ * refactor: ํ์์๋ ๋ฉ์๋ ์ญ์ ๋ฐ ๋ฉ์๋๋ช ์์ * refactor: ๋ผ์ฐํฐ ์ ๋ฆฌ (#290) Co-authored-by: dudtjr913 <[email protected]> * etc: react-ga ์ถ๊ฐ (#293) Co-authored-by: Kyle <[email protected]> * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ Co-authored-by: Kyle <[email protected]> * etc: main.js ํ์ผ ์ด๋ฆ ๋ฒ์ ์ ๋ง๋๋ก ๋ณ๊ฒฝ * T01 - ๋ฌธ์ ์ง CRUD์ ํ๊ทธ ์ถ๊ฐ (#275) * feat: TagName ๋๋ฉ์ธ ์์ฑ * feat: TagNames ๋๋ฉ์ธ ์์ฑ * feat: ํ๊ทธ ์ํฐํฐ ์์ฑ * feat: TagRepository ์ถ๊ฐ * feat: Tag ์์ฑ ์ null ๊ฒ์ฆ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง๊ณผ ํ๊ทธ์ n:m ๊ด๊ณ์ ์ค๊ฐ ํ ์ด๋ธ ์์ฑ ๋ชฉ์ ์ผ๋ก WorkbookTag ์ํฐํฐ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ์ฐ์ด๋ DTO์ ํ๊ทธ ๊ด๋ จ ํ๋ ๋ฐ ๊ฒ์ฆ ์ถ๊ฐ * feat: Tag๋ฅผ String์ผ๋ก ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * feat: TagService ์ถ๊ฐ * feat: ์์ฑ์ ์ธ์๋ฅผ ํ๋์ ๊ฐ์ ํ์ ์ผ๋ก ์์ , null ํ ์คํธ ์ถ๊ฐ * feat: ์์ธ ๋ฉ์์ง ์์ * feat: Tags ๋ถ๋ฆฌ * feat: ๋ฌธ์ ์ง ์ถ๊ฐ์ ํจ๊ป ํ๊ทธ๋ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ๊ณผ ์ญ์ ์ ํ๊ทธ ์ถ๊ฐ * feat: ๋ฌธ์ํ ํ ์คํธ ์์ * etc: import ์ ๋ฆฌ * etc: ddl, dml, DataLoader ์ถ๊ฐ * etc: ํ ์ด๋ธ ์์ฑ ์ ํ๋ ์ด๋ฆ name์ผ๋ก ์์ฑ๋๊ฒ ๋ณ๊ฒฝ * feat: WorkbookTagRepository ์ถ๊ฐ * test: Workbook ์ถ๊ฐ, ์ญ์ ์ WorkbookTag ์ Tag์ cascade์ ๋ํ ํ ์คํธ ์ถ๊ฐ * test: ๋ฌธ์ ์ง ์์ ์์ฒญ์์ opened ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ํตํฉ ํ ์คํธ์์ ๋ฐ์ดํฐ ๋ก๋๊ฐ ์คํ๋์ด ์ถ๊ฐ * refactor: TagService๋ก TagRequest๋ฅผ ์ ๋ฌํ๋๋ก ์์ , TagNames ์ญ์ ์ค๋ณต ์ ๊ฑฐ ๋ก์ง์ converTags ๋ฉ์๋๋ก ์์ * feat: WorkbookTag ์ํํธ ๋๋ฆฌํธ๋ก ์์ * feat: ์กฐ์ค ๋ฆฌ๋ทฐ ๋ฐ์ (from -> of, new ArrayList<>() ์ญ์ ) * fix: Post ์์ฒญ์ tags๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๋ฐ์ํ๋ ์๋ฌ ์์ * fix: ๋ฌธ์ ์ง api ์์ (#296) Co-authored-by: Kyle <[email protected]> * W13 - ๊ณต์ ๋ฌธ์ ์ง ์์ธ๋ณด๊ธฐ api๋ฅผ ๊ตฌํํ๋ค. (#295) * feat: TagName ๋๋ฉ์ธ ์์ฑ * feat: TagNames ๋๋ฉ์ธ ์์ฑ * feat: ํ๊ทธ ์ํฐํฐ ์์ฑ * feat: TagRepository ์ถ๊ฐ * feat: Tag ์์ฑ ์ null ๊ฒ์ฆ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง๊ณผ ํ๊ทธ์ n:m ๊ด๊ณ์ ์ค๊ฐ ํ ์ด๋ธ ์์ฑ ๋ชฉ์ ์ผ๋ก WorkbookTag ์ํฐํฐ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ์ฐ์ด๋ DTO์ ํ๊ทธ ๊ด๋ จ ํ๋ ๋ฐ ๊ฒ์ฆ ์ถ๊ฐ * feat: Tag๋ฅผ String์ผ๋ก ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * feat: TagService ์ถ๊ฐ * feat: ์์ฑ์ ์ธ์๋ฅผ ํ๋์ ๊ฐ์ ํ์ ์ผ๋ก ์์ , null ํ ์คํธ ์ถ๊ฐ * feat: ์์ธ ๋ฉ์์ง ์์ * feat: Tags ๋ถ๋ฆฌ * feat: ๋ฌธ์ ์ง ์ถ๊ฐ์ ํจ๊ป ํ๊ทธ๋ ์ถ๊ฐ * feat: ๋ฌธ์ ์ง ์์ ๊ณผ ์ญ์ ์ ํ๊ทธ ์ถ๊ฐ * feat: ๋ฌธ์ํ ํ ์คํธ ์์ * etc: import ์ ๋ฆฌ * etc: ddl, dml, DataLoader ์ถ๊ฐ * etc: ํ ์ด๋ธ ์์ฑ ์ ํ๋ ์ด๋ฆ name์ผ๋ก ์์ฑ๋๊ฒ ๋ณ๊ฒฝ * feat: WorkbookTagRepository ์ถ๊ฐ * test: Workbook ์ถ๊ฐ, ์ญ์ ์ WorkbookTag ์ Tag์ cascade์ ๋ํ ํ ์คํธ ์ถ๊ฐ * test: ๋ฌธ์ ์ง ์์ ์์ฒญ์์ opened ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ํตํฉ ํ ์คํธ์์ ๋ฐ์ดํฐ ๋ก๋๊ฐ ์คํ๋์ด ์ถ๊ฐ * refactor: TagService๋ก TagRequest๋ฅผ ์ ๋ฌํ๋๋ก ์์ , TagNames ์ญ์ ์ค๋ณต ์ ๊ฑฐ ๋ก์ง์ converTags ๋ฉ์๋๋ก ์์ * feat: WorkbookTag ์ํํธ ๋๋ฆฌํธ๋ก ์์ * feat: ์กฐ์ค ๋ฆฌ๋ทฐ ๋ฐ์ (from -> of, new ArrayList<>() ์ญ์ ) * feat: ์ธํฐ์ ํฐ ํต๊ณผํ์ง ์๋ ๊ณต์ ๋ฌธ์ ์ง ์กฐํ ๊ฒฝ๋ก ์ถ๊ฐ * feat: ์ํฉ์ ๋ฐ๋ฅธ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํด CardResponse์ JsonInclude ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ์กฐํ api ๊ตฌํ * test: ๊ณต์ ๋ฌธ์ ์ง ์์ธ์กฐํ api ํ ์คํธ ์ถ๊ฐ * refactor: WorkbookCardResponse ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ๋ณด๊ธฐ api ๋ฌธ์ํ ๋ฐ ์์ฒญ ์ ๋ณด ์ถ๊ฐ * refactor: WorkbookCardResponse ์ ํ๊ทธ ์๋ต ํ๋ ์ด๋ฆ ๋ณ๊ฒฝ Co-authored-by: seunghyun <[email protected]> * etc: ddl, dml ๋ณ๊ฒฝ * refactor: ์ ์ฒด์ ์ธ ๋์์ธ ์์ ๋ฐ ๋ฒ๊ทธ ํด๊ฒฐ (#299) Co-authored-by: Kyle <[email protected]> * fix: ๊ณต์ ํ์ด์ง์ ํน์ ์์ ์ ์บ์ฑ ๋ฌดํจํ Co-authored-by: Kyle <[email protected]> * etc: ๋ฒ์ 0.2.0 ์ ๋ฐ์ดํธ Co-authored-by: Kyle <[email protected]> * C09 - ๋ก๊ทธ์ธํ ํ์๋ง ๋ค์์ ๋๋ณด๊ธฐ ๊ฐ๋ฅํ๋๋ก API ์์ (#288) * feat&test: ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ๋ค์์ ๋๋ณด๊ธฐ ๊ฐ๋ฅํ๋๋ก ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ํ ์คํธ * etc: ์คํ ์์ * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ * etc: ๋ก๊ทธ์ธ oauth ์ ๋ณด botobo-team ์ ๋ณด๋ก ๊ต์ฒด (#306) * refactor: ๋ชจ๋ฌ ๊ด๋ จ ์ด์ ์ ๋ฆฌ (#309) - ์นด๋ ์ถ๊ฐ, ์์ - selectbox Co-authored-by: dudtjr913 <[email protected]> * refactor: ์๊ท๋ชจ ๋ฆฌํฉํ ๋ง (#317) * etc: ์ถฉ๋ ํด๊ฒฐ * refactor: CardsPage ๋ฆฌํฉํ ๋ง - cardInfo ์ง์ญ ์ํ๋ก ๋ณ๊ฒฝ Co-authored-by: Kyle <[email protected]> * refactor: ์ ์ญ ์ํ -> ์ง์ญ ์ํ๋ก ๋ณ๊ฒฝ - publicCardState Co-authored-by: dudtjr913 <[email protected]> * etc: xmldom ์ทจ์ฝ์ฑ ํด๊ฒฐ Co-authored-by: Kyle <[email protected]> Co-authored-by: seovalue <[email protected]> Co-authored-by: Kyle <[email protected]> * refactor: ํ์ด์ง ํค๋ -> ๋ฉ์ธ ํค๋ ๊ต์ฒด (#319) Co-authored-by: Kyle <[email protected]> * refactor: ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง (#321) * refactor: ๋ฆฌํฉํ ๋ง - cardform autofocus - workbookadd ๋น ํ๊ทธ ์ ๋ ฅ ์ค๋ฅ ์์ - route ๊ฒฝ๋ก ์ ๋ฆฌ - ๋ก๋ฉ ์ ๋๋ฉ์ด์ ์์ Co-authored-by: dudtjr913 <[email protected]> * feat: ๋ด ๋ฌธ์ ์ง์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ default option ๊ตฌํ Co-authored-by: dudtjr913 <[email protected]> * C10 - ๋ ๋ณด๊ธฐ ์นด๋ ๋ฑ๋ก ๊ด๋ จ ํ ์คํธ ๋ฆฌํฉํ ๋ง์ ํ๋ค. (#303) * test: ํด์ฆ๋ฅผ ์ํ ์นด๋์ ๋๋ณด๊ธฐ ์ต์ ์ด false ๋ก ๋ฐ๋์๋์ง ํ์ธํ๋ค * etc: ์นดํ ๊ณ ๋ฆฌ ๊ด๋ จ ๋ด์ฉ ์์ * etc: import.sql ์ ๊ฑฐ * fix: ๋ ๋ณด๊ธฐ ํฌํจ ํด์ฆ ์์ฑ ์ธ์ ํ ์คํธ ๋ฒ๊ทธ ์์ * etc: ์กฐ์ค ๋ฆฌ๋ทฐ ๋ฐ์ ๋ฐ ํด์ฆ ์์ฒญ ์ ๋ณด Host ๋ณ๊ฒฝ * W11, W12, W14 - ์์ ์ ๋ฌธ์ ์ง๋ง ์นด๋ ๋ชจ์๋ณด๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฌธ์ ์ง ์ธ์ํ ์คํธ ๋ฆฌํฉํฐ๋ง (#307) * feat: ์นด๋ ๋ชจ์๋ณด๊ธฐ์์ ์์ ์ ๋ฌธ์ ์ง๋ง ๋ณผ ์ ์๋๋ก ์์ * refactor: ๋ฌธ์ ์ง ์ธ์ํ ์คํธ ์ ์ฒด ๋ฆฌํฉํฐ๋ง * docs: ๋ฌธ์ ์ง ๊ฐ์ ธ์ค๊ธฐ asciidoc ์ถ๊ฐ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * refactor: ์ค๊ฐ๊ณฐ ํผ๋๋ฐฑ ๋ฐ์ * B38 - RequestBuilder ๋ฆฌํฉํ ๋ง (#310) * refactor: RequestBuilder ๋ฆฌํฉํ ๋ง ๋ฐ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ ๊ฑฐ * etc: DocumentationUtils host๋ฅผ botobo.kro.kr๋ก ๋ณ๊ฒฝ * refactor: PK ๋ฆฌ๋ทฐ ๋ฐ์ * refactor: parameter ์์ด ์ฌ์ฉํ๋ ์ ์ ์์ ํ ์คํธ ์ ์ฌ์ฉํ๋ auth๋ฅผ failAuth๋ก ๋ช ์นญ ๋ณ๊ฒฝ * etc: requestBuilder ์ค๋ช ์ถ๊ฐ * refactor: ๋ฌธ์ ์ง ๊ฐ์ ธ๊ฐ๊ธฐ์์ [๊ณต์ ] ์ถ๊ฐ (#324) Co-authored-by: Kyle <[email protected]> * etc: submodule ๋๊ธฐํ * B41 - ๊ฒฝ๋ก์ HttpMethod๋ฅผ ์ด์ฉํด ์ธํฐ์ ํฐ ์ค์ ๊ฐ๋ฅํ๋๋ก ์์ ๋ฐ /api/workbooks ๊ฒฝ๋ก๋ฅผ ์ธํฐ์ ํฐ์ ์ถ๊ฐํ๋ค. (#322) * feat: ๊ฒฝ๋ก์ HttpMethod๋ก interceptor ์ค์ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * test: PathMatcherInterceptor ๊ด๋ จ ํ ์คํธ ์ถ๊ฐ * feat: ํด์ฆ ํ์ด์ง์ ์นด๋ ์ฌ๋ผ์ด๋๋ฅผ ๊ตฌํํ๋ค (#326) * feat: ์นด๋ ์ฌ๋ผ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ * fix: ์นด๋ ์์ง์ด๋ ์๊ฐ 0.1์ด๋ก ์์ * Q15 - ํด์ฆ ์ค์ ์ ํด์ฆ ๊ฐ์๋ฅผ ์ถ๊ฐํ๋ค. (#316) * feat&test: Quiz ์์ฑ ์ ํ์์ธ์ง ํ์ธ ๋ฐ ํด์ฆ ์์ฒญ์ ๊ฐ์ ์ถ๊ฐ * etc: develop ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * feat: ๋ด ์ํฌ๋ถ์์ ์์ฑ๋ ํด์ฆ์ธ์ง ๊ฒ์ฆ ์ถ๊ฐ * feat: ๋ฉ์ธ ํค๋์ ๋ฉ๋ด๋ฅผ ๊ตฌํํ๋ค (#330) * feat: ๋๋กญ๋ค์ด ๋ฉ๋ด ๊ตฌํ * feat: LogoutPage ๊ตฌํ * etc: ๋ฆฌ๋ทฐ ๋ฐ์ - ์ปจ๋ฒค์ - role naming - ์ ๋๋ฉ์ด์ ์๋ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * feat: ์ ์ ์ ๋ง์ด ํ์ด์ง๋ฅผ ๊ตฌํํ๋ค (#333) * etc: ํ์์๋ import ๊ตฌ๋ฌธ ์ ๋ฆฌ * feat: ์ ์ ํ๋กํ ํ์ด์ง ๊ตฌํ * etc: ImageEditor ์์น ๊ณ ์ * feat: TextField ์ถ๊ฐ * fix: z-index ์ค๋ฅ ์์ * etc: ํ์์๋ css ์์ฑ ์ ๊ฑฐ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * U06 - ๋ง์ดํ์ด์ง ํ๋กํ ์ฌ์ง ์์ api ๊ตฌํ (#332) * feat: ๋ด ์ ๋ณด ์์ api ๋ผ๋ ์ฝ๋ ์์ฑ * feat: S3 ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: Multipartfile ์ ๋ก๋ ๊ด๋ จ ์ค์ ์ถ๊ฐ * feat: FileNameGenerator์ BASE DIR์ถ๊ฐ ๋ฐ ์๋ต ๋ฐํํ๋๋ก ์์ * feat: ์๋ธ๋ชจ๋ ์์ ๋ฐ build.gradle ์ ๋ฐ์ดํธ * etc: ์๋ธ๋ชจ๋ ์์ ๋ฐ์ * Merge develop into feature/U06-B * feat: S3Uploader, FileNameGenerator url ๋ฃจํธ ๋ณ๊ฒฝ * feat: S3 ๊ด๋ จ ์์ธ ํด๋์ค ์ถ๊ฐ ๋ฐ ํธ๋ค๋ง * etc: ํ ์คํธ์ ํ์ํ ๋ฆฌ์์ค ํ์ผ ์ถ๊ฐ * test&feat: S3 ํ ์คํธ๋ฅผ ์ํ ์ค์ ํ์ผ ์ถ๊ฐ ๋ฐ ํ ์คํธ ๊ตฌํ * etc: ์ฝ๋ ํฌ๋งทํ * feat: 10MB ์ด์์ ํ์ผ ์์ฒญ ์ ์์ธ์ฒ๋ฆฌ ๊ตฌํ * etc: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ * etc: Merge develop into feature/U06-B * feat&test: MultipartFile์ด ๋น์ด์๊ฑฐ๋ ์๋ ๊ฒฝ์ฐ ๋ํดํธ ์ด๋ฏธ์ง๋ก ๋์ฒด * etc: println ์ญ์ * refactor: ๋ถํ์ํ ์ฃผ์ ์ญ์ ๋ฐ ์ค์ฆ ๋ฆฌ๋ทฐ ๋ฐ์ * feat: ์ค๊ฐ๊ณฐ ๋ฆฌ๋ทฐ ๋ฐ์ * feat: ๊ฒ์ ํ์ด์ง UI ๋ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#334) * feat: ๊ณต์ ๊ฒ์ ํ์ด์ง ๋ผ์ฐํ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ญ์ * feat: util type ์ถ๊ฐ - ValueOf: ๊ฐ์ฒด์ value๋ฅผ ํ์ ์ผ๋ก ์ง์ ํด์ฃผ๋ ์ญํ * feat: ๊ฒ์ ๊ธฐ๋ฅ api์ ์ฉ * feat: searchState ํ์ผ ์ถ๊ฐ - search ๊ด๋ จ recoil(atom) ๋ชจ์ * feat: ํ๊ทธ, ์์ฑ์ ๊ฒ์ UI ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๊ฒ์ ์ปดํฌ๋ํธ์ ํ์ฅ์ฑ์ ์ํด ์ ์ฐํ๊ฒ ๋ณ๊ฒฝ * refactor: ๋ณ์ ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์ถ์ํ๋ searchResponse ์ ๊ฑฐ - response๋ผ๋ ์ด๋ฆ์ด ์ ์ ํ์ง ์์ ๊ฒ ๊ฐ์์ result๋ก ๋ณ๊ฒฝ - searchResponse์์ ๋ ๊ฐ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ณด๋ ํ์ฅ์ฑ์ด ์ด๋ ต๊ณ , ํ์ ๊ฐ๋๋ฅผ ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ ๋ณ๊ฒฝ * feat: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ํํฐ ๊ธฐ๋ฅ ์ถ๊ฐ ๊ตฌํ * fix: ๊ฒ์ํ ๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด์ง ์๋๋ก ์์ * fix: ํค์๋๊ฐ ์ ๋ ฅ๋์ง ์์์ ๋ api ์์ฒญ ๋ณด๋ด๋ ๋ฒ๊ทธ ์์ * fix: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง์ ์ฒซ ๋๋๋ง ์ ๋๊ธฐํ๊ฐ ๋์ง ์๋ ๋ฒ๊ทธ ํด๊ฒฐ * feat: intersection Observer ์ ์ฉ - ์ธํผ๋ํฐ ์คํฌ๋กค * refactor: ๊ณต์ ๋ฌธ์ ์ง ์ปดํฌ๋ํธ๋ก intersection ์ด๋ - ๊ณต์ ๊ฒ์ ํ์ด์ง์ ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ๋ ๊ตฐ๋ฐ์์ ์ฌ์ฉํด์ผ ํ๊ธฐ์ ๋์ ๊ณตํต์ ์ธ ๊ณต์ ๋ฌธ์ ์ง ์ปดํฌ๋ํธ๋ก ์ด๋ * refactor: keyword, type์ recoil์์ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๋๋ก ๋ณ๊ฒฝ - onClickItem ์ญ์ , ์ด์ ๋ ํ์ํ์ง ์์ ์ ๋ณด์๊ธฐ ๋๋ฌธ - ๊ฒ์ ํ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํ์ ๋, ํด๋น ํญ์ด ์ ์ง๋๋๋ก ๋ณ๊ฒฝ * refactor: ๊ฒ์ ํ ๋ค์ ๋์์์ ๋, ๋ฐ์ดํฐ๊ฐ ๋ณด์กด๋๋๋ก ๋ณ๊ฒฝ * fix: ๋ฌดํ ์คํฌ๋กค ๋ฒ๊ทธ ์์ ๋ฐ startIndex 1์ฉ ์ฆ๊ฐํ๋๋ก ๋ณ๊ฒฝ * fix: ํค์๋์ ์ ๋ชฉ์ผ๋ก ๊ฒ์ํ ์ ์๋๋ก ์์ - ๊ฒ์ ํ์ด์ง์ ๋ค์ด์์ ๋ ํญ์ ๊ฒ์์ด๊ฐ ์ด๊ธฐํ๋๋๋ก ๋ณ๊ฒฝ - ๊ฒ์ ์๋ ์ค์ผ ๋ loading true๋ก ๋ณ๊ฒฝ * fix: ํํฐ๋ง ๋ฒํผ ํด๋ฆญ ์ ์ด์ ๋ฐ์ดํฐ ๋์ ๋๋ ๋ฒ๊ทธ ํด๊ฒฐ * refactor: ์ข์์ like => heart ๋ณ๊ฒฝ * feat: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ค์ผ๋ ํค ๊ตฌํ * fix: searchKeyword๊ฐ ์ธํ ๋๊ธฐ ์ ์ ๋ผ์ฐํ ํ๋ ๋ฌธ์ ํด๊ฒฐ * fix: ๊ณต์ ๋ฌธ์ ์ง ํ์ด์ง ์ค์ผ๋ ํค์ title height ์์ * refactor: ๋ก๋ฉ์ setํ๋ ๋ถ๋ถ์ ํ์ด์ง๋ก ์์ * fix: ์ฌ์ฉํ์ง ์๋ snackbar ์ญ์ * refactor: PublicWorkbook => PublicSearchResultPage * etc: eol ํด๊ฒฐ * refactor: Intersection Observer์ entries =>[entry] * fix: MainHeader์ z-index ์ถ๊ฐ * fix: ํํฐ ํด๋ฆญ ์ startIndex๊ฐ ์ฆ๊ฐํ๋ ๋ฒ๊ทธ ์์ * refactor: query๋ก ์๋ก๊ณ ์นจ ์์๋ ๊ฒ์์ด ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝ * refactor: searchForKeyword ๋ถ๋ฆฌ * etc: ๋ณ์ ๋ช ๋ณ๊ฒฝ searchInfo => searchInfos * fix: input์ ๊ฐ ์ ๋ ฅ ์ start๊ฐ 0์ผ๋ก ๋์ง ์๋ ๋ฒ๊ทธ ์์ * feat: ๊ฒ์ ์ฐฝ sticky ์์ฑ ์ ์ฉ * etc: ์ฝ์๋ก๊ทธ ์ญ์ * W15 - ์ ์ ๋ง๋ค ๋ฌธ์ ์ง์ ํํธ๋ฅผ ๋๋ฅด๊ณ ์ทจ์ํ ์ ์๋ ํ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. (#336) * feat: Heart ์ํฐํฐ ์์ฑ * feat: Hearts ์ผ๊ธ์ปฌ๋ ์ ์์ฑ * feat: Workbook์ Heart ์ฐ๊ฒฐ * feat: WorkbookService์ ํํธ ํ ๊ธ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: ์ข์์์ ๊ฒฐ๊ณผ์ธ HeartResponse ๋ฐํํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: ํํธ ํ ๊ธ api ์ถ๊ฐ * feat: heartCount ์ถ๊ฐ์ ๊ทธ์ ๋ฐ๋ฅธ ํ ์คํธ ์ถ๊ฐ, ๋ณ๊ฒฝ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ ์กฐํ์๋ heartCount ๋์ค๋๋ก ์ถ๊ฐ * feat: ๊ณต์ ๋ฌธ์ ์ง ์์ธ์กฐํ api ์์ - ํด๋น api๋ฅผ ์ฌ์ฉํ๋ ์ ์ ๊ฐ ํด๋น ๋ฌธ์ ์ง์ ํํธ๋ฅผ ๋๋ ๋์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ฃผ๋ heart ํ๋ ์ถ๊ฐ * refactor: ๋ฌธ์ํ ํ ์คํธ์์ botobo.access.token์ ์ฌ์ฉํ๋ ์์ฒญ์ด AppUser๋ฅผ ๋ง๋ค์ด ๋ด๋๋ก findAppUserByToken ๋ฉ์๋๋ฅผ ๋ชจํน // ๋ฌธ์ ์ง ๋ฌธ์ํ ํ ์คํธ์ ์ ์ฉ * feat: Token์ ์ ๋ ฅํ์ง ์์ ๊ฒฝ์ฐ ๋นํ์์ผ๋ก ๋ฐํํ๋๋ก ๋ชจํน * feat: ํ ์คํธ์์ body๊ฐ ์๋ ์์ฒญ์ ์์๋ก DummyRequest๋ฅผ ์ฌ์ฉํ๋ ๋์ putWithoutBody ๋ฉ์๋๋ฅผ ์ฌ์ฉ * etc: heart ddl ์ถ๊ฐ * refactor: ๋นํ์์ด ๊ณต์ ๋ฌธ์ ์ง ์์ธ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝ * etc: build ์ copyDev๊ฐ ์คํ๋๋๋ก ๋ณ๊ฒฝ * feat: ์นด๋ ์์ธ ํ์ด์ง์ ํํธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค (#340) * feat: ํํธ ๊ธฐ๋ฅ ๊ตฌํ * fix: ํํธ ํ ๊ธ ๋ก์ง ๋ณ๊ฒฝ * feat: ์นด๋ ์ฌ๋ผ์ด๋ ๋ฉ์์ง๊ฐ ๋ชจ๋ฐ์ผ์์๋ง ๋ณด์ด๋๋ก ์์ ํ๋ค (#348) * feat: ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ํ์ธ ๊ธฐ๋ฅ ์ถ๊ฐ * fix: ๋นํ์์ธ ๊ฒฝ์ฐ key๊ฐ 0์ธ ๋ฒ๊ทธ ์์ * fix: isMobile ๋ก์ง ๋ณ๊ฒฝ ๋ฐ GUEST์ผ ๋ id๊ฐ ์ค์ * fix: ๊ฐํ ๋ฐ ๋์ด์ฐ๊ธฐ ์ ์ง๋๋๋ก ๋ณ๊ฒฝ (#352) * U07 - ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ค (#337) * refactor: OauthManager ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ๋ฐ ์์ ๋ก๊ทธ์ธ ์ฝ๋ ๋ฆฌํฉํฐ๋ง * feat: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: interceptor url ์์ ๋ฐ import ๋ณ๊ฒฝ * refactor: ํผ๋๋ฐฑ ๋ฐ์ * refactor: ๋ฉ์๋๋ช ์์ ๋ฐ ํ์์๋ ์ฝ๋ ์ญ์ * etc: ์๋ธ๋ชจ๋ ๋๊ธฐํ * feat: ๋ง์ดํ์ด์ง์ ์ ๋ณด๋ฅผ ์์ ํ๋ค (#354) * etc: UserInfo ํ์ ์ bio ํ๋ ์ถ๊ฐ * etc: ProfilePage UI ๋ณด์ * feat: ํ๋กํ ์์ ๊ตฌํ * feat: ์ด๋ฏธ์ง ์ ๋ก๋ ๊ตฌํ * etc: ํฌ์ธํฐ ๋ณ๊ฒฝ * feat: ์ ์ ์ด๋ฆ validation ๊ฐํ * etc: ์ฝ๋ ์คํ์ผ ์ ๋ฆฌ * U11 - ๋ง์ดํ์ด์ง ํ๋กํ ๋๋ค์ ๋ฐ ๋ฐ์ด์ค ์์ api ๊ตฌํ, U12 - ํ์๋ช ์ค๋ณต ๊ฒ์ฌ api๋ฅผ ๊ตฌํํ๋ค. (#343) * feat: User ์ํฐํฐ์ bio ํ๋ ์ถ๊ฐ * feat: ๋ด ์ ๋ณด ์์ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ด ์ ๋ณด ์์ Acceptance Test * test: UserUpdateRequest Validation ํ ์คํธ ์ถ๊ฐ * test: UserDocumentationTest ์ถ๊ฐ * test: ๋ด ์ ๋ณด ์์ ๊ด๋ จ UserServiceTest ๋ฐ UserTest ์ถ๊ฐ * feat&test: ์ ์ ์ด๋ฆ ์ค๋ณต ๊ฒ์ฆ ์ถ๊ฐ ๋ฐ ํ ์คํธ ๊ตฌํ * feat: ํ์๋ช ์ค๋ณต์กฐํ api ๊ตฌํ * test: ํ์๋ช ์ค๋ณต ์กฐํ ํ ์คํธ ๊ตฌํ * refactor: ์ค๋ณต ๋ฉ์๋ ์์ํ๋๋ก ๋ณ๊ฒฝ * feat&test: pk ๋ฆฌ๋ทฐ ๋ฐ์, ํ์๋ช ๊ณต๋ฐฑ ๋ถ๊ฐ ๊ฒ์ฆ ๊ตฌํ ๋ฐ ํ ์คํธ ์ถ๊ฐ * refactor: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ์ถ๊ฐ๋ User ๋์ ๋ฐ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ * fix: UserDocumentTest ์๋ต ์์ ๋ฐ ์์ ์ฒ๋ฆฌ * refactor: ํ์ ์ ๋ณด ์์ ์ ํ์๋ช ์ค๋ณต ์กฐํ๋ฅผ ์ฐ์ ํ๋๋ก ์์ * etc: ์ฝ๋ ์ ๋ฆฌ ๋ฐ http ํ์ผ ์ถ๊ฐ * feat: UserName ์ปค์คํ Validator ์ถ๊ฐ * feat: sonarqube ๋์ ๋ฐ CORS ์ค์ ๋ณ๊ฒฝ (#362) * B45 - ์๋ํ๋ธ๋ฅผ CI ๊ณผ์ ์ ๋์ ํ๋ค - 2 (#364) * feat: sonarqube ๋์ ๋ฐ CORS ์ค์ ๋ณ๊ฒฝ * fix: build.gradle ํ๋ฌ๊ทธ์ธ ๋ถํ์ํ ์ค์ ์ ๊ฑฐ * feat: ํด์ฆ ์ค์ ํ์ด์ง UI ๋ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค (#356) * refactor: SelectBox์์ list์ height๋ฅผ ๋ฐ์ ์ ์๊ฒ ๋ณ๊ฒฝ * feat: ํด์ฆ ์ค์ ํ์ด์ง UI ๊ตฌํ * feat: ํด์ฆ ์ค์ ๊ธฐ๋ฅ ๊ตฌํ * feat: ํด์ฆ ํ์ด์ง ์๊ฐ ๊ธฐ๋ฅ ๊ตฌํ * fix: ์๊ฐ ๊ตฌํ๋ ์ ํธ ํจ์ ๋ณ๊ฒฝ * feat: ํด์ฆ ๊ฒฐ๊ณผ ํ์ด์ง ์๊ฐ ํ์ ๊ธฐ๋ฅ ๊ตฌํ * feat: useInterval ์ถ๊ฐ * fix: alert => snackbar ๊ต์ฒด * feat: ํด์ฆ ์ธํ ํ์ด์ง ์ค์ผ๋ ํค ๊ตฌํ * etc: ํ์ํ์ง ์์ style ์ญ์ * refactor: ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ํฐ์น ์ฌ๋ผ์ด๋ ๋ฐ ๊ตฌํ * etc: Clock => Timer ๋ณ๊ฒฝ ๋ฐ ๋ณ์๋ช ์์ * etc: import ๋ณ๊ฒฝ * feat: ๋ง์ฃผ์น ํ์๋ฅผ ํ์ํ๋ค(ํด์ฆ ํ์ด์ง ๋ฐ ์นด๋ ๋ชจ์๋ณด๊ธฐ ํ์ด์ง) (#350) * feat: ํ์ด๋ณธ ํ์ ๊ธฐ๋ฅ ์ถ๊ฐ * fix: resize ์ด๋ฒคํธ ๋ฐ์ ์ ์นด๋ width๊ฐ ๋ณํ์ง ์๋ ๋ฒ๊ทธ ํด๊ฒฐ * fix: resize ์ ์ฆ์ ์นด๋ ๋ณ๊ฒฝ๋๋๋ก ๋ณ๊ฒฝ * etc: ์ ์ ์ ๋ณด ์์ ํ๋์์ id ์ ๊ฑฐ (#363) * feat: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ค (#359) * feat: OAtuh component ํ์ฅ ๊ฐ๋ฅํ ํํ๋ก ๋ณ๊ฒฝ * feat: ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ๊ตฌํ * etc: oauth ์คํ์ผ ๋ฐฉ์ ๋ณ๊ฒฝ * refactor: OAuthCallbackPage๋ก ํต์ผ * fix: ๋ฌธ์ ์ง ์ถ๊ฐ ํ์ด์ง์์ ๋ฐ์ํ๋ ๋ฉ์ธ ํค๋ z-index ์ค๋ฅ๋ฅผ ์์ ํ๋ค (#366) * fix: ๋ฌธ์ ์ง ์ถ๊ฐ ํ์ด์ง์์ z-index ์ค๋ฅ ์์ * etc: ๋ฉ์ธ ํค๋์ sโฆ
- Loading branch information