-
ํ ํ๋ฆฟ ์์ง
- ์ง์ ๋ ํ ํ๋ฆฟ ์์๊ณผ ๋ฐ์ดํฐ๊ฐ ํฉ์ณ์ ธ 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์ ๊ฒน์น์ง ์๋๋ก ์ ์ธํจ
- ์ธ๋ถ CDN์ ์ฌ์ฉํ์ฌ FE ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด๋ณด์
-
์ ์ฒด ์กฐํ ํ๋ฉด ๋ง๋ค๊ธฐ
- 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์ ์ ๋ฌ๋จ
- mustache ๋ฌธ๋ฒ
-
์์ / ์ญ์ ํ๋ฉด ๋ง๋ค๊ธฐ
- ์์
readonly
: ์ฝ๊ธฐ ๊ธฐ๋ฅ๋ง ํ์ฉํ์ฌ ์์ ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ํจ.
์ผ๋ก ๊ฐ์ฒด์ ํ๋์ ์ ๊ทผํ ์ ์์index.js
์ update ํจ์ ์ถ๊ฐ- ์ ์ฒด ๋ชฉ๋ก์์ ์์ ํ์ด์ง๋ก ์ด๋ํ ์ ์๋๋ก ํ์ด์ง ์ด๋ ๊ธฐ๋ฅ ์ถ๊ฐ
- ์ญ์
- JPARepository์ delete ๋ฉ์๋๋ฅผ ์ฌ์ฉํจ
- deleteById ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ id๋ก ์ญ์ ํ ์๋ ์์ผ๋ฉฐ ์ํฐํฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ญ์ ํ ์๋ ์์
- ์ํฐํฐ๋ก ์กฐํํ์ฌ ์กด์ฌ ์ฌ๋ถ ํ์ธ ํ ์ญ์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ
- ์์
-
๊ธ ๋ชฉ๋ก ์กฐํ / ๋ฑ๋ก / ์์ /์ญ์ ๊ธฐ๋ฅ ๊ตฌํ ์๋ฃ