[JSP][κ°œλ…] πŸš€ JSP(Jakarta Server Pages): μ›Ή 개발의 λ§ˆλ²•μ„ νŽΌμΉ˜λ‹€!

κΉ€μƒμš±Β·2024λ…„ 9μ›” 30일
0
post-thumbnail

JSP(Jakarta Server Pages)

  1. πŸ’‘ JSPλž€ λ¬΄μ—‡μΈκ°€μš”?

    • JSPλŠ” Jakarta Server Pages의 μ•½μžμ΄λ©°, HTML μ½”λ“œ μ•ˆμ— μžλ°” μ½”λ“œλ₯Ό μ‚½μž…ν•˜μ—¬ μ›Ή μ„œλ²„μ—μ„œ λ™μ μœΌλ‘œ μ›Ή νŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•œ ν›„ 이λ₯Ό μ›Ή λΈŒλΌμš°μ €λ‘œ μ „λ‹¬ν•˜λŠ” μ„œλ²„ μ‚¬μ΄λ“œ 슀크립트 μ–Έμ–΄μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ›Ή νŽ˜μ΄μ§€λ₯Ό μ‚¬μš©μž μš”μ²­μ— 맞게 λ™μ μœΌλ‘œ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • JSPλŠ” Java EE(Enterprise Edition) μŠ€νŽ™ 쀑 ν•˜λ‚˜λ‘œ, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.
  2. βš™οΈ JSP의 μ‹€ν–‰ ꡬ쑰λ₯Ό νŒŒν—€μΉ˜λ‹€

    • JSPλŠ” 싀행될 λ•Œ μžλ°” μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λ˜μ–΄ μ‹€ν–‰λ©λ‹ˆλ‹€. 즉, JSPλŠ” μ„œλΈ”λ¦Ώκ³Ό 맀우 μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ μž‘λ™ν•œλ‹€κ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ„œλΈ”λ¦Ώμ€ μžλ°”λ‘œ μž‘μ„±λœ μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§ν•˜λ©°, JSPλŠ” 이와 달리 HTML ν‘œμ€€μ— 맞좰 μž‘μ„±λ˜κΈ° λ•Œλ¬Έμ— μ›Ή λ””μžμΈ μž‘μ—…μ— 더 νŽΈλ¦¬ν•©λ‹ˆλ‹€.
  3. πŸ“œ JSP의 탄생과 λ°œμ „μ‚¬

    • JSPλŠ” 1999λ…„ 썬 λ§ˆμ΄ν¬λ‘œμ‹œμŠ€ν…œμ¦ˆμ— μ˜ν•΄ 처음 λ°°ν¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이후, μ›Ή 기술이 λ°œμ „ν•˜λ©΄μ„œ JSP도 λ°œμ „ν•΄μ™”μœΌλ©°, λ‹€λ₯Έ μ„œλ²„ μ‚¬μ΄λ“œ κΈ°μˆ λ“€μΈ PHP, ASP, ASP.NETκ³Ό μœ μ‚¬ν•œ ꡬ쑰λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  4. 🎁 JSP의 μž₯점: μ™œ 선택해야 ν• κΉŒ?

    • JSTL(Jakarta Standard Tag Library) λ“± JSP νƒœκ·Έ 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ μžλ°” μ½”λ“œ 없이 νƒœκ·Έλ§ŒμœΌλ‘œ 동적인 μ›Ή νŽ˜μ΄μ§€λ₯Ό 생성할 수 μžˆμ–΄, 개발 생산성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ˜ν•œ, Apache Strutsλ‚˜ Jakarta ν”„λ‘œμ νŠΈμ˜ μΌλΆ€λ‘œ JSPλŠ” 더 λ§Žμ€ κΈ°λŠ₯듀을 μ§€μ›ν•˜λ©°, 효율적으둜 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”„ JSP λ™μž‘ 흐름: μš”μ²­μ—μ„œ μ‘λ‹΅κΉŒμ§€μ˜ μ—¬μ •

  1. 🌐 ν΄λΌμ΄μ–ΈνŠΈ(μ›Ή λΈŒλΌμš°μ €): μš”μ²­μ˜ μ‹œμž‘μ :

    • μ‚¬μš©μžκ°€ μ›Ή λΈŒλΌμš°μ €λ₯Ό 톡해 JSP νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€. 이 μš”μ²­μ€ μ„œλ²„λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. μ—¬κΈ°μ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” 보톡 λΈŒλΌμš°μ €λ‘œ, μ›Ή νŽ˜μ΄μ§€μ— λŒ€ν•œ μš”μ²­(request)을 μ„œλ²„μ— λ³΄λƒ…λ‹ˆλ‹€.
  2. πŸ–₯️ μ„œλ²„(μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„): μš”μ²­ 처리의 쀑심:

    • μ„œλ²„λŠ” μ‚¬μš©μžκ°€ μš”μ²­ν•œ JSP νŽ˜μ΄μ§€λ₯Ό μ²˜λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ JSP νŒŒμΌμ€ μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.
  3. πŸ”§ JSP νŽ˜μ΄μ§€ λ³€ν™˜ κ³Όμ •: μ„œλΈ”λ¦ΏμœΌλ‘œμ˜ λ³€μ‹ :

    • 졜초 JSP μš”μ²­ μ‹œ: μ‚¬μš©μžκ°€ 처음 JSP νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•  λ•Œ, λ˜λŠ” JSP 파일이 λ³€κ²½λœ 경우, μ„œλ²„λŠ” ν•΄λ‹Ή JSP νŒŒμΌμ„ μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. 이 과정은 λ‹€μŒκ³Ό 같이 μ„Έ λ‹¨κ³„λ‘œ μ§„ν–‰λ©λ‹ˆλ‹€:
      1. JSP νŒŒμΌμ„ μ„œλΈ”λ¦Ώ μžλ°” 파일둜 λ³€ν™˜: μ„œλ²„λŠ” JSP νŒŒμΌμ„ μžλ°” μ„œλΈ”λ¦Ώ 파일둜 λ³€ν™˜ν•©λ‹ˆλ‹€. 이 λ³€ν™˜ 과정은 μžλ™μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€.
      2. μ„œλΈ”λ¦Ώ 클래슀 컴파일: λ³€ν™˜λœ μ„œλΈ”λ¦Ώ μžλ°” νŒŒμΌμ€ μžλ°” 클래슀 파일둜 μ»΄νŒŒμΌλ©λ‹ˆλ‹€.
      3. μ„œλΈ”λ¦Ώ 클래슀 λ©”λͺ¨λ¦¬ 적재: 컴파일된 μ„œλΈ”λ¦Ώ ν΄λž˜μŠ€λŠ” μ„œλ²„ λ©”λͺ¨λ¦¬μ— μ μž¬λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 이후 μš”μ²­μ— λŒ€ν•΄ λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. πŸš€ JSP νŽ˜μ΄μ§€ 처리 단계: 데이터뢀터 μ‘λ‹΅κΉŒμ§€:

    • μ„œλ²„κ°€ JSPλ₯Ό μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜ν•œ ν›„, ν•΄λ‹Ή μ„œλΈ”λ¦Ώμ„ μ‹€ν–‰ν•˜μ—¬ λ‹€μŒκ³Ό 같은 λ‹¨κ³„λ‘œ μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€:
      1. 데이터 κ°€μ Έμ˜€κΈ° (data get): μ„œλ²„λŠ” ν•„μš”ν•œ 데이터λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€. 이 λ°μ΄ν„°λŠ” 보톡 λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ λ‹€λ₯Έ λ‘œμ§μ„ 톡해 처리된 μ •λ³΄μž…λ‹ˆλ‹€.
      2. 둜직 및 λΉ„μ¦ˆλ‹ˆμŠ€ 처리 (Logic - Business): μ„œλ²„λŠ” κ°€μ Έμ˜¨ 데이터λ₯Ό 기반으둜 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜κ³ , λ°μ΄ν„°λ² μ΄μŠ€ 연동 λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
      3. 응닡 νŽ˜μ΄μ§€ 생성 (response page): μ΅œμ’…μ μœΌλ‘œ JSPλŠ” 처리된 데이터λ₯Ό ν¬ν•¨ν•œ HTML νŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  5. πŸ“ Servlet λ³€ν™˜ 파일 확인: λ³€ν™˜μ˜ κ²°κ³Όλ¬Ό 탐색:

    • JSPκ°€ μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λœ ν›„, ν•΄λ‹Ή λ³€ν™˜ νŒŒμΌμ„ 확인할 수 μžˆλŠ” κ²½λ‘œλ„ μ œκ³΅λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ„œλ²„κ°€ JSPλ₯Ό μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜ν•œ 파일이 μ €μž₯된 μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. μ˜ˆμ‹œλ‘œ %workspace% 디렉토리 μ•ˆμ˜ νŠΉμ • μœ„μΉ˜μ— 파일이 μ €μž₯λ©λ‹ˆλ‹€.

πŸ“ JSP Scriptlet: μ½”λ“œλ‘œ 웹을 움직이닀!

1. πŸ“’ μ„ μ–Έλ¬Έ(Declaration)μ΄λž€? JSPμ—μ„œμ˜ λ³€μˆ˜μ™€ λ©”μ†Œλ“œ μ„ μ–Έν•˜κΈ°

  • 선언문은 JSP νŽ˜μ΄μ§€μ—μ„œ 멀버 λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. JSPμ—μ„œ μžλ°” μ½”λ“œλ₯Ό 직접 μ‚½μž…ν•˜μ—¬ 멀버 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ±°λ‚˜, λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • JSP νŽ˜μ΄μ§€ λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œλŠ” ν•΄λ‹Ή νŽ˜μ΄μ§€ μ „λ°˜μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. πŸ“ ν˜•μ‹: 선언문은 μ΄λ ‡κ²Œ μž‘μ„±ν•©λ‹ˆλ‹€

  • 선언문은 <%! %> νƒœκ·Έλ‘œ κ°μ‹Έμ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • <%! %>: 이 νƒœκ·Έ μ•ˆμ— μžλ°” μ½”λ“œλ‘œ 멀버 λ³€μˆ˜ λ˜λŠ” λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

3. πŸ’‘ μ˜ˆμ‹œ: μ„ μ–Έλ¬Έμ˜ μ‹€μ œ μ‚¬μš© 방법

<%! 
int counter;

public void incrementCounter() {
    counter++;
}
%>

2. πŸ’» 슀크립릿(Scriptlet)μ΄λž€? JSPμ—μ„œ μžλ°” μ½”λ“œλ₯Ό μ‚½μž…ν•˜μž

  • μŠ€ν¬λ¦½λ¦Ώμ€ JSP νŽ˜μ΄μ§€ λ‚΄μ—μ„œ μžλ°” μ½”λ“œλ₯Ό μ‚½μž…ν•  수 μžˆλŠ” μ˜μ—­μœΌλ‘œ, ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ μ‹œλ§ˆλ‹€ μ„œλ²„μ—μ„œ μ²˜λ¦¬λ˜λŠ” μžλ°” μ½”λ“œλ₯Ό μ‚½μž…ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • JSPκ°€ μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λ  λ•Œ, ν•΄λ‹Ή μžλ°” μ½”λ“œλŠ” μ„œλΈ”λ¦Ώμ˜ service() λ©”μ†Œλ“œ 내에 ν¬ν•¨λ˜μ–΄ μ‹€ν–‰λ©λ‹ˆλ‹€.

2. πŸ“ ν˜•μ‹: μŠ€ν¬λ¦½λ¦Ώμ€ μ΄λ ‡κ²Œ μž‘μ„±ν•©λ‹ˆλ‹€

  • μŠ€ν¬λ¦½λ¦Ώμ€ <% %> νƒœκ·Έλ‘œ μžλ°” μ½”λ“œλ₯Ό κ°μ‹Έμ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • <% μžλ°” μ½”λ“œ %>: 이 νƒœκ·Έ μ•ˆμ— μžλ°” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ ν•΄λ‹Ή μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

3. πŸ’‘ μ˜ˆμ‹œ: 슀크립릿의 μ‹€μ œ μ‚¬μš© 방법

<%
int sum = 0;
for(int i=1; i<=100; i++) {
    sum += i;
}
out.println("1λΆ€ν„° 100κΉŒμ§€μ˜ 합은: " + sum);
%>

3. πŸ–¨οΈ ν‘œν˜„μ‹(Expression)μ΄λž€? κ²°κ³Όλ₯Ό 좜λ ₯ν•΄λ³΄μž

  • ν‘œν˜„μ‹μ€ JSP νŽ˜μ΄μ§€μ—μ„œ μžλ°” λ³€μˆ˜λ‚˜ 값을 HTML둜 좜λ ₯ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • 주둜 데이터λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ˜ μ›Ή λΈŒλΌμš°μ €μ— 좜λ ₯ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, μžλ°” μ½”λ“œλ₯Ό HTML μ‘λ‹΅μœΌλ‘œ μ‰½κ²Œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. πŸ“ ν˜•μ‹: ν‘œν˜„μ‹μ€ μ΄λ ‡κ²Œ μž‘μ„±ν•©λ‹ˆλ‹€

  • ν‘œν˜„μ‹μ€ <%= %> νƒœκ·Έλ‘œ μžλ°” μ½”λ“œλ₯Ό κ°μ‹Έμ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • <%= ν‘œν˜„ν•  κ°’ λ˜λŠ” λ³€μˆ˜ %>: 이 νƒœκ·Έ μ•ˆμ— μžλ°” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄, ν•΄λ‹Ή μ½”λ“œμ˜ 결과값을 HTML둜 좜λ ₯ν•©λ‹ˆλ‹€.
    • μ„Έλ―Έμ½œλ‘ (;)은 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

3. πŸ’‘ μ˜ˆμ‹œ: ν‘œν˜„μ‹μ˜ μ‹€μ œ μ‚¬μš© 방법

μ•ˆλ…• <%= name %>!!!
  • <%= name %>: nameμ΄λΌλŠ” μžλ°” λ³€μˆ˜λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. λ§Œμ•½ name λ³€μˆ˜μ— "홍길동"μ΄λΌλŠ” 값이 λ“€μ–΄μžˆλ‹€λ©΄, ν•΄λ‹Ή μ½”λ“œλŠ” "μ•ˆλ…• 홍길동!!!"으둜 λ³€ν™˜λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬λ©λ‹ˆλ‹€.
  • 이 μ˜ˆμ‹œλŠ” μžλ°” λ³€μˆ˜λ₯Ό 직접 HTML νŽ˜μ΄μ§€μ—μ„œ ν‘œμ‹œν•˜λŠ” κ°„λ‹¨ν•œ 예둜, 데이터 좜λ ₯을 μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. ⚠️ μ£Όμ˜μ‚¬ν•­: ν‘œν˜„μ‹ μ‚¬μš© μ‹œ μ•Œμ•„λ‘˜ 점

  • μ„Έλ―Έμ½œλ‘ (;) μ‚¬μš© κΈˆμ§€: ν‘œν˜„μ‹ μ•ˆμ—μ„œλŠ” μžλ°” μ½”λ“œ 뒀에 μ„Έλ―Έμ½œλ‘ μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ§Œμ•½ μ„Έλ―Έμ½œλ‘ μ„ μ‚¬μš©ν•˜κ²Œ 되면 문법 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
  • <%= %>와 out.print() 비ꡐ: ν‘œν˜„μ‹ <%= %>은 λ‚΄λΆ€μ μœΌλ‘œ out.print()와 같은 역할을 ν•©λ‹ˆλ‹€. 즉, <%= λ³€μˆ˜ %>λŠ” <% out.print(λ³€μˆ˜); %>와 λ™μΌν•œ κΈ°λŠ₯을 ν•©λ‹ˆλ‹€.

5. πŸ”§ μ‘μš©: ν‘œν˜„μ‹μœΌλ‘œ 더 λ§Žμ€ 것 해보기

  • ν‘œν˜„μ‹μ€ λ‹¨μˆœν•œ λ³€μˆ˜λΏλ§Œ μ•„λ‹ˆλΌ 계산식, λ©”μ†Œλ“œ 호좜 κ²°κ³Ό 등도 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄:
    ν˜„μž¬ μ‹œκ°„: <%= new java.util.Date() %>
    μœ„ μ½”λ“œλŠ” ν˜„μž¬ μ‹œκ°„μ„ HTML νŽ˜μ΄μ§€μ— 좜λ ₯ν•©λ‹ˆλ‹€. new java.util.Date()κ°€ λ°˜ν™˜ν•˜λŠ” 값이 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ ν‘œμ‹œλ©λ‹ˆλ‹€.

4. πŸ“ 주석(Comment)μ΄λž€? μ½”λ“œμ— λ©”λͺ¨ 남기기

  • 주석은 μ½”λ“œ λ‚΄μ—μ„œ μ„€λͺ…μ΄λ‚˜ λ©”λͺ¨λ₯Ό λ‚¨κΈ°λŠ” λΆ€λΆ„μœΌλ‘œ, JSP νŽ˜μ΄μ§€μ—μ„œ μ½”λ“œ 싀행에 영ν–₯을 주지 μ•ŠμŠ΅λ‹ˆλ‹€.
  • JSPμ—μ„œμ˜ 주석은 HTML μ£Όμ„κ³ΌλŠ” λ‹€λ₯΄κ²Œ μ„œλ²„ μΈ‘μ—μ„œλ§Œ 처리되며, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, JSP 주석은 λΈŒλΌμš°μ €μ— ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2. πŸ“ ν˜•μ‹: 주석은 μ΄λ ‡κ²Œ μž‘μ„±ν•©λ‹ˆλ‹€

  • JSP 주석: <%-- --%>둜 κ°μ‹Έμ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • <%-- 주석 λ‚΄μš© --%>: 이 νƒœκ·Έ μ•ˆμ— μž‘μ„±λœ 주석은 JSP νŽ˜μ΄μ§€μ—μ„œ μ‹€ν–‰λ˜μ§€ μ•ŠμœΌλ©°, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

3. πŸ’‘ μ˜ˆμ‹œ: μ£Όμ„μ˜ μ‹€μ œ μ‚¬μš© 방법

<%-- 이 뢀뢄은 JSP μ£Όμ„μž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 보이지 μ•ŠμŠ΅λ‹ˆλ‹€. --%>

<html>
<!-- 이 뢀뢄은 HTML μ£Όμ„μž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬λ©λ‹ˆλ‹€. -->
<body>
    <p>HTML 주석은 ν΄λΌμ΄μ–ΈνŠΈκ°€ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.</p>
</body>
</html>
  • JSP 주석 μ˜ˆμ‹œ:
    • <%-- 이 뢀뢄은 JSP μ£Όμ„μž…λ‹ˆλ‹€. --%>: 이 주석은 μ„œλ²„μ—μ„œλ§Œ 처리되며, ν΄λΌμ΄μ–ΈνŠΈμ˜ μ›Ή λΈŒλΌμš°μ €μ—λŠ” ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • HTML 주석 μ˜ˆμ‹œ:
    • <!-- 이 뢀뢄은 HTML μ£Όμ„μž…λ‹ˆλ‹€. -->: 이 주석은 HTML νŽ˜μ΄μ§€μ— ν¬ν•¨λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ†ŒμŠ€ μ½”λ“œλ₯Ό 톡해 주석을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

4. ❓ JSP 주석 vs HTML 주석: 무엇이 λ‹€λ₯ΌκΉŒ?

  • JSP 주석 (<%-- --%>): 이 주석은 μ„œλ²„ μΈ‘μ—μ„œλ§Œ ν•΄μ„λ˜λ©°, HTML 파일둜 λ³€ν™˜λ  λ•ŒλŠ” ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” JSP 주석을 λ³Ό 수 μ—†μŠ΅λ‹ˆλ‹€.
  • HTML 주석 (<!-- -->): 이 주석은 JSPκ°€ 처리된 후에도 HTML νŒŒμΌμ— 남아 μžˆμœΌλ―€λ‘œ, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €μ˜ μ†ŒμŠ€ μ½”λ“œ 보기 κΈ°λŠ₯을 톡해 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

5. πŸ”§ μ‘μš©: 주석을 ν™œμš©ν•œ μ½”λ“œ 관리

  • JSPμ—μ„œ μ½”λ“œλ₯Ό μ„€λͺ…ν•˜κ±°λ‚˜ λ©”λͺ¨λ₯Ό 남길 λ•ŒλŠ” JSP 주석을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œκ°€ μ‹€ν–‰λ˜μ§€ μ•Šλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ›Ή νŽ˜μ΄μ§€μ˜ 일뢀λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 보이지 μ•Šκ²Œ 숨기렀면 HTML 주석을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🚦 JSP Directives: νŽ˜μ΄μ§€λ₯Ό μ§€μ‹œν•˜λΌ!

JSP μ§€μ‹œμ–΄λŠ” JSP νŽ˜μ΄μ§€μ—μ„œ μ»¨ν…Œμ΄λ„ˆμ—κ²Œ νŠΉμ • 정보λ₯Ό μ œκ³΅ν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μ΄λ‚˜ νŠΉμ • νŒŒμΌμ„ ν¬ν•¨ν•˜λŠ” 방법 등을 μ§€μ‹œν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. JSPμ—λŠ” μ„Έ 가지 μ£Όμš” μ§€μ‹œμ–΄κ°€ μžˆμŠ΅λ‹ˆλ‹€: page μ§€μ‹œμ–΄, include μ§€μ‹œμ–΄, tag library μ§€μ‹œμ–΄. 각 μ§€μ‹œμ–΄λ₯Ό μžμ„Ένžˆ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

1. πŸ“„ page Directive (νŽ˜μ΄μ§€ μ§€μ‹œμ–΄): νŽ˜μ΄μ§€ μ„€μ •μ˜ 핡심

🧐 μ„€λͺ…: page μ§€μ‹œμ–΄λž€ 무엇인가?:

  • page μ§€μ‹œμ–΄λŠ” JSP νŽ˜μ΄μ§€κ°€ μ–΄λ–»κ²Œ μ²˜λ¦¬λ μ§€μ— λŒ€ν•œ μ „μ—­ 섀정을 μ œκ³΅ν•©λ‹ˆλ‹€. 주둜 λ¬Έμ„œμ˜ 인코딩, 버퍼 크기, μ—λŸ¬ νŽ˜μ΄μ§€ 등을 μ„€μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, JSP νŽ˜μ΄μ§€κ°€ UTF-8둜 μΈμ½”λ”©λ˜λ„λ‘ μ„€μ •ν•˜κ±°λ‚˜, μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œ νŠΉμ • μ—λŸ¬ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λ„λ‘ μ§€μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ ν˜•μ‹: page μ§€μ‹œμ–΄λŠ” μ΄λ ‡κ²Œ μž‘μ„±ν•©λ‹ˆλ‹€:

<%@ page attr1="val1" attr2="val2" ... %>

πŸ’‘ μ˜ˆμ‹œ: page μ§€μ‹œμ–΄μ˜ μ‹€μ œ μ‚¬μš© 방법:

<%@ page contentType="text/html; charset=UTF-8" errorPage="error.jsp" %>
  • contentType: λ¬Έμ„œμ˜ MIME νƒ€μž…κ³Ό 캐릭터 인코딩을 μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” text/htmlκ³Ό UTF-8을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • errorPage: μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ 이동할 νŽ˜μ΄μ§€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. μ˜ˆμ‹œμ—μ„œλŠ” error.jsp둜 μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.

2. πŸ”— include Directive (μΈν΄λ£¨λ“œ μ§€μ‹œμ–΄): μž¬μ‚¬μš©μ˜ μ‹œμž‘

🧐 μ„€λͺ…: include μ§€μ‹œμ–΄λž€ 무엇인가?:

  • include μ§€μ‹œμ–΄λŠ” λ‹€λ₯Έ JSP νŒŒμΌμ„ ν˜„μž¬ JSP νŒŒμΌμ— 포함할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. 반볡적으둜 μ‚¬μš©λ˜λŠ” μ½”λ“œ(예: 헀더, ν‘Έν„°)λ₯Ό λ³„λ„μ˜ 파일둜 λ§Œλ“€μ–΄ μ—¬λŸ¬ νŽ˜μ΄μ§€μ—μ„œ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•΄λ‹Ή μ§€μ‹œμ–΄λŠ” 정적인 포함을 μ˜λ―Έν•˜λ©°, JSP 파일이 컴파일될 λ•Œ 포함 파일의 λ‚΄μš©μ΄ μ‚½μž…λ©λ‹ˆλ‹€.

πŸ“ ν˜•μ‹: include μ§€μ‹œμ–΄λŠ” μ΄λ ‡κ²Œ μž‘μ„±ν•©λ‹ˆλ‹€:

<%@ include file="file경둜" %>

πŸ’‘ μ˜ˆμ‹œ: include μ§€μ‹œμ–΄μ˜ μ‹€μ œ μ‚¬μš© 방법:

<%@ include file="/template/header.jsp" %>
  • file: 포함할 파일의 경둜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 이 μ˜ˆμ‹œμ—μ„œλŠ” /template/header.jsp νŒŒμΌμ„ ν¬ν•¨ν•˜μ—¬ νŽ˜μ΄μ§€ 상단에 λ™μΌν•œ 헀더λ₯Ό 반볡적으둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. πŸ“š tag library Directive (νƒœκ·Έ 라이브러리 μ§€μ‹œμ–΄): μ»€μŠ€ν…€ νƒœκ·Έ ν™œμš©ν•˜κΈ°

🧐 μ„€λͺ…: taglib μ§€μ‹œμ–΄λž€ 무엇인가?:

  • taglib μ§€μ‹œμ–΄λŠ” JSTL(JSP Standard Tag Library)μ΄λ‚˜ μ‚¬μš©μž μ •μ˜ νƒœκ·Έ(Custom Tag)λ₯Ό JSP νŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©ν•  λ•Œ μ„ μ–Έν•©λ‹ˆλ‹€.
  • μ»€μŠ€ν…€ νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ JSP νŽ˜μ΄μ§€ λ‚΄μ—μ„œ μžλ°” μ½”λ“œλ₯Ό 쀄이고, νƒœκ·Έλ₯Ό 톡해 λ³΅μž‘ν•œ λ‘œμ§μ„ λ‹¨μˆœν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ ν˜•μ‹: taglib μ§€μ‹œμ–΄λŠ” μ΄λ ‡κ²Œ μž‘μ„±ν•©λ‹ˆλ‹€:

<%@ taglib prefix="c" uri="νƒœκ·Έ 라이브러리 경둜" %>

πŸ’‘ μ˜ˆμ‹œ: taglib μ§€μ‹œμ–΄μ˜ μ‹€μ œ μ‚¬μš© 방법:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • prefix: νƒœκ·Έ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ‚¬μš©ν•  접두사λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” cλΌλŠ” 접두사λ₯Ό μ‚¬μš©ν•˜μ—¬ JSTL의 μ½”μ–΄(core) νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜κ² λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
  • uri: νƒœκ·Έ 라이브러리의 μœ„μΉ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. μœ„ μ˜ˆμ‹œλŠ” JSTL μ½”μ–΄ νƒœκ·Έ 라이브러리λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ„ μ–Έμž…λ‹ˆλ‹€.

πŸ”§ Page μ§€μ‹œμ–΄: νŽ˜μ΄μ§€ μ„€μ • 세뢀사항

page μ§€μ‹œμ–΄λŠ” JSP νŽ˜μ΄μ§€κ°€ μ–΄λ–»κ²Œ μ²˜λ¦¬λ˜μ–΄μ•Ό 할지λ₯Ό μ •μ˜ν•˜λŠ” 속성듀을 μ œκ³΅ν•©λ‹ˆλ‹€. 각 μ†μ„±μ˜ κΈ°λ³Έκ°’κ³Ό μ„€λͺ…을 μžμ„Ένžˆ μ„€λͺ…ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

🌟 page μ§€μ‹œμ–΄ μ£Όμš” 속성: μ•Œμ•„λ‘μ–΄μ•Ό ν•  것듀

πŸ—£οΈ language: μ‚¬μš©ν•  μ–Έμ–΄ 지정

  • κΈ°λ³Έκ°’: java
  • μ„€λͺ…: JSP μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•  μ–Έμ–΄λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 기본적으둜 μžλ°”λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— νŠΉλ³„νžˆ λ³€κ²½ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

ℹ️ info: νŽ˜μ΄μ§€μ— λŒ€ν•œ 정보 제곡

  • κΈ°λ³Έκ°’: μ—†μŒ
  • μ„€λͺ…: ν˜„μž¬ JSP νŽ˜μ΄μ§€μ— λŒ€ν•œ μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€. κ°œλ°œμžκ°€ νŽ˜μ΄μ§€μ— λŒ€ν•œ 메타 정보λ₯Ό μΆ”κ°€ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

πŸ“° contentType: λ¬Έμ„œμ˜ μ½˜ν…μΈ  νƒ€μž… μ„€μ •

  • κΈ°λ³Έκ°’: text/html;charset=ISO-8859-1
  • μ„€λͺ…: λΈŒλΌμš°μ €λ‘œ μ „μ†‘λ˜λŠ” μ‘λ‹΅μ˜ MIME νƒ€μž…κ³Ό 문자 인코딩을 μ§€μ •ν•©λ‹ˆλ‹€. 기본적으둜 HTML λ¬Έμ„œμ™€ ISO-8859-1 문자 집합을 μ‚¬μš©ν•˜μ§€λ§Œ, 일반적으둜 UTF-8둜 μ„€μ •ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

πŸ”€ pageEncoding: νŽ˜μ΄μ§€μ˜ 인코딩 지정

  • κΈ°λ³Έκ°’: ISO-8859-1
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€μ˜ 문자 인코딩을 μ§€μ •ν•©λ‹ˆλ‹€. 이 섀정을 톡해 JSP νŽ˜μ΄μ§€κ°€ νŠΉμ • 문자 μΈμ½”λ”©μœΌλ‘œ μ €μž₯되고 μ²˜λ¦¬λ©λ‹ˆλ‹€.

πŸ“¦ import: ν•„μš”ν•œ 클래슀 κ°€μ Έμ˜€κΈ°

  • κΈ°λ³Έκ°’: μ—†μŒ
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©ν•  Java νŒ¨ν‚€μ§€λ‚˜ 클래슀λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. importλŠ” Java의 import λ¬Έκ³Ό λ™μΌν•œ 역할을 ν•˜λ©°, 예λ₯Ό λ“€μ–΄ 자주 μ‚¬μš©ν•˜λŠ” java.util.List 같은 클래슀λ₯Ό κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

πŸ‘₯ session: μ„Έμ…˜ μ‚¬μš© μ—¬λΆ€ μ„€μ •

  • κΈ°λ³Έκ°’: true
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€μ—μ„œ μ„Έμ…˜ 객체λ₯Ό μ‚¬μš©ν• μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 기본적으둜 μ„Έμ…˜μ€ ν™œμ„±ν™”λ˜μ–΄ 있으며, false둜 μ„€μ •ν•˜λ©΄ μ„Έμ…˜μ„ λΉ„ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🚫 errorPage: μ—λŸ¬ λ°œμƒ μ‹œ 이동할 νŽ˜μ΄μ§€ 지정

  • κΈ°λ³Έκ°’: μ—†μŒ
  • μ„€λͺ…: μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ λŒ€μ‹  μ²˜λ¦¬ν•  JSP νŽ˜μ΄μ§€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, error.jspλ₯Ό μ§€μ •ν•˜λ©΄ JSP νŽ˜μ΄μ§€μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•  경우 error.jsp둜 μžλ™μœΌλ‘œ ν¬μ›Œλ”©λ©λ‹ˆλ‹€.

❗ isErrorPage: μ—λŸ¬ νŽ˜μ΄μ§€ μ—¬λΆ€ μ„€μ •

  • κΈ°λ³Έκ°’: false
  • μ„€λͺ…: ν˜„μž¬ JSP νŽ˜μ΄μ§€κ°€ μ—λŸ¬ 핸듀링을 λ‹΄λ‹Ήν•˜λŠ” νŽ˜μ΄μ§€μΈμ§€ μ—¬λΆ€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. true둜 μ„€μ •λ˜λ©΄ ν•΄λ‹Ή νŽ˜μ΄μ§€μ—μ„œ μ˜ˆμ™Έ 객체λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’Ύ buffer: 버퍼 크기 μ„€μ •

  • κΈ°λ³Έκ°’: 8KB
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 응닡을 μ „μ†‘ν•˜κΈ° 전에 보관할 λ²„νΌμ˜ 크기λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 기본적으둜 8KB의 버퍼λ₯Ό μ‚¬μš©ν•˜λ©°, 응닡이 버퍼에 μ €μž₯된 ν›„ μ „μ†‘λ©λ‹ˆλ‹€.

πŸ”„ autoflush: 버퍼 μžλ™ λΉ„μš°κΈ° μ„€μ •

  • κΈ°λ³Έκ°’: true
  • μ„€λͺ…: 버퍼가 가득 찼을 λ•Œ, μžλ™μœΌλ‘œ λ‚΄μš©μ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전솑할지 μ—¬λΆ€λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. true일 경우 버퍼가 가득 μ°¨λ©΄ μžλ™μœΌλ‘œ λΉ„μ›Œμ§‘λ‹ˆλ‹€.

πŸ”’ isThreadsafe: λ©€ν‹° μ“°λ ˆλ“œ μ•ˆμ „μ„± μ„€μ •

  • κΈ°λ³Έκ°’: true
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€κ°€ λ©€ν‹° μ“°λ ˆλ“œμ—μ„œ μ•ˆμ „ν•˜κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 기본적으둜 true둜 μ„€μ •λ˜μ–΄ 있으며, false둜 μ„€μ •ν•˜λ©΄ JSP νŽ˜μ΄μ§€λŠ” SingleThread λͺ¨λΈλ‘œ λ™μž‘ν•˜μ—¬ ν•˜λ‚˜μ˜ μ“°λ ˆλ“œμ—μ„œλ§Œ μ„œλΉ„μŠ€λ©λ‹ˆλ‹€.

πŸ”— extends: 상속받을 클래슀 지정

  • κΈ°λ³Έκ°’: javax.servlet.jsp.HttpJspPage
  • μ„€λͺ…: ν˜„μž¬ JSP νŽ˜μ΄μ§€κ°€ μƒμ†λ°›λŠ” 클래슀λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 기본적으둜 JSP νŽ˜μ΄μ§€λŠ” HttpJspPage 클래슀λ₯Ό μƒμ†λ°›μŠ΅λ‹ˆλ‹€. 이 속성을 μ‚¬μš©ν•˜λ©΄ JSP νŽ˜μ΄μ§€κ°€ λ‹€λ₯Έ 클래슀λ₯Ό 상속받도둝 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”‘ JSP κΈ°λ³Έ λ‚΄μž₯ 객체: ν•„μˆ˜ 도ꡬ λͺ¨μŒ

πŸ“¨ request: ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­ 정보

  • Type: jakarta.servlet.http.HttpServletRequest
  • μ„€λͺ…: ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„°μ˜ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. 주둜 HTML 폼 μš”μ†Œμ˜ κ°’μ΄λ‚˜ μ‚¬μš©μž μž…λ ₯ 데이터λ₯Ό μ½μ–΄μ˜¬ λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. λ˜ν•œ, HTTP μš”μ²­ λ©”μ„œλ“œ(GET, POST λ“±)와 κ΄€λ ¨λœ 정보λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“€ response: μ„œλ²„μ˜ 응닡 처리

  • Type: jakarta.servlet.http.HttpServletResponse
  • μ„€λͺ…: ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 응닡을 보내기 μœ„ν•œ κ°μ²΄μž…λ‹ˆλ‹€. JSP νŽ˜μ΄μ§€μ—μ„œ λ™μ μœΌλ‘œ μƒμ„±λœ 데이터λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전솑할 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 응닡 헀더 μ„€μ •, μΏ ν‚€ 전솑, λ¦¬λ””λ ‰μ…˜ 처리 λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“‹ pageContext: νŽ˜μ΄μ§€ μ»¨ν…μŠ€νŠΈ 정보

  • Type: jakarta.servlet.jsp.PageContext
  • μ„€λͺ…: JSPμ—μ„œ 기본적으둜 μ œκ³΅λ˜λŠ” λͺ¨λ“  객체에 μ ‘κ·Όν•  수 있게 ν•΄μ£ΌλŠ” μƒμœ„ κ°μ²΄μž…λ‹ˆλ‹€. λ˜ν•œ, forward 및 include κΈ°λŠ₯을 ν™œμš©ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. νŽ˜μ΄μ§€ μ»¨ν…μŠ€νŠΈλŠ” νŽ˜μ΄μ§€μ˜ λͺ¨λ“  정보λ₯Ό ν¬ν•¨ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆ 역할을 ν•©λ‹ˆλ‹€.

πŸ‘₯ session: μ‚¬μš©μž μ„Έμ…˜ 관리

  • Type: jakarta.servlet.http.HttpSession
  • μ„€λͺ…: ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ μ„Έμ…˜ 정보λ₯Ό κ΄€λ¦¬ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. μ„Έμ…˜ 객체λ₯Ό 톡해 μ‚¬μš©μžμ˜ μƒνƒœλ₯Ό μœ μ§€ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈμ˜ 둜그인 μƒνƒœ, μž₯λ°”κ΅¬λ‹ˆ 정보 등을 μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. page μ§€μ‹œμ–΄μ—μ„œ session="false"둜 μ„€μ •ν•˜λ©΄ μ„Έμ…˜ κ°μ²΄λŠ” μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

🌐 application: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ²”μœ„ 객체

  • Type: jakarta.servlet.ServletContext
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€κ°€ μ†ν•œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전체에 λŒ€ν•œ 정보λ₯Ό κ³΅μœ ν•  수 μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ²”μœ„μ— μ†ν•˜λŠ” 데이터λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ λ‹€λ₯Έ μ„œλΈ”λ¦Ώκ³Ό 정보λ₯Ό κ³΅μœ ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.

πŸ–¨οΈ out: 좜λ ₯ 슀트림 처리

  • Type: jakarta.servlet.jsp.JspWriter
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€μ—μ„œ μƒμ„±λœ 데이터λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 주둜 HTML, ν…μŠ€νŠΈ 좜λ ₯에 μ‚¬μš©λ˜λ©°, out.println()을 톡해 데이터λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전달할 좜λ ₯ μŠ€νŠΈλ¦Όμ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

βš™οΈ config: μ„œλΈ”λ¦Ώ μ„€μ • 정보

  • Type: jakarta.servlet.ServletConfig
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€μ— λŒ€ν•œ μ΄ˆκΈ°ν™” νŒŒλΌλ―Έν„°μ™€ 같은 μ„€μ • 정보λ₯Ό ν¬ν•¨ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλ‘œλΆ€ν„° JSPκ°€ 싀행될 λ•Œ μ΄ˆκΈ°ν™”λ  수 μžˆλŠ” ν™˜κ²½μ„€μ •μ„ μ œκ³΅λ°›μŠ΅λ‹ˆλ‹€.

πŸ“„ page: ν˜„μž¬ νŽ˜μ΄μ§€ 객체

  • Type: java.lang.Object
  • μ„€λͺ…: ν˜„μž¬ JSP νŽ˜μ΄μ§€μ— λŒ€ν•œ μ°Έμ‘° λ³€μˆ˜μž…λ‹ˆλ‹€. JSPκ°€ λ³€ν™˜λœ μ„œλΈ”λ¦Ώμ˜ this에 ν•΄λ‹Ήν•˜λ©°, μžλ°” μ½”λ“œμ—μ„œ νŽ˜μ΄μ§€ 자체λ₯Ό μ°Έμ‘°ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

❗ exception: μ˜ˆμ™Έ 처리 객체

  • Type: java.lang.Exception
  • μ„€λͺ…: JSP νŽ˜μ΄μ§€μ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. isErrorPage="true"둜 μ„€μ •λœ JSP νŽ˜μ΄μ§€μ—μ„œλ§Œ μ‚¬μš©ν•  수 있으며, μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œ κ·Έ μ˜ˆμ™Έ 객체λ₯Ό μ°Έμ‘°ν•˜μ—¬ μ˜ˆμ™Έ 처리λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🌍 JSP κΈ°λ³Έ 객체의 μ˜μ—­(scope): λ°μ΄ν„°μ˜ 생λͺ…μ£ΌκΈ°

JSPμ—μ„œ κΈ°λ³Έ κ°μ²΄λŠ” νŠΉμ •ν•œ 유효 λ²”μœ„ λ‚΄μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. 이 유효 λ²”μœ„λ₯Ό scope라고 ν•˜λ©°, JSPμ—μ„œ 객체λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ„€ 가지 μ£Όμš” μ˜μ—­μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 μ˜μ—­λ“€μ€ 각각의 λͺ©μ μ— 따라 객체가 μ‘΄μž¬ν•˜λŠ” μ‹œκ°„κ³Ό λ²”μœ„λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 각 μ˜μ—­μ„ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

1. πŸ“„ page μ˜μ—­: νŽ˜μ΄μ§€ λ‚΄μ—μ„œλ§Œ 유효

  • μ„€λͺ…:
    • ν•˜λ‚˜μ˜ JSP νŽ˜μ΄μ§€λ₯Ό μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. 즉, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λ°œμƒν•˜λ©΄ κ·Έ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ ν•΄λ‹Ή JSP νŽ˜μ΄μ§€ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•œ 객체λ₯Ό μ €μž₯ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
    • ν•˜λ‚˜μ˜ JSP νŽ˜μ΄μ§€κ°€ 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ page 객체가 μƒμ„±λ˜λ©°, κ·Έ νŽ˜μ΄μ§€κ°€ λλ‚˜λ©΄ 객체도 μ†Œλ©Έλ©λ‹ˆλ‹€.
    • νŽ˜μ΄μ§€ μ˜μ—­μ„ λ²—μ–΄λ‚˜λ©΄ κ°μ²΄λŠ” μ‚¬λΌμ§€κ²Œ λ©λ‹ˆλ‹€. 즉, λ‹€λ₯Έ JSP νŽ˜μ΄μ§€μ—μ„œλŠ” 이 객체λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    • 주둜 μ»€μŠ€ν…€ νƒœκ·Έμ—μ„œ μƒˆλ‘œμš΄ λ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜, JSP νŽ˜μ΄μ§€ λ‚΄μ—μ„œλ§Œ μ‚¬μš©ν•  λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • νŠΉμ§•:
    • 단 ν•˜λ‚˜μ˜ page 객체만이 ν•΄λ‹Ή νŽ˜μ΄μ§€μ—μ„œ μœ νš¨ν•˜λ©°, νŽ˜μ΄μ§€ λ‚΄μ—μ„œλ§Œ 데이터λ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.
    • νŽ˜μ΄μ§€λ₯Ό λ„˜μ–΄μ„œλŠ” 데이터 전솑은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

2. πŸ“¨ request μ˜μ—­: μš”μ²­ λ‹¨μœ„λ‘œ 유효

  • μ„€λͺ…:
    • ν•˜λ‚˜μ˜ HTTP μš”μ²­μ„ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­μ„ 보낼 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ request 객체가 μƒμ„±λ˜λ©°, μš”μ²­μ΄ 끝날 λ•ŒκΉŒμ§€ μœ νš¨ν•©λ‹ˆλ‹€.
    • μš”μ²­μ΄ μ™„λ£Œλ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 응닡을 μ „μ†‘ν•˜λ©΄, request κ°μ²΄λŠ” μ†Œλ©Έλ©λ‹ˆλ‹€.
    • 주둜 폼 λ°μ΄ν„°λ‚˜ 쿼리슀트링과 같이 ν΄λΌμ΄μ–ΈνŠΈκ°€ μž…λ ₯ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • νŠΉμ§•:
    • 각 μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ request 객체가 μƒμ„±λ©λ‹ˆλ‹€.
    • 같은 μš”μ²­ λ‚΄μ—μ„œ λ‹€λ₯Έ JSPλ‚˜ μ„œλΈ”λ¦ΏμœΌλ‘œ 데이터λ₯Ό 전솑할 λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
    • 응닡이 λλ‚˜λ©΄ κ°μ²΄λŠ” μ‚¬λΌμ§€λ―€λ‘œ, ν•œ 번의 μš”μ²­μ— λŒ€ν•΄μ„œλ§Œ 데이터가 μœ νš¨ν•©λ‹ˆλ‹€.

3. πŸ‘₯ session μ˜μ—­: μ‚¬μš©μž μ„Έμ…˜ λ™μ•ˆ 유효

  • μ„€λͺ…:
    • μ‚¬μš©μžμ™€ μ„œλ²„ κ°„μ˜ μ„Έμ…˜ 정보λ₯Ό μœ μ§€ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. μ„Έμ…˜ κ°μ²΄λŠ” 같은 μ‚¬μš©μž(λΈŒλΌμš°μ €)κ°€ μ„œλ²„μ— μ—°κ²°λ˜μ–΄ μžˆλŠ” λ™μ•ˆ μ§€μ†λ©λ‹ˆλ‹€.
    • 둜그인 μ •λ³΄λ‚˜ μ‚¬μš©μž μ„€μ • λ“± μ„Έμ…˜ μœ μ§€κ°€ ν•„μš”ν•œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €λ₯Ό λ‹«κ±°λ‚˜, μ„Έμ…˜μ΄ 만료될 λ•ŒκΉŒμ§€ session κ°μ²΄λŠ” μœ μ§€λ©λ‹ˆλ‹€. λ™μΌν•œ μ‚¬μš©μžκ°€ μš”μ²­ν•˜λŠ” λͺ¨λ“  νŽ˜μ΄μ§€λŠ” 같은 session 객체λ₯Ό κ³΅μœ ν•˜κ²Œ λ©λ‹ˆλ‹€.
  • νŠΉμ§•:
    • ν•œ 번 μ„Έμ…˜μ΄ μƒμ„±λ˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €λ₯Ό λ‹«κ±°λ‚˜ μ„Έμ…˜μ΄ 만료될 λ•ŒκΉŒμ§€ 객체가 μœ μ§€λ©λ‹ˆλ‹€.
    • 같은 μ‚¬μš©μžκ°€ μš”μ²­ν•˜λŠ” νŽ˜μ΄μ§€ 간에 데이터λ₯Ό μœ μ§€ν•  수 μžˆμ–΄ μ‚¬μš©μžλ³„ 데이터 관리가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

4. 🌐 application μ˜μ—­: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „μ²΄μ—μ„œ 유효

  • μ„€λͺ…:
    • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „μ²΄μ—μ„œ κ³΅μœ λ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λ˜λ©΄ application 객체가 μƒμ„±λ˜λ©°, μ„œλ²„κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λ©λ‹ˆλ‹€.
    • 같은 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄μ˜ λͺ¨λ“  JSP νŽ˜μ΄μ§€μ™€ μ„œλΈ”λ¦Ώμ—μ„œ application 객체λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€.
    • 주둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „λ°˜μ—μ„œ μ‚¬μš©λ˜λŠ” 곡용 데이터λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • νŠΉμ§•:
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‹¨μœ„λ‘œ 데이터λ₯Ό μœ μ§€ν•©λ‹ˆλ‹€. 즉, λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈμ™€ λͺ¨λ“  μ„Έμ…˜μ—μ„œ κ³΅μœ λ©λ‹ˆλ‹€.
    • μ„œλ²„κ°€ μž¬μ‹œμž‘λ˜κΈ° μ „κΉŒμ§€ κ°μ²΄λŠ” κ³„μ†ν•΄μ„œ μœ μ§€λ©λ‹ˆλ‹€.

πŸ› οΈ JSP κΈ°λ³Έ 객체의 μ˜μ—­ λ©”μ„œλ“œ: 데이터 관리 방법

1. setAttribute(String name, Object value)

  • μ„€λͺ…:
    • 속성(attribute)을 μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.
    • name은 μ†μ„±μ˜ 이름을 λ‚˜νƒ€λ‚΄λ©°, valueλŠ” μ €μž₯ν•  λ°μ΄ν„°μž…λ‹ˆλ‹€. μ΄λ•Œ λ°μ΄ν„°λŠ” Object νƒ€μž…μœΌλ‘œ μ €μž₯되기 λ•Œλ¬Έμ— λͺ¨λ“  μžλ°” 객체λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, νŠΉμ • μ‚¬μš©μžμ˜ 정보λ₯Ό μ„Έμ…˜μ΄λ‚˜ μš”μ²­μ— μ €μž₯ν•  λ•Œ setAttributeλ₯Ό μ‚¬μš©ν•˜μ—¬ μ €μž₯ν•©λ‹ˆλ‹€.
  • μ‚¬μš© μ˜ˆμ‹œ:
    request.setAttribute("userName", "John Doe");
    session.setAttribute("userAge", 30);

2. getAttribute(String name)

  • μ„€λͺ…:
    • name에 ν•΄λ‹Ήν•˜λŠ” μ†μ„±μ˜ 값을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.
    • setAttribute둜 μ €μž₯된 값이 μžˆμ„ 경우 Object νƒ€μž…μœΌλ‘œ λ°˜ν™˜λ˜λ©°, 없을 경우 null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • λ°˜ν™˜λœ λ°μ΄ν„°λŠ” Object νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ—, ν•„μš”μ— 따라 μ μ ˆν•œ ν˜•λ³€ν™˜μ„ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ‚¬μš© μ˜ˆμ‹œ:
    String userName = (String) request.getAttribute("userName");
    Integer userAge = (Integer) session.getAttribute("userAge");

3. getAttributeNames()

  • μ„€λͺ…:
    • ν˜„μž¬ 객체에 μ €μž₯된 λͺ¨λ“  μ†μ„±λ“€μ˜ 이름(name)을 Enumeration 객체 ν˜•νƒœλ‘œ λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.
    • 이 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ JSP νŽ˜μ΄μ§€λ‚˜ μ„œλΈ”λ¦Ώμ—μ„œ ν˜„μž¬ μ €μž₯된 속성듀을 λͺ¨λ‘ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‚¬μš© μ˜ˆμ‹œ:
    Enumeration<String> attributeNames = request.getAttributeNames();
    while (attributeNames.hasMoreElements()) {
        String attributeName = attributeNames.nextElement();
        Object attributeValue = request.getAttribute(attributeName);
        // 각 속성 값에 λŒ€ν•œ 처리
    }

4. removeAttribute(String name)

  • μ„€λͺ…:
    • name에 ν•΄λ‹Ήν•˜λŠ” 속성을 μ‚­μ œν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. 즉, setAttribute둜 μ €μž₯된 속성을 μ œκ±°ν•©λ‹ˆλ‹€.
    • μ‚­μ œλœ ν›„μ—λŠ” getAttribute둜 ν•΄λ‹Ή 속성을 μ‘°νšŒν•΄λ„ null이 λ°˜ν™˜λ©λ‹ˆλ‹€.
    • 주둜 μ„Έμ…˜ μ’…λ£Œ μ‹œ μ‚¬μš©μžμ˜ 정보λ₯Ό μ‚­μ œν•˜κ±°λ‚˜, μš”μ²­μ΄ μ™„λ£Œλœ ν›„ λΆˆν•„μš”ν•œ 데이터λ₯Ό 정리할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ‚¬μš© μ˜ˆμ‹œ:
    request.removeAttribute("userName");
    session.removeAttribute("userAge");

πŸš€ WEB νŽ˜μ΄μ§€ 이동: forward와 sendRedirect

1. πŸ”„ forward(request, response) : μ„œλ²„ λ‚΄λΆ€μ—μ„œ νŽ˜μ΄μ§€ 이동

μ„€λͺ…:

  • forwardλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ 같은 μ„œλ²„ λ‚΄μ—μ„œ λ‹€λ₯Έ μžμ›(νŽ˜μ΄μ§€, μ„œλΈ”λ¦Ώ λ“±)으둜 μ „λ‹¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ„œλ²„ μΈ‘μ—μ„œ μ²˜λ¦¬λ˜λŠ” λ°©μ‹μ΄λ―€λ‘œ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‹€μ œλ‘œ νŽ˜μ΄μ§€κ°€ μ΄λ™ν–ˆλŠ”μ§€ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ› οΈ μ‚¬μš© 방법: forwardλŠ” μ΄λ ‡κ²Œ μ‚¬μš©ν•©λ‹ˆλ‹€

RequestDispatcher dispatcher = request.getRequestDispatcher(path);
dispatcher.forward(request, response);
  • RequestDispatcher 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ μ§€μ •ν•œ 경둜둜 μš”μ²­μ„ μ „λ‹¬ν•©λ‹ˆλ‹€. μ΄λ•Œ ν΄λΌμ΄μ–ΈνŠΈλŠ” URL이 λ³€κ²½λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

πŸ“ 이동 λ²”μœ„: 같은 μ„œλ²„ λ‚΄μ—μ„œλ§Œ

  • 동일 μ„œλ²„(project) λ‚΄ κ²½λ‘œμ—μ„œλ§Œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ„œλ²„λ‚˜ μ™ΈλΆ€ URL둜 이동할 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ”’ URL ν‘œμ‹œμ€„: λ³€κ²½λ˜μ§€ μ•ŠμŒ

  • ν΄λΌμ΄μ–ΈνŠΈμ˜ URL이 λ³€κ²½λ˜μ§€ μ•ŠμœΌλ©°, μ‚¬μš©μžλŠ” ν˜„μž¬ μ΄λ™λœ νŽ˜μ΄μ§€μ˜ URL을 확인할 수 μ—†μŠ΅λ‹ˆλ‹€. μ‹€μ œ μ΄λ™λœ νŽ˜μ΄μ§€μ˜ μ£Όμ†Œλ₯Ό μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ“¦ 객체: κΈ°μ‘΄ request와 response μœ μ§€

  • 기쑴의 request와 response 객체가 κ·ΈλŒ€λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. 즉, μ›λž˜μ˜ μš”μ²­ 객체에 λ‹΄κΈ΄ 데이터λ₯Ό κ·ΈλŒ€λ‘œ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

⚑ 속도: 빠름

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ μš”μ²­μ„ 보내지 μ•ŠκΈ° λ•Œλ¬Έμ— sendRedirect에 λΉ„ν•΄ λΉ λ¦…λ‹ˆλ‹€. μ„œλ²„μ—μ„œ μ²˜λ¦¬λ˜λ―€λ‘œ 좔가적인 HTTP μš”μ²­μ΄ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

πŸ’Ύ 데이터 μœ μ§€: request λ²”μœ„ 데이터 전달 κ°€λŠ₯

  • request 객체의 setAttribute(name, value)λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. forward λ°©μ‹μ—μ„œλŠ” request λ²”μœ„μ˜ 데이터가 μœ νš¨ν•˜κ²Œ μ „λ‹¬λ©λ‹ˆλ‹€.

2. πŸ”— sendRedirect: ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μƒˆ μš”μ²­ μ§€μ‹œ

μ„€λͺ…:

  • sendRedirectλŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μƒˆλ‘œμš΄ URL둜 μ΄λ™ν•˜λΌλŠ” 응닡을 보내어 λΈŒλΌμš°μ €κ°€ 직접 μƒˆλ‘œμš΄ μš”μ²­μ„ ν•˜λ„λ‘ ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ URL이 λ³€κ²½λ˜λ©°, μ™ΈλΆ€ μ„œλ²„λ‚˜ URLλ‘œλ„ 이동이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

πŸ› οΈ μ‚¬μš© 방법: sendRedirectλŠ” μ΄λ ‡κ²Œ μ‚¬μš©ν•©λ‹ˆλ‹€

response.sendRedirect(location);
  • ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μƒˆλ‘œμš΄ URL둜 μš”μ²­μ„ 보내도둝 μ§€μ‹œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ΄λ•Œ ν΄λΌμ΄μ–ΈνŠΈμ˜ λΈŒλΌμš°μ €κ°€ μƒˆλ‘œμš΄ URL둜 μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.

🌍 이동 λ²”μœ„: μ™ΈλΆ€ μ„œλ²„λ„ κ°€λŠ₯

  • 동일 μ„œλ²„λΏλ§Œ μ•„λ‹ˆλΌ, λ‹€λ₯Έ μ„œλ²„ λ˜λŠ” μ™ΈλΆ€ URLλ‘œλ„ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ΅¬κΈ€μ΄λ‚˜ λ‹€λ₯Έ μ›Ήμ‚¬μ΄νŠΈλ‘œλ„ λ¦¬λ””λ ‰μ…˜μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

πŸ”“ URL ν‘œμ‹œμ€„: 변경됨

  • μ΄λ™ν•˜λŠ” νŽ˜μ΄μ§€μ˜ URL둜 λ³€κ²½λ©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ΄λ™λœ νŽ˜μ΄μ§€μ˜ μƒˆλ‘œμš΄ URL을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“¦ 객체: μƒˆλ‘œμš΄ request와 response 생성

  • 기쑴의 request와 response κ°μ²΄λŠ” μ†Œλ©Έλ˜λ©°, μƒˆλ‘œμš΄ request와 response 객체가 μƒμ„±λ©λ‹ˆλ‹€. λ”°λΌμ„œ κΈ°μ‘΄ μš”μ²­μ—μ„œμ˜ λ°μ΄ν„°λŠ” μœ μ§€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

🐒 속도: 느림

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μƒˆλ‘œμš΄ HTTP μš”μ²­μ„ λ‹€μ‹œ 보내야 ν•˜λ―€λ‘œ forward에 λΉ„ν•΄ λŠλ¦½λ‹ˆλ‹€. λΈŒλΌμš°μ €κ°€ μƒˆλ‘œμš΄ νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•˜κΈ° λ•Œλ¬Έμ— λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ΄ ν•œ 번 더 λ°œμƒν•©λ‹ˆλ‹€.

❌ 데이터 μœ μ§€: request 데이터 μœ μ§€ λΆˆκ°€

  • request 객체에 데이터λ₯Ό μ €μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 데이터λ₯Ό μœ μ§€ν•˜λ €λ©΄ sessionμ΄λ‚˜ cookieλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. request λ²”μœ„μ˜ λ°μ΄ν„°λŠ” sendRedirectμ—μ„œ μ „λ‹¬λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

πŸ“ 정리: forward와 sendRedirect 비ꡐ

ꡬ뢄forward(request, response)sendRedirect(location)
μ‚¬μš© 방법RequestDispatcher dispatcher = ...response.sendRedirect(location)
이동 λ²”μœ„λ™μΌ μ„œλ²„ λ‚΄μ—μ„œλ§Œ 이동 κ°€λŠ₯동일 μ„œλ²„ 및 μ™ΈλΆ€ μ„œλ²„ λͺ¨λ‘ κ°€λŠ₯
location bar (URL ν‘œμ‹œ)κΈ°μ‘΄ URL μœ μ§€, μ΄λ™λœ νŽ˜μ΄μ§€μ˜ μ£Όμ†ŒλŠ” 확인 λΆˆκ°€μƒˆλ‘œμš΄ URL둜 λ³€κ²½
객체기쑴 request와 responseκ°€ κ·ΈλŒ€λ‘œ μ „λ‹¬λ¨μƒˆλ‘œμš΄ request와 responseκ°€ 생성됨
μ†λ„λΉ λ¦„λŠλ¦Ό
데이터 μœ μ§€request의 데이터 μœ μ§€ κ°€λŠ₯request의 λ°μ΄ν„°λŠ” μœ μ§€ λΆˆκ°€, sessionμ΄λ‚˜ cookie μ‚¬μš© ν•„μš”

forwardλŠ” 같은 μ„œλ²„ λ‚΄μ—μ„œ 데이터λ₯Ό μœ μ§€ν•˜λ©΄μ„œ λΉ λ₯΄κ²Œ νŽ˜μ΄μ§€λ₯Ό 이동할 λ•Œ μ‚¬μš©λ˜κ³ , sendRedirectλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ URL을 λ³€κ²½ν•˜λ©° μƒˆλ‘œμš΄ μš”μ²­μ„ 보내야 ν•  λ•Œ, ν˜Ήμ€ λ‹€λ₯Έ μ„œλ²„λ‚˜ μ™ΈλΆ€ URL둜 이동해야 ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. 각 λ°©μ‹μ˜ νŠΉμ„±μ„ μ΄ν•΄ν•˜κ³  상황에 맞게 μ‚¬μš©ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.


🎯 ν”„λ‘ νŠΈ 컨트둀러 νŒ¨ν„΄(Front Controller Pattern): μš”μ²­μ˜ 쀑앙 집쀑 처리

ν”„λ‘ νŠΈ 컨트둀러 νŒ¨ν„΄(Front Controller Pattern)은 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λͺ¨λ“  μš”μ²­μ„ ν•˜λ‚˜μ˜ μ„œλΈ”λ¦ΏμœΌλ‘œ ν†΅ν•©ν•˜μ—¬ μ²˜λ¦¬ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€. 이 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ 개의 μ„œλΈ”λ¦Ώμ„ κ°œλ³„μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” λŒ€μ‹ , 단일 μ§„μž…μ μ—μ„œ λͺ¨λ“  μš”μ²­μ„ λ°›μ•„μ„œ ν•„μš”ν•œ 둜직으둜 λΆ„λ°°ν•˜λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

πŸ’‘ 1. ν”„λ‘ νŠΈ 컨트둀러 νŒ¨ν„΄μ΄λž€?

  • ν”„λ‘ νŠΈ 컨트둀러 νŒ¨ν„΄μ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ 단일 μ§„μž…μ (주둜 ν•˜λ‚˜μ˜ μ„œλΈ”λ¦Ώ)을 톡해 μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  • 이 νŒ¨ν„΄μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ λ¨Όμ € ν•œ 곳으둜 λͺ¨μ€ ν›„, κ·Έ μš”μ²­μ— 따라 ν•΄λ‹Ή κΈ°λŠ₯을 μ²˜λ¦¬ν•  μ»¨νŠΈλ‘€λŸ¬λ‚˜ JSP νŽ˜μ΄μ§€λ‘œ ν¬μ›Œλ”©ν•˜κ±°λ‚˜ ν•„μš”ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 이 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ μ½”λ“œ 쀑볡을 쀄이고 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μœ μ§€ λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμ§€λ§Œ, ν•œ μ„œλΈ”λ¦Ώμ— λ„ˆλ¬΄ λ§Žμ€ μ½”λ“œκ°€ μ§‘μ€‘λ˜μ–΄ λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”„ 2. λ™μž‘ 방식: μš”μ²­μ—μ„œ μ‘λ‹΅κΉŒμ§€

  1. ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ΄ μ„œλ²„λ‘œ λ“€μ–΄μ˜΅λ‹ˆλ‹€.
  2. ν”„λ‘ νŠΈ 컨트둀러(Front Controller), 즉 ν•˜λ‚˜μ˜ μ„œλΈ”λ¦Ώμ΄ λͺ¨λ“  μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  3. 이 μ„œλΈ”λ¦Ώμ€ μš”μ²­μ˜ νŒŒλΌλ―Έν„° κ°’(action λ“±)을 λΆ„μ„ν•˜μ—¬, μ–΄λ–€ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν• μ§€ κ²°μ •ν•©λ‹ˆλ‹€.
  4. μš”μ²­μ— 따라 μ μ ˆν•œ μ„œλΉ„μŠ€, λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν˜ΈμΆœν•˜κ±°λ‚˜, JSP νŽ˜μ΄μ§€λ‘œ ν¬μ›Œλ”©ν•©λ‹ˆλ‹€.
  5. κ²°κ³Όλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘λ‹΅ν•©λ‹ˆλ‹€.

πŸ”’ 3. νŒŒλΌλ―Έν„°λ‘œ μš”μ²­ λΆ„κΈ° μ²˜λ¦¬ν•˜κΈ°

  • νŒŒλΌλ―Έν„°(action): ν΄λΌμ΄μ–ΈνŠΈκ°€ μ „μ†‘ν•˜λŠ” action νŒŒλΌλ―Έν„°λ₯Ό 톡해 λ‹€μ–‘ν•œ μš”μ²­μ„ ν•˜λ‚˜μ˜ μ„œλΈ”λ¦ΏμœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŒŒλΌλ―Έν„°μ— 따라 둜그인, νšŒμ›κ°€μž…, κ²Œμ‹œκΈ€ μž‘μ„± λ“± μ„œλ‘œ λ‹€λ₯Έ μž‘μ—…μ„ λΆ„κΈ° μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    String action = request.getParameter("action");
    
    if ("login".equals(action)) {
        // 둜그인 처리 둜직
    } else if ("register".equals(action)) {
        // νšŒμ›κ°€μž… 처리 둜직
    } else if ("post".equals(action)) {
        // κ²Œμ‹œκΈ€ μž‘μ„± 처리 둜직
    }
  • 각 μ•‘μ…˜λ³„λ‘œ 처리 λ‘œμ§μ„ λΆ„κΈ°: ν”„λ‘ νŠΈ μ»¨νŠΈλ‘€λŸ¬λŠ” 이 action νŒŒλΌλ―Έν„°λ₯Ό κΈ°μ€€μœΌλ‘œ, μš”μ²­λœ μž‘μ—…μ— λ§žλŠ” μ„œλΉ„μŠ€λ‚˜ JSP νŽ˜μ΄μ§€λ‘œ μš”μ²­μ„ ν¬μ›Œλ”©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄:

    • action=login일 경우 둜그인 λ‘œμ§μ„ μˆ˜ν–‰
    • action=register일 경우 νšŒμ›κ°€μž… λ‘œμ§μ„ μˆ˜ν–‰

πŸ† 4. μž₯점: 쀑앙 κ΄€λ¦¬μ˜ 이점

  • 쀑앙 집쀑 관리: λͺ¨λ“  μš”μ²­μ„ ν•˜λ‚˜μ˜ μ„œλΈ”λ¦Ώμ—μ„œ μ²˜λ¦¬ν•˜λ―€λ‘œ λ‘œκΉ…, λ³΄μ•ˆ, 인증 λ“±μ˜ 곡톡 μž‘μ—…μ„ 단일 μ§€μ μ—μ„œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ½”λ“œ 쀑볡 κ°μ†Œ: μš”μ²­λ§ˆλ‹€ κ°œλ³„ μ„œλΈ”λ¦Ώμ„ λ§Œλ“œλŠ” λŒ€μ‹ , ν•˜λ‚˜μ˜ μ„œλΈ”λ¦Ώμ—μ„œ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— μ€‘λ³΅λœ μ½”λ“œ μž‘μ„±μ΄ μ€„μ–΄λ“­λ‹ˆλ‹€.
  • μœ μ§€ λ³΄μˆ˜μ„± ν–₯상: λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 변경이 생기더라도 단일 μ„œλΈ”λ¦Ώμ—μ„œ μˆ˜μ •ν•˜λ©΄ λ˜λ―€λ‘œ μœ μ§€ 보수 μž‘μ—…μ΄ κ°„μ†Œν™”λ©λ‹ˆλ‹€.

⚠️ 5. 단점: λ³΅μž‘μ„± 증가 κ°€λŠ₯μ„±

  • μ„œλΈ”λ¦Ώ μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§: μ—¬λŸ¬ μž‘μ—…μ„ ν•˜λ‚˜μ˜ μ„œλΈ”λ¦Ώμ—μ„œ λͺ¨λ‘ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œκ°€ 길어지고 λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν™•μž₯μ„± λΆ€μ‘±: μš”μ²­μ΄ λ§Žμ•„μ§ˆμˆ˜λ‘ if-else λ˜λŠ” switch 문이 κΈΈμ–΄μ Έμ„œ, μ½”λ“œλ₯Ό κ΄€λ¦¬ν•˜κΈ° μ–΄λ €μ›Œμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Command νŒ¨ν„΄κ³Ό 같은 좔가적인 νŒ¨ν„΄μ„ λ„μž…ν•΄ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ³„λ„λ‘œ 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ–₯️ 6. JSPμ™€μ˜ 연계: ν”„λ‘ νŠΈ μ»¨νŠΈλ‘€λŸ¬μ™€ JSP

  • ν”„λ‘ νŠΈ μ»¨νŠΈλ‘€λŸ¬λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•œ ν›„, κ²°κ³Όλ₯Ό JSP νŽ˜μ΄μ§€λ‘œ ν¬μ›Œλ”©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, action=login으둜 둜그인 μ²˜λ¦¬κ°€ λλ‚œ ν›„, 결과에 따라 loginSuccess.jspλ‚˜ loginFailure.jsp둜 μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.
    • JSPλŠ” 주둜 λ·°(View) 역할을 ν•˜μ—¬, ν”„λ‘ νŠΈ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 처리된 κ²°κ³Όλ₯Ό μ‚¬μš©μžκ°€ λ³Ό 수 있게 ν•©λ‹ˆλ‹€.

πŸš€ 7. κ°œμ„  λ°©μ•ˆ: νŒ¨ν„΄μ˜ 단점 κ·Ήλ³΅ν•˜κΈ°

  • ν”„λ‘ νŠΈ 컨트둀러 νŒ¨ν„΄μ˜ 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ Command νŒ¨ν„΄μ΄λ‚˜ Handler νŒ¨ν„΄μ„ ν•¨κ»˜ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • 각 action을 κ°œλ³„ 클래슀둜 λΆ„λ¦¬ν•˜μ—¬ μ±…μž„μ„ λΆ„λ‹΄μ‹œν‚΄μœΌλ‘œμ¨, ν”„λ‘ νŠΈ 컨트둀러의 λ³΅μž‘μ„±μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”¬ JSP와 HTML의 μ‹€ν–‰ μˆœμ„œ 및 μž‘λ™ 원리

JSPλŠ” μ„œλ²„μ—μ„œ μžλ°” μ½”λ“œκ°€ λ¨Όμ € μ‹€ν–‰λ˜κ³ , κ·Έ κ²°κ³Όκ°€ HTML둜 λ³€ν™˜λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)μ—κ²Œ μ „λ‹¬λœλ‹€λŠ” 점을 λͺ…ν™•νžˆ 이해해야 ν•©λ‹ˆλ‹€. 이λ₯Ό ꡬ체적으둜 μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

🏁 1. μ„œλ²„μ—μ„œ μžλ°” μ½”λ“œκ°€ λ¨Όμ € μ‹€ν–‰λœλ‹€

  • JSP νŽ˜μ΄μ§€λŠ” μ„œλ²„μ—μ„œ μžλ°” μ½”λ“œμ™€ HTML이 κ²°ν•©λœ ν˜•νƒœλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. JSP νŒŒμΌμ€ λΈŒλΌμš°μ €μ—μ„œ 직접 μ‹€ν–‰λ˜μ§€ μ•Šκ³ , μ„œλ²„μ—μ„œ μžλ°” μ„œλΈ”λ¦Ώ(Servlet)으둜 λ³€ν™˜λœ ν›„ μ‹€ν–‰λ©λ‹ˆλ‹€.
  • μ΄λ•Œ JSP νŽ˜μ΄μ§€μ— ν¬ν•¨λœ μžλ°” μ½”λ“œλŠ” λ¨Όμ € μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜λ©°, κ·Έ 결과둜 HTML νŽ˜μ΄μ§€κ°€ μƒμ„±λ©λ‹ˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈ(μ‚¬μš©μž)λŠ” λΈŒλΌμš°μ €λ₯Ό 톡해 μ„œλ²„κ°€ λ°˜ν™˜ν•œ μ΅œμ’… HTML μ½”λ“œλ§Œμ„ 보게 λ©λ‹ˆλ‹€. λ”°λΌμ„œ μžλ°” μ½”λ“œκ°€ HTML 문법에 영ν–₯을 쀄 수 μ—†μŠ΅λ‹ˆλ‹€. μžλ°” μ½”λ“œ μ‹€ν–‰ ν›„μ˜ 결과만 HTML둜 반영될 λΏμž…λ‹ˆλ‹€.

πŸ“ˆ 2. μžλ°” μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œ

  • JSP νŽ˜μ΄μ§€λ₯Ό μ²˜λ¦¬ν•˜λŠ” μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

    1. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ°›μœΌλ©΄, JSP νŽ˜μ΄μ§€λ₯Ό μžλ°” μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€.

    2. JSP 내에 ν¬ν•¨λœ μžλ°” μ½”λ“œλŠ” μ„œλ²„μ—μ„œ λ¨Όμ € μ‹€ν–‰λ˜λ©°, 결과값을 HTML둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

    3. μ„œλ²„λŠ” λ³€ν™˜λœ HTML을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘λ‹΅μœΌλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

    4. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„κ°€ λ³΄λ‚΄μ˜¨ HTML을 λΈŒλΌμš°μ €μ—μ„œ λ Œλ”λ§ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

      예λ₯Ό λ“€μ–΄, JSP μ½”λ“œμ—μ„œ μžλ°” μ½”λ“œμ™€ HTML μ½”λ“œκ°€ ν•¨κ»˜ μž‘μ„±λœ 경우:

      <html>
      <body>
          <h1>μ•ˆλ…•ν•˜μ„Έμš”, ν˜„μž¬ μ‹œκ°μ€</h1>
          <%= new java.util.Date() %>
      </body>
      </html>
    • μ„œλ²„λŠ” <%= new java.util.Date() %> 뢀뢄을 μžλ°” μ½”λ“œλ‘œ μ‹€ν–‰ν•œ ν›„, κ·Έ 결과인 ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ HTML μ½”λ“œμ— μ‚½μž…ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€.
    • μ΅œμ’…μ μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈλŠ” HTML μ½”λ“œλ§Œ 보게 되고, λΈŒλΌμš°μ €μ—μ„œ μžλ°” μ½”λ“œλ₯Ό μ‹€ν–‰ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

🚫 3. HTML λ¬Έλ²•μœΌλ‘œ μžλ°” μ½”λ“œ 싀행을 막을 수 μ—†λ‹€

  • HTML은 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μ²˜λ¦¬λ˜λŠ” λ§ˆν¬μ—… μ–Έμ–΄μž…λ‹ˆλ‹€. λ°˜λ©΄μ—, μžλ°” μ½”λ“œλŠ” μ„œλ²„μ—μ„œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

  • HTML은 λ‹¨μˆœνžˆ ν…μŠ€νŠΈλ‘œ μž‘μ„±λœ λ§ˆν¬μ—…μ΄κΈ° λ•Œλ¬Έμ—, μ„œλ²„ μΈ‘μ—μ„œ μ‹€ν–‰λ˜λŠ” μžλ°” μ½”λ“œλ₯Ό μ œμ–΄ν•  수 μžˆλŠ” λŠ₯λ ₯이 μ—†μŠ΅λ‹ˆλ‹€. 즉, HTML 주석을 μ‚¬μš©ν•΄μ„œ μžλ°” μ½”λ“œλ₯Ό λΉ„ν™œμ„±ν™”ν•˜κ±°λ‚˜ 싀행을 λ§‰λŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄, λ‹€μŒ μ½”λ“œλŠ” HTML μ£Όμ„μœΌλ‘œ 감싸진 μžλ°” μ½”λ“œμž…λ‹ˆλ‹€:

    <!-- <%= new java.util.Date() %> -->
    • 이 κ²½μš°μ—λ„ μžλ°” μ½”λ“œλŠ” μ—¬μ „νžˆ μ„œλ²„μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. HTML 주석은 λΈŒλΌμš°μ €μ—μ„œ ν•΄λ‹Ή μ½”λ“œλ₯Ό 화면에 ν‘œμ‹œν•˜μ§€ μ•Šμ„ 뿐이지, μ„œλ²„μ—μ„œ μžλ°” μ½”λ“œμ˜ 싀행을 막을 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ“ 4. μžλ°” μ½”λ“œ 싀행을 λ§‰μœΌλ €λ©΄ JSP 주석을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€

  • JSP νŽ˜μ΄μ§€μ—μ„œ μ„œλ²„ μΈ‘μ—μ„œ μžλ°” μ½”λ“œμ˜ 싀행을 막고 싢을 λ•ŒλŠ” JSP 주석을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. JSP 주석은 μžλ°” μ½”λ“œκ°€ μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜μ§€ μ•Šλ„λ‘ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    JSP 주석은 λ‹€μŒκ³Ό 같은 ν˜•νƒœμž…λ‹ˆλ‹€:

    <%-- 이 뢀뢄은 JSP μ£Όμ„μž…λ‹ˆλ‹€. μžλ°” μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. --%>

    이 λ°©μ‹μœΌλ‘œ 주석을 μ²˜λ¦¬ν•˜λ©΄, ν•΄λ‹Ή μžλ°” μ½”λ“œλŠ” μ„œλ²„μ—μ„œ 컴파일 및 μ‹€ν–‰λ˜μ§€ μ•ŠμœΌλ©°, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œλ„ μ „λ‹¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이와 달리 HTML 주석은 λΈŒλΌμš°μ €μ—κ²Œ ν•΄λ‹Ή 뢀뢄을 화면에 좜λ ₯ν•˜μ§€ 말라고 μš”μ²­ν•  뿐, μ„œλ²„ 츑의 μžλ°” μ½”λ“œ μ‹€ν–‰μ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

❓ 5. JSP 주석과 HTML μ£Όμ„μ˜ 차이점

  • HTML 주석 (<!-- -->):

    • HTML μ½”λ“œμ˜ 일뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 좜λ ₯λ˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
    • μžλ°” μ½”λ“œλ₯Ό HTML μ£Όμ„μœΌλ‘œ 감싸도, ν•΄λ‹Ή μžλ°” μ½”λ“œλŠ” μ„œλ²„μ—μ„œ μ—¬μ „νžˆ μ‹€ν–‰λ©λ‹ˆλ‹€.
  • JSP 주석 (<%-- --%>):

    • JSP 주석은 μ„œλ²„μ—μ„œ μžλ°” μ½”λ“œμ˜ 싀행을 λ§‰μŠ΅λ‹ˆλ‹€.
    • 이 주석은 μ„œλ²„μ—μ„œ 처리되며, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄:

    <%-- 
    이 μžλ°” μ½”λ“œλŠ” μ‹€ν–‰λ˜μ§€ μ•ŠμŒ.
    <%= new java.util.Date() %>
    --%>
  • 이 κ²½μš°μ—λŠ” 주석 처리된 μžλ°” μ½”λ“œκ°€ μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œλ„ μ „λ‹¬λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λΈŒλΌμš°μ € μ†ŒμŠ€ μ½”λ“œμ—μ„œλ„ 확인할 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ’‘ 6. μ„œλ²„ μ½”λ“œκ°€ λ¨Όμ € 싀행됨을 μ΄ν•΄ν•˜μž

  • JSPλŠ” μ„œλ²„ μΈ‘μ—μ„œ λ¨Όμ € μ‹€ν–‰λœ ν›„ κ²°κ³Όλ₯Ό HTML둜 λ°˜ν™˜ν•˜λ―€λ‘œ, μ„œλ²„μ—μ„œμ˜ 처리 κ²°κ³Όκ°€ μ–΄λ–»κ²Œ HTML둜 λ³€ν™˜λ˜μ–΄ μ „λ‹¬λ˜λŠ”μ§€ λ°˜λ“œμ‹œ 이해해야 ν•©λ‹ˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ 보낼 λ•Œλ§ˆλ‹€ JSP νŽ˜μ΄μ§€ λ‚΄μ˜ μžλ°” μ½”λ“œκ°€ μ„œλ²„μ—μ„œ λ¨Όμ € 처리되고, κ·Έ κ²°κ³Όκ°€ HTML둜 좜λ ₯λœλ‹€λŠ” 것을 항상 μΈμ§€ν•˜κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

0개의 λŒ“κΈ€