Skip to content

Latest commit

ย 

History

History
63 lines (57 loc) ยท 3.58 KB

chapter04.md

File metadata and controls

63 lines (57 loc) ยท 3.58 KB

4์žฅ ๋จธ์Šคํ…Œ์น˜๋กœ ํ™”๋ฉด ๊ตฌ์„ฑํ•˜๊ธฐ

  • ํ…œํ”Œ๋ฆฟ ์—”์ง„

    • ์ง€์ •๋œ ํ…œํ”Œ๋ฆฟ ์–‘์‹๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ฉ์ณ์ ธ HTML ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SW
    • ์„œ๋ฒ„ ํ…œํ”Œ๋ฆฟ ์—”์ง„(JSP, Freemarker)
      • ์„œ๋ฒ„์—์„œ Java ์ฝ”๋“œ๋กœ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ณ  ์ด ๋ฌธ์ž์—ด์„ HTML๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌ
    • ํด๋ผ์ด์–ธํŠธ ํ…œํ”Œ๋ฆฟ ์—”์ง„(React, Vue, Angular)
      • ๋ธŒ๋ผ์šฐ์ €์—์„œ javascript ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋จ
      • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ(V8์—”์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์ง€์›ํ•จ)
    • ๋จธ์Šคํ…Œ์น˜
      • ์ˆ˜๋งŽ์€ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฐ€์žฅ ์‹ฌํ”Œํ•œ ํ…œํ”Œ๋ฆฟ ์—”์ง„
      • ์žฅ์ 
        • ์‹ฌํ”Œํ•œ ๋ฌธ๋ฒ•
        • view์™€ ์„œ๋ฒ„์˜ ์—ญํ• ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋จ
        • ํ•˜๋‚˜์˜ ๋ฌธ๋ฒ•์œผ๋กœ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ํ…œํ”Œ๋ฆฟ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๊ธฐ๋ณธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

    • build.gradle์— ์˜์กด์„ฑ ๋“ฑ๋ก
    • src/main/resources/templates/index.mustache์— ๊ธฐ๋ณธ์ ์ธ HTML์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•จ
    • IndexController
      • ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ ์‹œ, mustache starter๋ฅผ ํ†ตํ•ด์„œ ์•ž์˜ ๊ฒฝ๋กœ์™€ ๋’ค์˜ ํŒŒ์ผ ํ™•์žฅ์ž๋Š” ์ž๋™์œผ๋กœ ์ง€์ •๋จ
      • ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ "/"๋กœ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ index.mustache์— ํฌํ•จ๋œ ์ฝ”๋“œ๋“ค์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค
    • main() ์‹คํ–‰ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ 8080 ํฌํŠธ๋กœ ์ ‘์†ํ•ด๋ณด๋ฉด ํ™”๋ฉด์ด ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

    • ์™ธ๋ถ€ CDN์„ ์‚ฌ์šฉํ•˜์—ฌ FE ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž
      • templates/layout ๋””๋ ‰ํ† ๋ฆฌ์— footer, header mustache ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๊ณตํ†ต ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ
      • css๋Š” header, js๋Š” footer์— ์œ„์น˜์‹œ์ผœ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ธ๋‹ค
    • ๊ธ€ ๋“ฑ๋ก ๋ฒ„ํŠผ ์ถ”๊ฐ€
      • ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ด๋™ํ•  ํŽ˜์ด์ง€ ์ฃผ์†Œ: /posts/save
      • {{>layout/header}}: {{>}}๋Š” ํ˜„์žฌ mustacheํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ด
    • ๋“ฑ๋ก ๋ฒ„ํŠผ์— ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ
      • resource/static/js/app ๋””๋ ‰ํ† ๋ฆฌ์— index.js ํŒŒ์ผ ์ƒ์„ฑ
      • index๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ํ•ด๋‹น ๊ฐ์ฒด์— ํ•„์š”ํ•œ ๋ชจ๋“  function์„ ์„ ์–ธํ•˜์—ฌ ๋‹ค๋ฅธ JS์™€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ์„ ์–ธํ•จ
  • ์ „์ฒด ์กฐํšŒ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

    • mustache ๋ฌธ๋ฒ•
      • {{#posts}}: Java์˜ for๋ฌธ์ฒ˜๋Ÿผ posts List๋ฅผ ์ˆœํšŒํ•จ
      • {{๋ณ€์ˆ˜๋ช…}}: List์—์„œ ๋ฝ‘์•„๋‚ธ ๊ฐ์ฒด ํ•„๋“œ
    • Repository
      • @Query ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ posts๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•จ
      • ๊ฐ€๋…์„ฑ์ด ์ข‹์•„ Querydsl์„ ์‚ฌ์šฉํ•จ
    • Service
      • @Transactional ์–ด๋…ธํ…Œ์ด์…˜์— readOnly=true ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํŠธ๋ž™์žญ์…˜ ๋ฒ”์œ„๋Š” ์œ ์ง€ํ•˜๊ณ  ์กฐํšŒ ๊ธฐ๋Šฅ๋งŒ ๋‚จ๊ฒจ๋‘์–ด ์กฐํšŒ ์†๋„๋ฅผ ๊ฐœ์„ ํ•จ
      • C,U,D ๊ธฐ๋Šฅ์ด ์—†๋Š” ์„œ๋น„์Šค ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ
      • ๋žŒ๋‹ค์‹ ์ฝ”๋“œ ์ž‘์„ฑ (.map(PostsListResponseDto::new))
    • Controller
      • PostsListResponseDto DTO ์ƒ์„ฑ
      • postsService.findAllDesc()๋กœ ๊ฐ€์ ธ์˜จ ๊ฒฐ๊ณผ๊ฐ€ posts์— ๋‹ด๊ฒจ index.mustache์— ์ „๋‹ฌ๋จ
  • ์ˆ˜์ • / ์‚ญ์ œ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

    • ์ˆ˜์ •
      • readonly: ์ฝ๊ธฐ ๊ธฐ๋Šฅ๋งŒ ํ—ˆ์šฉํ•˜์—ฌ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
      • .์œผ๋กœ ๊ฐ์ฒด์˜ ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
      • index.js์— update ํ•จ์ˆ˜ ์ถ”๊ฐ€
        • ์ „์ฒด ๋ชฉ๋ก์—์„œ ์ˆ˜์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • ์‚ญ์ œ
      • JPARepository์˜ delete ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•จ
      • deleteById ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ id๋กœ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ์Œ
      • ์—”ํ‹ฐํ‹ฐ๋กœ ์กฐํšŒํ•˜์—ฌ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„
  • ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ / ๋“ฑ๋ก / ์ˆ˜์ • /์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์™„๋ฃŒ

  • CRUD ๊ตฌํ˜„ ์™„๋ฃŒ