Skip to content

likelion-backendschool/FinalProject_HanSeungYeon_team7

Repository files navigation

MUT Books

  • Mut Books ๋Š” eBook ๋งˆ์ผ“๊ณผ eBook๋ฆฌ๋”๋กœ ์ด๋ฃจ์–ด์ง„ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

๐Ÿ“Stack

Stack
BackEnd
Build Tool
Database
Infra
FrontEnd
Etc

๐Ÿ“ERD

๐Ÿ“Features

ํšŒ์›

  • ํšŒ์›๊ฐ€์ž…
    • ๊ฐ€์ž… ์™„๋ฃŒ์‹œ ์ถ•ํ•˜๋ฉ”์ผ ๋ฐœ์†ก
      • Gmail SMTP ๋ฉ”์ผ ๋ฐœ์†ก
    • ๊ฐ€์ž… ์™„๋ฃŒ์‹œ ์ž๋™ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ (์ฐธ๊ณ )
  • ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ
    • Spring Security ์‚ฌ์šฉ
    • ๋กœ๊ทธ์ธ: /member/login
    • ๋กœ๊ทธ์•„์›ƒ: /member/logout
  • ๋‚ด ํ”„๋กœํ•„ ์กฐํšŒ
    • ํšŒ์› ๊ธฐ๋ณธ์ •๋ณด ์กฐํšŒ(์•„์ด๋””, ์ด๋ฉ”์ผ, ์ž‘๊ฐ€๋ช…)
  • ํšŒ์› ๊ธฐ๋ณธ์ •๋ณด ์ˆ˜์ •
    • ์ด๋ฉ”์ผ, ์ž‘๊ฐ€๋ช… ์ˆ˜์ • ๊ฐ€๋Šฅ
    • ์ˆ˜์ • ์™„๋ฃŒ ํ›„, ์„ธ์…˜๊ฐ’(MemberContext) ๊ฐ•์ œ ์ˆ˜์ •
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
    • ํ˜„์žฌ ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ์ž…๋ ฅํผ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
  • ์•„์ด๋”” ์ฐพ๊ธฐ
    • ์ด๋ฉ”์ผ ๋กœ ์•„์ด๋”” ์ฐพ๊ธฐ
    • ๊ฒฐ๊ณผ ํŽ˜์ด์ง€์—์„œ ์•„์ด๋”” ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ
    • ์•„์ด๋”” + ์ด๋ฉ”์ผ ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ
    • ํ•ด๋‹น ๊ณ„์ •์˜ ์ด๋ฉ”์ผ๋กœ ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐœ๊ธ‰ -> ๋ฐœ๊ธ‰๋œ ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • ์ฒ˜๋ฆฌ(DB ๋ฐ˜์˜)
      • ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ: UUID 10์ž๋ฆฌ ๋žœ๋ค

๊ธ€

  • ๊ธ€ ์ž‘์„ฑ
    • Toast UI Editor ์ ์šฉํ•˜์—ฌ ๋‚ด์šฉ ์ž…๋ ฅ
    • ๋งˆํฌ๋‹ค์šด ์›๋ฌธ, ๋ Œ๋”๋ง ๊ฒฐ๊ณผ(HTML) ๋ชจ๋‘ DB์— ์ €์žฅ(์ฐธ๊ณ )
  • ๊ธ€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
    • ๋ฒˆํ˜ธ, ์ œ๋ชฉ, ํ•ด์‹œํƒœ๊ทธ, ์ž‘์„ฑ์ž, ์ž‘์„ฑ๋‚ ์งœ, ์ˆ˜์ •๋‚ ์งœ ํ‘œ์‹œ
    • QueryDSL ์ด์šฉ
      1. ๋‚ด ๊ธ€ ๋ชจ๋‘ ์กฐํšŒ
        • ๋ฉ”๋‰ด๋ฐ” "๋‚ด ๊ธ€" ํด๋ฆญ -> 1๋ฒˆ ํŽ˜์ด์ง€๋กœ ์ด๋™
      2. ํ•ด์‹œํƒœ๊ทธ(ํ‚ค์›Œ๋“œ)์™€ ๊ด€๋ จ๋œ ๋‚ด ๊ธ€ ๋ชจ๋‘ ์กฐํšŒ
        • 1๋ฒˆ ํŽ˜์ด์ง€์˜ ๊ฒŒ์‹œ๊ธ€ "ํ•ด์‹œํƒœ๊ทธ" ํด๋ฆญ -> 2๋ฒˆ ํŽ˜์ด์ง€๋กœ ์ด๋™
  • ๊ธ€ ์ƒ์„ธ์กฐํšŒ
    • ์ œ๋ชฉ, ๋‚ด์šฉ, ํ•ด์‹œํƒœ๊ทธ ํ‘œ์‹œ
    • Toast UI Viewer ์ ์šฉํ•˜์—ฌ ๋‚ด์šฉ ์ถœ๋ ฅ
  • ๊ธ€ ์ˆ˜์ •
    • ์ œ๋ชฉ, ๋‚ด์šฉ, ํ•ด์‹œํƒœ๊ทธ ์ˆ˜์ • ๊ฐ€๋Šฅ
    • Toast UI Editor ์ ์šฉํ•˜์—ฌ ๋‚ด์šฉ ์ž…๋ ฅ
    • ์ˆ˜์ • ์™„๋ฃŒ์‹œ ํ˜„์žฌ์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ •๋‚ ์งœ ๋ณ€๊ฒฝ
  • ๊ธ€ ์‚ญ์ œ
    • ๊ธ€ ์‚ญ์ œ์‹œ ๊ด€๋ จ ํ•ด์‹œํƒœ๊ทธ๋„ ์ž๋™ ์‚ญ์ œ ์ฒ˜๋ฆฌ

๋„์„œ(์ƒํ’ˆ)

  • ๋„์„œ ๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ ๊ธฐ๋Šฅ์€ ์ž‘๊ฐ€ ํšŒ์›๋งŒ ์ด์šฉO(์ˆ˜์ •/์‚ญ์ œ๋Š” ๋ณธ์ธ๋งŒ ๊ฐ€๋Šฅ)
  • ๋„์„œ ๋ฆฌ์ŠคํŠธ/์ƒ์„ธ์กฐํšŒ ๊ธฐ๋Šฅ์€ ๋ชจ๋‘ ์ด์šฉO

  • ๋„์„œ ๋“ฑ๋ก
    • ๊ธ€ ํ•ด์‹œํƒœ๊ทธ๋ฅผ ์„ ํƒํ•˜๋ฉด ๋‚ด ๊ธ€ ์ค‘ ํ•ด๋‹น ํ•ด์‹œํƒœ๊ทธ๊ฐ€ ๋ถ™์€ ๋ชจ๋“  ๊ธ€์„ ์ž๋™์œผ๋กœ 1๊ฐœ์˜ ์ƒํ’ˆ์œผ๋กœ ๋“ฑ๋ก
    • [ํผ] ์ƒํ’ˆ๋ช…, ์„ค๋ช…, ๊ถŒ์žฅ ํŒ๋งค๊ฐ€, ๊ธ€ ํ•ด์‹œํƒœ๊ทธ ํ‚ค์›Œ๋“œ(id), ๋„์„œ ํ•ด์‹œํƒœ๊ทธ ํ‚ค์›Œ๋“œ
      • ์„ค๋ช… ๋ถ€๋ถ„์— ToastUI Editor ์ ์šฉX
      • ๊ธ€ ํ•ด์‹œํƒœ๊ทธ ํ‚ค์›Œ๋“œ๋Š” 1๊ฐœ๋งŒ ์„ ํƒ ๊ฐ€๋Šฅ
      • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„์„œ ํ•ด์‹œํƒœ๊ทธ ํ‚ค์›Œ๋“œ ๋“ฑ๋ก ๊ฐ€๋Šฅ
      • ํ•ด์‹œํƒœ๊ทธ ํ‚ค์›Œ๋“œ & ๊ด€๋ จ ๊ฒŒ์‹œ๊ธ€ ๊ฐœ์ˆ˜ ํ‘œ์‹œ
        • QueryDSL ์ด์šฉ
        • ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์˜ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ ๊ฐ’์„ select ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, List๋กœ ๋ฐ˜ํ™˜ ๋ถˆ๊ฐ€ โ†’ PostKeywordDto๋ฅผ ์ •์˜ํ•ด List ๋ฐ˜ํ™˜(์ฐธ๊ณ )
    • ๋“ฑ๋ก ์™„๋ฃŒ์‹œ ๋„์„œ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • ๋„์„œ ์ˆ˜์ •
    • ๊ธ€ ํ‚ค์›Œ๋“œ ์ˆ˜์ • X
    • ์ƒํ’ˆ๋ช…, ๊ฐ€๊ฒฉ, ์„ค๋ช…, ๋„์„œ ํ•ด์‹œํƒœ๊ทธ ์ˆ˜์ • O
    • ์ˆ˜์ • ์™„๋ฃŒ์‹œ ๋„์„œ ์ƒ์„ธํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • ๋„์„œ ์ƒ์„ธ์กฐํšŒ
    • [UI] ์ƒํ’ˆ ๋žœ๋ค ์ด๋ฏธ์ง€, ์ƒํ’ˆ๋ช…, ์ž‘๊ฐ€๋ช…, ๋“ฑ๋ก์ผ์ž, ํŒ๋งค๊ฐ€, ์„ค๋ช…, ๋„์„œ ํ•ด์‹œํƒœ๊ทธ ํ‚ค์›Œ๋“œ ํ‘œ์‹œ
      • ๋žœ๋ค ์ด๋ฏธ์ง€ ํ‘œ์‹œ Unsplash ์‚ฌ์šฉ(์ฐธ๊ณ )
      • ์„ค๋ช… ๋ถ€๋ถ„์— ToastUI Editor Viwer ์ ์šฉX
    • [UI] ์ž‘๊ฐ€ ๋ณธ์ธ์—๊ฒŒ๋งŒ ์ˆ˜์ •, ์‚ญ์ œ ๋ฒ„ํŠผ ํ‘œ์‹œ
    • ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ตฌํ˜„X
  • ๋„์„œ ๋ฆฌ์ŠคํŠธ
    • [UI] ๋ชจ๋“  ์ƒํ’ˆ ์ •๋ณด(์ƒํ’ˆ ๋žœ๋ค ์ด๋ฏธ์ง€, ์ƒํ’ˆ๋ช…, ๋“ฑ๋ก ์ผ์ž, ์ž‘๊ฐ€๋ช…, ํŒ๋งค๊ฐ€, ํ•ด์‹œํƒœ๊ทธ) ์ตœ์‹ ์ˆœ ๋ฆฌ์ŠคํŒ…
      • ๋žœ๋ค ์ด๋ฏธ์ง€ ํ‘œ์‹œ Unsplash ์‚ฌ์šฉ
    • ์ƒํ’ˆ๋ช… ํด๋ฆญ์‹œ ํ•ด๋‹น ์ƒํ’ˆ ์ƒ์„ธ์กฐํšŒ ํŽ˜์ด์ง€๋กœ ์ด๋™
    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฒ„ํŠผ ํ‘œ์‹œ
  • ๋„์„œ ์‚ญ์ œ
    • ์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ confirm ์ฐฝ์œผ๋กœ ์‚ญ์ œ ์—ฌ๋ถ€๋ฅผ ํ•œ ๋ฒˆ ๋” ์ฒดํฌ
    • ์‚ญ์ œ ์™„๋ฃŒ์‹œ ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ

์žฅ๋ฐ”๊ตฌ๋‹ˆ

  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์€ ๋กœ๊ทธ์ธํ•œ ํšŒ์›๋งŒ ์ด์šฉO

  • ํ’ˆ๋ชฉ ๋ฆฌ์ŠคํŠธ
    • ๋ฉ”๋‰ด๋ฐ”์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€๋กœ ์ด๋™
    • [UI] ์ƒํ’ˆ ์ •๋ณด(์ƒํ’ˆ ๋žœ๋ค ์ด๋ฏธ์ง€, ์ƒํ’ˆ๋ช…, ์ž‘๊ฐ€๋ช…, ๋“ฑ๋ก์ผ์ž, ๊ฐ€๊ฒฉ) ํ‘œ์‹œ
      • ๋žœ๋ค ์ด๋ฏธ์ง€ ํ‘œ์‹œ Unsplash ์‚ฌ์šฉ
      • ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธด ์ƒํ’ˆ์ด ์—†์„ ๋•Œ๋Š” ์ƒํ’ˆ ์—†์Œ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ํ‘œ์‹œ
    • [UI] ์ „์ฒด ์„ ํƒ ์ฒดํฌ๋ฐ•์Šค, ํ’ˆ๋ชฉ ๊ฐœ๋ณ„ ์ฒดํฌ๋ฐ•์Šค, ํ’ˆ๋ชฉ ์‚ญ์ œ ๊ฐœ๋ณ„ ๋ฒ„ํŠผ, ์ฃผ๋ฌธํ•˜๊ธฐ ๋ฒ„ํŠผ ํ‘œ์‹œ
      • Javascript ๋กœ ์ „์ฒด ์„ ํƒ ์ฒดํฌ๋ฐ•์Šค์™€ ๊ฐœ๋ณ„ ์ฒดํฌ๋ฐ•์Šค ์—ฐ๋™
    • ์ด๋ฏธ์ง€ ํด๋ฆญ์‹œ ํ•ด๋‹น ์ƒํ’ˆ ์ƒ์„ธ์กฐํšŒ ํŽ˜์ด์ง€๋กœ ์ด๋™
  • ํ’ˆ๋ชฉ ์ถ”๊ฐ€
    • ๋„์„œ ๋ชฉ๋ก ํŽ˜์ด์ง€์˜ ๊ฐ ์ƒํ’ˆ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ํ’ˆ๋ชฉ ์ถ”๊ฐ€
    • ํšŒ์›์€ ๊ฐ™์€ ์ƒํ’ˆ 1๊ฐœ๋งŒ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€ ๊ฐ€๋Šฅ(๊ณ„์† ๋‹ด์•„๋„ ์ตœ๋Œ€ ์ˆ˜๋Ÿ‰ = 1๊ฐœ)
    • ํ’ˆ๋ชฉ ์ถ”๊ฐ€ ์™„๋ฃŒ์‹œ ํ’ˆ๋ชฉ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • ํ’ˆ๋ชฉ ์‚ญ์ œ
    • ํ’ˆ๋ชฉ ์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ confirm ์œผ๋กœ ํ™•์ธ ํ›„ ์‚ญ์ œ
    • ํ’ˆ๋ชฉ ์‚ญ์ œ ์™„๋ฃŒ์‹œ ํ’ˆ๋ชฉ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ

์ฃผ๋ฌธ/๊ฒฐ์ œ

  • ์ฃผ๋ฌธ/๊ฒฐ์ œ ๊ธฐ๋Šฅ์€ ๋กœ๊ทธ์ธํ•œ ํšŒ์›๋งŒ ์ด์šฉO
  • ์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ/์ƒ์„ธ์กฐํšŒ/์ทจ์†Œ/๊ฒฐ์ œ/ํ™˜๋ถˆ ์ฒ˜๋ฆฌ๋Š” ์ฃผ๋ฌธ์ž ๋ณธ์ธ ๊ฒƒ๋งŒ ๊ฐ€๋Šฅ

  • ์ฃผ๋ฌธ ์ƒ์„ฑ
    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€์—์„œ ์ฃผ๋ฌธํ•  ํ’ˆ๋ชฉ์„ ์„ ํƒ โ†’ ์ฃผ๋ฌธํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญ โ†’ ์ฃผ๋ฌธ ์ƒ์„ฑ(๋‹จ์ผ ์ฃผ๋ฌธ ๋ฏธ์ง€์›)
      • ์„ ํƒํ•œ cartItemId ๋“ค์„ String ์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋ฌธ ์ƒ์„ฑ ํผ ๋ฐœ์†ก
      • โ€˜,โ€™ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•œ CartItemIds String[] โ†’ List ์œผ๋กœ ๋ณ€ํ™˜(์ฐธ๊ณ )
  • ์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ
    • ํšŒ์› ๋ณธ์ธ์˜ ์ฃผ๋ฌธ ๋‚ด์—ญ ์ตœ์‹ ์ˆœ ๋ฆฌ์ŠคํŒ…
    • [UI] ์ฃผ๋ฌธ์ผ์ž, ์ฃผ๋ฌธ ์ƒํƒœ, ์ฃผ๋ฌธ ํ’ˆ๋ชฉ๋“ค ์ •๋ณด(์ƒํ’ˆ ๋žœ๋ค ์ด๋ฏธ์ง€, ์ƒํ’ˆ๋ช…, ๊ฐ€๊ฒฉ) ํ‘œ์‹œ
  • ์ฃผ๋ฌธ ์ƒ์„ธ
    • [UI] ์ฃผ๋ฌธ ์ƒํ’ˆ ์ •๋ณด(์ƒํ’ˆ ๋žœ๋ค ์ด๋ฏธ์ง€, ์ƒํ’ˆ๋ช…, ๊ฐ€๊ฒฉ), ์ฃผ๋ฌธ ์ •๋ณด(ํšŒ์› id, ์ด ์ƒํ’ˆ์ˆ˜, ์ด ์ƒํ’ˆ๊ธˆ์•ก), ๊ฒฐ์ œ ์ •๋ณด(์ด ์ƒํ’ˆ๊ธˆ์•ก, ์บ์‹œ ์‚ฌ์šฉ๊ธˆ์•ก, pg ๊ฒฐ์ œ ๊ธˆ์•ก), ํ™˜๋ถˆ ๊ทœ์ • ํ‘œ์‹œ
    • ์ ‘๊ทผ ๋ฐฉ์‹ 2๊ฐ€์ง€
      1. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€์—์„œ ์ฃผ๋ฌธํ•˜๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ
      2. ์ฃผ๋ฌธ๋‚ด์—ญ ํŽ˜์ด์ง€์—์„œ ์ƒ์„ธ๋ณด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ
    • ์ฃผ๋ฌธ ์™„๋ฃŒ ์ƒํƒœ
      • [UI] ๋ณด์œ  ์˜ˆ์น˜๊ธˆ, ์‚ฌ์šฉํ•  ์˜ˆ์น˜๊ธˆ ์ž…๋ ฅํผ ํ‘œ์‹œ
      • [UI] ์ฃผ๋ฌธ ์ทจ์†Œ ๋ฒ„ํŠผ, ๊ฒฐ์ œ ํ•˜๊ธฐ ๋ฒ„ํŠผ ํ‘œ์‹œ
    • ๊ฒฐ์ œ ์™„๋ฃŒ ์ƒํƒœ
      • [UI] ํ™˜๋ถˆ์š”์ฒญ ๋ฒ„ํŠผ ํ‘œ์‹œ
      • [UI] ํ‘œ์‹œ
    • ์ทจ์†Œ ์™„๋ฃŒ/ํ™˜๋ถˆ ์™„๋ฃŒ ์ƒํƒœ
      • ์ •๋ณด ์™ธ์— ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œX
  • ์ฃผ๋ฌธ ์ทจ์†Œ
    • ์ฃผ๋ฌธ ์™„๋ฃŒ ์ƒํƒœ์ผ ๋•Œ๋งŒ ์ฃผ๋ฌธ ์ทจ์†Œ ์š”์ฒญ ๊ฐ€๋Šฅ
    • ํ•ด๋‹น ์ฃผ๋ฌธ ๊ฑด์— ํฌํ•จ๋œ ์ฃผ๋ฌธ ํ’ˆ๋ชฉ ์ „์ฒด ์ทจ์†Œ ๋ฐฉ์‹ ์ง€์›
    • ์ทจ์†Œ ์™„๋ฃŒ์‹œ ์ฃผ๋ฌธ ๋‚ด์—ญ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • ๊ฒฐ์ œ ์ฒ˜๋ฆฌ
    • ์ฃผ๋ฌธ ์ƒ์„ธํŽ˜์ด์ง€์—์„œ ๊ฒฐ์ œ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๊ฒฐ์ œ ์š”์ฒญ(์ฃผ๋ฌธ ์ƒ์„ฑํ›„ ๋ฏธ๊ฒฐ์ œ์ƒํƒœ์ผ ๋•Œ๋งŒ ์š”์ฒญ ๊ฐ€๋Šฅ, ์ทจ์†Œ/ํ™˜๋ถˆ ์‹œ ์š”์ฒญ ๋ถˆ๊ฐ€)
    • Toss Payments ์—ฐ๋™(์ฐธ๊ณ )
    • 3๊ฐ€์ง€ ๊ฒฐ์ œ ๋ฐฉ์‹ ์ง€์›(1๊ณผ 2, 3 ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ)
      • ์˜ˆ์น˜๊ธˆ ์ „์•ก ๊ฒฐ์ œ(PG ๊ฒฐ์ œ skip)
      • Toss Payments ์นด๋“œ ์ „์•ก ๊ฒฐ์ œ(์˜ˆ์น˜๊ธˆ ์ถฉ์ „ ๊ธฐ๋ก ๋ณด์กด)
      • ์˜ˆ์น˜๊ธˆ + Toss Payments ์นด๋“œ ๊ฒฐ์ œ(ํ˜ผํ•ฉ ๋ฐฉ์‹)
  • ํ™˜๋ถˆ ์ฒ˜๋ฆฌ
    • ์ฃผ๋ฌธ ์ „์ฒด ํ™˜๋ถˆ ๋ฐฉ์‹ ์ง€์›(๋ถ€๋ถ„ ํ™˜๋ถˆ ๋ฏธ์ง€์›)
    • ํ™˜๋ถˆ ๊ทœ์ •: ๊ฒฐ์ œ ์™„๋ฃŒ ํ›„ 10๋ถ„ ์ด๋‚ด & ๋„์„œ ์—ด๋žŒ ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ(1๊ฐœ๋ผ๋„ ํ™˜๋ถˆ ๊ทœ์ •์— ์–ด๊ธ‹๋‚˜๋ฉด ํ™˜๋ถˆ ๋ถˆ๊ฐ€)
    • 3๊ฐ€์ง€ ํ™˜๋ถˆ ๋ฐฉ์‹ ์ง€์›(1๊ณผ 2,3 ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ)
      1. ์˜ˆ์น˜๊ธˆ ์ „์•ก ํ™˜๋ถˆ
      2. Toss Payments ์นด๋“œ ์ „์•ก ํ™˜๋ถˆ(์˜ˆ์น˜๊ธˆ ํ™˜๋ถˆ ๊ธฐ๋ก ๋ณด์กด)
      3. ์˜ˆ์น˜๊ธˆ ํ™˜๋ถˆ + Toss Payments ์นด๋“œ ํ™˜๋ถˆ(ํ˜ผํ•ฉ ๋ฐฉ์‹)
    • ํ™˜๋ถˆ ์™„๋ฃŒ์‹œ MyBook ์—์„œ ๊ตฌ๋งค ์ƒํ’ˆ ์‚ญ์ œ

๊ด€๋ฆฌ์ž

  • username ์ด admin ์ธ ํšŒ์› 1๋ช…์„ ๊ด€๋ฆฌ์ž(authLevel 7)๋กœ ์ง€์ •

  • ๊ด€๋ฆฌ์ž ํ™ˆ
    • ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ๊ฐ€์ง„ ํšŒ์›๋งŒ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ์ ‘์† ๊ฐ€๋Šฅ

์ •์‚ฐ

  • ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑํผ

    • select box ๋…„, ์›” ์„ ํƒ ํ›„ ํผ ์ „์†ก(์ฐธ๊ณ )
    • ์ •์‚ฐ๋ฐ์ดํ„ฐ ์ƒ์„ฑ, ์กฐํšŒ 2๊ฐ€์ง€ ํผ ์ „์†ก ์ฒ˜๋ฆฌ
  • ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ

    • ๊ด€๋ฆฌ์ž๊ฐ€ ์›” ๋‹จ์œ„๋กœ ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    • ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์™„๋ฃŒ ํ›„, ์ •์‚ฐ ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    1. select box๋กœ ๋…„/์›”์„ ์„ ํƒ ํ›„ ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ˆ˜๋™ ์ƒ์„ฑ

      1. ํ˜„์žฌ ๋‚ ์งœ๊ฐ€ ์„ ํƒํ•œ ๋…„/์›”์˜ ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ๊ฐ€๋Šฅํ•œ ๋‚ ์งœ์ธ์ง€ ๊ฒ€์ฆ
        • 2022๋…„ 9์›” ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋Š” 2022๋…„ 10์›” 15์ผ ์ƒˆ๋ฒฝ 4์‹œ ์ดํ›„ ์ƒ์„ฑ ๊ฐ€๋Šฅ
        • LocalDateTime โ†’ String ์œผ๋กœ ์ถœ๋ ฅ(์ฐธ๊ณ )
      2. ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๋‚ ์งœ ๋ฒ”์œ„ ๊ตฌํ•˜๊ธฐ
        • Calendar ๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น ๋…„, ์›”์˜ ๋ง์ผ ๊ตฌํ•˜๊ธฐ(์ฐธ๊ณ )
        • LocalDateTime ํ•˜๋ฃจ์˜ ์‹œ์ž‘, ์ข…๋ฃŒ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(์ฐธ๊ณ )
      3. ํ•ด๋‹น ๋‚ ์งœ ๋ฒ”์œ„์˜ ์ฃผ๋ฌธ ํ’ˆ๋ชฉ(OrderItem) ๋ฐ์ดํ„ฐ ์กฐํšŒ
      4. ์ฃผ๋ฌธ ํ’ˆ๋ชฉ ๋ฐ์ดํ„ฐ(OrderItem) -> ์ •์‚ฐ ๋ฐ์ดํ„ฐ(RebateOrderItem) ๋ณ€ํ™˜
      5. ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ DB์— ์ €์žฅ
    2. Spring Batch + Scheduler ๋ฅผ ์ด์šฉํ•œ ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ž๋™ ์ƒ์„ฑ

      Spring Batch ๊ฐœ๋… ์ •๋ฆฌ

      • ๋งค๋‹ฌ 15์ผ ์˜ค์ „ 4์‹œ 0๋ถ„ 0์ดˆ์— ์ €๋ฒˆ ๋‹ฌ(1์ผ~๋ง์ผ)์˜ ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฐ์น˜ ์‹คํ–‰
        • Spring Batch
          1. spring-batch ์˜์กด์„ฑ ์ถ”๊ฐ€(build.gradle), batch ์„ค์ • ์ถ”๊ฐ€(application.yml)
          2. ์•ฑ์— @EnableBatchProcessing ์ถ”๊ฐ€
          3. ์ €๋ฒˆ ๋‹ฌ(1์ผ~๋ง์ผ)์˜ ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ Job, Step ์ถ”๊ฐ€
        • Scheduler
          • Spring-boot Framework Scheduler(๋‚ด์žฅ ์Šค์ผ€์ฅด๋Ÿฌ)์˜ @EnableScheduling, @Scheduled ๋ฅผ ์ด์šฉ
            • ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐฐ์น˜๊ฐ€ 15์ผ ์˜ค์ „ 4์‹œ์— ์‹คํ–‰๋˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋งค์ผ ์˜ค์ „ 4์‹œ์— ๋ฐฐ์น˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•จ(์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น JobParameter ๋กœ ๋ฐฐ์น˜ ๋‹ค์‹œ ์‹คํ–‰)
              • @Scheduled(cron = "0 0 4 15 * *") : ๋งค๋‹ฌ 15์ผ ์˜ค์ „ 4์‹œ 0๋ถ„ 0์ดˆ ์‹คํ–‰
              • @Scheduled(cron = "0 0 4 * * *") : ๋งค์ผ ์˜ค์ „ 4์‹œ 0๋ถ„ 0์ดˆ ์‹คํ–‰
            • JobParameters ์— year, month ๊ฐ’์„ ๋‹ด์•„ JobLauncher๋กœ Job ์‹คํ–‰
              • JobParameter ์—์„œ๋Š” ๋‚ ์งœ โ†’ String ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ(์ฐธ๊ณ )
  • ์ •์‚ฐ ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ

    • [UI] ์ •์‚ฐ๋ฒˆํ˜ธ, ํ’ˆ๋ชฉ๋ฒˆํ˜ธ, ์ƒํ’ˆ๋ช…, ๊ฒฐ์ œ์ผ์‹œ, ๊ฒฐ์ œ๊ธˆ์•ก, PG ์ˆ˜์ˆ˜๋ฃŒ, ๋„๋งค๊ฐ€, ํ™˜๋ถˆ์ผ์‹œ, ํ™˜๋ถˆ๊ธˆ์•ก, ํŒ๋งค์ž, ์˜ˆ์ƒ์ •์‚ฐ๊ธˆ์•ก, ์ •์‚ฐ ์˜ˆ์น˜๊ธˆ ๋‚ด์—ญ๋ฒˆํ˜ธ, ๋น„๊ณ  ํ‘œ์‹œ
    • ์ •์‚ฐ ์ƒํƒœ์— ๋”ฐ๋ฅธ ์ •์‚ฐ ์™„๋ฃŒ/ํ™˜๋ถˆ ์™„๋ฃŒ ํ‘œ์‹œ, ๊ฑด๋ณ„ ์ •์‚ฐ ์‹ ์ฒญ ๋ฒ„ํŠผ ํ‘œ์‹œ
    • 2๊ฐ€์ง€ ๋ฐฉ์‹
      • ์ „์ฒด ์ •์‚ฐ ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
      • year, month ์— ํ•ด๋‹นํ•˜๋Š” ์›”๋ณ„ ์ •์‚ฐ ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
  • ์ •์‚ฐ ์ฒ˜๋ฆฌ

    • ์ „์•ก ํ™˜๋ถˆ๊ฑด, ์ •์‚ฐ ์™„๋ฃŒ๊ฑด์€ ์ •์‚ฐ ๋ถˆ๊ฐ€
    • ์˜ˆ์ƒ ์ •์‚ฐ ๊ธˆ์•ก = ๋„๋งค๊ฐ€ - PG ์ˆ˜์ˆ˜๋ฃŒ
      • PG ์ˆ˜์ˆ˜๋ฃŒ๋Š” 0์›์œผ๋กœ ๊ฐ€์ •
      • ํŒ๋งค์ž : MUT Books = 5 : 5 ๋กœ ์ •์‚ฐ โ†’ ๋„๋งค๊ฐ€ = ํŒ๋งค๊ฐ€ * 0.5
    • ๊ด€๋ฆฌ์ž๋Š” ๊ฐ ์›”์˜ 15์ผ์— ์ง€๋‚œ๋‹ฌ ์ •์‚ฐ์•ก์„ ์ž‘๊ฐ€(ํšŒ์›)๋“ค์—๊ฒŒ ์†ก๊ธˆํ•˜์—ฌ ์ •์‚ฐ ์ฒ˜๋ฆฌ
      • ํŒ๋งค์ž์—๊ฒŒ ์˜ˆ์น˜๊ธˆ์œผ๋กœ ์ •์‚ฐ๊ธˆ์•ก ์ง€๊ธ‰
    • ์ •์‚ฐ ์™„๋ฃŒ ํ›„, ์ „์ฒด ์ •์‚ฐ ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    1. ์ „์ฒด ์ •์‚ฐ(์„ ํƒ ๋ฐฉ์‹)
      • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ •์‚ฐ ๊ฑด์„ ์„ ํƒํ•˜์—ฌ ํ•œ๋ฒˆ์— ์ •์‚ฐ ์ฒ˜๋ฆฌ
    2. ๊ฑด๋ณ„ ์ •์‚ฐ(๋‹จ๊ฑด ๋ฐฉ์‹)

์ถœ๊ธˆ

  • ๋กœ๊ทธ์ธํ•œ ํšŒ์›๋งŒ ์ถœ๊ธˆ ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์‹ ์ฒญ ์™„๋ฃŒ/์ถœ๊ธˆ ์™„๋ฃŒ/์ทจ์†Œ ์™„๋ฃŒ 3๊ฐ€์ง€ ์ƒํƒœ

  • MemberExtra ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€

    • ์€ํ–‰๋ช…, ๊ณ„์ขŒ๋ฒˆํ˜ธ ์ปฌ๋Ÿผ
    • ๋Œ€์ƒ ํ…Œ์ด๋ธ”(member_extra)์— ์™ธ๋ž˜ ํ‚ค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ผ๋Œ€์ผ ์–‘๋ฐฉํ–ฅ(์ฐธ๊ณ )
      • memberExtra ์—”ํ‹ฐํ‹ฐ์— @OneToOne ์„ค์ •
      • member ์—”ํ‹ฐํ‹ฐ์— @OneToOne(mappedBy=โ€memberโ€) ์„ค์ •
  • ์ถœ๊ธˆ ๊ณ„์ขŒ ๊ด€๋ฆฌ

    • [UI] ์ถœ๊ธˆ ๊ณ„์ขŒ ์ •๋ณด(์€ํ–‰๋ช…, ๊ณ„์ขŒ ๋ฒˆํ˜ธ), ์ถœ๊ธˆ ๊ณ„์ขŒ ๋“ฑ๋ก ๋ฒ„ํŠผ ํ‘œ์‹œ
    • ๋‚ด ํ”„๋กœํ•„ > ์ถœ๊ธˆ๊ณ„์ขŒ ๊ด€๋ฆฌ ์ ‘์†
  • ์ถœ๊ธˆ ๊ณ„์ขŒ ๋“ฑ๋ก

    • ์ถœ๊ธˆ ๊ณ„์ขŒ ์ •๋ณด(์€ํ–‰๋ช…, ๊ณ„์ขŒ ๋ฒˆํ˜ธ) ์ž…๋ ฅ ํ›„, ๋“ฑ๋ก
    • ๋“ฑ๋ก ์™„๋ฃŒ์‹œ ์ถœ๊ธˆ ๊ณ„์ขŒ ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • ์ถœ๊ธˆ ์‹ ์ฒญํผ

    • [UI] ์ถœ๊ธˆ ๊ณ„์ขŒ ์ •๋ณด(์€ํ–‰๋ช…, ๊ณ„์ขŒ๋ฒˆํ˜ธ), ์บ์‹œ ์ž”์•ก ํ‘œ์‹œ
    • Form : price
      • ์ „์•ก checkbox ์„ ํƒ ์‹œ ์ž๋™ ๊ฐ’ ์ž…๋ ฅ, ์ตœ์†Œ/์ตœ๋Œ€ ์ž…๋ ฅ๊ฐ’ ์ œํ•œ
    • ๋‚ด ํ”„๋กœํ•„ > ์ถœ๊ธˆ์‹ ์ฒญ or ๋‚ด ํ”„๋กœํ•„ > ์ถœ๊ธˆ๊ณ„์ขŒ ๊ด€๋ฆฌ > ์ถœ๊ธˆ ์‹ ์ฒญ ์ ‘์†
    • ์ถœ๊ธˆ ๊ณ„์ขŒ ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด, ์ถœ๊ธˆ๊ณ„์ขŒ ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • ์ถœ๊ธˆ ์‹ ์ฒญ(์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ)

    • ์ž‘๊ฐ€ ํšŒ์›์ด ์ •์‚ฐ๋ฐ›์€ ๊ธˆ์•ก or ๋ณธ์ธ์ด ์ถฉ์ „ํ•œ ๊ธˆ์•ก
    • ์ตœ์†Œ ์ถœ๊ธˆ ์‹ ์ฒญ ๊ธˆ์•ก = 1,000์›
    • ์ตœ๋Œ€ ์ถœ๊ธˆ ๊ธˆ์•ก = ๋ณธ์ธ์ด ๋ณด์œ ํ•œ ์˜ˆ์น˜๊ธˆ
  • ์ถœ๊ธˆ ์‹ ์ฒญ ๋‚ด์—ญ ๋ฆฌ์ŠคํŠธ

    • [UI] ์€ํ–‰๋ช…, ๊ณ„์ขŒ๋ฒˆํ˜ธ, ๊ธˆ์•ก, ์‹ ์ฒญ ์ผ์‹œ, ์ถœ๊ธˆ ์ผ์‹œ, ์ทจ์†Œ ์ผ์‹œ, ์ฒ˜๋ฆฌ ์ƒํƒœ
    1. ์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ
      • ๋ณธ์ธ์˜ ์ถœ๊ธˆ ์‹ ์ฒญ ๋‚ด์—ญ์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ์กฐํšŒ
    2. ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ
      • ๋ชจ๋“  ํšŒ์›์˜ ์ถœ๊ธˆ ์‹ ์ฒญ ๋‚ด์—ญ์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ์กฐํšŒ
      • *์‹ ์ฒญ ์™„๋ฃŒ ์ƒํƒœ ๊ฑด์„ ๋งจ ์œ„๋กœ ๋ฆฌ์ŠคํŒ…
  • ์ถœ๊ธˆ ์ฒ˜๋ฆฌ(๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ)

    • ๊ด€๋ฆฌ์ž ์ถœ๊ธˆ ์‹ ์ฒญ ๋‚ด์—ญ ํŽ˜์ด์ง€์—์„œ ๊ฑด๋ณ„๋กœ ์ถœ๊ธˆ ์ฒ˜๋ฆฌ ์š”์ฒญ
    • ์ถœ๊ธˆ ์ˆ˜์ˆ˜๋ฃŒ ์—†๋‹ค๊ณ  ๊ฐ€์ •
  • ์ถœ๊ธˆ ์‹ ์ฒญ ์ทจ์†Œ

    • ์ถœ๊ธˆ ์ทจ์†Œ ์‚ฌ์œ : ์‚ฌ์šฉ์ž ์š”์ฒญ/๊ด€๋ฆฌ์ž ์š”์ฒญ(2๊ฐ€์ง€)
      • enum, converter ๊ด€๋ฆฌ
    1. ์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ
      • ๋ณธ์ธ์˜ ์ถœ๊ธˆ ์‹ ์ฒญ ๊ฑด๋งŒ ์ทจ์†Œ ๊ฐ€๋Šฅ
    2. ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ
      • ๋ชจ๋“  ํšŒ์›์˜ ์ถœ๊ธˆ ์‹ ์ฒญ ๊ฑด์— ๋Œ€ํ•ด ์ทจ์†Œ ๊ฐ€๋Šฅ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published