๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

[JSP] response ๊ฐ์ฒด

๐Ÿ—ฃ Language/JSP

     

     

     

     

    JSP(Java Server Page)์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด์™€ ์—ฐ๊ด€๋œ ๋ฉ”์„œ๋“œ๋“ค์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋“ค์ด ์žˆ๋‹ค. ์ด๋ฅผ Implicit Instane(๊ธฐ๋ณธ๊ฐ์ฒด, ๋‚ด์žฅ๊ฐ์ฒด) ๋ผ๊ณ  ํ•œ๋‹ค.

     

    Implicit Instance ์ข…๋ฅ˜ ๋งํฌ

     

    ์ด ์ค‘์—์„œ ์˜ค๋Š˜์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” response ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

     


    1. Response

    response ๊ธฐ๋ณธ ๊ฐ์ฒด๊ฐ€ ์‘๋‹ต ์ •๋ณด์™€ ๊ด€๋ จํ•ด์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

     

    ํ—ค๋” ์ •๋ณด ์ž…๋ ฅ
    ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ(Redirect) ํ•˜๊ธฐ

    ์ด ์™ธ์— ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ๋” ์žˆ์œผ๋‚˜, JSP ํŽ˜์ด์ง€์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

     

    1-1 ์›น ๋ธŒ๋ผ์šฐ์ €์— ํ—ค๋” ์ •๋ณด ์ „์†กํ•˜๊ธฐ

    request ๊ธฐ๋ณธ ๊ฐ์ฒด๋Š” ์š”์ฒญ ์ •๋ณด์—์„œ ํ—ค๋”๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, response ๊ฐ์ฒด๋Š” ๋ฐ˜๋Œ€๋กœ ์‘๋‹ต ์ •๋ณด์— ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. response ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

     

     ๋ฉ”์„œ๋“œ

    ๋ฆฌํ„ด ํƒ€์ž… 

    ์„ค๋ช… 

    addDateHeader(String name, long date) 

    void 

    name ํ—ค๋”์— date๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (date๋Š” 1970๋…„ 1์›” 1์ผ ์ดํ›„ ํ˜๋Ÿฌ๊ฐ„ ์‹œ๊ฐ„์„ 1/1000์ดˆ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.) 

    addHeader(String name, String value) 

    void 

    name ํ—ค๋”์— value๋ฅผ ๊ฐ’์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. 

    addIntHeader(String name, int value) 

    void 

    name ํ—ค๋”์— ์ •์ˆ˜ ๊ฐ’ value๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. 

    setDateHeader(String name, long date) 

    void 

    name ํ—ค๋”์— ๊ฐ’์„ date๋กœ ์ง€์ •ํ•œ๋‹ค. 

    setHeader(String name, String value) 

    void 

    name ํ—ค๋”์˜ ๊ฐ’์„ value๋กœ ์ง€์ •ํ•œ๋‹ค. 

    setIntHeader(String name, int value)

    void

    name ํ—ค๋”์˜ ๊ฐ’์„ ์ •์ˆ˜ ๊ฐ’ value๋กœ ์ง€์ •ํ•œ๋‹ค. 

    containsHeader(String name) 

    boolean 

    ์ด๋ฆ„์ด name์ธ ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ true๋ฅผ, ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. 

     

    ํ•˜์ง€๋งŒ ํ—ค๋” ์ •๋ณด์—๋Š” ์ฃผ๋กœ ์›น ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, JSP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž์ฒด์—์„œ๋Š” ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ํ—ค๋” ์ •๋ณด๋Š” ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

     

     

    1-2 ์›น ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์‘๋‹ต ํ—ค๋” ์ž…๋ ฅ

    ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด DB์˜ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ๋„ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ถœ๋ ฅ๋˜๋Š” ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์›์ธ์€ ์‹ค์ œ ์„œ๋ฒ„์˜ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์—ˆ์Œ์—๋„ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ(cache)[๊ฐ์ฃผ:1]์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋•Œ๋ฌธ์— ์ž์ฃผ ๋ณ€ํ•˜๋Š” ๊ฒŒ์‹œํŒ ๊ฐ™์€ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„์˜ ๋‚ด์šฉ๊ณผ ์‹ค์ œ ์ถœ๋ ฅ ํ™”๋ฉด์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋™์ž‘ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. HTTP๋Š” ํŠน์ˆ˜ํ•œ ์‘๋‹ต ํ—ค๋”๋ฅผ ํ†ตํ•ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ์ด์™€ ๊ด€๋ จ๋œ ํ—ค๋”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

     

    Cache-Control ์‘๋‹ต ํ—ค๋” : HTTP 1.1 ๋ฒ„์ „์—์„œ ์ง€์›ํ•˜๋Š” ํ—ค๋”๋กœ์„œ, ์ด ํ—ค๋”์˜ ๊ฐ’์„ "no-cache"๋กœ ์ง€์ •ํ•˜๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

     

    Pragma ์‘๋‹ต ํ—ค๋” : HTTP 1.0 ๋ฒ„์ „์—์„œ ์ง€์›ํ•˜๋Š” ํ—ค๋”๋กœ์„œ, ์ด ํ—ค๋”์˜ ๊ฐ’์„ "no-cache"๋กœ ์ง€์ •ํ•˜๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

     

    ์ตœ๊ทผ ๋‚˜์˜จ ๋ธŒ๋ผ์šฐ์ €๋“ค์€ HTTP 1.1 ๋ฒ„์ „์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Cach-Control ์‘๋‹ต ํ—ค๋”๋งŒ์„ ๊ณ ์ณ์ค˜๋„ ๋˜์ง€๋งŒ ํ˜น์‹œ ๊ตฌ๋ฒ„์ „์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‘˜๋‹ค ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

     

    <%

    response.setHeader("Pragma", "No-cache");

    response.setHeader("Cache-Control", "no-cache");

    response.addHeader("Cache-Control", "no-store"); // ์ผ๋ถ€ ํŒŒ์ด์–ดํญ์Šค ๋ฒ„๊ทธ ๊ด€๋ จ

     

    response.setDateHeader("Expires", 1L);

    %>

    ์œ„ ์ฝ”๋“œ์—์„œ Expires ์‘๋‹ต ํ—ค๋”๋Š” HTTP1.0 ์‘๋‹ต ํ—ค๋”๋กœ์„œ ์‘๋‹ต ๊ฒฐ๊ณผ์˜ ๋งŒ๋ฃŒ์ผ์„ ์ง€์ •ํ•  ๋•Œ ์ž…๋ ฅํ•œ๋‹ค. ์ด ๋•Œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์€ 1970๋…„ 1์›” 1์ผ ๊ธฐ์ค€์œผ๋กœ 1/1000์ดˆ ๋‹จ์œ„๋กœ ์ž…๋ ฅํ•˜๋Š”๋ฐ ์บ์‹œ ๋Œ€์ƒ์ด ์•„๋‹Œ ๋ฌธ์„œ์˜ ๊ฒฝ์šฐ 0์ด๋‚˜ 1๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์ž…๋ ฅํ•ด์„œ ํ˜„์žฌ ์‹œ๊ฐ„ ์ด์ „์œผ๋กœ ๋งŒ๋ฃŒ์ผ์„ ์ง€์ •ํ•จ์œผ๋กœ์จ ์‘๋‹ต ๊ฒฐ๊ณผ๊ฐ€ ์บ์‹œ ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

     

     

    1-2 ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€ ์ด๋™ํ•˜๊ธฐ

    response ๊ธฐ๋ณธ ๊ฐ์ฒด์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Š” ์ค‘์˜ ํ•˜๋‚˜์ธ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ธฐ๋Šฅ์ด๋‹ค. ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ธฐ๋Šฅ์ด๋ž€ ์›น ์„œ๋ฒ„๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ผ๊ณ  ์ง€์‹œํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•œ ํ›„์— ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ž๋™์œผ๋กœ ์ด๋™ํ•˜๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ๋งŽ์€๋ฐ ์ด์ฒ˜๋Ÿผ ํŠน์ • ํŽ˜์ด์ง€๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ์ง€์ •ํ•œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ธธ ๋ฐ”๋ž„ ๋•Œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด๋•Œ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์‹ค์งˆ์ ์œผ๋กœ ์š”์ฒญ์„ ๋‘ ๋ฒˆํ•˜๊ฒŒ ๋œ๋‹ค.

     

    response ๊ธฐ๋ณธ ๊ฐ์ฒด๋Š” ๋‹ค์Œ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    response.sendRedirect(String location)

     

    ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋„ค์ด๋ฒ„ ํŽ˜์ด์ง€๋กœ์˜ ์ด๋™์„ ์›ํ•˜๋ฉด response.sendRedirect("http://naver.com"); ์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด ๋€๋‹ค. 

     

    ๋งŒ์•ฝ์— ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ๋’ค์— ์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ๊ฐ™์ด ๋ถ™์—ฌ์„œ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ธ์ฝ”๋”ฉ์„ ํ•ด์„œ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•Œ๋งž๊ฒŒ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์•ž์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ์›น ์„œ๋ฒ„์— ์ „์†ก๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์€ ์•Œ๋งž๊ฒŒ ์ธ์ฝ”๋”ฉ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ธ์ฝ”๋”ฉ์„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ํ–ˆ๋‹ค๋ฉด ์ •๋ง ๊ดด๋กœ์› ๊ฒ ์ง€๋งŒ ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งŒ๋“ค์–ด๋†“์€ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. java.net.URLEncoder ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. 

     

    <%@ page import="java.net.URLEncoder" %>

    <%@ page pageEncoding="utf-8" %>

    <%

    String value = "์ž๋ฐ”";

    String encodedValue = URLEncoder.encode(value, "utf-8");

    response.sendRedirect("https://www.google.co.kr/search?q=" + encodedValue);

    %>

     

    1. ์บ์‹œ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ WAS์— ๋˜‘๊ฐ™์€ ๋‚ด์šฉ์˜ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ๊ทธ ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์ด ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณตํ•ด์„œ ๋กœ๋”ฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.์ฒซ๋ฒˆ์งธ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๋กœ์ปฌ ์œ„์น˜์— ์ž„์‹œ ๋ณด๊ด€์†Œ์ธ ์บ์‹œ์— ์ €์žฅ. ํ›„์— ๋™์ผํ•œ ์š”์ฒญ์ด ์žˆ์„ ์‹œ์— WAS์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ์— ์ €์žฅ๋œ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ถœ๋ ฅํ•˜์—ฌ ๋น ๋ฅธ ์†๋„๋กœ ์‘๋‹ต. ๊ทธ๋ ‡๋‹ค๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž์ฃผ ๋ฐ”๋€Œ๋Š” ๋™์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์ž˜ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. [๋ณธ๋ฌธ์œผ๋กœ]