๐Ÿ’ป Back-End

[Web] #Servlet #GET #POST

์˜ฌใ„น1๋ธŒ 2018. 7. 24. 18:07
๋ฐ˜์‘ํ˜•

*Servlet(์„œ๋ธ”๋ฆฟ)

 - ์›นํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•˜๋Š” Servlet ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๊ทœ์น™์„ ์ง€ํ‚จ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

 => "ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ•  ์‹œ ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ"


 - ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด, ์ž๋ฐ”๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ธฐ์ˆ ์ด๋‹ค.

 - Servlet๋Š” Java๋กœ ๊ตฌํ˜„๋œ CGI๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.


 * ํŠน์ง•

 1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ๋™์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ

 2. HTML์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์— ์‘๋‹ต

 3. Java Thread๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ž‘

 4. MVC ํŒจํ„ด์—์„œ Controller๋กœ ์ด์šฉ

 5. HTTP ํ”„๋กœํ† ์ฝœ ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๋Š” javax.servlet.http.HttpServlet ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Œ (-> UDP๋ณด๋‹ค ๋А๋ฆฌ๋‹ค.)

 6. HTML ๋ณ€๊ฒฝ์‹œ Servlet ์žฌ์ปดํŒŒ์ผ


 * ๋™์ž‘ ๋ฐฉ์‹

 1. ํด๋ผ์ด์–ธํŠธ URL ํด๋ฆญ -> HTTP Request -> Servlet Container๋กœ ์ „์†ก

 2. Http Request ๋ฐ›์€ Servlet Container -> HttpServletRequest, HttpServletResponse ๊ฐ์ฒด ์ƒ์„ฑ

 3. web.xml -> ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL ๋ถ„์„ -> ์–ด๋А ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ ํŒŒ์•…

 4. ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์—์„œ service ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ POST, GET ์—ฌ๋ถ€์— ๋”ฐ๋ผ doGet() ํ˜น์€ doPost() ํ˜ธ์ถœ

 5. doGet() ํ˜น์€ doPost() -> ๋™์  ํŽ˜์ด์ง€ ์ƒ์„ฑ -> HttpServletResponse ๊ฐ์ฒด ์‘๋‹ต ์ „์†ก

 6. ์‘๋‹ต ๋๋‚œ ํ›„ HttpServletRequest, HttpServletResponse ๊ฐ์ฒด ์†Œ๋ฉธ


*cf. doGet? doPost? => GET ๋ฐฉ์‹๊ณผ POST ๋ฐฉ์‹์˜ ์ฐจ์ด! 

 - GET ๋ฐฉ์‹์˜ ํŠน์ง• 

 1. URL์— ๋ณ€์ˆ˜(๋ฐ์ดํ„ฐ) ํฌํ•จ์‹œ์ผœ ์š”์ฒญ

 2. ๋ฐ์ดํ„ฐ๋ฅผ Header(ํ—ค๋”)์— ํฌํ•จํ•˜์—ฌ ์ „์†ก

 3. URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜์–ด ๋ณด์•ˆ์— ์ทจ์•ฝ

 4. ์ „์†กํ•˜๋Š” ๊ธธ์ด ์ œํ•œ (๋ฐ์ดํ„ฐ ๊ธธ์ด ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ์ดˆ๊ณผ ๋ฐ์ดํ„ฐ๋Š” ์ ˆ๋‹จ)

 5. ์บ์‹ฑ ๊ฐ€๋Šฅ


 *cf. Cashing(์บ์‹ฑ) : ํ•œ๋ฒˆ ์ ‘๊ทผ ํ›„, ๋˜ ์š”์ฒญํ•  ์‹œ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋ ˆ์ง€์Šคํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ์‹œ์ผœ ๋†“๋Š” ๊ฒƒ.


 - POST ๋ฐฉ์‹์˜ ํŠน์ง•

 1. URL์— ๋ณ€์ˆ˜(๋ฐ์ดํ„ฐ) ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์š”์ฒญ

 2. ๋ฐ์ดํ„ฐ๋ฅผ Body (๋ฐ”๋””)์— ํฌํ•จํ•˜์—ฌ ์ „์†ก

 3. URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ๋ณด์•ˆ์ ์ž„

 4. ์ „์†กํ•˜๋Š” ๊ธธ์ด์— ์ œํ•œ์ด ์—†์Œ

 5. ์บ์‹ฑ ๋ถˆ๊ฐ€


*cf. HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•œ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ํ†ต์‹  ๊ณผ์ •?

 1. ํด๋ผ์ด์–ธํŠธ -> HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€ + ๋งค๊ฐœ๋ณ€์ˆ˜ -> ์„œ๋ฒ„์— ์ „์†ก

 2. ์„œ๋ฒ„ ํ•ด์„

  2-1. ์ •์  ์ž์›์— ๋Œ€ํ•œ ์š”์ฒญ -> ์ž์› ๋ฐ˜ํ™˜

  2-2. ์ •์  ์ž์›์— ๋Œ€ํ•œ ์š”์ฒญ X -> CGI ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ -> ํ•ด๋‹น ๊ฒฐ๊ณผ ๋ฆฌํ„ด

          (์„œ๋ฒ„ -> ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ + ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ -> CGI ํ”„๋กœ๊ทธ๋žจ - (ํŒŒ์ดํ”„๋ผ์ธ) - ์„œ๋ฒ„)

    (CGI ํ”„๋กœ๊ทธ๋žจ -> ์ž…๋ ฅ ์„œ๋น„์Šค ์ˆ˜ํ–‰ -> MIME ํƒ€์ž…์˜ ์ปจํ…์ธ  ๋ฐ์ดํ„ฐ (๊ฒฐ๊ณผ ํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š”) -> (ํŒŒ์ดํ”„๋ผ์ธ) ->  ์„œ๋ฒ„์— ์ „๋‹ฌ)

 3. -> CGI ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ + HTTP ์‘๋‹ต ํ—ค๋” -> ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜

๋ฐ˜์‘ํ˜•

'๐Ÿ’ป Back-End' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Telegram Bot API  (0) 2019.10.01
[JEUS] Session Timeout ์„ค์ •  (0) 2019.02.13
[ASP.NET][C#] All About Office Interop (Excel)  (0) 2018.05.10
[ASP.NET][C#] EXIF ํƒœ๊ทธ ์ฝ๊ธฐ  (1) 2018.03.13
[๋™๊ธฐ vs ๋น„๋™๊ธฐ]  (0) 2017.11.16