웹 개발/프론트엔드 개발

내장객체란?

Blue_bull 2025. 2. 4. 17:39

내장 객체(Built-in Objects)란?

내장 객체란 JSP(JavaServer Pages)에서 자동으로 제공되는 객체로,
개발자가 별도로 생성하지 않아도 사용할 수 있는 서버 측 객체입니다.
이들은 웹 애플리케이션 개발에서 요청, 응답, 세션 관리, 페이지 정보 접근 등에 사용됩니다.


📌 1. JSP의 주요 내장 객체 9가지

JSP에는 총 9개의 내장 객체가 있으며, 이를 활용하여 클라이언트 요청 처리, 데이터 유지, 페이지 이동 등을 쉽게 구현할 수 있습니다.

내장 객체 설명
request 클라이언트의 요청 정보를 담고 있는 객체 (HttpServletRequest)
response 클라이언트에게 응답을 보내는 객체 (HttpServletResponse)
session 사용자의 세션 정보를 저장하는 객체 (HttpSession)
application 웹 애플리케이션 전역에서 공유되는 객체 (ServletContext)
out JSP에서 데이터를 출력하는 객체 (JspWriter)
pageContext JSP 페이지 정보를 제공하는 객체 (PageContext)
config 웹 애플리케이션 설정 정보를 담은 객체 (ServletConfig)
exception 예외 발생 시 오류 정보를 담는 객체 (Throwable)
page 현재 JSP 페이지 자체를 나타내는 객체 (this와 동일)

📌 2. 주요 내장 객체 상세 설명

1️⃣ request 객체 → 클라이언트의 요청 정보를 가져옴

  • 폼 데이터, URL 파라미터, 쿠키 등을 읽을 수 있음.

예제: 클라이언트가 보낸 파라미터 값 가져오기

String id = request.getParameter("id");  // URL 또는 폼에서 "id" 값을 가져옴
String name = request.getParameter("name");

예제: 클라이언트 IP 가져오기

String clientIP = request.getRemoteAddr();

2️⃣ response 객체 → 클라이언트에게 응답을 보냄

  • 브라우저로 출력하거나 페이지 이동 등을 처리할 때 사용.

예제: 페이지 리디렉션 (이동)

response.sendRedirect("home.jsp");  // home.jsp로 이동

예제: HTTP 헤더 설정

response.setHeader("Content-Type", "text/html; charset=UTF-8");

3️⃣ session 객체 → 사용자의 세션 정보를 저장

  • 특정 사용자의 데이터를 브라우저 종료 전까지 유지.

예제: 세션 값 저장

session.setAttribute("user", "John Doe");

예제: 세션 값 가져오기

String user = (String) session.getAttribute("user");

예제: 세션 만료시키기

session.invalidate();  // 세션 종료

4️⃣ application 객체 → 웹 애플리케이션 전체에서 공유되는 정보 저장

  • 모든 사용자에게 공통적으로 유지되는 데이터를 저장할 때 사용.

예제: 애플리케이션 변수 설정

application.setAttribute("siteName", "MyWebsite");

예제: 애플리케이션 변수 가져오기

String siteName = (String) application.getAttribute("siteName");

5️⃣ out 객체 → JSP 페이지에서 클라이언트에게 출력

  • HTML을 출력할 때 사용.

예제: 화면에 출력

out.println("Hello, JSP!");

예제: HTML 태그 출력

out.println("<h1>Welcome to JSP</h1>");

6️⃣ pageContext 객체 → JSP 페이지의 정보 제공

  • 각종 설정 정보, 속성(Attribute) 관리 등을 수행.

예제: 속성 저장

pageContext.setAttribute("message", "Hello, Page Context!");

예제: 속성 가져오기

String msg = (String) pageContext.getAttribute("message");

7️⃣ config 객체 → 서블릿 설정 정보를 가져옴

  • 서블릿 초기화 정보(web.xml)를 읽을 때 사용.

예제: 초기화 매개변수 가져오기

String driver = config.getInitParameter("JDBC_DRIVER");

8️⃣ exception 객체 → 예외(오류) 정보를 가져옴

  • JSP에서 에러 페이지(errorPage="error.jsp") 설정 시 사용.

예제: 예외 메시지 출력

<%= exception.getMessage() %>

9️⃣ page 객체 → 현재 JSP 페이지를 나타냄

  • this와 동일하며, 일반적으로 잘 사용되지 않음.

예제: 현재 JSP의 클래스 확인

out.println(page.getClass().getName());

📌 3. 내장 객체는 언제 사용할까?

내장 객체 사용 목적
request 사용자가 보낸 데이터 가져오기 (폼, URL 파라미터)
response 페이지 이동, 응답 헤더 설정
session 로그인 정보 등 사용자별 데이터 유지
application 전체 웹 애플리케이션에서 공유할 데이터 저장
out JSP에서 HTML 출력
pageContext 페이지 내에서 속성 관리
config 서블릿 초기화 정보 가져오기
exception 예외 발생 시 오류 정보 가져오기
page 현재 JSP 객체 자체를 나타냄

결론

JSP의 내장 객체는 개발자가 별도로 선언하지 않아도 자동으로 제공됨.
클라이언트 요청(request), 응답(response), 세션(session), 애플리케이션 정보(application) 관리 등이 가능.
각 객체의 역할을 이해하면 JSP 웹 애플리케이션 개발이 훨씬 쉬워짐! 🚀

JSP 내장 객체를 더 잘 활용하기 위한 실전 팁추가 개념을 정리해줄게.


1. 내장 객체를 효율적으로 활용하는 방법

🔹 request 객체 활용 팁

URL에서 여러 개의 파라미터 처리

  • 사용자가 여러 개의 값을 전송할 경우 getParameterValues()를 사용하면 배열로 받을 수 있어.
    String[] items = request.getParameterValues("item");
    for (String item : items) {
      out.println(item);
    }

request.setAttribute()getAttribute() 활용

  • setAttribute()는 현재 요청 범위 내에서 데이터를 저장할 때 사용됨.
    request.setAttribute("msg", "Welcome, User!");
    RequestDispatcher dispatcher = request.getRequestDispatcher("welcome.jsp");
    dispatcher.forward(request, response);
  • welcome.jsp에서 데이터 사용:
    <%= request.getAttribute("msg") %>
    📌 차이점: getParameter()는 클라이언트가 보낸 데이터를 읽을 때, getAttribute()는 서버에서 설정한 데이터를 가져올 때 사용.

🔹 response 객체 활용 팁

클라이언트에게 JSON 응답 보내기 (AJAX와 연동)

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("{\"status\":\"success\"}");

📌 JSON 데이터를 응답하면 AJAX 요청과 통신할 때 유용.

파일 다운로드 기능 구현

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"example.txt\"");

🔹 session 객체 활용 팁

세션 유지 시간 설정

session.setMaxInactiveInterval(30 * 60); // 30분 유지

📌 기본 세션 유지 시간30분이지만, 이렇게 설정하면 직접 변경 가능.

로그아웃 처리 (세션 삭제)

session.invalidate();
response.sendRedirect("login.jsp");

📌 invalidate()를 호출하면 사용자의 모든 세션 데이터가 삭제됨.

세션을 활용한 로그인 유지

session.setAttribute("userID", "admin");
String userID = (String) session.getAttribute("userID");

📌 session.setAttribute()를 사용하면 브라우저가 닫힐 때까지 데이터가 유지됨.


🔹 application 객체 활용 팁

서버 시작 시 데이터를 로드해서 모든 사용자와 공유

  • 웹 애플리케이션이 시작될 때 ServletContextListener를 사용하면 데이터를 application 객체에 저장할 수 있어.
    application.setAttribute("siteVisits", 0);
    전체 방문자 수 카운트
    int visits = (Integer) application.getAttribute("siteVisits");
    application.setAttribute("siteVisits", visits + 1);
    📌 애플리케이션이 재시작되면 데이터가 초기화되므로, DB에 저장하는 것이 더 안정적.

🔹 out 객체 활용 팁

버퍼 크기 조정

  • 기본적으로 JSP는 8KB의 버퍼 크기를 사용하지만, 이를 조절할 수 있어.
    <%@ page buffer="32kb" autoFlush="true" %>
    📌 autoFlush="false"로 설정하면 버퍼가 다 차기 전에 강제로 플러시되지 않음.

페이지 출력 조작

  • flush()를 사용하면 강제로 현재까지 출력된 내용을 클라이언트에게 전송 가능.
    out.println("데이터를 전송합니다...");
    out.flush();

2. 내장 객체의 범위 (Scope)

각 객체의 유효 범위(Scope)를 이해하면 더 효과적으로 사용할 수 있어.

내장 객체 범위(Scope) 유지 시간
request 요청(Request) 범위 하나의 요청-응답 주기 동안 유지
session 세션(Session) 범위 사용자가 브라우저를 닫거나 invalidate() 호출 시까지 유지
application 애플리케이션(Application) 범위 서버가 종료될 때까지 유지
pageContext 페이지(Page) 범위 하나의 JSP 페이지 내에서만 유효

예제: request vs session

request.setAttribute("msg", "Request 범위 데이터");
session.setAttribute("msg", "Session 범위 데이터");
  • request 데이터는 페이지 이동 시 사라짐.
  • session 데이터는 다른 페이지에서도 유지됨.

3. 내장 객체 사용 시 주의할 점

session을 과도하게 사용하면 서버 부담 증가

  • 세션은 서버 메모리를 차지하므로 필요한 경우에만 사용하는 것이 좋음.
  • 세션 유지 시간이 너무 길면 메모리 누수(memory leak)가 발생할 수 있음.

해결책

  • 불필요한 세션 데이터는 제거 (removeAttribute())
    session.removeAttribute("userID");
  • 세션 대신 쿠키를 사용할 수도 있음.

response.sendRedirect() vs RequestDispatcher.forward() 차이점

기능 sendRedirect() forward()
동작 방식 클라이언트에게 새로운 요청을 보냄 (브라우저 URL 변경됨) 서버 내부에서 요청을 전달 (URL 변경 없음)
속도 상대적으로 느림 (새 요청 발생) 빠름 (서버 내부 이동)
데이터 전달 불가능 (새 요청이기 때문) 가능 (request 데이터 유지됨)

예제: sendRedirect()

response.sendRedirect("home.jsp");

📌 브라우저 주소가 변경됨 → "로그인 후 메인 페이지로 이동" 같은 경우 유용.

예제: forward()

RequestDispatcher dispatcher = request.getRequestDispatcher("home.jsp");
dispatcher.forward(request, response);

📌 브라우저 주소 변경 없이 내부에서 페이지 이동.


4. JSP 내장 객체 활용 시 꼭 기억해야 할 점

1️⃣ requestsession의 차이를 이해하고 적절하게 사용하라.
2️⃣ response.sendRedirect()forward()의 차이를 알고 쓰자.
3️⃣ 세션(session)을 과하게 사용하면 서버 부하가 커진다.
4️⃣ 애플리케이션 전역 데이터는 application 객체에 저장할 수 있다.
5️⃣ 내장 객체를 활용하면 JSP만으로도 동적인 웹 애플리케이션을 쉽게 만들 수 있다! 🚀

이제 JSP 내장 객체를 더 잘 이해할 수 있을 거야! 필요한 부분 더 궁금하면 알려줘. 😊