HTTP Request

HTTP Request

HTTP ์š”์ฒญ์œผ๋กœ ์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ฃผ๋กœ 3๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • GET - ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ

    • /url**?username=hello&age=20**

    • ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ์—†์ด, URL์˜ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ

    • ๊ฒ€์ƒ‰, ํ•„ํ„ฐ, ํŽ˜์ด์ง•์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

  • POST - HTML Form

    • content-Type: application/x-www-form-urlencoded

    • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ

    • ํšŒ์› ๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, HTML Form ์‚ฌ์šฉ

  • HTTP message Body

    • HTTP API์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

    • ์ฃผ๋กœ JSON ์‚ฌ์šฉ

์‚ฌ์‹ค GET ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์ „์†ก ๋ฐฉ์‹์ด๋“ , POST HTML Form ์ „์†ก ๋ฐฉ์‹์ด๋“  ๋‘˜ ๋‹ค ํ˜•์‹์ด ๊ฐ™์œผ๋ฏ€๋กœ ๊ตฌ๋ถ„์—†์ด ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

โ‡’ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ(request parameter) ์กฐํšŒ

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ

์ด๋Ÿฌํ•œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • HttpServlet

  • @RequestParam

  • @ModelAttribute

HttpServlet

HttpServlet ์€ request๋กœ๋ถ€ํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง์ ‘ ๊บผ๋‚ด์•ผ ํ•œ๋‹ค.

@RequestParam

์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” @RequestParam ์„ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@RequestParam ๋ฅผ ํ†ตํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”์ธ๋”ฉ ํ•œ๋‹ค. @RequestParam์˜ name(value) ์†์„ฑ์ด ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๋งŒ์•ฝ HTTP ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์ด ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ๊ฐ™์œผ๋ฉด (โ€usernameโ€) ๋ถ€๋ถ„์€ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

@RequestParam์˜ ์˜ต์…˜

  • required: ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜ ์—ฌ๋ถ€

    • ๊ธฐ๋ณธ๊ฐ’์ด ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜(true)

    • ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๋งŒ ์žˆ๊ณ  ๊ฐ’์ด ์—†์–ด๋„ ํ†ต๊ณผ๋œ๋‹ค.

  • defaultValue: ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

    • ๋นˆ ๋ฌธ์ž์˜ ๊ฒฝ์šฐ์—๋„ ์„ค์ •ํ•œ ๊ธฐ๋ณธ๊ฐ’์ด ์ ์šฉ

@ModelAttribute

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ์ฒด์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์Šคํ”„๋ง์€ ์ด ๊ณผ์ •์„ @ModelAttribute๋ฅผ ํ†ตํ•ด ์ž๋™ํ™”ํ•ด์ค€๋‹ค.

HTTP message Body

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋‹ค๋ฅด๊ฒŒ HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ง์ ‘ ๋„˜์–ด์˜ค๋Š” ๊ฒฝ์šฐ๋Š” @RequestParam, @ModelAttribute ์‚ฌ์šฉ X (๋‹จ, HTML Form ํ˜•์‹์€ ์ œ์™ธ)

๋‹จ์ˆœ ํ…์ŠคํŠธ

  • HttpServlet

    • request.getInputStream()

  • InputStream, OutputStream โ†’ ์Šคํ”„๋ง MVC๊ฐ€ ์ง€์›

    • requestBodyString(InputStream inputStream, Writer responseWriter)

      • InputStream(Reader): HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ์„ ์ง์ ‘ ์กฐํšŒ

      • OutputStream(Writer): HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ ๋ฐ”๋””์— ์ง์ ‘ ๊ฒฐ๊ณผ ์ถœ

  • HttpEntity โ†’ ์Šคํ”„๋ง MVC๊ฐ€ ์ง€์›

    • requestBodyStringV3(HttpEntity<String> httpEntity)

    • HttpEntity: HTTP header, body ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒ

    • HttpEntity๋Š” ์‘๋‹ต์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • @RequestBody โ†’ ์Šคํ”„๋ง MVC๊ฐ€ ์ง€์›

    • requestBodyStringV4(@RequestBody String messageBody)

    • HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

JSON

๋งŒ์•ฝ ์ด์ „์ฒ˜๋Ÿผ HttpServlet, @RequestBody๋ฅผ ํ†ตํ•ด String์œผ๋กœ ๋ฐ›๋Š”๋‹ค๋ฉด ObjectMapper๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰, String์œผ๋กœ ์ธ์ž๋ฅผ ๋ฐ›๊ณ  ๋ฌธ์ž๋กœ ๋œ JSON ๋ฐ์ดํ„ฐ์ธ messageBody๋ฅผ ObjectMapper๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

์Šคํ”„๋ง์€ ์ด ๋ถ€๋ถ„ ๋˜ํ•œ @ModelAttribute ์ฒ˜๋Ÿผ ํ•œ๋ฒˆ์— ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ก  HttpEntity๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

HttpEntity, @RequestBody๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๊ฐ€ HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ์„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์ž๋‚˜ ๊ฐ์ฒด ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

Last updated