์›น ์„œ๋น„์Šค/์›น ๊ฐœ๋ฐœ 101

๊ฐœ๋ฐœ ์ „ ์•Œ์•„์•ผํ•  ๊ธฐ์ˆ ๊ณผ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

alswlfl 2022. 12. 31. 00:41

1. HTTP(HyperText Transfer Protocol)

: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์˜ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ๋กœ, ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์•ฝ

HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต

[๋™์ž‘]

1. ์‚ฌ์šฉ์ž๋Š” ๋ธŒ๋ผ์šฐ์ €๋ผ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— HTTP ์š”์ฒญ์„ ์ „์†ก

2. ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ ์ฐฝ์— URL์„ ์น˜๊ณ  ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” HTTP ์š”์ฒญ์„ ํ•ด๋‹น URL์„œ๋ฒ„๋กœ ์ „์†ก

3. ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๊ทธ ๊ฒฐ๊ณผ์ธ HTTP ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง ํ•จ

[HTTP ์š”์ฒญ]

  • ์š”์ฒญ์—๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ • → ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ŠคํŠธ์—๊ฒŒ ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ์€์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• 
    • GET: ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ
    • POST: ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ž„์˜์˜ ์ž‘์—…ํ•  ๋•Œ ์‚ฌ์šฉ → ์ƒˆ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ
    • PUT: ๋ฆฌ์†Œ๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ๋•Œ ์‚ฌ์šฉ(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค ์œ„์น˜๋ฅผ ์•Œ๊ณ  URI ์ง€์ •)
    • PATCH: ๋ฆฌ์†Œ์Šค์˜ ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝ
    • DELETE: ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉ

[HTTP ์‘๋‹ต]

  • ์‘๋‹ต์ฝ”๋“œ ์กด์žฌ
    • 200: ์„ฑ๊ณต
    • 404: ํ•ด๋‹น ๋ฆฌ์†Œ์Šค ์กด์žฌํ•˜์ง€ ์•Š์Œ
    • 403: ์†ก์‹ ์ž๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ ์—†์Œ
    • 500: ์„œ๋ฒ„ ์—๋Ÿฌ
  • Content-Type: ๋ฏธ๋””์–ด ํƒ€์ž…
  • ์‘๋‹ต ๋ฐ”๋””: ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณดํ†ต HTTP ์‘๋‹ต ๋ฐ”๋””์— ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ณด๋ƒ„

2. JSON(JavaScript Object Notation)

: ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด

  • ์ธํ„ฐ๋„ท์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‘ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณ€ํ™˜ํ•ด์•ผ ํ•จ
  • ์ง๋ ฌํ™”: ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…
  • ์—ญ์ง๋ ฌํ™”: ๋‹ค๋ฅธ ํ˜•ํƒœ์—์„œ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…
  • JSON์€ ํ‚ค-๊ฐ’(Key-Value)ํ˜•ํƒœ๋กœ ํ‘œํ˜„

[JSON์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ ์ „๋‹ฌ]

1. ์˜ค๋ธŒ์ ํŠธ๋ฅผ JSONํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

2. HTTP์š”์ฒญ์˜ ๋ฐ”๋”” ๋ถ€๋ถ„์— ๋ณ€ํ™˜๋œ JSON์„ ๋„ฃ์–ด ์š”์ฒญ ์ „์†ก

3. ์š”์ฒญ์„ ๋ฐ›์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ HTTP ์š”์ฒญ์˜ ๋ฐ”๋”” ๋ถ€๋ถ„์—์„œ JSON๊บผ๋ƒ„

4. ํ•ด๋‹น JSON์€ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ


3. ์„œ๋ฒ„

: ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ์ง€์ •๋œ ํฌํŠธ์— ์†Œ์ผ“์„ ์—ด๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ๋Œ€๊ธฐํ•˜๋ฉฐ ๊ธฐ๋‹ค๋ฆผ

1) ์ •์  ์›น ์„œ๋ฒ„(Static Web Server)

: ์„œ๋ฒ„๋Š” ํ•ด๋‹น HTMLํŒŒ์ผ์— ์•„๋ฌด ์ž‘์—…๋„ ํ•˜์ง€ ์•Š๊ณ , ํŒŒ์ผ์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜

ex) ์•„ํŒŒ์น˜, NginX

  • ์ง€์ •๋œ ๊ฒฝ๋กœ์— ์›ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ฉด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋Š” ์ž๋™์œผ๋กœ ์›น ์„œ๋ฒ„๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
  • ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋“  ๊ฐ™์€ ์‘๋‹ต์„ ๋ฐ˜ํ™˜

2) ๋™์  ์›น ์„œ๋ฒ„(Dynamic Web Server)

: ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„, ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์‘๋‹ต ๋ฐ”๋””๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ HTML ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์— ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ๋ณด๋ƒ„

ex) ์•„ํŒŒ์น˜ ํ†ฐ์บฃ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฐ์ง€, ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณด๋‚ด๋Š”์ง€์— ๋”ฐ๋ผ ๊ฐ™์€ ์š”์ฒญ์ด๋ผ๋„ ๋‹ค๋ฅธ ์‘๋‹ต์„ ๋ฐ›์Œ
  • ์„œ๋ธ”๋ฆฟ ์—”์ง„ ๋˜๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ
    • ๊ฐœ๋ฐœ์ž๋“ค์€ ์„œ๋ธ”๋ฆฟ ์—”์ง„์„ ์„ค์น˜ํ•œ ํ›„, ์„œ๋ธ”๋ฆฟ ์—”์ง„์—๊ฒŒ ๋ณธ์ธ์ด ๊ฐœ๋ฐœํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์ฆ‰ ํด๋ž˜์Šค ํŒŒ์ผ๊ณผ ํ•ด๋‹น ํด๋ž˜์Šค ํŒŒ์ผ์„ ์–ด๋А ์š”์ฒญ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ค˜์•ผํ•จ
    • Javax.servlet.httpHttpServlet์˜ ์ƒ์†๋ฐ›๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ์„œ๋ธ”๋ฆฟ ์—”์ง„์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค
    • ์„œ๋ธ”๋ฆฟ ์—”์ง„ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅ