** ๐Ÿ“ŒJSTL ๊ตญ์ œํ™” + ๋‚ ์งœ/์ˆซ์ž ํฌ๋งท ์ฒ˜๋ฆฌ (fmt: ํƒœ๊ทธ ์™„์ „ ์ •๋ณต) **


โœ… ๋ชฉ์ฐจ

  1. JSTL fmt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?
  2. taglib ์„ ์–ธ ๋ฐฉ๋ฒ•
  3. ๋‚ ์งœ ํฌ๋งท <fmt:formatDate>
  4. ์ˆซ์ž ํฌ๋งท <fmt:formatNumber>
  5. ๋‹ค๊ตญ์–ด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ (<fmt:setLocale>, <fmt:message>)
  6. ์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ
  7. ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ์š”์•ฝ
  8. ๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

1๏ธโƒฃ JSTL fmt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?

๐Ÿ“˜ JSTL์˜ fmt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‚ ์งœ/์ˆซ์ž ํฌ๋งท ์ฒ˜๋ฆฌ, ๋‹ค๊ตญ์–ด ์ถœ๋ ฅ(i18n), ๋กœ์ผ€์ผ ๋ณ€๊ฒฝ ๋“ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

โœ… ์‹ค๋ฌด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค:


2๏ธโƒฃ taglib ์„ ์–ธ ๋ฐฉ๋ฒ•

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

3๏ธโƒฃ ๐Ÿ“† ๋‚ ์งœ ํฌ๋งท ์ฒ˜๋ฆฌ - <fmt:formatDate>

<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
์†์„ฑ ์„ค๋ช…
value ์ถœ๋ ฅํ•  ๋‚ ์งœ(Date ๊ฐ์ฒด)
pattern ๋‚ ์งœ ํ˜•์‹ (์ž๋ฐ” SimpleDateFormat)
type date, time, both (๊ธฐ๋ณธ ๋‚ ์งœ/์‹œ๊ฐ„ ํ˜•์‹)

๐Ÿ”น ์˜ˆ์‹œ:

<jsp:useBean id="now" class="java.util.Date" />
<p>ํ˜„์žฌ ์‹œ๊ฐ„: <fmt:formatDate value="${now}" type="both" /></p>

4๏ธโƒฃ ๐Ÿ’ฐ ์ˆซ์ž ํฌ๋งท ์ฒ˜๋ฆฌ - <fmt:formatNumber>

<fmt:formatNumber value="${price}" type="number" />
์†์„ฑ ์„ค๋ช…
type number, currency, percent
minFractionDigits ์†Œ์ˆ˜์  ์ตœ์†Œ ์ž๋ฆฌ์ˆ˜
maxFractionDigits ์†Œ์ˆ˜์  ์ตœ๋Œ€ ์ž๋ฆฌ์ˆ˜

๐Ÿ”น ์˜ˆ์‹œ:

<fmt:formatNumber value="1234567.89" type="number" />      <!-- 1,234,567.89 -->
<fmt:formatNumber value="0.87" type="percent" />           <!-- 87% -->
<fmt:formatNumber value="50000" type="currency" />         <!-- โ‚ฉ50,000 ๋˜๋Š” $50,000 -->

5๏ธโƒฃ ๐ŸŒ ๋‹ค๊ตญ์–ด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ

โœ… โ‘  ๋กœ์ผ€์ผ ์„ค์ •: <fmt:setLocale>

<fmt:setLocale value="ko_KR" />

โœ… โ‘ก ๋ฆฌ์†Œ์Šค ๋ฒˆ๋“ค ์ง€์ •: <fmt:setBundle>

<fmt:setBundle basename="message" />

โœ… โ‘ข ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ: <fmt:message>

<fmt:message key="greeting" />

๐Ÿ”น message_ko_KR.properties

greeting=์•ˆ๋…•ํ•˜์„ธ์š”!

๐Ÿ”น message_en_US.properties

greeting=Hello!

6๏ธโƒฃ ์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ

๐Ÿ”ธ ๋‚ ์งœ ์ถœ๋ ฅ

<jsp:useBean id="today" class="java.util.Date" />
<fmt:formatDate value="${today}" pattern="yyyy-MM-dd" />

๐Ÿ”ธ ์ˆซ์ž ์ถœ๋ ฅ

<fmt:formatNumber value="1250000" type="number" />

๐Ÿ”ธ ๋‹ค๊ตญ์–ด ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ

<fmt:setLocale value="en_US" />
<fmt:setBundle basename="msg" />
<p><fmt:message key="login.title" /></p>

7๏ธโƒฃ ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ์š”์•ฝ

์งˆ๋ฌธ ๋‹ต๋ณ€ ์š”์•ฝ
โ“ JSTL๋กœ ๋‚ ์งœ ํฌ๋งท์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋‚˜์š”? <fmt:formatDate> ํƒœ๊ทธ์— Date ๊ฐ์ฒด๋ฅผ ๋„ฃ๊ณ  pattern ๋˜๋Š” type์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ“ ์ˆซ์ž์— ์‰ผํ‘œ๋‚˜ % ๊ธฐํ˜ธ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์€? <fmt:formatNumber>๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  type์„ number, percent ๋“ฑ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ“ ๊ตญ์ œํ™”๋ฅผ ์œ„ํ•ด JSTL์—์„œ ์–ด๋–ค ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”? <fmt:setLocale>, <fmt:setBundle>, <fmt:message> ์กฐํ•ฉ์œผ๋กœ ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ
โ“ ๋ฉ”์‹œ์ง€ ๋ฒˆ๋“ค ํŒŒ์ผ ์œ„์น˜๋Š”? WEB-INF/classes ๋˜๋Š” ํด๋ž˜์ŠคํŒจ์Šค ํ•˜์œ„์— .properties ํ˜•์‹์œผ๋กœ ๋‘๊ณ  basename์œผ๋กœ ์ ‘๊ทผ

8๏ธโƒฃ ๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

๐Ÿ“Œ JSTL์˜ fmt ํƒœ๊ทธ๋Š” ๋‚ ์งœ, ์ˆซ์ž, ๋‹ค๊ตญ์–ด ์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ๊ธˆ์•ก ํ‘œ์‹œ, ๋‚ ์งœ ํฌ๋งท, ๋‹ค๊ตญ์–ด ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ๋“ฑ

EL๋งŒ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์„ fmt๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • <fmt:formatDate> โ†’ ๋‚ ์งœ ํฌ๋งท ์ฒ˜๋ฆฌ
  • <fmt:formatNumber> โ†’ ๊ฐ€๊ฒฉ, ๋น„์œจ ๋“ฑ ์ˆซ์ž ํฌ๋งท
  • <fmt:message> โ†’ i18n ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ