github-blog.png


โœ๏ธ Today I Learned


1. HTTP/๋„คํŠธ์›Œํฌ




1-1. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜


  • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ณณ๊ณผ, ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์„ ๋ถ„๋ฆฌ์‹œํ‚จ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์ด๋‹ค.

    ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์ด ๋ฐ”๋กœ โ€œํด๋ผ์ด์–ธํŠธโ€, ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œ๊ณต(serve)ํ•˜๋Š” ๊ณณ์€ โ€œ์„œ๋ฒ„โ€ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

    ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ชจ๋ธ์„ 2-Tier ์•„ํ‚คํ…์ฒ˜๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

    ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ๋งŒ ๋‹ด๋‹นํ•œ๋‹ค.

    ๋ฆฌ์†Œ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ๋ณ„๋„๋กœ ๋งˆ๋ จํ•ด ๋‘๋Š”๋ฐ, ์ด ๊ณต๊ฐ„์„ โ€œ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคโ€ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

    ์ด์ฒ˜๋Ÿผ ๊ธฐ์กด 2ํ‹ฐ์–ด ์•„ํ‚คํ…์ฒ˜์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋œ ํ˜•ํƒœ๋ฅผ 3ํ‹ฐ์–ด ์•„ํ‚คํ…์ฒ˜๋ผ๊ณ  ์ผ์ปซ๋Š”๋‹ค.



1-2. HTTP ํ”„๋กœํ† ์ฝœ์ด๋ž€?


  • HTTP(Hypertext Transfer Protocol)๋Š” ์›น์„ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ๋‹ค ์•Œ์•„์•ผ ํ•˜๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

    ํ”„๋กœํ† ์ฝœ์ด๋ž€ ์ƒํ˜ธ ๊ฐ„์— ์ •์˜ํ•œ ๊ทœ์น™์„ ์˜๋ฏธํ•˜๋ฉฐ ํŠน์ • ๊ธฐ๊ธฐ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.

    ์›น์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์œผ๋กœ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ํŠน์ง•์€ ์ƒํƒœ๊ฐ€ ์—†๋Š”(stateless) ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

    ์—ฌ๊ธฐ์„œ โ€œ์ƒํƒœ๊ฐ€ ์—†๋‹คโ€๋ผ๋Š” ๋ง์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋œ๋‹ค๋Š” ๋ง์ด๋‹ค.

    ์ฆ‰, ์ด์ „ ๋ฐ์ดํ„ฐ ์š”์ฒญ๊ณผ ๋‹ค์Œ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์„œ๋กœ ๊ด€๋ จ์ด ์—†์ด ๋…๋ฆฝ์ ์ด๋‹ค.

    ์ด๋Ÿฌํ•œ ํŠน์ง• ๋•ํƒ์— ์„œ๋ฒ„๋Š” ์„ธ์…˜๊ณผ ๊ฐ™์€ ๋ณ„๋„์˜ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๋‹ค์ˆ˜์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์„ฑ๋Šฅ ์ƒ์˜ ์ด์ ์ด ์ƒ๊ธด๋‹ค.



1-3. URL์™€ URI


  • URL์€ Uniform Resource Locator์˜ ์ค„์ž„๋ง๋กœ, ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์›น ํŽ˜์ด์ง€, ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ์˜ ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    URI๋Š” Uniform Resource Identifier์˜ ์ค„์ž„๋ง๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ URL์˜ ๊ธฐ๋ณธ ์š”์†Œ์ธ scheme, hosts, url-path์— ๋”ํ•ด query, bookmark๋ฅผ ํฌํ•จํ•œ๋‹ค.

    ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒ€์ƒ‰์ฐฝ์„ ํด๋ฆญํ•˜๋ฉด ๋‚˜ํƒ€๋‚˜๋Š” ์ฃผ์†Œ๊ฐ€ URI์ด๋‹ค. URI๋Š” URL์„ ํฌํ•จํ•˜๋Š” ์ƒ์œ„๊ฐœ๋…์ด๋ฏ€๋กœ 'URL์€ URI๋‹ค.' ๋Š” โ€˜์ฐธโ€™์ด๊ณ , 'URI๋Š” URL์ด๋‹ค.' ๋Š” โ€˜๊ฑฐ์ง“โ€™์ด๋‹ค.

    http://www.google.com:80/search?q=JavaScript ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒ€์ƒ‰์ฐฝ์— ์ž…๋ ฅํ•˜๋ฉด, ๊ตฌ๊ธ€์—์„œ JavaScript๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ด๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

    ์Šคํฌ๋ฆฐ์ƒท, 2021-09-02 11-46-06



1-4. HTTP Request & HTTP Response


  • HTTP๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์š”์ฒญ(Request)์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต(Response)์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    request-response

    ์ด๋•Œ ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค(interface)๋ฅผ ์ œ๊ณตํ•ด์ค˜์•ผ ํ•œ๋‹ค.

    ์ด๊ฒƒ์„ API, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค(Application Programming Interface) ๋ผ๊ณ  ํ•œ๋‹ค.

  • ์•ž์—์„œ ์‚ดํŽด๋ณธ URL์„ ์ด์šฉํ•˜๋ฉด ์„œ๋ฒ„์— ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์—ฌ๊ธฐ์„œ ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์œผ๋ฉด HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ(Http Request Methods)๋ฅผ ์ด์šฉํ•œ๋‹ค.

    ์ผ๋ฐ˜์ ์œผ๋กœ HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ๋Š” HTTP Verbs๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ์šฐ๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฃผ์š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

    1. GET : ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ์š”์ฒญ

    2. POST : ์ƒˆ๋กœ์šด ์ž์›์„ ์ƒ์„ฑ

    3. PUT(PATCH) : ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ

    4. DELETE : ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ์‚ญ์ œ

  • ๋‹ค์–‘ํ•œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ๋ฌธ์„œ์—์„œ ์ฐธ์กฐํ•˜์ž. ์ฐธ์กฐ : MDN



1-5. HTTP ๋ฉ”์„ธ์ง€ ํฌ๋งท


  • ์•ž์„œ์„œ ๋งํ•œ ๋‚ด์šฉ์„ ์š”์•ฝํ•˜๋ฉด, HTTP๋Š” ํŠน์ • ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„์˜ ์†Œํ†ต์„ ์œ„ํ•ด ๋””์ž์ธ๋˜์—ˆ์œผ๋ฉฐ (1-2. HTTP ํ”„๋กœํ† ์ฝœ์ด๋ž€?) ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP messages ์–‘์‹์— ๋งž์ถฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๋„ HTTP messages ์–‘์‹์— ๋งž์ถฐ ์‘๋‹ตํ•œ๋‹ค ๋ฐฐ์› ๋‹ค. (1-4. HTTP Request & HTTP Response).

    HTTP messages๋Š” ์š”์ฒญ(Requests)๊ณผ ์‘๋‹ต(Responses)์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์ง€๋‹Œ๋‹ค.

    IMVji3YEl-1620275072422

    1. start line : start line์—๋Š” ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์œ„์น˜ํ•œ๋‹ค. ์‘๋‹ต์—์„œ๋Š” status line์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

    2. HTTP headers : ์š”์ฒญ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ๋ณธ๋ฌธ์„ ์„ค๋ช…ํ•˜๋Š” ํ—ค๋”์˜ ์ง‘ํ•ฉ.

    3. empty line : ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฉ”ํƒ€ ์ •๋ณด๊ฐ€ ์ „์†ก๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ๋นˆ ์ค„

    4. body : ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์‘๋‹ต๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ฌธ์„œ๋ฅผ ํฌํ•จํ•œ๋‹ค. ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

    ์ด ์ค‘ start line๊ณผ HTTP headers๋ฅผ ๋ฌถ์–ด ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ํ—ค๋“œ(head)๋ผ๊ณ  ํ•˜๊ณ , payload๋Š” body๋ผ๊ณ  ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

    ํŽ˜์ด๋กœ๋“œ(์˜์–ด: payload)๋Š” ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋œปํ•œ๋‹ค.

    ํŽ˜์ด๋กœ๋“œ๋Š” ์ „์†ก์˜ ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ๊ทธ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์ „์†ก๋˜๋Š” ํ—ค๋”์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธํ•œ๋‹ค. ์ฐธ์กฐ : MDN



1-6. HTTP ์š”์ฒญ (Request)


  • HTTP ์š”์ฒญ์€ ์„œ๋ฒ„๊ฐ€ ํŠน์ • ๋™์ž‘์„ ์ทจํ•˜๊ฒŒ๋” ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ „์†กํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ผ๋Š”๊ฑธ ์œ„์—์„œ ํ•™์Šตํ•˜์˜€๋‹ค. ์ด ๋ฉ”์„ธ์ง€์˜ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • ์‹œ์ž‘์ค„

    1. ์ˆ˜ํ–‰ํ•  ์ž‘์—…(GET, PUT, POST ๋“ฑ)์ด๋‚˜ ๋ฐฉ์‹(HEAD or OPTIONS)์„ ์„ค๋ช…ํ•˜๋Š” HTTP method๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

      ์˜ˆ๋ฅผ ๋“ค์–ด GET method๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๊ณ , POST method๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

    2. ์š”์ฒญ ๋Œ€์ƒ(์ผ๋ฐ˜์ ์œผ๋กœ URL์ด๋‚˜ URI) ๋˜๋Š” ํ”„๋กœํ† ์ฝœ, ํฌํŠธ, ๋„๋ฉ”์ธ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ์š”์ฒญ ์ปจํ…์ŠคํŠธ์— ์ž‘์„ฑ๋œ๋‹ค.

      ์ด ์š”์ฒญ ํ˜•์‹์€ HTTP method ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค.

    3. HTTP ๋ฒ„์ „๋งˆ๋‹ค ๋ฉ”์‹œ์ง€์˜ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค.

      ์ด๋ฅผ ์œ„ํ•ด HTTP ๋ฒ„์ „์„ ํ•จ๊ป˜ ์ž…๋ ฅํ•œ๋‹ค.

  • ํ—ค๋” : ์š”์ฒญ์˜ Headers๋Š” ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

    ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๋ฌธ์ž์—ด๊ณผ ์ฝœ๋ก (:), ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ’์€ ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉฐ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜์ž. ์ฐธ์กฐ : MDN

  • ๋ฐ”๋”” : ์š”์ฒญ์˜ ๋ณธ๋ฌธ์€ HTTP messages ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.

    ํ•˜์ง€๋งŒ, ๋ชจ๋“  ์š”์ฒญ์— body๊ฐ€ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. GET, HEAD, DELETE, OPTIONS์ฒ˜๋Ÿผ ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ณธ๋ฌธ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    POST๋‚˜ PUT๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ์š”์ฒญ์€ ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ๋ฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ๋œ๋‹ค.



1-7. HTTP ์‘๋‹ต(Responses)


  • ์ „๋ฐ˜์ ์ธ ๋‚ด์šฉ์€ ์š”์ฒญ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ์ ๋งŒ ์„œ์ˆ ํ•ด๋ณด์•˜๋‹ค.

  • ์‹œ์ž‘์ค„

    1. ํ˜„์žฌ ํ”„๋กœํ† ์ฝœ์˜ ๋ฒ„์ „(HTTP/1.1)

    2. ์ƒํƒœ ์ฝ”๋“œ : ์š”์ฒญ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฝ”๋“œ๋ฒˆํ˜ธ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค (200, 302, 404 ETCโ€ฆ)

    3. ์ƒํƒœ ํ…์ŠคํŠธ : ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…

  • ํŠนํžˆ ์ด ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ†ตํ•˜์—ฌ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ก ํŠธ์—”๋“œ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์ž์—๊ฒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ •๋ณด์ด๋‹ค.

    ์ฃผ์š” ์ƒํƒœ ์ฝ”๋“œ๋Š” 200๋ฒˆ๋Œ€๋ถ€ํ„ฐ 500๋ฒˆ๋Œ€๊นŒ์ง€ ๋‹ค์–‘ํ•˜๊ฒŒ ์žˆ์ง€๋งŒ ์ฃผ์š”ํ•œ ์ƒํƒœ ์ฝ”๋“œ๋งŒ ๋ช‡ ๊ฐœ ์‚ดํŽด๋ณด์ž๋ฉด,

    • 2xx : 200๋ฒˆ๋Œ€์˜ ์ƒํƒœ ์ฝ”๋“œ๋Š” ๋Œ€๋ถ€๋ถ„ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ์„ฑ๊ณต์„ ์˜๋ฏธํ•œ๋‹ค.

    • 3xx : 300๋ฒˆ๋Œ€์˜ ์ƒํƒœ ์ฝ”๋“œ๋Š” ๋Œ€๋ถ€๋ถ„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „ ์ฃผ์†Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์ƒˆ URL๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ์œ ๋„ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

    • 4xx : 400๋ฒˆ๋Œ€ ์ƒํƒœ ์ฝ”๋“œ๋Š” ๋Œ€๋ถ€๋ถ„ ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์ด๋‹ค. ์œ ํšจํ•˜์ง€ ์•Š์€ ์ž์›์„ ์š”์ฒญํ–ˆ๊ฑฐ๋‚˜ ์š”์ฒญ์ด๋‚˜ ๊ถŒํ•œ์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค. ๊ฐ€์žฅ ์ต์ˆ™ํ•œ ์ƒํƒœ ์ฝ”๋“œ๋Š” 404 ์ฝ”๋“œ์ด๋‹ค. ์š”์ฒญํ•œ ์ž์›์ด ์„œ๋ฒ„์— ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

      404์˜ค๋ฅ˜

      ์›นํŽ˜์ด์ง€์—์„œ ์ข…์ข… ๊ฒช๋Š” 404 ์—๋Ÿฌ ์ถœ๋ ฅ ๋ฉ”์„ธ์ง€

    • 5xx : 500๋ฒˆ๋Œ€ ์ƒํƒœ ์ฝ”๋“œ๋Š” ์„œ๋ฒ„ ์ชฝ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ ๊ฒฝ์šฐ์ด๋‹ค.



2. SSR๊ณผ CSR




2-1. SSR(Server Side Rendering)


  • ์›น ํŽ˜์ด์ง€๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ Œ๋”๋งํ•˜๋Š” ๋Œ€์‹ ์—, ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ผ์ปซ๋Š”๋‹ค.

    ssr

    ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์˜ URI๋กœ GET ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๋Š” ์ •ํ•ด์ง„ ์›น ํŽ˜์ด์ง€ ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•œ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„์˜ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๋„์ฐฉํ•˜๋ฉด ์™„์ „ํžˆ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋œ๋‹ค.

    ์„œ๋ฒ„์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ณด๋‚ด๊ธฐ ์ „์—, ์„œ๋ฒ„์—์„œ ์™„์ „ํžˆ ๋ Œ๋”๋งํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Server Side Rendering ์ด๋ผ๊ณ  ํ•œ๋‹ค.

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

    ์›น ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด๋˜ ์‚ฌ์šฉ์ž๊ฐ€, ๋ธŒ๋ผ์šฐ์ €์˜ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๋Š” ์ด ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•œ๋‹ค.



2-2. CSR(Client Side Rendering)


  • SSR์ด ์„œ๋ฒ„ ์ธก์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค๋ฉด, CSR์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

    csr

    ๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋Œ€์‹ , ์›น ํŽ˜์ด์ง€์˜ ๊ณจ๊ฒฉ์ด ๋  ๋‹จ์ผ ํŽ˜์ด์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ธ๋‹ค. ์ด๋•Œ ์„œ๋ฒ„๋Š” ์›น ํŽ˜์ด์ง€์™€ ํ•จ๊ป˜ JavaScript ํŒŒ์ผ์„ ๋ณด๋‚ด์–ด์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ฐ›์œผ๋ฉด, ์›น ํŽ˜์ด์ง€์™€ ํ•จ๊ป˜ ์ „๋‹ฌ๋œ JavaScript ํŒŒ์ผ์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์™„์ „ํžˆ ๋ Œ๋”๋ง ๋œ ํŽ˜์ด์ง€๋กœ ๋ฐ”๊พธ๊ฒŒ๋œ๋‹ค.

    ์›น ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ๋‚ด์šฉ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ์—๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์›น ํŽ˜์ด์ง€์— ๋ Œ๋”๋ง์„ ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด API๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— API ์š”์ฒญ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋งˆ์ง€๋ง‰์œผ๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋ฉด SSR๊ณผ ๋‹ค๋ฅด๊ฒŒ ์„œ๋ฒ„๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•œ ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋ฉฐ, ์ด๋•Œ ๋ณด์ด๋Š” ์›น ํŽ˜์ด์ง€์˜ ํŒŒ์ผ์€ ๋งจ ์ฒ˜์Œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ์›น ํŽ˜์ด์ง€ ํŒŒ์ผ๊ณผ ๋™์ผํ•œ ํŒŒ์ผ์ด๋‹ค.



2-3. SSR๊ณผ CSR์˜ ์ฐจ์ด์ 


  • ์šฐ์„  ์†๋„์ ์ธ ์ธก๋ฉด์„ ๋ณด๋ฉด, ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ์˜ ์ข…๋ฅ˜๋Š” ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜๋Š” ์›น ์‚ฌ์ดํŠธ์˜ ๊ฐ€์žฅ ์ฒซ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ ๊ทธ๋ฆฌ๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋‚˜๋จธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ์„ ๊ผฝ์„ ์ˆ˜ ์žˆ๋‹ค.

    ์ฒซ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์‹œ๊ฐ„์€ CSR์˜ ๊ฒฝ์šฐ HTML, CSS์™€ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๋“ค์„ ํ•œ ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ๋ฐ˜๋ฉด SSR์€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ HTML๊ณผ ์Šคํฌ๋ฆฝํŠธ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ‰๊ท ์ ์œผ๋กœ SSR์ด ๋” ๋น ๋ฅด๋‹ค.

    ๋‚˜๋จธ์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์€ ์ฒซ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•œ ํ›„, ์‚ฌ์ดํŠธ์˜ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์‹์˜ ๋™์ž‘์„ ๊ฐ€์ •ํ•˜์ž. CSR์€ ์ด๋ฏธ ์ฒซ ํŽ˜์ด์ง€ ๋กœ๋”ฉํ•  ๋•Œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์™”๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๋‹ค. ๋ฐ˜๋ฉด, SSR์€ ์ฒซ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•œ ๊ณผ์ •์„ ์ •ํ™•ํ•˜๊ฒŒ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋” ๋Š๋ฆฌ๋‹ค.

  • ๊ฒ€์ƒ‰ ์—”์ง„์€ ์ž๋™ํ™”๋œ ํ”„๋กœ๊ทธ๋žจ โ€˜ํฌ๋กค๋Ÿฌโ€™๋กœ ์›น ์‚ฌ์ดํŠธ๋“ค์„ ์ฝ๋Š”๋‹ค.

    CSR์€ ์›น ํŽ˜์ด์ง€์™€ ํ•จ๊ป˜ ์ „๋‹ฌ ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋™์ ์œผ๋กœ ์ปจํ…์ธ ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰ ๋˜์–ด์•ผ ์˜ฌ๋ฐ”๋ฅธ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ SSR์€ ์• ์ดˆ์— ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์ปดํŒŒ์ผ๋˜์–ด ํด๋ผ์ด์–ธํŠธ๋กœ ๋„˜์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํฌ๋กค๋Ÿฌ์— ๋Œ€์‘ํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค.



๐Ÿค” Understanding

  • HTTP ๋ž€, ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ๊ฐ„์˜ ์ƒํ˜ธ๊ฐ„์— ํ˜‘์˜ ๋œ ๊ทœ์น™์œผ๋กœ ์ž์›์„ ์ฃผ๊ณ ๋ฐ›๋Š” ์ผ๋ จ์˜ ๊ณผ์ •๋“ค์„ ํ•™์Šตํ•˜์˜€๋‹ค.

    ์•ฝ๊ฐ„โ€ฆ ๊ตฌ์กฐ์ ์ธ ๋‚ด์šฉ์˜ ํ•™์Šต์ด์—ˆ๋‹ค. ๋ฌธ๋ฒ•์ด๋‚˜ ์ฝ”๋“œ๊ธฐ์ˆ ๋“ฑ์ด ์•„๋‹Œ ์›์ดˆ์ ์ด๊ณ  ๊ทผ๋ณธ์ ์ธ ๋‚ด์šฉ์ด๋ž„๊นŒ??

    ์šฐ์„  ์˜ค๋Š˜ ํ•™์Šต๋‚ด์šฉ์„ ์ตœ๋Œ€ํ•œ ์š”์•ฝํ•˜์ž๋ฉด,

    ํด๋ผ์ด์–ธํŠธ๋Š” ํŠน์ •๋œ โ€œ์š”์ฒญ ๋ฉ”์„œ๋“œโ€๋กœ ์„œ๋ฒ„์— ์ž์›์„ ์š”๊ตฌํ•˜๊ณ , ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์š”์ฒญ์„ โ€œ์‘๋‹ต ์ฝ”๋“œโ€๊ฐ€ ํฌํ•จ๋œ ์‘๋‹ต์œผ๋กœ ๋‹ต๋ณ€์„ ํ•œ๋‹ค.

    ์ด๋•Œ ์ƒํ˜ธ๊ฐ„์— ๋Œ€ํ™”(?)๋Š” ํ”„๋กœํ† ์ฝœ์ด๋ผ๋Š” ์ƒํ˜ธ๊ฐ„์— ๊ทœ์ •๋œ ๊ทœ์น™์œผ๋กœ ์ด๋ค„์ง„๋‹ค.

    ์ •๋„๋กœ ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

    http-full-structure

    ํ•ด๋‹น ์‚ฌ์ง„์˜ ํ๋ฆ„์œผ๋กœ โ€œ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— Request & Responses๊ฐ€ ์ด๋ค„์ง„๋‹ค.โ€ ๋ผ๋Š” ๋‚ด์šฉ์€ ๋จธ๋ฆฟ์†์— ์ง‘์–ด๋„ฃ์—ˆ๋‹ค ์ƒ๊ฐํ•œ๋‹ค.

  • SSR ๊ณผ CSR์ด ์–ธ์ œ ํ•„์š”ํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์€ ์งš๊ณ  ๋„˜์–ด๊ฐ”๋‹ค. SSR์ด ๋‹ค์‹œ ๊ฐ๊ด‘์„ ๋ฐ›๋Š” ๋“ฏํ•œ ๋ถ„์œ„๊ธฐ๋˜๋ฐ.. ์กฐ๊ธˆ ๋” ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•  ๋“ฏ ํ•˜๋‹ค.