Skip to content

Commit

Permalink
3์ฐจ release (#418)
Browse files Browse the repository at this point in the history
* B01 - Card, Answer, Category ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค (#20)

* feat: Category ๊ฐ์ฒด ์ถ”๊ฐ€

* feat: Card, Answer ๊ฐ์ฒด ์ถ”๊ฐ€

* test: ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat: Category updateDescription ์ถ”๊ฐ€

* test: CategoryRepositoryTest ์ถ”๊ฐ€

* feat: Category ์ œ์•ฝ ์กฐ๊ฑด ๋ณ€๊ฒฝ

* test: AnswerRepositoryTest, CardRepositoryTest ์ถ”๊ฐ€

Co-authored-by: seovalue <[email protected]>

* B02 - ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api (#24)

* feat: ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๊ตฌํ˜„

* feat: B02 - B ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๋ฆฌ๋ทฐ ๋ฐ˜์˜

* feat: Category isDeleted ํ•„๋“œ ์ˆ˜์ •

Co-authored-by: seunghyun <[email protected]>

* B03 - ํ€ด์ฆˆ ์ƒ์„ฑ api (#25)

* feat: data.sql ์ƒ์„ฑ

* feat&test: ํ€ด์ฆˆ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: createQuiz ๋ฉ”์„œ๋“œ ๋ฆฌํŒฉํ† ๋ง

* test: QuizServiceTest ์ถ”๊ฐ€

* etc: ์ฝ”๋“œ ์ •๋ฆฌ

* test: QuizServiceTest์— ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ ์‚ญ์ œ

* B02 - ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api (#24)

* feat: ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๊ตฌํ˜„

* feat: B02 - B ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๋ฆฌ๋ทฐ ๋ฐ˜์˜

* feat: Category isDeleted ํ•„๋“œ ์ˆ˜์ •

Co-authored-by: seunghyun <[email protected]>

* feat: data.sql ์ƒ์„ฑ

* feat&test: ํ€ด์ฆˆ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: createQuiz ๋ฉ”์„œ๋“œ ๋ฆฌํŒฉํ† ๋ง

* test: QuizServiceTest ์ถ”๊ฐ€

* etc: ์ฝ”๋“œ ์ •๋ฆฌ

* test: QuizServiceTest์— ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ ์‚ญ์ œ

* refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜

Co-authored-by: Eugine Park <[email protected]>
Co-authored-by: seunghyun <[email protected]>

* etc: ๋ฐฐํฌ ํ…Œ์ŠคํŠธ

* UI01 - ๋ฉ”์ธํŽ˜์ด์ง€ UI ๊ตฌํ˜„ (#33)

* feat: GlobalStyle ์„ค์ •

* chore: file-loader ์„ค์น˜

* feat: Theme ์ถ”๊ฐ€

* feat: Header ์ถ”๊ฐ€

* etc: eslint - endOfLine์„ auto๋กœ ๋ณ€๊ฒฝ

* feat: QuizStarter ์ถ”๊ฐ€

* feat: Category ์ถ”๊ฐ€

* feat: Button ์ถ”๊ฐ€

* refactor: Button ์ˆ˜์ •

ํ™•์žฅ์„ฑ ๊ณ ๋ ค
  - circle, square
  - backgroundColor

* etc: font awesome ์„ค์น˜

* feat: MainPage ๊ตฌํ˜„ ์™„๋ฃŒ

Co-authored-by: Kyle <[email protected]>

* UI02 - ํ€ด์ฆˆ ์„ค์ • ํŽ˜์ด์ง€ UI ๊ตฌํ˜„ (#36)

* feat: QuizSettingPage ์ถ”๊ฐ€

* feat: router ์ถ”๊ฐ€

@reach/router ์‚ญ์ œ ํ›„ react-router-dom ๋„์ž…

* UI03 - ํ€ด์ฆˆ ํŽ˜์ด์ง€ UI ๊ตฌํ˜„  (#40)

* etc: emotion.d.ts ํŒŒ์ผ ๋ถ„๋ฆฌ

* feat: QnACard ์ถ”๊ฐ€

* feat: Quiz ํŽ˜์ด์ง€ ๊ตฌํ˜„ ์™„๋ฃŒ

* UI04 - ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ UI ๊ตฌํ˜„ (#43)

* refactor: QnACard ๊ตฌ์กฐ ๋ณ€๊ฒฝ

- QuizResult ๋ถ„๋ฆฌ

* refactor: Button ์Šคํƒ€์ผ ๋ณ€๊ฒฝ

- 'reactangle' shape ์ถ”๊ฐ€
- 'full' size height: 3rem ๋ณ€๊ฒฝ

* feat: QuizResultPage ๊ตฌํ˜„ ์™„๋ฃŒ

* etc: netlify.toml ์ถ”๊ฐ€

* Q12 - ํ€ด์ฆˆ ํŽ˜์ด์ง€์˜ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•œ๋‹ค.  (#45)

* refactor: pageSize ์ „์—ญ ๊ด€๋ฆฌ๋กœ ๋ณ€๊ฒฝ

* feat: QuizPage pagenation ๊ตฌํ˜„

* feat: ์ฒซ ๋ฌธ์ œ ํ™”๋ฉด์— ์œ ์ €์˜ ํ–‰๋™ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์‚ฝ์ž…

* feat: ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: ๋””์ž์ธ ๋ฆฌํ„ฐ์น˜ (#47)

* B07 - ์–ด๋“œ๋ฏผ์šฉ ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€, ์นด๋“œ ์ถ”๊ฐ€, ๋‹ต๋ณ€ ์ถ”๊ฐ€ API๋ฅผ ๋งŒ๋“ ๋‹ค.  (#37)

* feat: admin category ์ถ”๊ฐ€ api ๊ตฌํ˜„

* feat: admin card, answer ์ถ”๊ฐ€ api ๊ตฌํ˜„

* feat: admin category, card, answer request์— validation ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜

* feat: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ์‹œ ์นด๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ (#49)

* feat: ํ€ด์ฆˆ ํŽ˜์ด์ง€ ์Šฌ๋ผ์ด๋“œ ๊ตฌํ˜„ (#51)

* feat: cors ์„ค์ • ์™„๋ฃŒ (#55)

* B04 - ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œํ™” (#53)

* etc: ๋ฌธ์„œ ์ž๋™ํ™” ๊ด€๋ จ ์˜์กด์„ฑ ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ

- Gradle ๋ฐ SpringBoot ๋ฒ„์ „ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

* test: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* test: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œ ์ถ”๊ฐ€

* etc: ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์ˆ˜์ •

* M03 - ์„œ๋น„์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด์—ฌ์ฃผ๊ธฐ (#56)

* feat: recoil ๋„์ž…

* feat: quiz setting ๊ธฐ๋Šฅ ์ถ”๊ฐ€

- ์นดํ…Œ๊ณ ๋ฆฌ ์ฒดํฌ
- ํŒŒ์ผ ๊ฒฝ๋กœ ์ˆ˜์ •
  - types/api -> types
  - index.d.ts -> file.d.ts

* feat: ๋น„๋™๊ธฐ ์š”์ฒญ ๋ ˆ์ด์–ด ์ถ”๊ฐ€

* feat: ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€์˜ ์ฒดํฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ํ€ด์ฆˆ ํŽ˜์ด์ง€/ ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ recoil ๋„์ž…
- React.HTMLAttributes ์ œ๊ฑฐ ํ›„ onClick ๋ณ€๊ฒฝ

* feat: ๋น„๋™๊ธฐ ๋ ˆ์ด์–ด ์ถ”๊ฐ€

- recoil ์ƒํƒœ ์ˆ˜์ •
- ํ€ด์ฆˆ ์„ค์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* etc: ํƒ€์ž… ์ •๋ฆฌ

* etc: file-loader ์ œ๊ฑฐ

- webpack ๋ฒ„์ „์— ๋งž์ถฐ asset ์‚ฌ์šฉ

Co-authored-by: dudtjr913 <[email protected]>

* B10 - List<Answer>, List<Card> ์ผ๊ธ‰์ปฌ๋ ‰์…˜ ์ž‘์—… ๋ฐ QuizAcceptanceTest๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง ํ•˜๊ณ  ๋กœ๊น…์„ ์ถ”๊ฐ€ํ•œ๋‹ค. (#54)

* feat: ๋กœ๊น… ์ถ”๊ฐ€ ๋ฐ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘ ํŽธ์˜ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: ๋„๋ฉ”์ธ์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€

* refactor: QuizAcceptanceTest, CategoryAcceptanceTest ๋ฆฌํŒฉํ† ๋ง

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ์ˆ˜์ •

* etc: rebase

* etc: rebase

* etc: clear git cache

* refactor: version ์ด์Šˆ ๋ฐ˜์˜

* etc: ์ฝ”๋“œ ์ •๋ฆฌ

* B05 - ํ€ด์ฆˆ ์ƒ์„ฑ api ๋ฌธ์„œํ™” (#60)

* etc: ๋ฌธ์„œ ์ž๋™ํ™” ๊ด€๋ จ ์˜์กด์„ฑ ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ

- Gradle ๋ฐ SpringBoot ๋ฒ„์ „ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

* test: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* test: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œ ์ถ”๊ฐ€

* test: ํ€ด์ฆˆ ์ƒ์„ฑ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ํ€ด์ฆˆ ์ƒ์„ฑ api ๋ฌธ์„œ ์ถ”๊ฐ€

* etc: ๋ฐฐํฌํ™˜๊ฒฝ์—์„œ ๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ ์„ค์ • ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

* etc: log.log ํŒŒ์ผ ์‚ญ์ œ

Co-authored-by: seunghyun <[email protected]>

* feat: BaseEntity ์ถ”๊ฐ€ (#63)

* B13 - admin์šฉ api ๋ฌธ์„œํ™” (#62)

* etc: ๋ฌธ์„œ ์ž๋™ํ™” ๊ด€๋ จ ์˜์กด์„ฑ ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ

- Gradle ๋ฐ SpringBoot ๋ฒ„์ „ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

* test: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* test: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œ ์ถ”๊ฐ€

* test: ํ€ด์ฆˆ ์ƒ์„ฑ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ํ€ด์ฆˆ ์ƒ์„ฑ api ๋ฌธ์„œ ์ถ”๊ฐ€

* etc: ๋ฐฐํฌํ™˜๊ฒฝ์—์„œ ๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ ์„ค์ • ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

* etc: log.log ํŒŒ์ผ ์‚ญ์ œ

* refactor: ๊ธฐ์กด ๋ฌธ์„œ ์ฝ”๋“œ ๊ฐœ์„ 

* feat: admin ๊ด€๋ จ api ๋ฌธ์„œํ™”

Co-authored-by: seunghyun <[email protected]>

* fix: Admin ๋ฌธ์„œ ํ…Œ์ŠคํŠธ jpa ์„ค์ • ์ถ”๊ฐ€

* etc: admin ๋ฌธ์„œ ํ…Œ์ŠคํŠธ import๋ฌธ ์ถ”๊ฐ€

* fix: local์—์„œ ddl-auto ์ž‘๋™ ๋ฐฉ์‹ ๋ณ€๊ฒฝ

* UI07 - ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. (#66)

* etc: copy-webpack-plugin ์„ค์น˜

Co-authored-by: dudtjr913 <[email protected]>

* etc: png -> svg ๊ต์ฒด

* etc: font-awesome ์‚ญ์ œ

* feat: ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€ ์ถ”๊ฐ€ - 1

- ํ•„ํ„ฐ
- ๊ฒ€์ƒ‰์ฐฝ
- ๋ฒ„ํŠผ shape ์ถ”๊ฐ€ (round)

Co-authored-by: dudtjr913 <[email protected]>

* feat: QnACard ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* feat: ์นด๋“œ ํŽ˜์ด์ง€ ํ•„ํ„ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#69)

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>

* refactor: ๊ฒ€์ƒ‰ UI => ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€๋กœ ์ด๋™ (#71)

* feat: ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#72)

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>

* B18 - ๋ชจ์•„๋ณด๊ธฐ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค (#77)

* feat: Category ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ Card fetch join ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* feat: Category์˜ ์นด๋“œ ๋ชจ์•„๋ณด๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat: ๋ชจ์•„๋ณด๊ธฐ api ๋ฌธ์„œํ™”

* etc: ์ฝ”๋“œ ์ค„ ๊ฐ„๊ฒฉ ์ˆ˜์ •

* refactor: ์‘๋‹ต ๊ด€๋ จ dto ๋กฌ๋ณต ์ฒ˜๋ฆฌ

* U01B - ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค (#76)

* etc: jwt ๊ด€๋ จ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ์ธ์ฆ์— ์‹คํŒจํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ์— ํ•„์š”ํ•œ ๊ฐ์ฒด ์ถ”๊ฐ€

* feat: ํ† ํฐ ๊ด€๋ จ ํด๋ž˜์Šค ์ถ”๊ฐ€

* feat: github Oauth ๊ด€๋ จ ํด๋ž˜์Šค ์ถ”๊ฐ€

* refactor: final ์ œ๊ฑฐ

* feat: Github ๋กœ๊ทธ์ธ ์š”์ฒญ์‹œ ํ† ํฐ์ƒ์„ฑ API ๊ตฌํ˜„

* etc: ํ…Œ์ŠคํŠธ์—์„œ ์“ฐ์ด๋Š” ์„ค์ •๊ฐ’ ์ถ”๊ฐ€

* etc: ์ค„๋ฐ”๊ฟˆ ์ถ”๊ฐ€

* refactor: ๋ฉ”์„œ๋“œ์ด๋ฆ„ ์ˆ˜์ •

* refactor: lombok์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ์ž, builder ์ƒ์„ฑํ•˜๋„๋ก ์ˆ˜์ •

* etc: ์ „์ฒด์ ์ธ ๋””์ž์ธ ๋ฆฌํ„ฐ์น˜(svgr ๋„์ž…)(#79)

* etc: svgr ์„ค์น˜

Co-authored-by: Kyle <[email protected]>

* etc: svg image => svg ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ

- ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ height 3rem => 2.5rem ๋ณ€๊ฒฝ
- indigo => blue ๋ณ€๊ฒฝ

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* fix: ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€์˜ ์นด๋“œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. (#84)

Co-authored-by: dudtjr913 <[email protected]>

* fix: ์ฆ๊ฒจ์ฐพ๊ธฐ ์˜ค๋ฅ˜ ์ˆ˜์ • (#87)

Co-authored-by: dudtjr913 <[email protected]>

* feat: User ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ ๋ฐ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ (#83)

* feat: timezone ์˜ต์…˜ ์ถ”๊ฐ€ (#85)

* B15 - admin API๋ฅผ ์ ์šฉํ•˜์—ฌ CategoryAcceptanceTest์—์„œ cardCount ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#88)

* test: cardCount ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* etc: optimize imports

* etc: dev ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€ (#93)

Co-authored-by: seunghyun <[email protected]>

* B20 - git ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค (#94)

* etc: dev ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€

* etc: ํ…Œ์ŠคํŠธ๋ฅผ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์ž˜๋ชป๋œ ์„ค์ • ์ถ”๊ฐ€

* B20 - git ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค (#95)

* etc: dev ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€

* etc: ํ…Œ์ŠคํŠธ๋ฅผ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์ž˜๋ชป๋œ ์„ค์ • ์ถ”๊ฐ€

* etc: dev์„ค์ •ํŒŒ์ผ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณ€๊ฒฝ

* B21,B22 - ํ€ด์ฆˆ ์ƒ์„ฑ ์‹œ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์นด๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ, CategoryNotFoundException์ด ํ„ฐ์ง€๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • (#91)

* fix: fetch join ๋Œ€์‹  findById๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* etc: optimize imports

* etc: ํ•„์š”์—†๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ

* B24 - DTO ๊ฒ€์ฆ์„ ์‚ดํŽด๋ณธ๋‹ค (#106)

* feat: ์š”์ฒญ ์ •๋ณด ๊ฒ€์ฆ ๋ฒ”์œ„ ํ™•๋Œ€

* test: B24 ์ด์Šˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* B23 - ๋ฐ์ดํ„ฐ๋กœ๋”๋ฅผ ๋งŒ๋“ ๋‹ค. (#108)

* feat: Dummy Data ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ ๋™๊ธฐํ™”

* etc: Dummy Data ํŒŒ์ผ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: DataLoader ๋‚ด for๋ฌธ์„ while๋ฌธ์œผ๋กœ ์ˆ˜์ •

* U01 - ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค (#109)

* feat: Button ์†์„ฑ ์ถ”๊ฐ€

- hover
- color

Co-authored-by: dudtjr913 <[email protected]>

* etx: css ๋ ˆ๊ฑฐ์‹œ ์ •๋ฆฌ

* refactor: Header ๋ถ„๋ฆฌ

Co-authored-by: dudtjr913 <[email protected]>

* refactor: ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ›๋Š” ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ

- ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋‹จ์—์„œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ์ฒด๋กœ ๋ฐ›์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

Co-authored-by: dudtjr913 <[email protected]>

* feat: ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ - 1

- ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
- Oauth

Co-authored-by: dudtjr913 <[email protected]>

* feat: sessionStorage ์œ ํ‹ธ ํ•จ์ˆ˜ ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

* fix: publicPath ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

* feat: ์†Œ์…œ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์™„๋ฃŒ

- GithubCallbackPage ์ถ”๊ฐ€
- Cards ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ ์‹œ ๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๋„๋ก ์„ค์ •

Co-authored-by: Kyle <[email protected]>

* etc: dotenv ์ ์šฉ

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: Kyle <[email protected]>

* etc: env ํด๋” ์ด๋™

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ ์œ„์น˜ ๋ณ€๊ฒฝ (#114)

* ์„œ๋ธŒ๋ชจ๋“ˆ ์„ค์ • ๋ณ€๊ฒฝ

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ url ๋ณ€๊ฒฝ

* etc: package.json ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ ์ •๋ณด ์ถ”๊ฐ€

* fix: ๋ฌธ์ œ๊ฐ€ 0๊ฐœ์ผ ๋•Œ, ํ€ด์ฆˆ ์„ค์ •์—์„œ ๋ณด์ด์ง€ ์•Š๋„๋ก ์ˆ˜์ • (#115)

* etc: ๋ฒ„ํŠผ, ์นดํ…Œ๊ณ ๋ฆฌ ์Šคํƒ€์ผ ์ˆ˜์ •

- ๋ฒ„ํŠผ rectangle height 3.5rem์œผ๋กœ ์ˆ˜์ •
- ์นดํ…Œ๊ณ ๋ฆฌ ํฐํŠธ์‚ฌ์ด์ฆˆ ์ˆ˜์ •

Co-authored-by: Kyle <[email protected]>

* etc: console.log ์‚ญ์ œ

Co-authored-by: Kyle <[email protected]>

* fix: ๋ฌธ์ œ๊ฐ€ 0๊ฐœ์ผ ๋•Œ, ํ€ด์ฆˆ ์„ค์ •์—์„œ ๋ณด์ด์ง€ ์•Š๋„๋ก ์ˆ˜์ •

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* F01 - aws s3๋กœ ์ •์  ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (#117)

* etc: ์ด๋ฏธ์ง€ ์†Œ์Šค ์ตœ์ ํ™”

- cloud front ๋ฐฐํฌ
- s3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

Co-authored-by: dudtjr913 <[email protected]>

* etc: ๋กœ๊ทธ์ธ logo ์ด๋ฏธ์ง€ height ๊ณ ์ •

Co-authored-by: dudtjr913 <[email protected]>

* B25 - ๋ฌธ์„œํ™” ์ˆ˜์ • ๋ฐ˜์˜ ๋ฐ B23 ์ฝ”๋“œ ๊ฐ„๋‹จ ์ˆ˜์ • (#111)

* refactor: DataLoader ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

* etc: ์ฝ”๋“œ ํฌ๋งท

* etc: ํŽ˜์ด์ง€ ํ—ค๋” ์ •๋ฆฌ (#134)

Co-authored-by: dudtjr913 <[email protected]>

* F03 - ์Šค์ผˆ๋ ˆํ†ค UI๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค (#140)

* feat: ์Šค์ผˆ๋ ˆํ†ค UI ์ถ”๊ฐ€

- CardSkeleton ์ถ”๊ฐ€
- HeaderSkeleton ์ถ”๊ฐ€
- skeleton style ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

* etc: ์นดํ…Œ๊ณ ๋ฆฌ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ

- ๋ฉ”์ธ ํŽ˜์ด์ง€ ํƒ€์ดํ‹€ ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ -> ํ•™์Šต ์ค‘์œผ๋กœ ๋ณ€๊ฒฝ

Co-authored-by: Kyle <[email protected]>

* feat: CardsLoadable ์ถ”๊ฐ€

Co-authored-by: dudtjr913 <[email protected]>

* etc: QuizPage fallback ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>

* etc: ์„œ๋ฒ„ url ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ ์šฉ (#142)

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>

* etc: build.gradle ์ˆ˜์ •

* fix: ๋กœ๊ทธ์ธ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ํ•ด๊ฒฐ (#144)

- PrivateRoute์— children์ด ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์„œ ์ƒ๊ธด ์—๋Ÿฌ ํ•ด๊ฒฐ

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* etc: build.gradle ์„ค์ • ๋ณ€๊ฒฝ

* 1์ฐจ release (#147) (#148)

* B01 - Card, Answer, Category ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค (#20)

* feat: Category ๊ฐ์ฒด ์ถ”๊ฐ€

* feat: Card, Answer ๊ฐ์ฒด ์ถ”๊ฐ€

* test: ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat: Category updateDescription ์ถ”๊ฐ€

* test: CategoryRepositoryTest ์ถ”๊ฐ€

* feat: Category ์ œ์•ฝ ์กฐ๊ฑด ๋ณ€๊ฒฝ

* test: AnswerRepositoryTest, CardRepositoryTest ์ถ”๊ฐ€

Co-authored-by: seovalue <[email protected]>

* B02 - ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api (#24)

* feat: ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๊ตฌํ˜„

* feat: B02 - B ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๋ฆฌ๋ทฐ ๋ฐ˜์˜

* feat: Category isDeleted ํ•„๋“œ ์ˆ˜์ •

Co-authored-by: seunghyun <[email protected]>

* B03 - ํ€ด์ฆˆ ์ƒ์„ฑ api (#25)

* feat: data.sql ์ƒ์„ฑ

* feat&test: ํ€ด์ฆˆ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: createQuiz ๋ฉ”์„œ๋“œ ๋ฆฌํŒฉํ† ๋ง

* test: QuizServiceTest ์ถ”๊ฐ€

* etc: ์ฝ”๋“œ ์ •๋ฆฌ

* test: QuizServiceTest์— ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ ์‚ญ์ œ

* B02 - ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api (#24)

* feat: ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๊ตฌํ˜„

* feat: B02 - B ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ api ๋ฆฌ๋ทฐ ๋ฐ˜์˜

* feat: Category isDeleted ํ•„๋“œ ์ˆ˜์ •

Co-authored-by: seunghyun <[email protected]>

* feat: data.sql ์ƒ์„ฑ

* feat&test: ํ€ด์ฆˆ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: createQuiz ๋ฉ”์„œ๋“œ ๋ฆฌํŒฉํ† ๋ง

* test: QuizServiceTest ์ถ”๊ฐ€

* etc: ์ฝ”๋“œ ์ •๋ฆฌ

* test: QuizServiceTest์— ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ ์‚ญ์ œ

* refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜

Co-authored-by: Eugine Park <[email protected]>
Co-authored-by: seunghyun <[email protected]>

* etc: ๋ฐฐํฌ ํ…Œ์ŠคํŠธ

* UI01 - ๋ฉ”์ธํŽ˜์ด์ง€ UI ๊ตฌํ˜„ (#33)

* feat: GlobalStyle ์„ค์ •

* chore: file-loader ์„ค์น˜

* feat: Theme ์ถ”๊ฐ€

* feat: Header ์ถ”๊ฐ€

* etc: eslint - endOfLine์„ auto๋กœ ๋ณ€๊ฒฝ

* feat: QuizStarter ์ถ”๊ฐ€

* feat: Category ์ถ”๊ฐ€

* feat: Button ์ถ”๊ฐ€

* refactor: Button ์ˆ˜์ •

ํ™•์žฅ์„ฑ ๊ณ ๋ ค
  - circle, square
  - backgroundColor

* etc: font awesome ์„ค์น˜

* feat: MainPage ๊ตฌํ˜„ ์™„๋ฃŒ

Co-authored-by: Kyle <[email protected]>

* UI02 - ํ€ด์ฆˆ ์„ค์ • ํŽ˜์ด์ง€ UI ๊ตฌํ˜„ (#36)

* feat: QuizSettingPage ์ถ”๊ฐ€

* feat: router ์ถ”๊ฐ€

@reach/router ์‚ญ์ œ ํ›„ react-router-dom ๋„์ž…

* UI03 - ํ€ด์ฆˆ ํŽ˜์ด์ง€ UI ๊ตฌํ˜„  (#40)

* etc: emotion.d.ts ํŒŒ์ผ ๋ถ„๋ฆฌ

* feat: QnACard ์ถ”๊ฐ€

* feat: Quiz ํŽ˜์ด์ง€ ๊ตฌํ˜„ ์™„๋ฃŒ

* UI04 - ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ UI ๊ตฌํ˜„ (#43)

* refactor: QnACard ๊ตฌ์กฐ ๋ณ€๊ฒฝ

- QuizResult ๋ถ„๋ฆฌ

* refactor: Button ์Šคํƒ€์ผ ๋ณ€๊ฒฝ

- 'reactangle' shape ์ถ”๊ฐ€
- 'full' size height: 3rem ๋ณ€๊ฒฝ

* feat: QuizResultPage ๊ตฌํ˜„ ์™„๋ฃŒ

* etc: netlify.toml ์ถ”๊ฐ€

* Q12 - ํ€ด์ฆˆ ํŽ˜์ด์ง€์˜ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•œ๋‹ค.  (#45)

* refactor: pageSize ์ „์—ญ ๊ด€๋ฆฌ๋กœ ๋ณ€๊ฒฝ

* feat: QuizPage pagenation ๊ตฌํ˜„

* feat: ์ฒซ ๋ฌธ์ œ ํ™”๋ฉด์— ์œ ์ €์˜ ํ–‰๋™ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์‚ฝ์ž…

* feat: ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: ๋””์ž์ธ ๋ฆฌํ„ฐ์น˜ (#47)

* B07 - ์–ด๋“œ๋ฏผ์šฉ ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€, ์นด๋“œ ์ถ”๊ฐ€, ๋‹ต๋ณ€ ์ถ”๊ฐ€ API๋ฅผ ๋งŒ๋“ ๋‹ค.  (#37)

* feat: admin category ์ถ”๊ฐ€ api ๊ตฌํ˜„

* feat: admin card, answer ์ถ”๊ฐ€ api ๊ตฌํ˜„

* feat: admin category, card, answer request์— validation ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜

* feat: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ์‹œ ์นด๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ (#49)

* feat: ํ€ด์ฆˆ ํŽ˜์ด์ง€ ์Šฌ๋ผ์ด๋“œ ๊ตฌํ˜„ (#51)

* feat: cors ์„ค์ • ์™„๋ฃŒ (#55)

* B04 - ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œํ™” (#53)

* etc: ๋ฌธ์„œ ์ž๋™ํ™” ๊ด€๋ จ ์˜์กด์„ฑ ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ

- Gradle ๋ฐ SpringBoot ๋ฒ„์ „ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

* test: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* test: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œ ์ถ”๊ฐ€

* etc: ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์ˆ˜์ •

* M03 - ์„œ๋น„์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด์—ฌ์ฃผ๊ธฐ (#56)

* feat: recoil ๋„์ž…

* feat: quiz setting ๊ธฐ๋Šฅ ์ถ”๊ฐ€

- ์นดํ…Œ๊ณ ๋ฆฌ ์ฒดํฌ
- ํŒŒ์ผ ๊ฒฝ๋กœ ์ˆ˜์ •
  - types/api -> types
  - index.d.ts -> file.d.ts

* feat: ๋น„๋™๊ธฐ ์š”์ฒญ ๋ ˆ์ด์–ด ์ถ”๊ฐ€

* feat: ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€์˜ ์ฒดํฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ํ€ด์ฆˆ ํŽ˜์ด์ง€/ ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ recoil ๋„์ž…
- React.HTMLAttributes ์ œ๊ฑฐ ํ›„ onClick ๋ณ€๊ฒฝ

* feat: ๋น„๋™๊ธฐ ๋ ˆ์ด์–ด ์ถ”๊ฐ€

- recoil ์ƒํƒœ ์ˆ˜์ •
- ํ€ด์ฆˆ ์„ค์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* etc: ํƒ€์ž… ์ •๋ฆฌ

* etc: file-loader ์ œ๊ฑฐ

- webpack ๋ฒ„์ „์— ๋งž์ถฐ asset ์‚ฌ์šฉ

Co-authored-by: dudtjr913 <[email protected]>

* B10 - List<Answer>, List<Card> ์ผ๊ธ‰์ปฌ๋ ‰์…˜ ์ž‘์—… ๋ฐ QuizAcceptanceTest๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง ํ•˜๊ณ  ๋กœ๊น…์„ ์ถ”๊ฐ€ํ•œ๋‹ค. (#54)

* feat: ๋กœ๊น… ์ถ”๊ฐ€ ๋ฐ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘ ํŽธ์˜ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: ๋„๋ฉ”์ธ์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€

* refactor: QuizAcceptanceTest, CategoryAcceptanceTest ๋ฆฌํŒฉํ† ๋ง

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ์ˆ˜์ •

* etc: rebase

* etc: rebase

* etc: clear git cache

* refactor: version ์ด์Šˆ ๋ฐ˜์˜

* etc: ์ฝ”๋“œ ์ •๋ฆฌ

* B05 - ํ€ด์ฆˆ ์ƒ์„ฑ api ๋ฌธ์„œํ™” (#60)

* etc: ๋ฌธ์„œ ์ž๋™ํ™” ๊ด€๋ จ ์˜์กด์„ฑ ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ

- Gradle ๋ฐ SpringBoot ๋ฒ„์ „ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

* test: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* test: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œ ์ถ”๊ฐ€

* test: ํ€ด์ฆˆ ์ƒ์„ฑ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ํ€ด์ฆˆ ์ƒ์„ฑ api ๋ฌธ์„œ ์ถ”๊ฐ€

* etc: ๋ฐฐํฌํ™˜๊ฒฝ์—์„œ ๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ ์„ค์ • ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

* etc: log.log ํŒŒ์ผ ์‚ญ์ œ

Co-authored-by: seunghyun <[email protected]>

* feat: BaseEntity ์ถ”๊ฐ€ (#63)

* B13 - admin์šฉ api ๋ฌธ์„œํ™” (#62)

* etc: ๋ฌธ์„œ ์ž๋™ํ™” ๊ด€๋ จ ์˜์กด์„ฑ ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ

- Gradle ๋ฐ SpringBoot ๋ฒ„์ „ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

* test: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* test: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ api ๋ฌธ์„œ ์ถ”๊ฐ€

* test: ํ€ด์ฆˆ ์ƒ์„ฑ ๋ฌธ์„œํ™” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* docs: ํ€ด์ฆˆ ์ƒ์„ฑ api ๋ฌธ์„œ ์ถ”๊ฐ€

* etc: ๋ฐฐํฌํ™˜๊ฒฝ์—์„œ ๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ ์„ค์ • ์ถ”๊ฐ€

* etc: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

* etc: log.log ํŒŒ์ผ ์‚ญ์ œ

* refactor: ๊ธฐ์กด ๋ฌธ์„œ ์ฝ”๋“œ ๊ฐœ์„ 

* feat: admin ๊ด€๋ จ api ๋ฌธ์„œํ™”

Co-authored-by: seunghyun <[email protected]>

* fix: Admin ๋ฌธ์„œ ํ…Œ์ŠคํŠธ jpa ์„ค์ • ์ถ”๊ฐ€

* etc: admin ๋ฌธ์„œ ํ…Œ์ŠคํŠธ import๋ฌธ ์ถ”๊ฐ€

* fix: local์—์„œ ddl-auto ์ž‘๋™ ๋ฐฉ์‹ ๋ณ€๊ฒฝ

* UI07 - ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. (#66)

* etc: copy-webpack-plugin ์„ค์น˜

Co-authored-by: dudtjr913 <[email protected]>

* etc: png -> svg ๊ต์ฒด

* etc: font-awesome ์‚ญ์ œ

* feat: ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€ ์ถ”๊ฐ€ - 1

- ํ•„ํ„ฐ
- ๊ฒ€์ƒ‰์ฐฝ
- ๋ฒ„ํŠผ shape ์ถ”๊ฐ€ (round)

Co-authored-by: dudtjr913 <[email protected]>

* feat: QnACard ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* feat: ์นด๋“œ ํŽ˜์ด์ง€ ํ•„ํ„ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#69)

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>

* refactor: ๊ฒ€์ƒ‰ UI => ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€๋กœ ์ด๋™ (#71)

* feat: ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#72)

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>

* B18 - ๋ชจ์•„๋ณด๊ธฐ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค (#77)

* feat: Category ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ Card fetch join ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* feat: Category์˜ ์นด๋“œ ๋ชจ์•„๋ณด๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat: ๋ชจ์•„๋ณด๊ธฐ api ๋ฌธ์„œํ™”

* etc: ์ฝ”๋“œ ์ค„ ๊ฐ„๊ฒฉ ์ˆ˜์ •

* refactor: ์‘๋‹ต ๊ด€๋ จ dto ๋กฌ๋ณต ์ฒ˜๋ฆฌ

* U01B - ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค (#76)

* etc: jwt ๊ด€๋ จ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ์ธ์ฆ์— ์‹คํŒจํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ์— ํ•„์š”ํ•œ ๊ฐ์ฒด ์ถ”๊ฐ€

* feat: ํ† ํฐ ๊ด€๋ จ ํด๋ž˜์Šค ์ถ”๊ฐ€

* feat: github Oauth ๊ด€๋ จ ํด๋ž˜์Šค ์ถ”๊ฐ€

* refactor: final ์ œ๊ฑฐ

* feat: Github ๋กœ๊ทธ์ธ ์š”์ฒญ์‹œ ํ† ํฐ์ƒ์„ฑ API ๊ตฌํ˜„

* etc: ํ…Œ์ŠคํŠธ์—์„œ ์“ฐ์ด๋Š” ์„ค์ •๊ฐ’ ์ถ”๊ฐ€

* etc: ์ค„๋ฐ”๊ฟˆ ์ถ”๊ฐ€

* refactor: ๋ฉ”์„œ๋“œ์ด๋ฆ„ ์ˆ˜์ •

* refactor: lombok์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ์ž, builder ์ƒ์„ฑํ•˜๋„๋ก ์ˆ˜์ •

* etc: ์ „์ฒด์ ์ธ ๋””์ž์ธ ๋ฆฌํ„ฐ์น˜(svgr ๋„์ž…)(#79)

* etc: svgr ์„ค์น˜

Co-authored-by: Kyle <[email protected]>

* etc: svg image => svg ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ

- ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ height 3rem => 2.5rem ๋ณ€๊ฒฝ
- indigo => blue ๋ณ€๊ฒฝ

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* fix: ๋ชจ์•„๋ณด๊ธฐ ํŽ˜์ด์ง€์˜ ์นด๋“œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. (#84)

Co-authored-by: dudtjr913 <[email protected]>

* fix: ์ฆ๊ฒจ์ฐพ๊ธฐ ์˜ค๋ฅ˜ ์ˆ˜์ • (#87)

Co-authored-by: dudtjr913 <[email protected]>

* feat: User ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ ๋ฐ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ (#83)

* feat: timezone ์˜ต์…˜ ์ถ”๊ฐ€ (#85)

* B15 - admin API๋ฅผ ์ ์šฉํ•˜์—ฌ CategoryAcceptanceTest์—์„œ cardCount ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#88)

* test: cardCount ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* etc: optimize imports

* etc: dev ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€ (#93)

Co-authored-by: seunghyun <[email protected]>

* B20 - git ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค (#94)

* etc: dev ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€

* etc: ํ…Œ์ŠคํŠธ๋ฅผ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์ž˜๋ชป๋œ ์„ค์ • ์ถ”๊ฐ€

* B20 - git ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค (#95)

* etc: dev ์„œ๋ธŒ๋ชจ๋“ˆ ์ถ”๊ฐ€

* etc: ํ…Œ์ŠคํŠธ๋ฅผ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์ž˜๋ชป๋œ ์„ค์ • ์ถ”๊ฐ€

* etc: dev์„ค์ •ํŒŒ์ผ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณ€๊ฒฝ

* B21,B22 - ํ€ด์ฆˆ ์ƒ์„ฑ ์‹œ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์นด๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ, CategoryNotFoundException์ด ํ„ฐ์ง€๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • (#91)

* fix: fetch join ๋Œ€์‹  findById๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* etc: optimize imports

* etc: ํ•„์š”์—†๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ

* B24 - DTO ๊ฒ€์ฆ์„ ์‚ดํŽด๋ณธ๋‹ค (#106)

* feat: ์š”์ฒญ ์ •๋ณด ๊ฒ€์ฆ ๋ฒ”์œ„ ํ™•๋Œ€

* test: B24 ์ด์Šˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* B23 - ๋ฐ์ดํ„ฐ๋กœ๋”๋ฅผ ๋งŒ๋“ ๋‹ค. (#108)

* feat: Dummy Data ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ ๋™๊ธฐํ™”

* etc: Dummy Data ํŒŒ์ผ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: DataLoader ๋‚ด for๋ฌธ์„ while๋ฌธ์œผ๋กœ ์ˆ˜์ •

* U01 - ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค (#109)

* feat: Button ์†์„ฑ ์ถ”๊ฐ€

- hover
- color

Co-authored-by: dudtjr913 <[email protected]>

* etx: css ๋ ˆ๊ฑฐ์‹œ ์ •๋ฆฌ

* refactor: Header ๋ถ„๋ฆฌ

Co-authored-by: dudtjr913 <[email protected]>

* refactor: ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ›๋Š” ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ

- ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋‹จ์—์„œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ์ฒด๋กœ ๋ฐ›์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

Co-authored-by: dudtjr913 <[email protected]>

* feat: ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ - 1

- ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
- Oauth

Co-authored-by: dudtjr913 <[email protected]>

* feat: sessionStorage ์œ ํ‹ธ ํ•จ์ˆ˜ ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

* fix: publicPath ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

* feat: ์†Œ์…œ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์™„๋ฃŒ

- GithubCallbackPage ์ถ”๊ฐ€
- Cards ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ ์‹œ ๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๋„๋ก ์„ค์ •

Co-authored-by: Kyle <[email protected]>

* etc: dotenv ์ ์šฉ

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: Kyle <[email protected]>

* etc: env ํด๋” ์ด๋™

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ ์œ„์น˜ ๋ณ€๊ฒฝ (#114)

* ์„œ๋ธŒ๋ชจ๋“ˆ ์„ค์ • ๋ณ€๊ฒฝ

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ url ๋ณ€๊ฒฝ

* etc: package.json ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ ์ •๋ณด ์ถ”๊ฐ€

* fix: ๋ฌธ์ œ๊ฐ€ 0๊ฐœ์ผ ๋•Œ, ํ€ด์ฆˆ ์„ค์ •์—์„œ ๋ณด์ด์ง€ ์•Š๋„๋ก ์ˆ˜์ • (#115)

* etc: ๋ฒ„ํŠผ, ์นดํ…Œ๊ณ ๋ฆฌ ์Šคํƒ€์ผ ์ˆ˜์ •

- ๋ฒ„ํŠผ rectangle height 3.5rem์œผ๋กœ ์ˆ˜์ •
- ์นดํ…Œ๊ณ ๋ฆฌ ํฐํŠธ์‚ฌ์ด์ฆˆ ์ˆ˜์ •

Co-authored-by: Kyle <[email protected]>

* etc: console.log ์‚ญ์ œ

Co-authored-by: Kyle <[email protected]>

* fix: ๋ฌธ์ œ๊ฐ€ 0๊ฐœ์ผ ๋•Œ, ํ€ด์ฆˆ ์„ค์ •์—์„œ ๋ณด์ด์ง€ ์•Š๋„๋ก ์ˆ˜์ •

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* F01 - aws s3๋กœ ์ •์  ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (#117)

* etc: ์ด๋ฏธ์ง€ ์†Œ์Šค ์ตœ์ ํ™”

- cloud front ๋ฐฐํฌ
- s3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

Co-authored-by: dudtjr913 <[email protected]>

* etc: ๋กœ๊ทธ์ธ logo ์ด๋ฏธ์ง€ height ๊ณ ์ •

Co-authored-by: dudtjr913 <[email protected]>

* B25 - ๋ฌธ์„œํ™” ์ˆ˜์ • ๋ฐ˜์˜ ๋ฐ B23 ์ฝ”๋“œ ๊ฐ„๋‹จ ์ˆ˜์ • (#111)

* refactor: DataLoader ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

* etc: ์ฝ”๋“œ ํฌ๋งท

* etc: ํŽ˜์ด์ง€ ํ—ค๋” ์ •๋ฆฌ (#134)

Co-authored-by: dudtjr913 <[email protected]>

* F03 - ์Šค์ผˆ๋ ˆํ†ค UI๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค (#140)

* feat: ์Šค์ผˆ๋ ˆํ†ค UI ์ถ”๊ฐ€

- CardSkeleton ์ถ”๊ฐ€
- HeaderSkeleton ์ถ”๊ฐ€
- skeleton style ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

* etc: ์นดํ…Œ๊ณ ๋ฆฌ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ

- ๋ฉ”์ธ ํŽ˜์ด์ง€ ํƒ€์ดํ‹€ ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ -> ํ•™์Šต ์ค‘์œผ๋กœ ๋ณ€๊ฒฝ

Co-authored-by: Kyle <[email protected]>

* feat: CardsLoadable ์ถ”๊ฐ€

Co-authored-by: dudtjr913 <[email protected]>

* etc: QuizPage fallback ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>

* etc: ์„œ๋ฒ„ url ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ ์šฉ (#142)

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: dudtjr913 <[email protected]>

* etc: build.gradle ์ˆ˜์ •

* fix: ๋กœ๊ทธ์ธ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ํ•ด๊ฒฐ (#144)

- PrivateRoute์— children์ด ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์„œ ์ƒ๊ธด ์—๋Ÿฌ ํ•ด๊ฒฐ

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* etc: build.gradle ์„ค์ • ๋ณ€๊ฒฝ

Co-authored-by: Eugine Park <[email protected]>
Co-authored-by: seovalue <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>
Co-authored-by: Kyle <[email protected]>
Co-authored-by: ohjoohyung <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: Eugine Park <[email protected]>
Co-authored-by: seovalue <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>
Co-authored-by: Kyle <[email protected]>
Co-authored-by: ohjoohyung <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ์˜ application-test๋ฅผ ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ // application.yml ๋ณ€๊ฒฝ

* W01-B - Workbook (๋ฌธ์ œ์ง‘) ๋„๋ฉ”์ธ์„ ์ƒ์„ฑํ•œ๋‹ค (#151)

* feat: Workbook ๋„๋ฉ”์ธ ์ถ”๊ฐ€

* refactor: ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: timezone ์˜ต์…˜ ์‚ญ์ œ

* feat: snackbar ์ถ”๊ฐ€ (#152)

Co-authored-by: dudtjr913 <[email protected]

* refactor - ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ตฌํ˜„ (#158)

* etc: webpack.prod.js - devtool: false๋กœ ๋ณ€๊ฒฝ

Co-authored-by: Kyle <[email protected]>

* feat: ๊ฐœํ–‰ ํฌ๋งทํŒ… ์œ ํ‹ธ ํ•จ์ˆ˜ ์ถ”๊ฐ€

Co-authored-by: Kyle <[email protected]>

* refactor: ์Šค๋‚ต๋ฐ”๋ฅผ ์ด์šฉํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ตฌํ˜„

Co-authored-by: Kyle <[email protected]>

Co-authored-by: Kyle <[email protected]>

* Q01 - ๋น„ํšŒ์› ์ „์šฉ ํ€ด์ฆˆ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค (#154)

* feat: Card ๋งˆ์ฃผ์นœ ํšŸ์ˆ˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat&test: ๋น„ํšŒ์› ์นด๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๋ฐ ํ…Œ์ŠคํŠธ ๊ตฌํ˜„

* feat: ์ƒ์œ„ 10๊ฐœ ์นด๋“œ ์กฐํšŒ ๋ฉ”์„œ๋“œ ์ˆ˜์ •

* refactor: singleton ํ• ๋‹น ๋ฐฉ๋ฒ• ๋ฆฌํŒฉํ† ๋ง

* refactor: QuizResponse ์ƒ์„ฑ ๋ฉ”์„œ๋“œ ์ˆ˜์ • ๋ฐ ๋ถˆํ•„์š”ํ•œ ๋‚ด์šฉ ์ œ๊ฑฐ

* refactor: ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ช…์„ of -> listOf๋กœ ๋ณ€๊ฒฝ

* refactor: List.copyOf ๋Œ€์‹ , ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก๋งŒ ์ฒ˜๋ฆฌํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •

Co-authored-by: pkeugine <[email protected]>

* C03 - Card์— ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ํฌํ•จ์‹œํ‚จ๋‹ค (#159)

* feat: Card ๋งˆ์ฃผ์นœ ํšŸ์ˆ˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat: Card ๊ฐ์ฒด ํ•„๋“œ ๋ณ€๊ฒฝ ๋ฐ Answer ๊ด€๋ จ ๊ธฐ๋Šฅ ์ œ๊ฑฐ

* Category์—์„œ Workbook์— ํฌํ•จ๋˜๋„๋ก ๋ณ€๊ฒฝ
* Cards ๋‚ด์šฉ ์ˆ˜์ •
* ๋ถˆํ•„์š”ํ•œ import๋ฌธ ์ œ๊ฑฐ
* DataLoader ๋น„ํ™œ์„ฑํ™”

* feat: Workbook ๊ด€๋ จ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: Quiz๊ฐ€ Category๊ฐ€ ์•„๋‹Œ Workbook์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: Admin ๊ด€๋ จ ๊ธฐ๋Šฅ์ด Category๊ฐ€ ์•„๋‹Œ Workbook์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* Admin์˜ Answer ๊ด€๋ จ ๊ธฐ๋Šฅ ์ œ๊ฑฐ

* refactor: Category ์ œ๊ฑฐ ๋ฐ api ๋ฌธ์„œ ์ฐธ์กฐ snippet ๋ณ€๊ฒฝ

* refactor: Workbook name ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ๋ฐ dto ์ ‘๊ทผ์ œํ•œ์ž ์ˆ˜์ •

* docs: admin api ์นดํ…Œ๊ณ ๋ฆฌ ๋ถ€๋ถ„ ๋ฌธ์ œ์ง‘์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์‘๋‹ต dto ๋กฌ๋ณต ์ถ”๊ฐ€

* refactor: Card ํด๋ž˜์Šค ํŽธ์˜ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: ์›Œํฌ๋ถ ๋ˆ„๋ฝ๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ

* etc: build.gradle์—์„œ application-test.yml ์ œ๊ฑฐ

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ ๋™๊ธฐํ™”

* U01 - AuthorizationInterceptor ๋ฐ ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (#164)

* feat: AuthorizationInterceptor ๋ฐ Config ์ถ”๊ฐ€

* etc: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* test: AuthorizationInterceptor ์ถ”๊ฐ€์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€

* refactor: ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

* etc: ์ฝ”๋“œ ํฌ๋งทํŒ… ๋ฐ ํ•„์š”์—†๋Š” ๋ฉ”์„œ๋“œ ์‚ญ์ œ

* 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]>

* etc: ์„œ๋ธŒ๋ชจ๋“ˆ - ์„œ๋ฒ„ url ๋ณ€๊ฒฝ

Co-authored-by: dudtjr913 <[email protected]>

* refactor: api url ๋ฐ ์ธํ„ฐ์…‰ํ„ฐ ์ˆ˜์ • (#170)

* feat: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•œ๋‹ค. (#174)

* chore: react-testing-library ํ™˜๊ฒฝ์„ค์ •

Co-authored-by: Kyle <[email protected]>

* test: MainPage ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

- setupTest ์„ค์ •
- fetch -> axios

Co-authored-by: dudtjr913 <[email protected]>

Co-authored-by: Kyle <[email protected]>

* 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: ๋ฉ”์ธ ํ—ค๋”์— 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 ์ž‘์„ฑ

Co-authored-by: Eugine Park <[email protected]>
Co-authored-by: seovalue <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>
Co-authored-by: Kyle <[email protected]>
Co-authored-by: ohjoohyung <[email protected]>
Co-authored-by: dudtjr913 <[email protected]>
Co-authored-by: DESKTOP-VDP6SAT\xntm3 <[email protected]>
  • Loading branch information
8 people authored Aug 12, 2021
1 parent 1fe0956 commit 4a7ef0f
Show file tree
Hide file tree
Showing 364 changed files with 11,493 additions and 3,392 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,5 @@ backend/src/main/resources/static/api/docs/**
backend/src/main/resources/application-dev.yml
backend/src/main/resources/application-local.yml
backend/src/main/resources/application-prod.yml
backend/src/apis/**
backend/src/main/resources/aws-s3.yml
backend/src/apis/**
51 changes: 50 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,50 @@
## 2021-botobo
<div align="center">
<a href="https://hits.seeyoufarm.com"><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fwoowacourse-teams%2F2021-botobo&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false"/></a>
</div>

<br>

<p align="center">
<img src="https://user-images.githubusercontent.com/48412963/129230609-3476c676-6c38-4393-92dd-c2c20c99b814.png" alt="botobo-logo" height="280">
</p>

<p align="center">
<strong> ๋ณด๊ณ  ๋˜ ๋ณด๊ณ ๋Š” ์ทจ์ค€์ƒ, ํ•™์ƒ์„ ์œ„ํ•œ ๋ฐ˜๋ณต ํ•™์Šต ์žฅ๋ ค ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.<br>
๋ฉด์ ‘ ์ค€๋น„๋Š” ๋ณด๊ณ  ๋˜ ๋ณด๊ณ  ๐Ÿ˜Ž</strong>
</p>

<br>

## ๐Ÿธ ๋ณด๊ณ  ๋˜ ๋ณด๊ณ 
* [๋ณด๊ณ  ๋˜ ๋ณด๊ณ  ๋ฐ”๋กœ๊ฐ€๊ธฐ](https://botobo.kro.kr)
* [๋ณด๊ณ  ๋˜ ๋ณด๊ณ  ์ด์•ผ๊ธฐ](https://github.com/woowacourse-teams/2021-botobo/wiki)
<br>

## ๊ตฌ์„ฑ์› ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง

| [์นด์ผ](https://github.com/gwangyeol-im) | [๋””ํ† ](https://github.com/dudtjr913) | [์ค‘๊ฐ„๊ณฐ](https://github.com/ggyool) | [์˜ค์ฆˆ](https://github.com/ohjoohyung) | [ํ”ผ์ผ€์ด](https://github.com/pkeugine) | [์กฐ์•ค](https://github.com/seovalue) |
| :----------: | :--------: | :---------: | :---------: | :---------: | :---------: |
| <img src="https://avatars.githubusercontent.com/u/57053577?v=4" width=400px alt="์นด์ผ"/> | <img src="https://avatars.githubusercontent.com/u/64782636?v=4" width=400px alt="๋””ํ† "/> | <img src="https://avatars.githubusercontent.com/u/12393067?v=4" width=400px alt="์ค‘๊ฐ„๊ณฐ"/> | <img src="https://avatars.githubusercontent.com/u/62014888?v=4" width=400px alt="์˜ค์ฆˆ"> | <img src="https://avatars.githubusercontent.com/u/48251668?v=4" width=400px alt="pk"> | <img src="https://avatars.githubusercontent.com/u/48412963?v=4" width=400px alt="์กฐ์•ค"> |
|ํ”„๋ก ํŠธ์—”๋“œ ๋‹ด๋‹นโœจ|ํ”„๋ก ํŠธ์—”๋“œ ๋‹ด๋‹นโœจ| ๋ฐฑ์—”๋“œ ๋‹ด๋‹น๐ŸŽข |๋ฐฑ์—”๋“œ ๋‹ด๋‹น๐ŸŽข|๋ฐฑ์—”๋“œ ๋‹ด๋‹น๐ŸŽข|๋ฐฑ์—”๋“œ ๋‹ด๋‹น๐ŸŽข|
<br>

## ๐Ÿก ํŒ€ ๋ฌธํ™”
<div align="center">
<img src="https://user-images.githubusercontent.com/48412963/129229076-f11f6201-04d4-4a77-90a0-6d877d9791ba.png" width=700>
</div>

<br>

## ๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ
<p align="center">
<img src="https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=TypeScript&logoColor=white"> <img src="https://img.shields.io/badge/react-61DAFB?style=for-the-badge&logo=react&logoColor=black">
<img src="https://img.shields.io/badge/Testing Library-E33332?style=for-the-badge&logo=testingLibrary&logoColor=white">
<img src="https://img.shields.io/badge/React Router-CA4245?style=for-the-badge&logo=reactRouter&logoColor=white">
</p>
<p align="center">
<img src="https://img.shields.io/badge/JAVA-007396?style=for-the-badge&logo=java&logoColor=white"> <img src="https://img.shields.io/badge/Spring Boot-6DB33F?style=for-the-badge&logo=Spring Boot&logoColor=white"> <img src="https://img.shields.io/badge/JUnit5-25A162?style=for-the-badge&logo=JUnit5&logoColor=white"> <img src="https://img.shields.io/badge/mariaDB-003545?style=for-the-badge&logo=mariaDB&logoColor=white"> <img src="https://img.shields.io/badge/Hibernate-59666C?style=for-the-badge&logo=Hibernate&logoColor=white">
</p>
<p align="center">
<img src="https://img.shields.io/badge/Amazon AWS-232F3E?style=for-the-badge&logo=Amazon AWS&logoColor=white"> <img src="https://img.shields.io/badge/Amazon S3-569A31?style=for-the-badge&logo=Amazon S3&logoColor=white"> <img src="https://img.shields.io/badge/NGINX-009639?style=for-the-badge&logo=NGINX&logoColor=white"> <img src="https://img.shields.io/badge/Jenkins-D24939?style=for-the-badge&logo=Jenkins&logoColor=white"> <img src="https://img.shields.io/badge/SonarQube-4E9BCD?style=for-the-badge&logo=SonarQube&logoColor=white"> <img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=Docker&logoColor=white">
</p>

88 changes: 87 additions & 1 deletion backend/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
plugins {
id "org.asciidoctor.convert" version "1.5.9.2"
id "org.sonarqube" version "3.3"
id 'org.springframework.boot' version '2.4.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'jacoco'
id 'java'
}

Expand Down Expand Up @@ -47,13 +49,30 @@ dependencies {
// jwt
implementation 'io.jsonwebtoken:jjwt:0.9.1'

// bind
implementation 'javax.xml.bind:jaxb-api:2.1'

// aws s3
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

//test containers
implementation("com.amazonaws:aws-java-sdk-s3")
testImplementation "org.testcontainers:localstack:1.15.3"
compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4'

// FileNameUtils
implementation 'org.apache.tika:tika-core:2.0.0'

// Flyway
implementation('org.flywaydb:flyway-core:6.4.2')
}

ext {
snippetsDir = file('build/generated-snippets')
}

processResources.dependsOn('copyDev')

task copyDev(type: Copy) {
from '../dev/application-prod.yml'
into './src/main/resources'
Expand All @@ -63,10 +82,59 @@ task copyDev(type: Copy) {

from '../dev/application-local.yml'
into './src/main/resources'

from '../dev/aws-s3.yml'
into './src/main/resources'
}

test {
jacoco {
destinationFile = file("$buildDir/jacoco/jacoco.exec")
}
useJUnitPlatform()
finalizedBy 'jacocoTestReport'
}

jacoco {
toolVersion = '0.8.5'
}

jacocoTestReport {
reports {
html.enabled true
xml.enabled true
csv.enabled false
}
finalizedBy 'jacocoTestCoverageVerification'
}

jacocoTestCoverageVerification {
violationRules {
rule {
enabled = true
element = 'CLASS'

limit {
counter = 'BRANCH'
value = 'COVEREDRATIO'
minimum = 0.80
}

limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.80
}

excludes = [
'botobo.core.infrastructure.**',
'botobo.core.exception.**',
'botobo.core.dto.**',
'botobo.core.DataLoader',
'botobo.core.BotoboApplication'
]
}
}
}

asciidoctor.doFirst {
Expand All @@ -78,6 +146,25 @@ asciidoctor {
dependsOn test
}

sonarqube {
properties {
property "sonar.projectKey", "botobo-develop"
property "sonar.host.url", System.getenv('SONAR_URL')
property "sonar.login", System.getenv('SONAR_LOGIN')
property "sonar.language", "java"
property "sonar.binaries", "$buildDir/classes"
property "sonar.sources", "src/main"
property "sonar.tests", "src/test/java"
property "sonar.junit.reportsPath", "$buildDir/test-reports"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.coverage.jacoco.reportPaths", "$buildDir/jacoco/jacoco.exec"
property "sonar.exclusions", "**/exception/**, " +
"**/dto/**, " +
"**/DataLoader.java, " +
"**/BotoboApplication.java"
}
}

task createDocument(type: Copy) {
dependsOn asciidoctor

Expand All @@ -86,6 +173,5 @@ task createDocument(type: Copy) {
}

build {
dependsOn copyDev
dependsOn createDocument
}
1 change: 1 addition & 0 deletions backend/lombok.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lombok.addLombokGeneratedAnnotation = true
13 changes: 0 additions & 13 deletions backend/src/docs/asciidoc/categories.adoc

This file was deleted.

68 changes: 68 additions & 0 deletions backend/src/docs/asciidoc/errors.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
== ์—๋Ÿฌ ์ƒ์„ธ


[width="100%",cols="^10,^10,^40,^40",options="header"]
|====
|๋ถ„๋ฅ˜|์ฝ”๋“œ|๋ฉ”์‹œ์ง€|์„ค๋ช…
|A|001|ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.|์ด์ƒํ•œ ํ† ํฐ์œผ๋กœ ์ ‘๊ทผํ•œ ๊ฒฝ์šฐ
||002|๋งŒ๋ฃŒ๋œ ํ† ํฐ์ž…๋‹ˆ๋‹ค.|ํ† ํฐ์˜ ํ˜•์‹์€ ๋งž์œผ๋‚˜ ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ
||003|์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.|์œ ์ € ๊ฐœ์ธ์ ์ธ ๋™์ž‘์„ ์š”์ฒญํ•˜๋Š” api์—์„œ ๋ฐœ์ƒ
||004|AccessToken์„ ๋ฐ›์•„์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.|์†Œ์…œ์—๊ฒŒ ํ† ํฐ์„ ๋ฐ›์•„์˜ค๋Š”๋ฐ ์‹คํŒจ
||005|์œ ์ €์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.|์†Œ์…œ์—๊ฒŒ ์œ ์ €์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š”๋ฐ ์‹คํŒจ
||006|Admin ๊ถŒํ•œ์ด ์•„๋‹ˆ๊ธฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.|๊ด€๋ฆฌ์ž api ๊ด€๋ จ
||007|์กด์žฌํ•˜์ง€ ์•Š๋Š” ์†Œ์…œ ๋กœ๊ทธ์ธ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.|์ง€์›ํ•˜์ง€ ์•Š๋Š” ์†Œ์…œ๋กœ๊ทธ์ธ์œผ๋กœ ์š”์ฒญ
|U|001|ํ•ด๋‹น ์œ ์ €๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.|ํ† ํฐ์€ ์œ ํšจํ•˜๋‚˜ ์œ ์ €๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
||002|ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ˆ˜์ •์€ ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •
||003|์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํšŒ์› ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •, ๋‹‰๋„ค์ž„ ๊ฒ€์‚ฌ
||004|ํšŒ์›๋ช…์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •, ๋‹‰๋„ค์ž„ ๊ฒ€์‚ฌ
||005|์ด๋ฆ„์€ ์ตœ์†Œ 1์ž ์ด์ƒ, ์ตœ๋Œ€ 20์ž๊นŒ์ง€ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •, ๋‹‰๋„ค์ž„ ๊ฒ€์‚ฌ
||006|ํšŒ์›๋ช…์— ๊ณต๋ฐฑ์€ ํฌํ•จ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.|์ˆ˜์ •, ๋‹‰๋„ค์ž„ ๊ฒ€์‚ฌ
||007|ํšŒ์› ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœํ•„ ์‚ฌ์ง„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •
||008|ํšŒ์› ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์†Œ๊ฐœ๊ธ€์€ ์ตœ์†Œ 0์ž ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •, ๋‹‰๋„ค์ž„ ๊ฒ€์‚ฌ
||009|์†Œ๊ฐœ๊ธ€์€ ์ตœ๋Œ€ 255์ž๊นŒ์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •, ๋‹‰๋„ค์ž„ ๊ฒ€์‚ฌ
||010|10MB ์ดํ•˜์˜ ํŒŒ์ผ๋งŒ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.|ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ˆ˜์ •
||011|์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŒŒ์ผ ํฌ๊ธฐ๋Š” 100MB ์ž…๋‹ˆ๋‹ค.|ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ˆ˜์ •
|W|001|๋ฌธ์ œ์ง‘ ์ด๋ฆ„์€ 30์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||002|๋ฌธ์ œ์ง‘ ์ด๋ฆ„์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||003|ํƒœ๊ทธ ์•„์ด๋””๋Š” ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||004|ํƒœ๊ทธ ์•„์ด๋””๋Š” 0์ด์ƒ์˜ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||005|ํƒœ๊ทธ ์ด๋ฆ„์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||006|ํƒœ๊ทธ๋Š” 20์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||007|๋ฌธ์ œ์ง‘์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ์ˆ˜๋Š” ์ตœ๋Œ€ 3๊ฐœ ์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||008|๋ฌธ์ œ์ง‘์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ํƒœ๊ทธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •
||009|๋ฌธ์ œ์ง‘์˜ ๊ณต๊ฐœ ์—ฌ๋ถ€๋Š” ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •
||010|์นด๋“œ ๊ฐœ์ˆ˜๋Š” ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •
||011|์นด๋“œ ๊ฐœ์ˆ˜๋Š” 0์ด์ƒ ์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •
||012|์ข‹์•„์š” ๊ฐœ์ˆ˜๋Š” ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •
||013|์ข‹์•„์š” ๊ฐœ์ˆ˜๋Š” 0์ด์ƒ ์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •
||014|ํ•ด๋‹น ๋ฌธ์ œ์ง‘์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.|๋ฌธ์ œ์ง‘ id๋กœ ์ ‘๊ทผํ•˜๋Š” api
||015|๊ณต๊ฐœ ๋ฌธ์ œ์ง‘์ด ์•„๋‹™๋‹ˆ๋‹ค.|๊ณต๊ฐœ ๋ฌธ์ œ์ง‘ ์ƒ์„ธ ์กฐํšŒ
||016|์นด๋“œ๋ฅผ ๋‚ด ๋ฌธ์ œ์ง‘์œผ๋กœ ์˜ฎ๊ธฐ๋ ค๋ฉด ์นด๋“œ ์•„์ด๋””๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.|๊ฐ€์ ธ๊ฐ€๊ธฐ
|C|001|ํ•ด๋‹น ์นด๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.|์นด๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์ธ๋ฐ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ
||002|์งˆ๋ฌธ์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||003|์งˆ๋ฌธ์€ ์ตœ๋Œ€ 2000์ž๊นŒ์ง€ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||004|๋‹ต๋ณ€์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||005|๋‹ต๋ณ€์€ ์ตœ๋Œ€ 2000์ž๊นŒ์ง€ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||006|๋ฌธ์ œ์ง‘ ์•„์ด๋””๋Š” ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||007|๋ฌธ์ œ์ง‘ ์•„์ด๋””๋Š” 0์ด์ƒ์˜ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.|์ถ”๊ฐ€, ์ˆ˜์ •
||008|๋งˆ์ฃผ์นœ ํšŸ์ˆ˜๋Š” ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •
||009|๋งˆ์ฃผ์นœ ํšŸ์ˆ˜๋Š” 0์ด์ƒ ์ž…๋‹ˆ๋‹ค.|์ˆ˜์ •
||010|์นด๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ๋งˆํฌ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •
||011|์นด๋“œ๋ฅผ ์ˆ˜์ • ์œ„ํ•ด์„œ๋Š” ๋˜ ๋ณด๊ธฐ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.|์ˆ˜์ •
||012|์œ ํšจํ•˜์ง€ ์•Š์€ ๋˜ ๋ณด๊ธฐ ์นด๋“œ ๋“ฑ๋ก ์š”์ฒญ์ž…๋‹ˆ๋‹ค.|๋˜ ๋ณด๊ธฐ
|Q|001|ํ€ด์ฆˆ๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ๋ฌธ์ œ์ง‘ ์•„์ด๋””๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.|ํ€ด์ฆˆ ์ƒ์„ฑ
||002|ํ€ด์ฆˆ์˜ ๊ฐœ์ˆ˜๋Š” 10 ~ 30 ์‚ฌ์ด์˜ ์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.|ํ€ด์ฆˆ ์ƒ์„ฑ
||003|ํ€ด์ฆˆ์— ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.|ํ€ด์ฆˆ ์ƒ์„ฑ
|S|001|ํŽ˜์ด์ง€์˜ ์‹œ์ž‘ ๊ฐ’์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.|๋ฌธ์ œ์ง‘ ๊ฒ€์ƒ‰
||002|์œ ํšจํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ํฌ๊ธฐ : 1 ~ 100|๋ฌธ์ œ์ง‘ ๊ฒ€์ƒ‰
||003|์œ ํšจํ•˜์ง€ ์•Š์€ ์ •๋ ฌ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ์ •๋ ฌ ์กฐ๊ฑด : date, name, count, heart|๋ฌธ์ œ์ง‘ ๊ฒ€์ƒ‰
||004|์œ ํšจํ•˜์ง€ ์•Š์€ ์ •๋ ฌ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ์ •๋ ฌ ๋ฐฉ์‹ : ASC, DESC|๋ฌธ์ œ์ง‘ ๊ฒ€์ƒ‰
||005|์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒ€์ƒ‰ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฒ€์ƒ‰ ํƒ€์ž„ : name, tag, user|๋ฌธ์ œ์ง‘ ๊ฒ€์ƒ‰
||006|๊ฒ€์ƒ‰์–ด๋Š” null์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.|๋ฌธ์ œ์ง‘, ํƒœ๊ทธ, ์œ ์ € ๊ฒ€์ƒ‰
||007|๊ฒ€์ƒ‰์–ด๋Š” 30์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.|๋ฌธ์ œ์ง‘, ํƒœ๊ทธ, ์œ ์ € ๊ฒ€์ƒ‰
||008|๊ฒ€์ƒ‰์–ด๋Š” 1์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.|๋ฌธ์ œ์ง‘, ํƒœ๊ทธ, ์œ ์ € ๊ฒ€์ƒ‰
||009|๊ธˆ์ง€์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.|๋ฌธ์ œ์ง‘, ํƒœ๊ทธ, ์œ ์ € ๊ฒ€์ƒ‰
|E|001|์„œ๋ฒ„์—๋Ÿฌ|
||002|ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.|query parameter ๊ด€๋ จ ์—๋Ÿฌ
|X|001|์ •์˜๋˜์ง€ ์•Š์€ ์—๋Ÿฌ|
|====
6 changes: 5 additions & 1 deletion backend/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@ include::cards.adoc[]

include::quizzes.adoc[]

include::search.adoc[]

include::admin.adoc[]

include::login.adoc[]

include::user.adoc[]
include::user.adoc[]

include::errors.adoc[]
9 changes: 8 additions & 1 deletion backend/src/docs/asciidoc/login.adoc
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
== ๋กœ๊ทธ์ธ API

=== Github ์†Œ์…œ ๋กœ๊ทธ์ธ
=== ์†Œ์…œ ๋กœ๊ทธ์ธ
==== ์š”์ฒญ
include::{snippets}/login-success/http-request.adoc[]
==== ์‘๋‹ต
include::{snippets}/login-success/http-response.adoc[]
|===
| Parameter | ์„ค๋ช…

| SocialType
| ์†Œ์…œ ๋กœ๊ทธ์ธ ์ข…๋ฅ˜ (github, google)

|===
4 changes: 2 additions & 2 deletions backend/src/docs/asciidoc/quizzes.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ include::{snippets}/quizzes-post-success/http-response.adoc[]

=== ํ€ด์ฆˆ ์ƒ์„ฑ ์‹คํŒจ - ํ•ด๋‹น id์˜ ๋ฌธ์ œ์ง‘์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ.
==== ์š”์ฒญ
include::{snippets}/quizzes-post-fail-invalid-category-id/http-request.adoc[]
include::{snippets}/quizzes-post-fail-invalid-workbook-id/http-request.adoc[]
==== ์‘๋‹ต
include::{snippets}/quizzes-post-fail-invalid-category-id/http-response.adoc[]
include::{snippets}/quizzes-post-fail-invalid-workbook-id/http-response.adoc[]

=== ๋น„ํšŒ์›์šฉ ํ€ด์ฆˆ ์ƒ์„ฑํ•˜๊ธฐ
==== ์š”์ฒญ
Expand Down
Loading

0 comments on commit 4a7ef0f

Please sign in to comment.