** ๐Ÿ“ŒJSTL ๊ฐœ์š” + 4๋Œ€ ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ •๋ฆฌ **


โœ… ๋ชฉ์ฐจ

  1. JSTL์ด๋ž€?
  2. JSTL์ด ํ•„์š”ํ•œ ์ด์œ 
  3. JSTL ๊ตฌ์„ฑ (4๋Œ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
  4. ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ + ๋Œ€ํ‘œ ํƒœ๊ทธ
  5. JSTL๊ณผ EL์˜ ๊ด€๊ณ„
  6. ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์ •๋ฆฌ
  7. ์š”์•ฝ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

1๏ธโƒฃ JSTL์ด๋ž€?

๐Ÿ“˜ JSTL (JSP Standard Tag Library)

= JSP์—์„œ ์ž๋ฐ” ์ฝ”๋“œ ์—†์ด ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ํฌ๋งทํŒ… ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ‘œ์ค€ ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•ด, JSP์˜ ์ž๋ฐ” ์ œ์–ด๋ฌธ (if, for, etc.)์„ HTML ํƒœ๊ทธ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ”ธ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์—†์ด ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ:

<%-- ์ž๋ฐ” if ๋ฌธ --%>
<% if (score >= 60) { %> ํ•ฉ๊ฒฉ <% } %>

<%-- JSTL if ๋ฌธ --%>
<c:if test="${score >= 60}">ํ•ฉ๊ฒฉ</c:if>

2๏ธโƒฃ JSTL์ด ํ•„์š”ํ•œ ์ด์œ 

์ด์œ  ์„ค๋ช…
๐Ÿ’ฅ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ์ œ๊ฑฐ <% ... %> ๊ฐ™์€ ์ฝ”๋“œ ์—†์ด๋„ ๋กœ์ง ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
๐Ÿ’ก MVC ์—ญํ•  ๋ถ„๋ฆฌ ๋กœ์ง์€ Servlet/Controller, JSP๋Š” ์˜ค์ง ํ‘œํ˜„๋งŒ
๐ŸŽจ ๋””์ž์ด๋„ˆ์™€ ํ˜‘์—… ์šฉ์ด HTML์ฒ˜๋Ÿผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ
๐Ÿ” ๋ฐ˜๋ณต, ์กฐ๊ฑด, ํฌ๋งท์„ ํƒœ๊ทธ์ฒ˜๋Ÿผ ๋ฐ˜๋ณต <c:forEach>, ์กฐ๊ฑด <c:if>, ๋‚ ์งœํฌ๋งท <fmt:formatDate> ๋“ฑ

3๏ธโƒฃ JSTL์˜ 4๋Œ€ ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์–ธ URI ๊ธฐ๋Šฅ
โœ… core http://java.sun.com/jsp/jstl/core ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ๋ณ€์ˆ˜ ์„ค์ • ๋“ฑ
๐ŸŒ fmt http://java.sun.com/jsp/jstl/fmt ๊ตญ์ œํ™”, ๋‚ ์งœ/์ˆซ์ž ํฌ๋งท
๐Ÿ’พ sql http://java.sun.com/jsp/jstl/sql DB ์ฟผ๋ฆฌ ์‹คํ–‰ (์‹ค๋ฌด์—์„œ๋Š” ๋น„์ถ”์ฒœ)
๐Ÿง  functions http://java.sun.com/jsp/jstl/functions ๋ฌธ์ž์—ด ํ•จ์ˆ˜ (contains, length, substring ๋“ฑ)

4๏ธโƒฃ ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณ„ ๋Œ€ํ‘œ ํƒœ๊ทธ ์ •๋ฆฌ

โœ… 1. core (๊ฐ€์žฅ ๊ธฐ๋ณธ, ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉ!)

ํƒœ๊ทธ ๊ธฐ๋Šฅ ์˜ˆ์‹œ
<c:if> ์กฐ๊ฑด ์ฒ˜๋ฆฌ
<c:choose> <c:when> <c:otherwise> ๋‹ค์ค‘ ์กฐ๊ฑด
<c:forEach> ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ
<c:set> ๋ณ€์ˆ˜ ์„ ์–ธ
<c:out> ๊ฐ’ ์ถœ๋ ฅ (null ๋Œ€๋น„)

๐ŸŒ 2. fmt (๊ตญ์ œํ™” ๋ฐ ํฌ๋งทํŒ…)

ํƒœ๊ทธ ๊ธฐ๋Šฅ
<fmt:formatDate> ๋‚ ์งœ ํฌ๋งท
<fmt:formatNumber> ์ˆซ์ž ํฌ๋งท
<fmt:setLocale> ์–ธ์–ด ์„ค์ •
<fmt:message> ๋ฉ”์‹œ์ง€ ๋ฒˆ์—ญ

๐Ÿ’พ 3. sql (JSP ๋‚ด์—์„œ DB ์ ‘๊ทผ)

๐Ÿ“› ์‹ค๋ฌด์—์„œ๋Š” DAO/Service๋กœ ๋ถ„๋ฆฌ ๊ถŒ์žฅ!

(๋ณด์•ˆ/์œ ์ง€๋ณด์ˆ˜/๊ตฌ์กฐ์  ๋ฌธ์ œ)

ํƒœ๊ทธ ๊ธฐ๋Šฅ
<sql:query> SELECT ์‹คํ–‰
<sql:update> INSERT/UPDATE/DELETE ์‹คํ–‰

๐Ÿง  4. functions (๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ ๋ชจ์Œ)

ํ•จ์ˆ˜ ์˜ˆ์‹œ
fn:length(list) ๊ธธ์ด ๋ฐ˜ํ™˜
fn:contains(str, "a") ํฌํ•จ ์—ฌ๋ถ€
fn:startsWith(str, "a") ์‹œ์ž‘ ์—ฌ๋ถ€
fn:replace(str, "a", "b") ๋ฌธ์ž์—ด ์น˜ํ™˜

๐Ÿ’ก JSTL ํ•จ์ˆ˜ ์‚ฌ์šฉ ์‹œ <%@ taglib prefix="fn" ...> ์„ ์–ธ ํ•„์š”!


5๏ธโƒฃ JSTL๊ณผ EL์˜ ๊ด€๊ณ„

๊ตฌ๋ถ„ ์—ญํ• 
EL (${}) ๊ฐ’ ์ถœ๋ ฅ์šฉ
JSTL (<c:if>, <c:forEach>) ์กฐ๊ฑด/๋ฐ˜๋ณต ๋“ฑ ํ๋ฆ„ ์ œ์–ด์šฉ

๐Ÿ” ์‹ค์ œ ์‹ค๋ฌด์—์„œ๋Š” ํ•ญ์ƒ EL + JSTL์„ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<c:if test="${user.id == 'admin'}">
  <p>๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.</p>
</c:if>

6๏ธโƒฃ ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์ •๋ฆฌ

์งˆ๋ฌธ ๋ชจ๋ฒ” ๋‹ต๋ณ€ ์š”์•ฝ
โ“ JSTL์ด๋ž€? JSP์—์„œ ์ž๋ฐ” ์ฝ”๋“œ ์—†์ด ํ๋ฆ„ ์ œ์–ด, ๋ฐ˜๋ณต, ํฌ๋งท ๋“ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
โ“ JSTL์˜ ์žฅ์ ์€? ๊ฐ€๋…์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, MVC ์›์น™ ์œ ์ง€, ๋””์ž์ด๋„ˆ ํ˜‘์—… ์šฉ์ด์„ฑ
โ“ JSTL์˜ ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 4๊ฐ€์ง€๋Š”? core, fmt, sql, functions
โ“ JSTL์ด ์—†๋˜ ์‹œ์ ˆ์˜ ๋ฌธ์ œ์ ์€? ์Šคํฌ๋ฆฝํŠธ๋ฆฟ ๋‚จ์šฉ์œผ๋กœ ์ฝ”๋“œ ๋‚œ๋…ํ™”, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ View ํ˜ผํ•ฉ
โ“ JSTL์—์„œ DB ์ฒ˜๋ฆฌ ํƒœ๊ทธ๋Š” ์™œ ์‹ค๋ฌด์—์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋‚˜์š”? ๋ณด์•ˆ ๋ฌธ์ œ, SQL ๋…ธ์ถœ, ๋น„ํ‘œ์ค€ ๊ตฌ์กฐ โ†’ DAO๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ์›์น™

7๏ธโƒฃ ์š”์•ฝ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

๐Ÿ“Œ JSTL์€ JSP์˜ ์ œ์–ด๋ฌธ์„ ํƒœ๊ทธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ”๊ฟ” ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

โœ… JSTL์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” EL๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ด๋ฉฐ,

โœ… core, fmt, functions๋Š” ์‹ค๋ฌด์—์„œ๋„ ๋งค์šฐ ์ž์ฃผ ์“ฐ์ž…๋‹ˆ๋‹ค.


โœ… ๋ณด๋„ˆ์Šค ์‹ค์Šต ์˜ˆ์‹œ: JSTL core + EL ์ถœ๋ ฅ

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="score" value="85" />

<c:if test="${score >= 80}">
  <p>๐ŸŽ‰ ์šฐ์ˆ˜ํ•œ ์„ฑ์ ์ž…๋‹ˆ๋‹ค!</p>
</c:if>