๐ŸŒˆ [Section2] 9. ๋„คํŠธ์›Œํฌ2

ํ˜„์ฃผยท2022๋…„ 10์›” 2์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
28/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • 2-Tier Architecture
  • HTTP
  • SSR / CSR

โœ๏ธ ์›น(WEB)

  • ์ธํ„ฐ๋„ท์—์„œ ์ œ๊ณต๋˜๋Š” ํ•˜์ดํผํ…์ŠคํŠธ ์‹œ์Šคํ…œ

    โœ”๏ธ ํ•˜์ดํผํ…์ŠคํŠธ
    ๋ฌธ์„œ์•ˆ์— ๋‹ค๋ฅธ ๋ฌธ์„œ์˜ ์œ„์น˜์ •๋ณด ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ๋ฌธ์„œ ๊ฐ„์˜ ์ •๋ณด๋ฅผ ์„œ๋กœ ์—ฐ๊ด€ ์ง€์–ด ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ

  • HTML๋กœ ๋Œ€ํ‘œ๋˜๋Š” ํ•˜์ดํผํ…์ŠคํŠธ ์–ธ์–ด์™€ ์ธํ„ฐ๋„ท์ด ์œตํ•ฉํ•˜์—ฌ ํƒ„์ƒ

    โœ”๏ธ HTML
    ์šด์˜์ฒด์ œ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ฌ๋ผ๋„ ๋ธŒ๋ผ์šฐ์ €๋งŒ ์žˆ์œผ๋ฉด ๋ชจ๋‘๊ฐ€ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ผ์ •ํ•œ ํ˜•์‹ ๊ธฐ์ค€


โœ๏ธ ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ์•„ํ‚คํ…์ณ (2-Tier Architecture)

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

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ

โœ๏ธ 3ํ‹ฐ์–ด ์•„ํ‚คํ…์ณ (3-Tier Architecture)

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

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ์ฐฝ๊ณ ๊ฐ™์€ ์—ญํ• 

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ €์žฅ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋นผ๋‚ด์™€ ์ „๋‹ฌ

โœ๏ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜

  • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„์˜ ์—ฐ๊ฒฐ์—์„œ ์–ด๋–ป๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์˜ ์š”์†Œ๋“ค์ด ์ƒํ˜ธ ์†Œํ†ตํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•

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

  • ์ธํ„ฐ๋„ท์— ๊ณต๊ฐœ๋˜๋Š” ์ˆœ๊ฐ„ ๋ง‰๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๋ คํ•ด์•ผํ•  ์š”์†Œ๋“ค์ด ์žˆ์Œ โฌ‡๏ธ

    • ์‹ ๋ขฐ์„ฑ (reliability)
    • ํ™•์žฅ์„ฑ (scalability)
    • ๋ณด์•ˆ์„ฑ (security)
    • ๊ฒฌ๊ณ ์„ฑ (robustness)

โœ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ ํ๋ฆ„

  1. ๋ธŒ๋ผ์šฐ์ €์— url ์ž…๋ ฅ

  2. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„ ์ฃผ์†Œ ์ฐพ๊ธฐ ์œ„ํ•ด DNS ์„œ๋ฒ„์— ์š”์ฒญ ๋ณด๋ƒ„

  3. IP ์ฃผ์†Œ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ์ฃผ์†Œ์— HTTPS ์š”์ฒญ ๋ณด๋ƒ„
    โžœ ์ด๋ฏธ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ด ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์œผ๋ฉด ์ฃผ์†Œ๋ฅผ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜ด

  4. ์›น์„œ๋ฒ„์— ์š”์ฒญ์ด ๋„์ฐฉ

  5. ์›น์„œ๋ฒ„๊ฐ€ ์ €์žฅ์†Œ์— ์š”์ฒญ์„ ๋ณด๋‚ด ํŽ˜์ด์ง€ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋“ค ๊ฐ€์ ธ์˜ด
    โžœ ์ •๋ณด๋“ค์€ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘์— ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์ด ์ž‘์šฉ
    ( ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง๋“ค์€ ๊ฐ ๋ฐ์ดํ„ฐ๋“ค์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ์ง€๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์Œ )

  6. ๋กœ์ง๋“ค์„ ํ†ตํ•ด ์š”์ฒญ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋“ค์ด ์ฒ˜๋ฆฌ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ์‘๋‹ต

  7. ์š”์ฒญ๋“ค์ด ๋ธŒ๋ผ์šฐ์ €์— ์‘๋‹ต์œผ๋กœ ๋Œ์•„์™”์„ ๋•Œ, web page ํ™”๋ฉด์—์„œ ์ถœ๋ ฅ

๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ client-side์™€ server-side๋กœ ์ž‘๋™ํ•˜๊ธฐ์— ์œ ์ €๊ฐ€ ์š”์ฒญํ•˜๋ฉด ํฌ๊ฒŒ ์•„๋ž˜์˜ ๋‘ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•จ โฌ‡๏ธ

  1. ์œ ์ €์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ (client-side)
    โžœ ์ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด front-end
    โžœ ์ฃผ๋กœ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด HTML, CSS, and JavaScript ์กฐํ•ฉ
    โžœ ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ๋ถ„์„๋˜์–ด ์ฒ˜๋ฆฌ๋จ
    โžœ ์„œ๋ฒ„์™€ ์†Œํ†ต์€ HTTP ์š”์ฒญ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง
    โ €
  2. HTTP ์š”์ฒญ์— ๋”ฐ๋ผ ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ (server-side)
    โžœ ์ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด back-end
    โžœ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ  HTTP ์š”์ฒญ์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋“ค์ด ์‚ฌ์šฉ

โœ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”์†Œ

1. ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ

โžœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์ ์ธ ๋ถ€๋ถ„ ์™ธ์˜ ์š”์†Œ๋“ค
Ex. ์•Œ๋ฆผ, ํ™˜๊ฒฝ์„ค์ • ๋“ฑ

2. ๊ตฌ์กฐ ์š”์†Œ

โžœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์ ์ธ ๋ถ€๋ถ„ (์ „์ฒด์ ์ธ ๊ตฌ์กฐ)
โžœ ์›น ๋ธŒ๋ผ์šฐ์ €๋‚˜ ํด๋ผ์ด์–ธํŠธ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ

โœ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ 3๋‹จ๊ณ„ ๊ณ„์ธต ๊ตฌ์กฐ

โœ”๏ธ Presentation Layer

โžœ ์œ ์ €์™€ ๋ธŒ๋ผ์šฐ์ € ๋“ฑ์„ ์ด์šฉํ•ด ์ง์ ‘์ ์œผ๋กœ ์ ‘์ด‰
โžœ Web Server, ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋“ค์ด ์ด ๊ณ„์ธต์— ํฌํ•จ

โœ”๏ธ Application Layer

โžœ Business Layer, Business Logic ํ˜น์€ Domain Logic ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•จ
โžœ ์œ ์ €์˜ ์š”์ฒญ์„ ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ
โžœ Application Server๊ฐ€ ์ด ๊ณ„์ธต์— ํฌํ•จ
โžœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์œ„ํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ทœ๊ฒฉํ™” ํ•˜๋Š” ๋“ฑ์˜ ๊ณผ์ •์ด ์ด ๊ณ„์ธต์— ์ž‘์„ฑ๋จ

โœ”๏ธ Data access layer

โžœ Persistence layer ๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ
โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์„ ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ ์˜ค๊ฑฐ๋‚˜ ์ €์žฅ์„ ๋‹ด๋‹น
โžœ ์ด ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด Application Layer ์˜ ๋กœ์ง๋“ค์ด '์–ด๋Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํšŒ์ˆ˜ํ•˜๊ณ  ํ˜น์€ ์ €์žฅํ• ์ง€'๋ฅผ ๋” ์ตœ์ ํ™” ๊ฐ€๋Šฅ

โœ”๏ธ ์ฃผ 3๊ฐœ ๊ณ„์ธต์— ์†ํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋“ค

  • Cross-cutting
    ์ฃผ๋กœ ๋ณด์•ˆ, ํ†ต์‹ , ์šด์˜ ๊ด€๋ฆฌ๋“ฑ์„ ์œ„ํ•œ ์š”์†Œ๋“ค
    โ €
  • Third-party integrations
    ์ œ 3์˜ API ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ
    Ex. OAuth 2.0์„ ์ด์šฉํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ, PG์‚ฌ๋ฅผ ์ด์šฉํ•œ ๊ฒฐ์žฌ๊ธฐ๋Šฅ ๋“ฑ

โœ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„๋ฐฉ์‹

1. Single Page Application

  • ์›น ํŽ˜์ด์ง€์—์„œ ์ผ๋ถ€๋ถ„๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
    Ex. ๊ฐ™์€ ํ™”๋ฉด์—์„œ ๊ด‘๊ณ  ๋ฐฐ๋„ˆ๋งŒ ๋ฐ”๋€Œ๋Š” ๊ฒƒ

  • ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ ๊ณ ์นจ ๋˜์ง€ ์•Š๊ณ , ์š”์ฒญํ•œ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ์œ ์ €์™€ ํŽ˜์ด์ง€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

  • ์ฃผ๋กœ AJAX, Asynchronous JavaScript, XML๊ฐ€ ์‚ฌ์šฉ๋จ

2. Microservice architecture

  • ์ž‘๊ณ  ๊ฐ€๋ฒผ์šด ํŠน์ •ํ•œ ํ•œ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

  • ์›ํ•˜๋Š” ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ์œ ์—ฐ์„ฑ์„ ๋” ๊ฐ–๊ฒŒ ๋˜๊ณ , ๊ฐœ๋ฐœ ๊ณผ์ •์˜ ์ „๋ฐ˜์ ์ธ ์†๋„์™€ ์ƒ์‚ฐ์„ฑ์ด ํ–ฅ์ƒ

3. Serverless Architectures

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋ฒ„์™€ ๊ธฐํƒ€ ๊ธฐ๋ฐ˜ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ์™ธ๋ถ€์˜ 3์ž์ธ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์ œ๊ณต์ž์—๊ฒŒ ์˜ํƒํ•˜๋Š” ๋ฐฉ์‹

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋ฒ„ ๊ฑฑ์ • ์—†์ด ํŠน์ • ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ

โœ”๏ธ AJAX ( Asynchronous JavaScript And XMLHttpRequest)

  • JS, DOM, Fetch, XMLHttpRequest, HTML ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ, SPA(Single Page Application)๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ 
    โ €
  • ์›น ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ›์•„์™€ ํ™”๋ฉด์— ๊ทธ๋ ค๋‚ผ ์ˆ˜ ์žˆ์Œ
    Ex. ๊ฒ€์ƒ‰์ฐฝ์— ํ•œ๊ธ€์ž์”ฉ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค ์•„๋ž˜ ์ถ”์ฒœ ๊ฒ€์ƒ‰์–ด๊ฐ€ ๋ฐ”๋€œ
    โ €
    โœ”๏ธ ํ•ต์‹ฌ ๊ธฐ์ˆ 
  • JS / DOM / Fetch
    โžœ Fetch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ์ด๋™์ด ์—†์–ด๋„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๊ธฐ ๊ฐ€๋Šฅ
    ( โžœ Fetch๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋น„๋™๊ธฐ์ ์ธ ๋ฐฉ์‹ )
    โ €
    โœ”๏ธ ์žฅ์ 
  • ์„œ๋ฒ„์—์„œ HTML์„ ์™„์„ฑํ•˜์—ฌ ๋ณด๋‚ด์ฃผ์ง€ ์•Š์•„๋„ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ์ผ๋ถ€๋งŒ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
  • ๋ธŒ๋ผ์šฐ์ €์— ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋น ๋ฅด๊ณ  ๋” ๋งŽ์€ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅ ( ์ผ๋ถ€๋งŒ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— )
  • ๋” ์ž‘์€ ๋Œ€์—ญํญ ( ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์Œ )
    โ €
    โœ”๏ธ ๋‹จ์ 
  • SEO(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”)์— ๋ถˆ๋ฆฌ ( ๋ผˆ๋Œ€๋งŒ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ณด ๊ธ์–ด๊ฐ€๊ธฐ ์–ด๋ ค์›€ )
  • ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ๋ฌธ์ œ ( ์ด์ „ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ )
    โžœ์ด๋•Œ๋Š” ๋ณ„๋„๋กœ History API ์‚ฌ์šฉํ•ด์•ผํ•จ

โœ”๏ธ Fetch

  • XHR์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ์ƒˆ๋กœ์šด Web API
  • XML๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  JavaScript์™€ ํ˜ธํ™˜๋˜๋Š” JSON์„ ์‚ฌ์šฉ
    โžœ ์˜ค๋Š˜๋‚  XHR๋ณด๋‹ค Fetch๋ฅผ ๋งŽ์ด ์‚ฌ์šฉ

โœ๏ธ API(Application Programming Interface)

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

    โœ”๏ธ ์ธํ„ฐํŽ˜์ด์Šค (interface)
    ์˜์‚ฌ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ ‘์ 


โœ๏ธ HTTP (HyperText Transfer Protocol)

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์„ ์œ„ํ•ด, ์›น ๋ธŒ๋ผ์šฐ์ €์ƒ์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋กœํ† ์ฝœ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ „์†กํ•˜๋Š” ๋ฌด์ƒํƒœ์„ฑ์˜ ํ”„๋กœํ† ์ฝœ

  • ์›”๋“œ ์™€์ด๋“œ ์›น(WWW)์— ๋‚ด์žฌ๋œ ํ”„๋กœํ† ์ฝœ

  • ํด๋ผ์ด์–ธํŠธ์—์„œ์˜ ๋ฐ์ดํ„ฐ ์š”์ฒญ๊ณผ ์„œ๋ฒ„์—์„œ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘๋™์‹œํ‚ด

โœ” HTTP์˜ ํŠน์ง•

  1. ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ

  2. ๋ฌด์ƒํƒœ์„ฑ ํ”„๋กœํ† ์ฝœ (Stateless)
    โžœ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์Œ

    Ex. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ "์ €๋…์— ์น˜ํ‚จ๋จน์ž" ๋ผ๊ณ  ๋งํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ "๊ทธ๋ž˜"๋ผ๊ณ  ๋Œ€๋‹ตํ•จ. ์ €๋…์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ "๋จน์œผ๋Ÿฌ ๊ฐ€์ž" ๋ผ๊ณ  ๋งํ•˜๋ฉด ์„œ๋ฒ„๋Š” "๋ญ˜?"์ด๋ผ๊ณ  ๋Œ€๋‹ตํ•จ.
    โ €
    โžœ ๋ชจ๋“  ์š”์ฒญ์„ ํ•œ๋ฒˆ์— ์–˜๊ธฐํ•ด์•ผํ•จ
    ( ์žฅ์  : ์„œ๋ฒ„๊ฐ€ ๋ˆ„๊ตฌ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ํ•ญ์ƒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ (์„œ๋ฒ„ ํ™•์žฅ ํŽธ๋ฆฌ ))
    โ €
    [์ฐธ๊ณ ] https://www.inflearn.com/questions/223034

  3. ๋น„ ์—ฐ๊ฒฐ์„ฑ (Connectionless)
    โžœ ๋น ๋ฅธ ์‘๋‹ต ๊ฐ€๋Šฅ

  4. HTTP ๋ฉ”์„ธ์ง€

  5. ๋‹จ์ˆœํ•จ, ํ™•์žฅ ๊ฐ€๋Šฅ

[์ฐธ๊ณ ] https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-http-http%EB%9E%80-%ED%8A%B9%EC%A7%95-%EB%AC%B4%EC%83%81%ED%83%9C-%EB%B9%84%EC%97%B0%EA%B2%B0%EC%84%B1/


โœ” HTTP Messages

  • HTTP๋ฅผ ์ด์šฉํ•ด ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฉ”์‹œ์ง€

  • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตํ™˜๋˜๋Š” ๋ฐฉ์‹

  • ์š”์ฒญ(Requests), ์‘๋‹ต(Responses)์˜ ๋‘๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Œ

  • ์ง์ ‘ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , ๊ตฌ์„ฑ ํŒŒ์ผ, API, ๊ธฐํƒ€ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ž๋™์œผ๋กœ ์™„์„ฑํ•จ

โœ” Requests / Responses์˜ ๊ณตํ†ต๋œ ๊ตฌ์กฐ

  • start line
    โžœ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ์ƒํƒœ ๋‚˜ํƒ€๋ƒ„
    โžœ ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์œ„์น˜
    โžœ ์‘๋‹ต์—์„œ๋Š” status line์ด๋ผ๊ณ  ๋ถ€๋ฆ„

  • HTTP headers
    โžœ ์š”์ฒญ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ๋ณธ๋ฌธ์„ ์„ค๋ช…ํ•˜๋Š” ํ—ค๋”์˜ ์ง‘ํ•ฉ
    โžœ start line๊ณผ HTTP headers๋ฅผ ๋ฌถ์–ด ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ํ—ค๋“œ(head)๋ผ๊ณ  ํ•จ

  • empty line
    โžœ ํ—ค๋”์™€ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋นˆ ์ค„

  • body
    โžœ ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์‘๋‹ต๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ฌธ์„œ (ํŽ˜์ด๋กœ๋“œ)
    ( ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ )

    ํŽ˜์ด๋กœ๋“œ
    ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ

โœ” ์š”์ฒญ (Requests)

  • Start line

    1. ์ˆ˜ํ–‰ํ•  ์ž‘์—…(GET, PUT, POST ๋“ฑ)์ด๋‚˜ ๋ฐฉ์‹(HEAD or OPTIONS)์„ ์„ค๋ช…ํ•˜๋Š” HTTP method
      โ €
    2. ์š”์ฒญ ๋Œ€์ƒ(์ผ๋ฐ˜์ ์œผ๋กœ URL์ด๋‚˜ URI) / ํ”„๋กœํ† ์ฝœ, ํฌํŠธ, ๋„๋ฉ”์ธ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ์š”์ฒญ ์ปจํ…์ŠคํŠธ์— ์ž‘์„ฑ
      (์ด ์š”์ฒญ ํ˜•์‹์€ HTTP method ๋งˆ๋‹ค ๋‹ค๋ฆ„ โฌ‡๏ธ )

      โœ”๏ธ origin ํ˜•์‹
      โžœ ?์™€ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ๋ถ™๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ
      โžœ POST, GET, HEAD, OPTIONS ๋“ฑ์˜ method์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
      POST / HTTP 1.1GET /background.png HTTP/1.0HEAD /test.html?query=alibaba HTTP/1.1OPTIONS /anypage.html HTTP/1.0
      โ €
      โœ”๏ธ absolute ํ˜•์‹
      โžœ ์™„์ „ํ•œ URL ํ˜•์‹
      โžœ ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„ GET method์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
      GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
      โ €
      โœ”๏ธ authority ํ˜•์‹
      โžœ ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ URL์˜ authority component
      โžœ HTTP ํ„ฐ๋„์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ, CONNECT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      CONNECT developer.mozilla.org:80 HTTP/1.1
      โ €
      โœ”๏ธ asterisk ํ˜•์‹
      โžœ OPTIONS ์™€ ํ•จ๊ป˜ ๋ณ„ํ‘œ() ํ•˜๋‚˜๋กœ ์„œ๋ฒ„ ์ „์ฒด๋ฅผ ํ‘œํ˜„
      OPTIONS * HTTP/1.1

    3. HTTP ๋ฒ„์ „์€ ๋ฉ”์‹œ์ง€์˜ ๋‹ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •
      ( ์ด๋ฅผ ์œ„ํ•ด HTTP ๋ฒ„์ „์„ ํ•จ๊ป˜ ์ž…๋ ฅ )
  • Headers

    โžœ ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋”ฐ๋ฆ„
    โžœ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๋ฌธ์ž์—ด๊ณผ ์ฝœ๋ก (:), ๊ฐ’์„ ์ž…๋ ฅ
    โžœ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํ—ค๋”๊ฐ€ ์žˆ๊ณ , ๊ฐ’์€ ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฆ„

    1. General headers (Reponses์™€ ๋™์ผ)
      โžœ ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ
      โžœ body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ์ด ์—†๋Š” ํ—ค๋”

    2. Request headers
      โžœ fetch๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ๋ฆฌ์†Œ์Šค๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”
      โžœ User-Agent, Accept-Type, Accept-Language๊ณผ ๊ฐ™์€ ํ—ค๋”๋Š” ์š”์ฒญ์„ ๊ตฌ์ฒดํ™”
      โžœ Referer์ฒ˜๋Ÿผ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ If-None๊ณผ ๊ฐ™์ด ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ œ์•ฝ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

    3. Representation headers (Responses์™€ ๋™์ผ)
      โžœ ์ด์ „์—๋Š” Entity headers๋กœ ๋ถˆ๋ฆผ
      โžœ body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”
      Ex. ์ฝ˜ํ…์ธ  ๊ธธ์ด, MIME ํƒ€์ž… ๋“ฑ

  • Body
    โžœ ์š”์ฒญ์˜ ๋ณธ๋ฌธ์€ HTTP messages ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜
    โžœ ๋ชจ๋“  ์š”์ฒญ์— body๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹˜ (์„ ํƒ์ )
    โžœ ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ณธ๋ฌธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ
    Ex. GET, HEAD, DELETE, OPTIONS
    โžœ ์ผ๋ถ€ ์š”์ฒญ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    Ex. POST, PUT

    1. Single-resource bodies (๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ)
      โžœ ํ—ค๋” ๋‘ ๊ฐœ(Content-Type๊ณผ Content-Length)๋กœ ์ •์˜๋œ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ
    2. Multiple-resource bodies (๋‹ค์ค‘-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ)
      โžœ ์—ฌ๋Ÿฌ ํŒŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ ๋ณธ๋ฌธ์—์„œ๋Š” ๊ฐ ํŒŒํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ์ง€๋‹˜
      โžœ ๋ณดํ†ต HTML form๊ณผ ๊ด€๋ จ์ด ์žˆ์Œ

โœ” ์‘๋‹ต (Responses)

  • Status line
    HTTP/1.1 404 Not Found.

    1. ํ˜„์žฌ ํ”„๋กœํ† ์ฝœ์˜ ๋ฒ„์ „(HTTP/1.1)
      โ €
    2. ์ƒํƒœ ์ฝ”๋“œ - ์š”์ฒญ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒ„
      Ex. 200, 302, 404 ๋“ฑ
      โ €
    3. ์ƒํƒœ ํ…์ŠคํŠธ - ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…
  • Headers

โžœ Request Headers์™€ ๋™์ผํ•œ ๊ตฌ์กฐ
โžœ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๋ฌธ์ž์—ด๊ณผ ์ฝœ๋ก (:), ๊ฐ’์„ ์ž…๋ ฅ
โžœ ๊ฐ’์€ ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฆ„

  1. General headers (Requests์™€ ๋™์ผ)
    โžœ ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ
    โžœ body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ์—†๋Š” ํ—ค๋”
    โ €
  2. Response headers
    โžœ ์‘๋‹ต์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ํ—ค๋”
    Ex. ์œ„์น˜ / ์„œ๋ฒ„ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด(์ด๋ฆ„, ๋ฒ„์ „ ๋“ฑ) ๋“ฑ
    โžœ ์ƒํƒœ ์ค„์— ๋„ฃ๊ธฐ์—๋Š” ๊ณต๊ฐ„์ด ๋ถ€์กฑํ–ˆ๋˜ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณต
    Ex. Vary, Accept-Ranges
    โ €
  3. Representation headers (Requests์™€ ๋™์ผ)
    โžœ ์ด์ „์—๋Š” Entity headers๋กœ ๋ถˆ๋ฆผ
    โžœ body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”
    Ex. ์ฝ˜ํ…์ธ  ๊ธธ์ด, MIME ํƒ€์ž… ๋“ฑ
  • Body
    โžœ ์‘๋‹ต์˜ ๋ณธ๋ฌธ์€ HTTP messages ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜
    โžœ ๋ชจ๋“  ์‘๋‹ต์— body๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹˜
    โžœ 201, 204์™€ ๊ฐ™์€ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ์‘๋‹ต์—๋Š” ๋ณธ๋ฌธ ํ•„์š” X

    1. Single-resource bodies (๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ)
      โžœ ๊ธธ์ด๊ฐ€ ์•Œ๋ ค์ง„ ๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ โžœ ๋‘ ๊ฐœ์˜ ํ—ค๋”(Content-Type, Content-Length)๋กœ ์ •์˜
      โžœ ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋Š” ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ ๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ โžœ Transfer-Encoding์ด chunked๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ , ํŒŒ์ผ์€ chunk๋กœ ๋‚˜๋‰˜์–ด ์ธ์ฝ”๋”ฉ๋˜์–ด ์žˆ์Œ
      โ €
    2. Multiple-resource bodies (๋‹ค์ค‘-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ)
      โžœ ์„œ๋กœ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” body

โœ” ์ฟ ํ‚ค

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ €์˜ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๊ด€ํ•˜๊ณ , ๋‹ค์Œ ์ ‘์†๋ถ€ํ„ฐ๋Š” ์œ ์ €์˜ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์„œ ์œ ์ €๋ฅผ ์„œ๋ฒ„๊ฐ€ ์‹๋ณ„ํ•˜๊ฒŒ ํ•˜๋Š” ์—ญํ• 
    ( ์ฟ ํ‚ค์— ๋‹ด๊ธด ๋‚ด์šฉ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์œ ์ €๊ฐ€ ์„ค์ •ํ–ˆ๋˜ ํ•ญ๋ชฉ๋“ค์— ๋Œ€ํ•ด ์ €์žฅ์„ ํ•ด์„œ ๋‹ค์Œ์— ์ด์–ด์„œ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋„์™€์คŒ )

โœ” ์„ธ์…˜

  • ์„œ๋ฒ„์— Session-Id ๋ผ๋Š” ๊ณ ์œ  ์•„์ด๋””๋ฅผ ํ• ๋‹นํ•ด์„œ ์œ ์ € ์‹๋ณ„ํ•˜๋Š” ์—ญํ• 
    ๋‹จ์ˆœํ•˜๊ณ  ์œ ์ถœ์ด ๋˜๋ฉด ์•ˆ๋˜๋Š” ์ •๋ณด๋Š” ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ ์„ธ์…˜ ID์™€ ๋งค์นญํ•ด์„œ ์ €์žฅํ•ด ๊ด€๋ฆฌ
    ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• โžœ ์„ธ์…˜์ •๋ณด๋Š” ์ฟ ํ‚ค์—์„œ ๊ด€๋ฆฌํ•˜๊ณ , ์‹ค์ œ ๋งค์นญ๋˜๋Š” ๊ฐ’๋“ค์€ ์„œ๋ฒ„ ์ธก์—์„œ ๊ด€๋ฆฌ

โœ๏ธ SSR (Server Side Rendering)

  • ์„œ๋ฒ„์ชฝ์—์„œ ๋ Œ๋”๋ง ์ค€๋น„๋ฅผ ๋๋งˆ์นœ ์ƒํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹
    Ex. ๋ฐฐ๋ฏผ์—์„œ ์Œ์‹ ์ฃผ๋ฌธํ–ˆ์„ ๋•Œ ์กฐ๋ฆฌ๊ฐ€ ์™„์„ฑ๋œ ์ƒํƒœ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ

    ๋ Œ๋”๋ง
    2์ฐจ์›์— ํ‘œ์‹œ๋œ ๋ฌผ์ฒด๋ฅผ 3์ฐจ์›์— ํ‘œ์‹œ๋œ ๋ฌผ์ฒด์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ฒƒ

  • ํŽ˜์ด์ง€ ์ž์ฒด๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋˜์–ด ๋‚˜ํƒ€๋‚จ !

  • ์›น ์—์ด์ „์‹œ / SI ์ชฝ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ

โœ” SSR ๋‹จ๊ณ„

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์˜ URI๋กœ GET ์š”์ฒญ ๋ณด๋ƒ„

  2. ์„œ๋ฒ„๊ฐ€ ์ •ํ•ด์ง„ ์›น ํŽ˜์ด์ง€ ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก

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

โœ” SSR์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ

  • SEO(Search Engine Optimization(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”))๊ฐ€ ์šฐ์„ ์ˆœ์œ„์ธ ๊ฒฝ์šฐ

  • ์›น ํŽ˜์ด์ง€์˜ ์ฒซ ํ™”๋ฉด ๋ Œ๋”๋ง์ด ๋น ๋ฅด๊ฒŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ( ๋‹จ์ผ ํŒŒ์ผ์˜ ์šฉ๋Ÿ‰์ด ์ ๊ธฐ ๋•Œ๋ฌธ )

  • ์›น ํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ์ ์€ ๊ฒฝ์šฐ

Ex. ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ, ๋‰ด์š• ํƒ€์ž„์ฆˆ
โžœ ์ตœ๋Œ€ํ•œ ๊ฒ€์ƒ‰์—”์ง„์— ๋งŽ์ด ๋…ธ์ถœ๋˜๋Š” ๊ฒŒ ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ

โœ” SSR์˜ ๋‹จ์ 

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ์ง€๋น„์šฉ์ด ๋†’์Œ ( ์ž์›์ด์šฉ์ด ์„œ๋ฒ„์— ์ง‘์ค‘๋˜๊ธฐ ๋•Œ๋ฌธ )

  • ์ผ๋ถ€ ์„œ๋“œํŒŒํ‹ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Œ

โœ๏ธ CSR (Client Side Rendering)

  • ๋ Œ๋”๋ง์ด ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ์ผ์–ด๋‚จ

  • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ  ํด๋ผ๋ฆฌ์–ธํŠธ์—๊ฒŒ HTML๊ณผ JS ๋ณด๋‚ด์ฃผ๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ฐ›์•„ ๋ Œ๋”๋ง ์‹œ์ž‘
    Ex. ๋ฐฐ๋ฏผ์—์„œ ์Œ์‹ ์ฃผ๋ฌธํ–ˆ์„ ๋•Œ ์กฐ๋ฆฌ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋ฐ€ํ‚คํŠธ๋งŒ ์˜ค๋Š” ๊ฒƒ

    ๋ Œ๋”๋ง
    2์ฐจ์›์— ํ‘œ์‹œ๋œ ๋ฌผ์ฒด๋ฅผ 3์ฐจ์›์— ํ‘œ์‹œ๋œ ๋ฌผ์ฒด์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ฒƒ

  • ํ™”๋ฉด์ด ์ƒˆ๋กœ๊ณ ์นจ๋˜์–ด ๋Œ์ง€ ์•Š๊ณ , ๊ฐ™์€ ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ”๋€œ !

โœ” CSR ๋‹จ๊ณ„


1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ ์š”์ฒญ ๋ณด๋ƒ„

  1. ์„œ๋ฒ„๊ฐ€ ์›นํŽ˜์ด์ง€์˜ ๊ณจ๊ฒฉ์ด ๋  ๋‹จ์ผ ํŽ˜์ด์ง€ + JS๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋ƒ„

  2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›นํŽ˜์ด์ง€ ๋ฐ›์œผ๋ฉด, ๋ธŒ๋ผ์šฐ์ €์—์„œ JS ํŒŒ์ผ์ด ์›นํŽ˜์ด์ง€๋ฅผ ์™„์ „ํžˆ ๋ Œ๋”๋ง ๋œ ํŽ˜์ด์ง€๋กœ ๋ฐ”๊ฟˆ

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

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

โœ” CSR์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ

  • SEO(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”)๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ

  • ์‚ฌ์ดํŠธ์— ํ’๋ถ€ํ•œ ์ƒํ˜ธ ์ž‘์šฉ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ( ๋ผ์šฐํŒ…์ด ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ )

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ

Ex. ์˜ˆ์•ฝ ์‚ฌ์ดํŠธ
โžœ SPA(Single Page Application)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™”๋ฉด์˜ ์ผ๋ถ€๋งŒ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ

โœ” CSR์˜ ๋‹จ์ 

  • ๋Š๋ฆฐ ๋ Œ๋”๋ง ์†๋„ ( ๋ชจ๋“  ๋ Œ๋”๋ง์˜ ๋ถ€ํ•˜๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ชฝ์— ์ง‘์ค‘๋˜๊ธฐ ๋•Œ๋ฌธ )

  • search engine bots ์™€ ์ƒ์„ฑ์ด ์•ˆ์ข‹์Œ
    โžœ JS๊ฐ€ ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๋Š” ์ •๋ณด๋“ค์€ Google ๊ณผ ๊ฐ™์€ search engine index์— ํฌํ•จ์ด ์•ˆ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’dma


๐ŸŒˆ ๋Š๋‚€์ 

ํœด ๋งŽ์€ ๋‚ด์šฉ์ด์—ˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์ž˜ ๋๋ƒˆ๋‹ค
๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•˜๋ฉด์„œ ๋จธ๋ฆฟ์†์—์„œ๋„ ํ๋ฆ„์ด ๋งŽ์ด ์žกํžŒ ๋Š๋‚Œ!
ํ™•์‹คํžˆ ์ •๋ฆฌ๋ฅผ ํ•˜๋‹ˆ๊นŒ ์ข‹๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€