S06L07 – μ‚¬μš©μž μΆ”κ°€ 양식

“`html

JSP 양식을 μ‚¬μš©ν•˜μ—¬ Java μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜λŠ” 방법: μ’…ν•© κ°€μ΄λ“œ

λͺ©μ°¨

  1. μ†Œκ°œ
  2. 컨트둀러 μ„€μ •
  3. νŒ¨ν‚€μ§€ 및 μ–΄λ…Έν…Œμ΄μ…˜ μ—…λ°μ΄νŠΈ
  4. μ‚¬μš©μž μΆ”κ°€ λ©”μ„œλ“œ 생성
  5. JSP 양식 μž‘μ„±
  6. web.xml 및 Maven 쒅속성 μ—…λ°μ΄νŠΈ
  7. μ‚¬μš©μž μΆ”κ°€ κΈ°λŠ₯ ν…ŒμŠ€νŠΈ
  8. κ²°λ‘ 
  9. μΆ”κ°€ 자료

μ†Œκ°œ

μ›Ή 개발의 μ§„ν™”ν•˜λŠ” ν™˜κ²½μ—μ„œ μ‚¬μš©μž 데이터λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜λŠ” 것은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 이 κ°€μ΄λ“œλŠ” JSP (JavaServer Pages) 양식을 μ‚¬μš©ν•˜μ—¬ Java μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜λŠ” 과정을 λ‹€λ£Ήλ‹ˆλ‹€. κ΅¬μ‘°ν™”λœ MVC (Model-View-Controller) μ•„ν‚€ν…μ²˜λ₯Ό 따라 κ°œλ°œμžλŠ” 쑰직적이고 μœ μ§€ 관리가 μš©μ΄ν•˜λ©° ν™•μž₯ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 νŠœν† λ¦¬μ–Όμ€ μ΄ˆλ³΄μžμ™€ κΈ°λ³Έ 지식을 가진 개발자λ₯Ό μœ„ν•΄ μ„€κ³„λ˜μ—ˆμœΌλ©°, μ‚¬μš©μž μΆ”κ°€ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” λͺ…ν™•ν•˜κ³  κ°„κ²°ν•œ 경둜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.


컨트둀러 μ„€μ •

컨트둀러 정리

잘 μ •λ¦¬λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 관심사λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ½”λ“œλ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³  ν™•μž₯ν•˜κΈ° μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€. 일반적으둜 HomeControllerλŠ” ν™ˆνŽ˜μ΄μ§€ 및 였λ₯˜ νŽ˜μ΄μ§€μ™€ 같은 ν™ˆ κ΄€λ ¨ νŽ˜μ΄μ§€λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 컀짐에 따라 단일 μ»¨νŠΈλ‘€λŸ¬λŠ” 특히 λ‹€μ–‘ν•œ doGet 및 doPost λ©”μ„œλ“œκ°€ λ‹€λ₯Έ 경둜λ₯Ό μ²˜λ¦¬ν•  λ•Œ λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

쑰직을 μœ μ§€ν•˜κΈ° μœ„ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŠΉμ • 뢀뢄을 μ²˜λ¦¬ν•˜λŠ” μΆ”κ°€ 컨트둀러λ₯Ό λ„μž…ν•©λ‹ˆλ‹€. 이 λͺ¨λ“ˆμ‹ μ ‘κ·Ό 방식은 각 μ»¨νŠΈλ‘€λŸ¬κ°€ λͺ…ν™•ν•œ μ±…μž„μ„ 지도둝 ν•˜μ—¬ 가독성과 μœ μ§€ 관리성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

μ‚¬μ΄νŠΈ 컨트둀러 μΆ”κ°€

μ‚¬μ΄νŠΈ 별 μž‘μ—…μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ SiteControllerλΌλŠ” μƒˆ 컨트둀러λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 이 μ»¨νŠΈλ‘€λŸ¬λŠ” λͺ¨λ“  μ‚¬μ΄νŠΈ κ΄€λ ¨ νŽ˜μ΄μ§€λ₯Ό κ΄€λ¦¬ν•˜μ—¬ HomeController와 κ΅¬λΆ„ν•©λ‹ˆλ‹€.

μ‚¬μ΄νŠΈ 컨트둀러 μΆ”κ°€ 단계:

  1. 컨트둀러 생성:
    • IDEμ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό 마우슀 였λ₯Έμͺ½ λ²„νŠΌμœΌλ‘œ ν΄λ¦­ν•©λ‹ˆλ‹€.
    • New > Servlet으둜 μ΄λ™ν•©λ‹ˆλ‹€.
    • μ„œλΈ”λ¦Ώ 이름을 SiteController둜 μ§€μ •ν•©λ‹ˆλ‹€.
  2. URL 맀핑 ꡬ성:
    • μ‚¬μ΄νŠΈ νŠΉμ • μš”μ²­μ„ μ²˜λ¦¬ν•  URL 맀핑을 μ„€μ •ν•©λ‹ˆλ‹€, 예: /site.
    • doGet 및 doPost λ©”μ„œλ“œ λͺ¨λ‘ ν¬ν•¨λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
    • μ¦‰μ‹œ ν•„μš”ν•˜μ§€ μ•Šμ€ 경우 μƒμ„±μžλ₯Ό μƒλž΅ν•˜μ—¬ λ‹¨μˆœμ„±μ„ μœ μ§€ν•©λ‹ˆλ‹€.
  3. κΈ°μ‘΄ μ½”λ“œ λ¦¬νŒ©ν† λ§:
    • HomeControllerμ—μ„œ μ‚¬μ΄νŠΈ κ΄€λ ¨ switch 사둀λ₯Ό μƒˆλ‘œ μƒμ„±λœ SiteController둜 μ΄λ™ν•©λ‹ˆλ‹€.
    • HomeControllerμ—μ„œλŠ” ν™ˆνŽ˜μ΄μ§€ 및 κΈ°λ³Έ 사둀와 같은 ν™ˆ κ΄€λ ¨ μ‚¬λ‘€λ§Œ μœ μ§€ν•˜λ„λ‘ λΆˆν•„μš”ν•œ 사둀λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.

SiteController에 μ‚¬μ΄νŠΈ νŠΉμ • μž‘μ—…μ„ μœ„μž„ν•¨μœΌλ‘œμ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄μ—μ„œ λͺ…ν™•μ„±κ³Ό κ΄€μ‹¬μ‚¬μ˜ 뢄리λ₯Ό ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.


νŒ¨ν‚€μ§€ 및 μ–΄λ…Έν…Œμ΄μ…˜ μ—…λ°μ΄νŠΈ

Javaxμ—μ„œ Jakarta둜 μ „ν™˜

ν˜„λŒ€ Java μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Javax의 ν›„κ³„μžμΈ Jakarta Servlet APIλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. νŒ¨ν‚€μ§€ 이름을 javaxμ—μ„œ jakarta둜 μ—…λ°μ΄νŠΈν•˜λ©΄ μ΅œμ‹  ν‘œμ€€κ³Ό ν˜Έν™˜μ„±μ„ μœ μ§€ν•˜κ³  Jakarta의 지속적인 개발 ν˜œνƒμ„ λˆ„λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

νŒ¨ν‚€μ§€ 이름 μ—…λ°μ΄νŠΈ 단계:

  1. νŒ¨ν‚€μ§€ μ„ μ–Έ μˆ˜μ •:
    • λͺ¨λ“  javax.servlet μΈμŠ€ν„΄μŠ€λ₯Ό jakarta.servlet둜 κ΅μ²΄ν•©λ‹ˆλ‹€.
  2. μž„ν¬νŠΈ λ¬Έ μ—…λ°μ΄νŠΈ:
    • λͺ¨λ“  μž„ν¬νŠΈ 문이 μƒˆ νŒ¨ν‚€μ§€ 이름을 λ°˜μ˜ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
  3. IDE λ¦¬νŒ©ν† λ§ 도ꡬ μ‚¬μš©:
    • IDE의 λ¦¬νŒ©ν† λ§ κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬ μ°Έμ‘°λ₯Ό μžλ™μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜κ³  μˆ˜λ™ 였λ₯˜ κ°€λŠ₯성을 μ€„μž…λ‹ˆλ‹€.

μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš© vs. XML ꡬ성

μ–΄λ…Έν…Œμ΄μ…˜μ€ 전톡적인 XML 기반 ꡬ성인 web.xml을 λŒ€μ²΄ν•˜μ—¬ μ„œλΈ”λ¦Ώμ„ κ΅¬μ„±ν•˜λŠ” κ°„μ†Œν™”λœ 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžλŠ” ꡬ성 메타데이터λ₯Ό μ½”λ“œ 내에 직접 포함할 수 μžˆμ–΄ μœ μ§€ 관리가 μš©μ΄ν•˜κ³  가독성이 ν–₯μƒλ©λ‹ˆλ‹€.

μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš©μ˜ μž₯점:

  • λ‹¨μˆœμ„±: κ΄‘λ²”μœ„ν•œ XML κ΅¬μ„±μ˜ ν•„μš”μ„±μ„ μ€„μž…λ‹ˆλ‹€.
  • μœ μ§€ 관리성: ꡬ성 변경이 μ½”λ“œμ— κ΅­ν•œλ˜μ–΄ 관리가 μš©μ΄ν•©λ‹ˆλ‹€.
  • λͺ…ν™•μ„±: μ„œλΈ”λ¦Ώκ³Ό 맀핑 κ°„μ˜ 연관성을 μ½”λ“œλ² μ΄μŠ€ λ‚΄μ—μ„œ κ°•μ‘°ν•©λ‹ˆλ‹€.

μ–΄λ…Έν…Œμ΄μ…˜ κ΅¬ν˜„:

  1. @WebServlet μ–΄λ…Έν…Œμ΄μ…˜ μΆ”κ°€:
    • SiteController ν΄λž˜μŠ€μ— @WebServlet을 μž₯μ‹ν•©λ‹ˆλ‹€.
    • μ–΄λ…Έν…Œμ΄μ…˜ λ‚΄μ—μ„œ URL νŒ¨ν„΄μ„ 직접 μ •μ˜ν•˜μ—¬ λ³„λ„μ˜ XML 맀핑이 ν•„μš” 없도둝 ν•©λ‹ˆλ‹€.
    @WebServlet("/site")
    public class SiteController extends HttpServlet {
        // 컨트둀러 λ©”μ„œλ“œ
    }
  2. XML 맀핑 제거:
    • μ–΄λ…Έν…Œμ΄μ…˜μ΄ 적용되면 web.xmlμ—μ„œ ν•΄λ‹Ή μ„œλΈ”λ¦Ώ 맀핑을 μ œκ±°ν•©λ‹ˆλ‹€.

μ–΄λ…Έν…Œμ΄μ…˜μ„ μ±„νƒν•¨μœΌλ‘œμ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ성 방식을 ν˜„λŒ€ν™”ν•˜κ³ , ν˜„λŒ€ Java 개발 관행에 맞μΆ₯λ‹ˆλ‹€.


μ‚¬μš©μž μΆ”κ°€ λ©”μ„œλ“œ 생성

doPost λ©”μ„œλ“œ κ΅¬ν˜„

컨트둀러의 doPost λ©”μ„œλ“œλŠ” 양식 제좜과 같은 λ“€μ–΄μ˜€λŠ” POST μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€. μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•œ μ „μš© λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λ©΄ μ‚¬μš©μž 데이터가 μ•ˆμ „ν•˜κ³  효율적으둜 μ²˜λ¦¬λ©λ‹ˆλ‹€.

doPost κ΅¬ν˜„ 단계:

  1. κΈ°μ‘΄ doPost λ©”μ„œλ“œ 볡제:
    • HomeControllerμ—μ„œ κΈ°μ‘΄ doPost λ©”μ„œλ“œλ₯Ό λ³΅μ‚¬ν•©λ‹ˆλ‹€.
    • 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ SiteController에 λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€.
  2. λ©”μ„œλ“œ 이름 λ³€κ²½:
    • λ©”μ„œλ“œ 이름을 listUsers둜 λ³€κ²½ν•˜μ—¬ κΈ°λŠ₯을 μ •ν™•ν•˜κ²Œ λ°˜μ˜ν•©λ‹ˆλ‹€.
    • protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          listUsers(request, response);
      }
  3. λ©”μ„œλ“œ κ°„μ†Œν™”:
    • λΆˆν•„μš”ν•œ 쀄을 μ œκ±°ν•˜κ³  ν•„μˆ˜ μž‘μ—…λ§Œ μœ μ§€ν•©λ‹ˆλ‹€.
    • listUsers λ©”μ„œλ“œλ₯Ό doPost λ‚΄μ—μ„œ ν˜ΈμΆœν•˜μ—¬ μš”μ²­μ„ 효과적으둜 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

μ‚¬μš©μž μΆ”κ°€ 처리

μ‚¬μš©μž μΆ”κ°€λ₯Ό μš©μ΄ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ SiteController 내에 addUserλΌλŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” 양식 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έ μž‘μš©ν•˜μ—¬ μƒˆλ‘œμš΄ μ‚¬μš©μž 정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

μ‚¬μš©μž μΆ”κ°€ 처리 단계:

  1. addUser λ©”μ„œλ“œ μ •μ˜:
    private void addUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String title = "Add User";
        RequestDispatcher dispatcher = request.getRequestDispatcher("addUser.jsp");
        request.setAttribute("title", title);
        dispatcher.forward(request, response);
    }
  2. Switch 문에 사둀 μΆ”κ°€:
    • addUser μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ switch 문에 μƒˆλ‘œμš΄ 사둀λ₯Ό ν†΅ν•©ν•©λ‹ˆλ‹€.
    • case "adduser":
          addUser(request, response);
          break;
  3. JSP둜 ν¬μ›Œλ”©:
    • λ©”μ„œλ“œλŠ” μ‚¬μš©μž μ„ΈλΆ€ 정보λ₯Ό μž…λ ₯ν•  수 μžˆλŠ” addUser.jsp둜 μš”μ²­μ„ ν¬μ›Œλ”©ν•©λ‹ˆλ‹€.

μ „μš© λ©”μ„œλ“œλ₯Ό 톡해 μ‚¬μš©μž μΆ”κ°€λ₯Ό μ²΄κ³„μ μœΌλ‘œ μ²˜λ¦¬ν•¨μœΌλ‘œμ¨ 데이터 μ²˜λ¦¬κ°€ 쑰직적이고 μ•ˆμ „ν•˜κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.


JSP 양식 μž‘μ„±

addUser.jsp 생성

JSP 양식은 μƒˆλ‘œμš΄ μ‚¬μš©μž μ„ΈλΆ€ 정보λ₯Ό μž…λ ₯ν•˜λŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ 역할을 ν•©λ‹ˆλ‹€. μ „μš© JSP νŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•˜λ©΄ μ‚¬μš©μž κ²½ν—˜μ΄ ν–₯μƒλ˜κ³  μ„œλ²„λ‘œμ˜ 데이터 제좜이 κ°„μ†Œν™”λ©λ‹ˆλ‹€.

addUser.jsp 생성 단계:

  1. μ›Ή μ•± λ””λ ‰ν† λ¦¬λ‘œ 이동:
    • ν”„λ‘œμ νŠΈ κ΅¬μ‘°μ—μ„œ src/main/webapp으둜 μ΄λ™ν•©λ‹ˆλ‹€.
  2. μƒˆ JSP 파일 생성:
    • 마우슀 였λ₯Έμͺ½ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ³  New > JSP File을 μ„ νƒν•©λ‹ˆλ‹€.
    • 파일 이름을 addUser.jsp둜 μ§€μ •ν•©λ‹ˆλ‹€.
  3. 양식 λ””μžμΈ:
    • username, password, email λ“±κ³Ό 같은 μ‚¬μš©μž μ„ΈλΆ€ 정보λ₯Ό μΊ‘μ²˜ν•˜λŠ” 양식을 κ΅¬ν˜„ν•©λ‹ˆλ‹€.
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Add User</title>
    </head>
    <body>
        <h1>Add New User</h1>
        <form action="${pageContext.request.contextPath}/site" method="post">
            <input type="hidden" name="page" value="addUser" />
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" required><br><br>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" required><br><br>
            <label for="email">Email:</label>
            <input type="email" id="email" name="email" required><br><br>
            <input type="submit" value="Add User">
        </form>
    </body>
    </html>
  4. 헀더 및 ν‘Έν„° 포함:
    • μ„ νƒμ μœΌλ‘œ, μΌκ΄€λœ λ ˆμ΄μ•„μ›ƒμ„ μœ„ν•΄ header.jsp와 footer.jspλ₯Ό ν†΅ν•©ν•©λ‹ˆλ‹€.

μ „μš© JSP 양식을 μƒμ„±ν•¨μœΌλ‘œμ¨ μ‚¬μš©μžλŠ” μƒˆλ‘œμš΄ μ‚¬μš©μž 정보λ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•œ λͺ…ν™•ν•˜κ³  직관적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅λ°›μŠ΅λ‹ˆλ‹€.

양식 μ•‘μ…˜ ꡬ성

양식 μ•‘μ…˜μ„ μ μ ˆν•˜κ²Œ κ΅¬μ„±ν•˜λ©΄ 제좜된 데이터가 μ μ ˆν•œ 컨트둀러 λ©”μ„œλ“œλ‘œ μ •ν™•ν•˜κ²Œ μ „λ‹¬λ©λ‹ˆλ‹€.

양식 μ•‘μ…˜ ꡬ성 단계:

  1. μ•‘μ…˜ 속성 μ„€μ •:
    • action 속성이 SiteControllerλ₯Ό 가리킀도둝 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • <form action="${pageContext.request.contextPath}/site" method="post">
  2. νŽ˜μ΄μ§€ λ§€κ°œλ³€μˆ˜μš© μˆ¨κ²¨μ§„ μž…λ ₯ μ •μ˜:
    • μž‘μ—…(addUser)을 μ§€μ •ν•˜κΈ° μœ„ν•΄ μˆ¨κ²¨μ§„ μž…λ ₯을 ν¬ν•¨ν•©λ‹ˆλ‹€.
    • <input type="hidden" name="page" value="addUser" />
  3. 양식 제좜 처리:
    • 제좜 μ‹œ, SiteControllerλŠ” addUser λ§€κ°œλ³€μˆ˜λ₯Ό μ‹λ³„ν•˜κ³  ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

이 ꡬ성을 톡해 양식 데이터가 μ •ν™•ν•˜κ²Œ SiteController의 addUser λ©”μ„œλ“œλ‘œ λΌμš°νŒ…λ˜μ–΄ μ²˜λ¦¬λ©λ‹ˆλ‹€.


web.xml 및 Maven 쒅속성 μ—…λ°μ΄νŠΈ

μ„œλΈ”λ¦Ώ 맀핑 제거

μ–΄λ…Έν…Œμ΄μ…˜ λ„μž…μœΌλ‘œ 인해 web.xml λ‚΄μ˜ λͺ…μ‹œμ  μ„œλΈ”λ¦Ώ 맀핑이 λΆˆν•„μš”ν•΄μ§‘λ‹ˆλ‹€. μ΄λŸ¬ν•œ 맀핑을 μ œκ±°ν•˜λ©΄ ꡬ성이 κ°„μ†Œν™”λ˜κ³  잠재적인 좩돌이 μ€„μ–΄λ“­λ‹ˆλ‹€.

μ„œλΈ”λ¦Ώ 맀핑 제거 단계:

  1. web.xml μ—΄κΈ°:
    • ν”„λ‘œμ νŠΈ κ΅¬μ‘°μ—μ„œ WEB-INF/web.xml둜 μ΄λ™ν•©λ‹ˆλ‹€.
  2. λΆˆν•„μš”ν•œ 맀핑 μ‚­μ œ:
    • μ–΄λ…Έν…Œμ΄μ…˜μ΄ 이제 이 ꡬ성을 μ²˜λ¦¬ν•˜λ―€λ‘œ SiteController와 κ΄€λ ¨λœ μ„œλΈ”λ¦Ώ 맀핑을 μ œκ±°ν•©λ‹ˆλ‹€.
    • <!-- λ‹€μŒ μ„œλΈ”λ¦Ώ 맀핑을 μ œκ±°ν•˜μ‹­μ‹œμ˜€ -->
      <servlet-mapping>
          <servlet-name>SiteController</servlet-name>
          <url-pattern>/site</url-pattern>
      </servlet-mapping>
  3. λ³€κ²½ 사항 μ €μž₯:
    • 제거된 μ„œλΈ”λ¦Ώ 맀핑에 λŒ€ν•œ λͺ¨λ“  μ°Έμ‘°κ°€ μ‚­μ œλ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜μ—¬ ν˜Όλ™μ„ ν”Όν•©λ‹ˆλ‹€.

μ€‘λ³΅λœ μ„œλΈ”λ¦Ώ 맀핑을 μ œκ±°ν•¨μœΌλ‘œμ¨ κΉ”λ”ν•˜κ³  효율적인 ꡬ성 섀정을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Maven 쒅속성 μΆ”κ°€

Maven은 ν”„λ‘œμ νŠΈ 쒅속성을 κ΄€λ¦¬ν•˜μ—¬ λΉŒλ“œ 및 λŸ°νƒ€μž„ 쀑에 ν•„μš”ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. Maven 쒅속성을 μ—…λ°μ΄νŠΈν•˜λŠ” 것은 문제λ₯Ό ν•΄κ²°ν•˜κ³  μƒˆλ‘œμš΄ κΈ°λŠ₯을 ν†΅ν•©ν•˜λŠ” 데 μ€‘μš”ν•©λ‹ˆλ‹€.

Maven 쒅속성 μΆ”κ°€ 단계:

  1. pom.xml μ—΄κΈ°:
    • ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— μžˆλŠ” pom.xml νŒŒμΌμ„ μ°Ύκ³  μ—½λ‹ˆλ‹€.
  2. ν•„μš”ν•œ 쒅속성 μΆ”κ°€:
    • 예λ₯Ό λ“€μ–΄, jakarta.servlet.jspλ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 쒅속성을 ν¬ν•¨ν•©λ‹ˆλ‹€.
    • <dependencies>
          <!-- κΈ°μ‘΄ 쒅속성 -->
          
          <!-- Jakarta Servlet 쒅속성 μΆ”κ°€ -->
          <dependency>
              <groupId>jakarta.servlet</groupId>
              <artifactId>jakarta.servlet-api</artifactId>
              <version>5.0.0</version>
              <scope>provided</scope>
          </dependency>
          
          <!-- JSP 쒅속성 μΆ”κ°€ -->
          <dependency>
              <groupId>jakarta.servlet.jsp</groupId>
              <artifactId>jakarta.servlet.jsp-api</artifactId>
              <version>3.0.0</version>
              <scope>provided</scope>
          </dependency>
      </dependencies>
  3. Maven ν”„λ‘œμ νŠΈ μ—…λ°μ΄νŠΈ:
    • ν”„λ‘œμ νŠΈλ₯Ό 마우슀 였λ₯Έμͺ½ λ²„νŠΌμœΌλ‘œ ν΄λ¦­ν•©λ‹ˆλ‹€.
    • Maven > Update Projectλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
    • 쒅속성이 λ‹€μš΄λ‘œλ“œλ˜κ³  ν†΅ν•©λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
  4. 쒅속성 ν•΄κ²° 확인:
    • IDEκ°€ ν•΄κ²°λ˜μ§€ μ•Šμ€ 쒅속성과 κ΄€λ ¨λœ κ²½κ³ λ₯Ό 더 이상 ν‘œμ‹œν•˜μ§€ μ•ŠλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

Maven 쒅속성을 μ˜¬λ°”λ₯΄κ²Œ κ΄€λ¦¬ν•˜λ©΄ ν”„λ‘œμ νŠΈκ°€ ν•„μš”ν•œ λͺ¨λ“  λΌμ΄λΈŒλŸ¬λ¦¬μ— μ ‘κ·Όν•  수 μžˆμ–΄ μ›ν™œν•œ 개발 및 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€.


μ‚¬μš©μž μΆ”κ°€ κΈ°λŠ₯ ν…ŒμŠ€νŠΈ

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

컨트둀러, JSP 양식 및 ꡬ성을 μ„€μ •ν•œ ν›„, λͺ¨λ“  것이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ κΈ°λŠ₯을 ν…ŒμŠ€νŠΈν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 단계:

  1. μ›Ή μ„œλ²„ μ‹œμž‘:
    • μ„ ν˜Έν•˜λŠ” μ„œλ²„(예: Apache Tomcat)μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ ‘κ·Ό:
    • μ›Ή λΈŒλΌμš°μ €λ₯Ό μ—΄κ³  http://localhost:8080/demo와 같은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ URL둜 μ΄λ™ν•©λ‹ˆλ‹€.
  3. μ‚¬μš©μž μΆ”κ°€ νŽ˜μ΄μ§€λ‘œ 이동:
    • ν—€λ”μ˜ “Add User” 링크λ₯Ό ν΄λ¦­ν•˜μ—¬ addUser.jsp에 μ ‘κ·Όν•©λ‹ˆλ‹€.
  4. 양식 μž‘μ„±:
    • μœ νš¨ν•œ μ‚¬μš©μž μ„ΈλΆ€ 정보λ₯Ό μž…λ ₯ν•˜κ³  양식을 μ œμΆœν•©λ‹ˆλ‹€.
  5. 제좜 확인:
    • 양식 제좜이 μ μ ˆν•˜κ²Œ λ¦¬λ””λ ‰μ…˜λ˜κ³  μ‚¬μš©μž 데이터가 μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

일반적인 문제 디버깅

개발 쀑에 양식 제좜 였λ₯˜λ‚˜ λˆ„λ½λœ 쒅속성과 같은 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 일반적인 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. Username 철자 였λ₯˜:
    • 양식이 “username is incorrect spelling”κ³Ό 같은 κ²½κ³ λ₯Ό ν‘œμ‹œν•˜λ©΄ 철자λ₯Ό ν™•μΈν•˜κ³  JSP와 컨트둀러 κ°„μ˜ λ³€μˆ˜ 이름 일관성을 보μž₯ν•©λ‹ˆλ‹€.
  2. ν•΄κ²°λ˜μ§€ μ•Šμ€ JSP νŽ˜μ΄μ§€:
    • Jakarta.servlet.jsp not resolved와 같은 였λ₯˜λŠ” λˆ„λ½λœ 쒅속성을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. Maven 쒅속성이 μ˜¬λ°”λ₯΄κ²Œ μΆ”κ°€λ˜κ³  ν”„λ‘œμ νŠΈκ°€ μ—…λ°μ΄νŠΈλ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
  3. 양식 제좜 μ‹€νŒ¨:
    • 양식이 μ˜¬λ°”λ₯΄κ²Œ μ œμΆœλ˜μ§€ μ•ŠμœΌλ©΄ 양식 action URL을 ν™•μΈν•˜κ³  addUser λ©”μ„œλ“œκ°€ SiteController에 μ˜¬λ°”λ₯΄κ²Œ λ§€ν•‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
  4. μ„œλ²„ 좩돌:
    • μ„œλ²„ μΆ©λŒμ€ 잘λͺ»λœ κ΅¬μ„±μ΄λ‚˜ λˆ„λ½λœ μ’…μ†μ„±μœΌλ‘œ 인해 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 졜근 λ³€κ²½ 사항을 κ²€ν† ν•˜κ³  μ„œλ²„ λ‘œκ·Έμ—μ„œ μžμ„Έν•œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
  5. ν—€λ”μ˜ λˆ„λ½λœ 링크:
    • ν—€λ”μ˜ λͺ¨λ“  λ‚΄λΉ„κ²Œμ΄μ…˜ 링크가 κΈ°μ‘΄ 컨트둀러 λ©”μ„œλ“œ 및 JSP νŽ˜μ΄μ§€λ₯Ό κ°€λ¦¬ν‚€λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό μ²΄κ³„μ μœΌλ‘œ ν•΄κ²°ν•¨μœΌλ‘œμ¨ μ›ν™œν•œ 개발 κ²½ν—˜κ³Ό κΈ°λŠ₯적인 μ‚¬μš©μž μΆ”κ°€ κΈ°λŠ₯을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


κ²°λ‘ 

JSP 양식을 μ‚¬μš©ν•˜μ—¬ Java μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜λŠ” 것은 컨트둀러 μ„€μ •λΆ€ν„° JSP νŽ˜μ΄μ§€ ꡬ성 및 쒅속성 관리에 이λ₯΄κΈ°κΉŒμ§€ 일련의 체계적인 단계λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. MVC μ•„ν‚€ν…μ²˜λ₯Ό μ€€μˆ˜ν•˜κ³  μ–΄λ…Έν…Œμ΄μ…˜ 및 Maven 쒅속성 관리와 같은 ν˜„λŒ€ Java 관행을 ν™œμš©ν•¨μœΌλ‘œμ¨ κ°œλ°œμžλŠ” 쑰직적이고 μœ μ§€ 관리가 μš©μ΄ν•˜λ©° ν™•μž₯ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” μš”μ :

  • 쑰직된 컨트둀러: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŠΉμ • 츑면을 μ²˜λ¦¬ν•˜λŠ” λ³„λ„μ˜ μ»¨νŠΈλ‘€λŸ¬κ°€ λͺ…확성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
  • ν˜„λŒ€μ  ꡬ성: XML보닀 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ κ°„μ†Œν™”λœ ꡬ성을 κ΅¬ν˜„ν•©λ‹ˆλ‹€.
  • JSP 양식: μ‚¬μš©μž μƒν˜Έ μž‘μš©μ„ μœ„ν•œ μ „μš© JSP νŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•˜μ—¬ μ›ν™œν•œ μ‚¬μš©μž κ²½ν—˜μ„ 보μž₯ν•©λ‹ˆλ‹€.
  • 쒅속성 관리: Maven 쒅속성을 μ˜¬λ°”λ₯΄κ²Œ κ΄€λ¦¬ν•˜μ—¬ 좩돌과 ν•΄κ²°λ˜μ§€ μ•Šμ€ μ°Έμ‘°λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.
  • ν…ŒμŠ€νŠΈ 및 디버깅: κΈ°λŠ₯을 μ •κΈ°μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κ³  문제λ₯Ό μ‹ μ†ν•˜κ²Œ ν•΄κ²°ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 무결성을 μœ μ§€ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 관행을 μˆ˜μš©ν•¨μœΌλ‘œμ¨ 개발 ν”„λ‘œμ„ΈμŠ€κ°€ λ‹¨μˆœν™”λ  뿐만 μ•„λ‹ˆλΌ ν–₯ν›„ κ°œμ„ μ„ μœ„ν•œ κ²¬κ³ ν•œ κΈ°λ°˜μ„ λ§ˆλ ¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SEO ν‚€μ›Œλ“œ: Java μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜, JSP 양식, λ°μ΄ν„°λ² μ΄μŠ€μ— μ‚¬μš©μž μΆ”κ°€, MVC μ•„ν‚€ν…μ²˜, Java의 컨트둀러, μ–΄λ…Έν…Œμ΄μ…˜, Maven 쒅속성, web.xml ꡬ성, SiteController, addUser.jsp, μ„œλΈ”λ¦Ώ 맀핑, Jakarta Servlet API, 양식 제좜, μ‚¬μš©μž μΆ”κ°€ κΈ°λŠ₯.


μΆ”κ°€ 자료

이 자료λ₯Ό ν™œμš©ν•˜μ—¬ 이해도λ₯Ό λ”μš± 깊게 ν•˜κ³  Java μ›Ή 개발 κΈ°μˆ μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³ : 이 κΈ°μ‚¬λŠ” AI에 μ˜ν•΄ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.






“`

Share your love