πŸƒνƒ€μž„λ¦¬ν”„ (Thymeleaf)

νƒ€μž„λ¦¬ν”„ 둜고

μŠ€ν”„λ§μ—μ„œ κ³΅μ‹μ μœΌλ‘œ μ§€μ›ν•˜λŠ” View ν…œν”Œλ¦Ώ
HTML λ¬Έμ„œλ₯Ό κ·ΈλŒ€λ‘œ μ“Έ 수 μžˆλ‹€.
HTML은 λΈŒλΌμš°μ €μ— μ˜¬λ°”λ₯΄κ²Œ ν‘œμ‹œλ  수 있고 정적 ν”„λ‘œν† νƒ€μž…μœΌλ‘œλ„ μž‘λ™ν•˜μ—¬ 개발 νŒ€μ—μ„œ 보닀
κ°•λ ₯ν•œ ν˜‘μ—…μ„ κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

 

πŸƒνƒ€μž„λ¦¬ν”„μ˜ νŠΉμ§•
Spring Framework용 λͺ¨λ“ˆ, μ„ ν˜Έν•˜λŠ” λ„κ΅¬μ™€μ˜ 톡합 호슀트 및 κ³ μœ ν•œ κΈ°λŠ₯을 ν”ŒλŸ¬κ·ΈμΈν•  수 μžˆλŠ” κΈ°λŠ₯을 κ°–μΆ”μ–΄μ„œ
λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ λ‘˜ λ‹€ ν˜‘μ—…ν•΄μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

JSPλŠ” ν”„λ‘ νŠΈμ—”λ“œκ°€ μ„œλ²„μͺ½μ„ λ‹€λ£¨λŠ” 것은 νž˜λ“€λ‹€. κ·ΈλŸ¬λ‚˜ μŠ€ν”„λ§μ˜ νƒ€μž„λ¦¬ν”„λŠ” λ‘˜ λ‹€ ν˜‘μ—…ν•˜μ—¬ μ‚¬μš© κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—
μ„œλ²„μ—†μ΄ λ‹¨λ…μœΌλ‘œ λŒμ•„κ°€λŠ” ν˜•νƒœλ₯Ό λ§Œλ“€ 수 μžˆμ–΄ νŽΈμ˜μ„±μ΄ μ’‹λ‹€.

즉 JSP와 달리 Thymeleaf λ¬Έμ„œλŠ” html ν™•μž₯자λ₯Ό κ°–κ³  μžˆμ–΄ JSP처럼 Servlet이 λ¬Έμ„œλ₯Ό ν‘œν˜„ν•˜λŠ” 방식이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ„œλ²„ 없이도 λ™μž‘ κ°€λŠ₯ν•˜λ‹€.

 

SSR:Server Side Rendering 
λ°±μ—”λ“œμ—μ„œ HTML을 λ™μ μœΌλ‘œ μƒμ„±ν•œλ‹€.

μ„œλ²„ μͺ½μ—μ„œ 화면에 λŒ€ν•œ 것듀을 ꡬ성을 ν•˜μ—¬ 응닡을 ν•œλ‹€.

 

Client Side Rendering
Rest API + React.js

ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λ Œλ”λ§μ„ ν•œλ‹€λΌλŠ” μ˜λ―Έμ΄λ‹€.

μ„œλ²„λŠ” λ°μ΄ν„°λ§Œ μ§„ν–‰ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈμΈ‘μ€ View만 μ§„ν–‰ν•œλ‹€.

 

ν…œν”Œλ¦Ώ μ—”μ§„

이터와 이 데이터듀을 ν‘œν˜„ ν•  ν…œν”Œλ¦Ώμ„ κ²°ν•©ν•΄μ£ΌλŠ” 도ꡬ

λ°μ΄ν„°λ² μ΄μŠ€μ™€ + μ›Ή λž¨ν”Œλ¦Ώμ„ κ²°ν•©ν•΄μ£ΌλŠ” 역할을 ν•œλ‹€.

 

그럼 νƒ€μž„λ¦¬ν”„μ˜ μž₯점과 단점은 λ¬΄μ—‡μΌκΉŒ?

πŸƒμž₯점은

1.HTML κ·ΈλŒ€λ‘œ μ—΄κ³ , κ·ΈλŒ€λ‘œ μ“Έ 수 μžˆλ‹€.
HTML의 κΈ°λ³Έ ꡬ쑰λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 있으며 HTMLνŒŒμΌμ„ 직접 열어도 λ™μž‘ν•œλ‹€
2.λ””μžμΈκ³Ό κ°œλ°œμ„ λΆ„λ¦¬ν•΄μ„œ μž‘μ—…ν•  수 μžˆλ‹€.
3.WASλ₯Ό 톡해 μˆ˜ν–‰ν•˜μ§€ μ•Šλ”λΌλ„ 파일 μ›Ή λΈŒλΌμš°μ €λ₯Ό 톡해 μ—΄ 수 μžˆλ‹€.

 

 

πŸƒλ‹¨μ μ€

1.jsp νƒœκ·Έ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ customνƒœκ·Έλ“€μ„ μ‚¬μš©ν•  수 μ—†μ–΄μ„œ κΈ°μ‘΄ jspμ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 μ—†λ‹€λŠ” 점
2.κΈ°μ‘΄ νƒœκ·Έλ₯Ό μœ μ§€ν•˜κ³  μ†μ„±μœΌλ‘œ ν…œν”Œλ¦Ώ ꡬ문을 λ„£λŠ”λ° μžˆμ–΄ μ–΄λŠμ •λ„ ν•œκ³„κ°€ 있고 μžλ°”μŠ€ν¬λ¦½νŠΈλ‚˜ 제이쿼리의 도움이 ν•„μš”ν•  수 μžˆλ‹€.

주석

ν‘œν˜„μ‹

μ’…λ₯˜ 문법 μ„€λͺ…
λ³€μˆ˜ ν‘œν˜„μ‹ ${...} paramter, session, model 등에 μ €μž₯λ˜μ–΄ μžˆλŠ” λ³€μˆ˜μ˜ 값듀을 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ λΆˆλŸ¬μ˜¨λ‹€.
λ©”μ„Έμ§€ ν‘œν˜„μ‹ #{...} message sourceλ‘œλΆ€ν„° 킀에 ν•΄λ‹Ήν•˜λŠ” λ©”μ‹œμ§€λ₯Ό κ°€μ Έμ˜¨λ‹€.
링크 ν‘œν˜„μ‹ @{...} th:href, th:src, th:action λ“±κ³Ό 같이 URL이 μ§€μ •λ˜λŠ” 속성에 μ‚¬μš©ν•œλ‹€.
선택 λ³€μˆ˜ ν‘œν˜„μ‹ @{...} λΆ€λͺ¨ νƒœκ·Έμ˜ th:object에 μ§€μ •λœ 객체λ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄λ‹Ή 객체의 속성에 μ ‘κ·Όν•œλ‹€.
인라인 ν‘œν˜„ [[...]], [(...)] ν…μŠ€νŠΈ λͺ¨λ“œλ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λͺ¨λ“œλ‘œ 내뢀에 μ„ μ–Έν•œ λ³€μˆ˜ ν‘œν˜„μ‹μ˜ 값을 κ°€μ Έμ™€μ„œ html에 직접 ν‘œμ‹œν•œλ‹€.

parameter둜 λ„˜μ–΄μ˜¨ 경우 => param
session attribute인 경우 => session
request attribute(model)인 κ²½μš°λŠ” λ”°λ‘œ λͺ…μ‹œν•˜μ§€ μ•ŠλŠ”λ‹€. request라고 λͺ…μ‹œν•˜λ©΄ μ˜€λ₯˜ λ°œμƒν•œλ‹€.

νŒŒλΌλ―Έν„°κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ κ²½μš° ν•­μƒ μ˜€λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

	<p th:text="#{ message.first }"></p>
	<p th:text="#{ message.second(everyone) }"></p>

 

μ œμ–΄λ¬Έ

SpringEL

λ³€μˆ˜ ν‘œν˜„μ‹(#{...})μ—μ„œ SpringEL을 μ‚¬μš©ν•˜μ—¬ λ‹¨μˆœν•œ λ³€μˆ˜κ°€ μ•„λ‹Œ Object, List, Map같은 객체의 값듀을 뢈러올 수 있음

μ’…λ₯˜ 문법 μ„€λͺ…
Object ${객체λͺ….속성λͺ…} ν•΄λ‹Ή 객체의 속성값을 λΆˆλŸ¬μ˜¨λ‹€.
  ${객체λͺ…['속성λͺ…']}  
  ${객체λͺ….μ†μ„±μ˜ getter()}  
List ${List객체λͺ…[index번째 객체].속성λͺ…} Listμ—μ„œ index번째 객체의 속성을 λΆˆλŸ¬μ˜¨λ‹€.
  ${List객체λͺ…[index번째 객체]['속성λͺ…']}  
  ${List객체λͺ…[index번째 객체].μ†μ„±μ˜ getter()}  
  ${List객체λͺ….get(index번째 객체).μ†μ„±μ˜ getter()}  
  ${List객체λͺ….get(index번째 객체).속성λͺ…}  
Map ${Map객체λͺ…['객체의 ν‚€κ°’'].속성λͺ…} Mapμ—μ„œ 킀값에 ν•΄λ‹Ήν•˜λŠ” 객체의 속성을 λΆˆλŸ¬μ˜¨λ‹€.
  ${Map객체λͺ…['객체의 ν‚€κ°’']['속성λͺ…']}  
  ${Map객체λͺ…['객체의 ν‚€κ°’'].μ†μ„±μ˜ getter()}  

 

SMALL

'java > spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Spring JWT (JSON Web Token) - 인증과 κΆŒν•œ λΆ€μ—¬ κ΅¬ν˜„ν•˜κΈ°  (0) 2023.05.10
REST API  (0) 2023.04.27
Spring κ³„μΈ΅ν˜• 개발 Architecture  (0) 2023.03.02
Spring AOP  (0) 2023.02.28
Spring Dependency Injection  (0) 2023.02.23

+ Recent posts