[TIL] Day31 #network #http #Ajax

Beanxxยท2022๋…„ 6์›” 9์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
31/120
post-thumbnail

[TIL] Day31
[SEB FE] Day31

โ˜‘๏ธย Web Application Architecture

๐Ÿ“Žย Client-Server Architecture (2-Tier)

๋ฆฌ์†Œ์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ณณ๊ณผ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์•ฑ์„ ๋ถ„๋ฆฌ์‹œํ‚จ ๊ฒƒ (์š”์ฒญ โ†’ ์‘๋‹ต)

  • ํด๋ผ์ด์–ธํŠธ(Client): ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ (์†๋‹˜-์š”์ฒญ)
    (ex. ์›น์‚ฌ์ดํŠธ(์›น ์•ฑ), ์Šค๋งˆํŠธํฐ/ํƒœ๋ธ”๋ฆฟ ์•ฑ, ๋ฐ์Šคํฌํƒ‘ ์•ฑ)
  • ์„œ๋ฒ„(Server): ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณณ (์ ์›-์‘๋‹ต)
    (ex. ์›น ์„œ๋ฒ„, ํŒŒ์ผ ์„œ๋ฒ„, ๋ฉ”์ผ ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„)

โœ‹ย ์„œ๋ฒ„๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ์—ญํ• ๋งŒ ๋‹ด๋‹น, ๋ฆฌ์†Œ์Šค ์ €์žฅ ๊ณต๊ฐ„์€ ๋ณ„๋„๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—!
๐Ÿ‘‰ย ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ + ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค โ‡’ 3-Tier ์•„ํ‚คํ…์ฒ˜

โœ‹ย ํด๋ผ์ด์–ธํŠธ ์•ฑ์€ ์‚ฌ์šฉ์ž ๋ˆˆ์— ๋ณด์ด๋ฏ€๋กœ, ํ”„๋ก ํŠธ์—”๋“œ ์˜์—ญ
โœ‹ย ์„œ๋ฒ„ ์•ฑ์€ ์‚ฌ์šฉ์ž ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฐฑ์—”๋“œ ์˜์—ญ

โœ…ย ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๋กœ ํšŒ์‹ 
โœ… ํ•„์š”์— ๋”ฐ๋ผ ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ํšŒ์‹  ๋ฐ›์€ ์‘๋‹ต์„ ํ™œ์šฉ

๐Ÿ“Žย Client-Server ํ†ต์‹  & API

โœ”๏ธย ํ”„๋กœํ† ์ฝœ(protocol)

ํ†ต์‹  ๊ทœ์•ฝ

  • HTTP: Web Application Protocol
    • HTTP ๋ฉ”์‹œ์ง€: HTTP๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฉ”์‹œ์ง€

โžฐ ์ฃผ์š” ํ”„๋กœํ† ์ฝœ

OSI 7 Layers
7. ์‘์šฉ ๊ณ„์ธต ๐Ÿ˜
6. ํ‘œํ˜„ ๊ณ„์ธต
5. ์„ธ์…˜ ๊ณ„์ธต
4. ์ „์†ก ๊ณ„์ธต ๐Ÿ˜
3. ๋„คํŠธ์›Œํฌ ๊ณ„์ธต
2. ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต
1. ๋ฌผ๋ฆฌ ๊ณ„์ธต

๐Ÿ™‹โ€โ™€๏ธ in ์‘์šฉ ๊ณ„์ธต
Protocol NameDescription
HTTPWeb์—์„œ HTML, JSON ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ
(์ฃผ์†Œ-URL, URI๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ)
HTTPSHTTP์—์„œ ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ ํ”„๋กœํ† ์ฝœ
FTPํŒŒ์ผ ์ „์†ก ํ”„๋กœํ† ์ฝœ
SMTP๋ฉ”์ผ ์ „์†ก์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ
SSHCLI ํ™˜๊ฒฝ์˜ ์›๊ฒฉ ์ปดํ“จํ„ฐ์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ
RDPWindows ๊ณ„์—ด์˜ ์›๊ฒฉ ์ปดํ“จํ„ฐ์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ
WebSocket์‹ค์‹œ๊ฐ„ ํ†ต์‹ , Push ๋“ฑ์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ

๐Ÿ™‹โ€โ™€๏ธ in ์ „์†ก ๊ณ„์ธต
Protocol NameDescription
TCPHTTP, FTP ํ†ต์‹  ๋“ฑ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์–‘๋ฐฉํ–ฅ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ
UDP๋‹จ๋ฐฉํ–ฅ์„ ์ž‘๋™ํ•˜์—ฌ ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฅด์ง€๋งŒ, ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ์€ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ

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

์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
โœ‹ย Interface๋ฅผ โ€˜์˜์‚ฌ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ ‘์ โ€™์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ!

โœ‹ย API์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ?, & ๊ธฐํ˜ธ ์‚ฌ์šฉ

โžฐ HTTP API

HTTP ๋ฉ”์„œ๋“œ๋Š” CRUD ํ–‰๋™์— ๋”ฐ๋ผ ๋ชฉ์ ์— ๋งž๊ฒŒ ์จ์•ผ ํ•จ

์š”์ฒญ(Request)๋ฉ”์†Œ๋“œ
์กฐํšŒ(Read)GET
์ถ”๊ฐ€(Create)POST
๊ฐฑ์‹ (Update)PUT / PATCH
์‚ญ์ œ(Delete)DELETE
๐Ÿซถ HTTP API ๋””์ž์ธ Best Practice (ex. ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ API)
์š”์ฒญ(Request)URL Design์‚ฌ์šฉ ๋ฉ”์†Œ๋“œ
๋ชจ๋“  ์‚ฌ์šฉ์ž ์กฐํšŒ/usersGET
์ƒˆ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€/usersPOST
1๋ฒˆ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐฑ์‹ /users/1PUT
1๋ฒˆ ์‚ฌ์šฉ์ž ์ •๋ณด ์‚ญ์ œ/users/1DELETE
1๋ฒˆ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ/users/1GET


โ˜‘๏ธย ๋ธŒ๋ผ์šฐ์ € ์ž‘๋™ ์›๋ฆฌ (See โŒ)

scheme / hosts / url-path / query
http:// www.google.com:80 /search ?q=JavaScript

๐Ÿ“Žย URL (Uniform Resource Locator)

๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์›น ํŽ˜์ด์ง€, ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ์˜ ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ์ •๋ณด

  • scheme: ํ†ต์‹  ๋ฐฉ์‹(ํ”„๋กœํ† ์ฝœ) ๊ฒฐ์ • (์ผ๋ฐ˜์ ์ธ ์›น ๋ธŒ๋ผ์šฐ์ €-http(s))
  • hosts: ์›น ์„œ๋ฒ„ ์ด๋ฆ„/๋„๋ฉ”์ธ/IP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฃผ์†Œ๋ฅผ ์˜๋ฏธ
  • url-path: ์›น ์„œ๋ฒ„์—์„œ ์ง€์ •ํ•œ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ~์›นํŽ˜์ด์ง€, ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ์ด ์œ„์น˜ํ•œ ๊ฒฝ๋กœ์™€ ํŒŒ์ผ๋ช…

๐Ÿ“Žย URI (Uniform Resource Identifier)

  • URL์˜ ๊ธฐ๋ณธ ์š”์†Œ์ธ scheme, hosts, url-path + query, bookmark ํฌํ•จ

  • ๋ธŒ๋ผ์šฐ์ € ๊ฒ€์ƒ‰์ฐฝ ํด๋ฆญ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์ฃผ์†Œ

  • URL๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒ์œ„๊ฐœ๋…
    โœ‹ย URL์€ URI๋‹ค. โ‡’ TRUE | URI๋Š” URL์ด๋‹ค. โ‡’ FALSE

  • query: ์›น ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ์ถ”๊ฐ€์ ์ธ ์งˆ๋ฌธ

โžฐย ๊ฐœ๋… ์š”์•ฝ

NameDescriptionexample
schemeํ†ต์‹  ํ”„๋กœํ† ์ฝœfile://, http://, https://
hostsํŒŒ์ผ์ด ์œ„์น˜ํ•œ ์›น ์„œ๋ฒ„ / ๋„๋ฉ”์ธ / IP127.0.0.1, ww.google.com
port์›น ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ํ†ต๋กœ:80, :443, :3000
url-path์›น ์„œ๋ฒ„์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ๋ถ€ํ„ฐ~ ํŒŒ์ผ ์œ„์น˜๊นŒ์ง€์˜ ๊ฒฝ๋กœ/search, /Users/username/Desktop
query์›น ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๋Š” ์ถ”๊ฐ€ ์งˆ๋ฌธq=JavaScript

๐Ÿ“Žย IP & Port

โœ”๏ธย IP address(Internet Protocol address; IP ์ฃผ์†Œ)

๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ํŠน์ • PC ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฒด๊ณ„

  • IPv4(Internet Protocol version 4): ๋„ค ๋ฉ์ด์˜ ์ˆซ์ž๋กœ ๊ตฌ๋ถ„๋œ IP ์ฃผ์†Œ์ฒด๊ณ„ / IP์ฃผ์†Œ์ฒด๊ณ„์˜ 4๋ฒˆ์งธ ๋ฒ„์ „
    • ๊ฐ ๋ฉ์–ด๋ฆฌ๋งˆ๋‹ค 0~255๊นŒ์ง€ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ โ†’ 2^32 = ์•ฝ 43์–ต ๊ฐœ IP์ฃผ์†Œ ํ‘œํ˜„ ๊ฐ€๋Šฅ
      • localhost, 127.0.0.1: ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ๋กœ์ปฌ PC
      • 0.0.0.0, 255.255.255.255: broadcast address / ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์— ์ ‘์†Œ๋œ ๋ชจ๋“  ์žฅ์น˜์™€ ์†Œํ†ตํ•˜๋Š” ์ฃผ์†Œ

โœ‹ย ์ธํ„ฐ๋„ท ๋ณด๊ธ‰๋ฅ ์ด ๊ธ‰์ฆํ•˜๋ฉด์„œ IPv4๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” PC๊ฐ€ ํ•œ๊ณ„๋ฅผ ๋„˜์œผ๋ฉด์„œ
IPv6(IP version 6) ๋“ฑ์žฅ โ† 2^128๊ฐœ IP ์ฃผ์†Œ ํ‘œํ˜„ ๊ฐ€๋Šฅ

โœ‹ย nslookup <google.com>: ํ„ฐ๋ฏธ๋„์—์„œ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ํ†ตํ•ด IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด

ย  ๐Ÿ‘†ย ์œ„์—์„œ google.com ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์ด Domain Name


โœ”๏ธย Port

IP์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” PC์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต๋กœ(์ฑ„๋„)

  • ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ Port๋Š” ์ค‘๋ณต์‚ฌ์šฉ โŒ
  • ํฌํŠธ๋ฒˆํ˜ธ๋Š” 0~65535 ์‚ฌ์ด
  • ํฌํŠธ๋ฒˆํ˜ธ 0~1024 - ์ฃผ์š” ํ†ต์‹ ์„ ์œ„ํ•œ ๊ทœ์•ฝ์— ๋”ฐ๋ผ ์ด๋ฏธ ์ •ํ•ด์ ธ ์žˆ์Œ

โœ…ย ๊ธฐ์–ตํ•ด์•ผ ํ•  ํฌํŠธ ๋ฒˆํ˜ธ

Port NumProtocol
22SSH
80HTTP
443HTTPS

๐Ÿ“Žย Domain & DNS

โœ”๏ธย Domain name

ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“  IP ์ฃผ์†Œ๋ฅผ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋Š” ์ฃผ์†Œ

โœ”๏ธย DNS (Domain Name System)

ํ•ด๋‹น ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ๋งค์นญ๋œ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๋Š” ์ž‘์—…์ด ๋ฐ˜๋“œ์‹œ ํ•„์š” โ†’ ์ด๋ฅผ ์œ„ํ•œ ์„œ๋ฒ„
์ฆ‰, ํ˜ธ์ŠคํŠธ์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ๋œ DB ์‹œ์Šคํ…œ

  • ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ IP์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๊ทœ์น™๊ณผ ๋ ˆ์ฝ”๋“œ๋“ค์˜ ๋ชจ์Œ

    ๐Ÿซถ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์šด ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” IP์ฃผ์†Œ๋กœ ๋ณ€ํ™˜

sub-domain.domain.TLD

www.co.kr

โœ‹ย TLD: Top Level Domain
โœ‹ย kr, us์™€ ๊ฐ™์€ ๊ตญ๊ฐ€ ์ฝ”๋“œ๋Š” co, ac์™€ ๊ฐ™์€ 2๋‹จ๊ณ„ ๋„๋ฉ”์ธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ

โœ”๏ธย Domain Name Server(zone)

ํ•˜์œ„ ๋„๋ฉ”์ธ์„ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋ฒ„(์กด)

โžฐ Domain Name Server ๊ตฌ์„ฑ

  • Root Name Server: ๊ฐ ์ตœ์ƒ์œ„ ๋„๋ฉ”์ธ ๋„ค์ž„ ์„œ๋ฒ„๋“ค์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์Œ. (ex; naver.com)
  • TLD Name Server(์ตœ์ƒ์œ„ ๋„๋ฉ”์ธ ๋„ค์ž„ ์„œ๋ฒ„): ๊ถŒํ•œ์žˆ๋Š” ๋„ค์ž„ ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์Œ
  • ๊ถŒํ•œ ์žˆ๋Š” Name Server: ๋„๋ฉ”์ธ IP ์ฃผ์†Œ / ๋„๋ฉ”์ธ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์„œ๋ฒ„

ย  โœ‹ย ๋„๋ฉ”์ธ ๋„ค์ž„ ์„œ๋ฒ„๋Š” ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ โŒ (์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ์ตœ์†Œ 2๊ฐœ ์ด์ƒ์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜ ๋„๋ฉ”์ธ ๋„ค์ž„ ๋‹ด๋‹น)

โžฐย example:

www.naver.com

  • www: Sub-domain
  • naver.com: Root-domain

โžฐ DNS Lookup

  • Resolver(๋ฆฌ์กธ๋ฒ„): ์š”์ฒญ๋ฐ›์€ ๋„๋ฉ”์ธ์˜ IP ์ฃผ์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋„ค์ž„ ์„œ๋ฒ„์— ๋ฐ˜๋ณต์ ์ธ ์งˆ์˜๋ฅผ ํ•˜๋Š” ๋„ค์ž„ ์„œ๋ฒ„
  1. URL์— deploy.states.com ์ฃผ์†Œ ์ž…๋ ฅ โ†’ DNS Lookup ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์•„๋ž˜์˜ ๊ณผ์ • ๋ฐœ์ƒ
  2. ๋ธŒ๋ผ์šฐ์ €๋Š” Resolver์—๊ฒŒ IP์ฃผ์†Œ ์š”์ฒญ
  3. Resolver๋Š” ๊ธฐ์กด์— ์ฐพ์•„๋ณธ ๋„๋ฉ”์ธ ์ •๋ณด ๋‚ด์šฉ์ด ๋‹ด๊ธด ์บ์‹œ ํŒŒ์ผ์„ ์‚ดํŽด๋ด„
  4. ํ•ด๋‹น๋˜๋Š” ๋„๋ฉ”์ธ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ฆ‰์‹œ IP์ฃผ์†Œ ๋ฆฌํ„ด
  5. ํ•ด๋‹น๋˜๋Š” ๋„๋ฉ”์ธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด ๋‹ค์Œ ์ง„ํ–‰
  6. DNS Resolver๋Š” IP์ฃผ์†Œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋„ค์ž„ ์„œ๋ฒ„๋“ค(Root, TLD, ๊ถŒํ•œ ์žˆ๋Š” ๋„ค์ž„ ์„œ๋ฒ„ ์ฐจ๋ก€๋Œ€๋กœ)์—๊ฒŒ ์žฌ๊ท€์ ์ธ ์ฟผ๋ฆฌ ์ง„ํ–‰ โ†’ IP์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒ„
  7. Resolver๋Š” ์ฟผ๋ฆฌ์ˆ˜๋ฅผ ์ค„์ผ ๋ชฉ์ ์œผ๋กœ ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ๋„๋ฉ”์ธ ๋„ค์ž„ ์„œ๋ฒ„๋“ค์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ธฐ๋„ ํ•จ
  8. Resolver๋Š” ์ „๋‹ฌ๋ฐ›์€ deploy.states.com IP์ฃผ์†Œ๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ „๋‹ฌ
  • ๋„๋ฉ”์ธ ๋„ค์ž„ ์„œ๋ฒ„๋Š” ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด 1๊ฐœ ์ด์ƒ์˜ Zone File์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

โžฐย Zone File ๊ตฌ์„ฑ

์ด๋ฆ„๋ ˆ์ฝ”๋“œ ํด๋ž˜์ŠคTTL๋ ˆ์ฝ”๋“œ ํƒ€์ž…๋ ˆ์ฝ”๋“œ ๋ฐ์ดํ„ฐ
๋„๋ฉ”์ธ ์ด๋ฆ„๋„คํŠธ์›Œํฌ ํƒ€์ž…
(๋ณดํ†ต IN;์ธํ„ฐ๋„ท์œผ๋กœ ์ง€์ •)
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ ์ €์žฅ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐ„
Resolver๊ฐ€ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ช‡ ์ดˆ๋™์•ˆ ์ €์žฅํ• ์ง€ ๋ช…์‹œ
โ†’ ํ•ด๋‹น ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ
(Time To Live)
๋ฐ˜ํ™˜๋  ๋ฐ์ดํ„ฐ ํ˜•์‹๋ฐ˜ํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ

๐Ÿ‘‰ย ๋„ค์ž„ ์„œ๋ฒ„๋“ค์€ Zone File๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์š”์ฒญ์— ํ•ด๋‹น๋˜๋Š” ๋ ˆ์ฝ”๋“œ Return

๐Ÿ‘‰ย Resolver๋Š” ์ด ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๋ฆฌํ„ดํ•ด์•ผ ํ•  IP๋‚˜ ๋‹ค์Œ์— ์ฟผ๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•  ์„œ๋ฒ„ ์ฃผ์†Œ ํ™•์ธ

๐Ÿ™‹โ€โ™€๏ธ ๋Œ€ํ‘œ์ ์ธ ๋ ˆ์ฝ”๋“œ ํƒ€์ž…
  • A: ๋ฐ์ดํ„ฐ๊ฐ€ IPv4 ์ฃผ์†Œ(ex - 127.0.0.1)์ž„์„ ๋ช…์‹œ
  • AAAA: ๋ฐ์ดํ„ฐ๊ฐ€ IPv6 ์ฃผ์†Œ์ž„์„ ๋ช…์‹œ
  • CNAME: ๋ฐ์ดํ„ฐ๊ฐ€ ๋„๋ฉ”์ธ ์ฃผ์†Œ์ž„์„ ๋ช…์‹œ
  • NS: ๋ฐ์ดํ„ฐ๊ฐ€ ๊ถŒํ•œ์žˆ๋Š” DNS ์„œ๋ฒ„๋“ค์˜ ์ฃผ์†Œ์ž„์„ ๋ช…์‹œ
  • SOA: ๋„๋ฉ”์ธ ์ฃผ ๊ด€๋ฆฌ ์„œ๋ฒ„ ์ •๋ณด๋“ค์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ
    • ์ฃผ ๋„ค์ž„ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํฌํŠธ ๋ฒˆํ˜ธ, TTL, ๋„๋ฉ”์ธ ์ฃผ์†Œ ๋“ฑ์ด ์ ํ˜€ ์žˆ์Œ


โ˜‘๏ธย HTTP

๐Ÿ“Žย HTTP Messages

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

  • ์š”์ฒญ(Requests)
  • ์‘๋‹ต(Responses)

โžฐย Requests & Responses์˜ ์œ ์‚ฌ ๊ตฌ์กฐ

  1. start line: ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต ์ƒํƒœ
    a. ํ•ญ์ƒ 1๋ฒˆ์งธ ์ค„์— ์œ„์น˜
    b. ์‘๋‹ต์—์„  status line์œผ๋กœ ๋ถ€๋ฆ„
  2. HTTP headers: ์š”์ฒญ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ๋ณธ๋ฌธ์„ ์„ค๋ช…ํ•˜๋Š” ํ—ค๋” ์ง‘ํ•ฉ
  3. empty line: ํ—ค๋”์™€ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋นˆ ์ค„
  4. body: ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์‘๋‹ต๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ/๋ฌธ์„œ ํฌํ•จ

โœ‹ย start line & HTTP headers๋ฅผ ๋ฌถ์–ด ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ํ—ค๋“œ(head)๋ผ๊ณ  ํ•จ.


โžฐย Stateless

์ƒํƒœ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค

  • HTTP๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •์—์„œ, HTTP๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ โŒ
    โ‡’ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋Ÿฐ ๋ชจ๋“  ์ƒํƒœ๋ฅผ HTTP ํ†ต์‹ ์ด ์ถ”์  โŒ

โœ…ย HTTP์˜ ํฐ ํŠน์ง•์€ Stateless(๋ฌด์ƒํƒœ์„ฑ)


๐Ÿ“Žย HTTP Requests

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€

โžฐย Start line

  1. ์ˆ˜ํ–‰ํ•  ์ž‘์—…(GET, PUT, POST โ€ฆ)์ด๋‚˜ ๋ฐฉ์‹(HEAD, OPTIONS)์„ ์„ค๋ช…ํ•˜๋Š” HTTP method
  2. ์š”์ฒญ ๋Œ€์ƒ(URL, URI), ํ”„๋กœํ† ์ฝœ, ํฌํŠธ, ๋„๋ฉ”์ธ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ์š”์ฒญ ์ปจํ…์ŠคํŠธ์— ์ž‘์„ฑ๋จ
    a. origin ํ˜•์‹: โ€˜?โ€™์™€ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ๋ถ™๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ (GET, POST, HEAD, OPTIONS ๋“ฑ์˜ method์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ)
    b. absolute ํ˜•์‹: ์™„์ „ํ•œ URL ํ˜•์‹ / ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„ GET method์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
    c. authority ํ˜•์‹: ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ URL์˜ ์ผ๋ถ€๋ถ„
    ย ย ย ย ย i. HTTP ํ„ฐ๋„ ๊ตฌ์ถ•์‹œ, CONNECT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    d. asterisk ํ˜•์‹: OPTIONS์™€ ํ•จ๊ป˜ *(๋ณ„ํ‘œ) ํ•˜๋‚˜๋กœ ์„œ๋ฒ„ ์ „์ฒด ํ‘œํ˜„
  3. HTTP ๋ฒ„์ „์— ๋”ฐ๋ผ HTTP message ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์ง โ‡’ start line์— HTTP ๋ฒ„์ „์„ ํ•จ๊ป˜ ์ž…๋ ฅ

โžฐย Headers

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

๐Ÿซถ Headers ์ข…๋ฅ˜

  • General headers: ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋” / body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ ์—†๋Š” ํ—ค๋”
  • Request headers: fetch๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ๋ฆฌ์†Œ์Šค๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”
  • Representation headers: ์ด์ „์—” Entity headers๋กœ ๋ถˆ๋ฆผ / body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”

โžฐย Body

  • ์š”์ฒญ์˜ Body(๋ณธ๋ฌธ)๋Š” HTTP messages ๊ตฌ์กฐ ๋งˆ์ง€๋ง‰์— ์œ„์น˜
    • ๋ชจ๋“  ์š”์ฒญ์—” body๊ฐ€ ํ•„์š”ํ•˜์ง„ ์•Š์Œ
      • ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ์—” body ํ•„์š” ์—†์Œ-GET, HEAD, DELETE, OPTIONS)
      • POST, PUT๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ์š”์ฒญ์€ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ
  1. Single-resource bodies(๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ): Header 2๊ฐœ(Content-Type & Content-Length)๋กœ ์ •์˜๋œ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ
  2. Multiple-resource bodies(๋‹ค์ค‘-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ): ๊ฐ ํŒŒํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ์ง€๋‹˜

๐Ÿ“Žย HTTP Responses

โžฐย Start line

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€

HTTP/1.1 404 Not Found

  • ์‘๋‹ต์˜ ์ฒซ ์ค„์„ Status line์ด๋ผ๊ณ  ๋ถ€๋ฆ„ / ๐Ÿ‘‡ย ์•„๋ž˜ ์ •๋ณด ํฌํ•จ
    • ํ˜„์žฌ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „ (HTTP/1.1)
    • ์ƒํƒœ ์ฝ”๋“œ: ์š”์ฒญ ๊ฒฐ๊ณผ (200, 302, 404 โ€ฆ)
    • ์ƒํƒœ ํ…์ŠคํŠธ: ์ƒํƒœ ์ฝ”๋“œ ์„ค๋ช…

๐Ÿซถ HTTP ์ƒํƒœ์ฝ”๋“œ

State CodeDescription
200OK, ์„ฑ๊ณต์ ์œผ๋กœ ์‘๋‹ต ๋งˆ์นจ
302Found, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•  URL ํ™•์ธ
404Not Found, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž˜๋ชป๋œ ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ ๋“ฑ์žฅ
406Not Acceptable, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‘๋‹ต ์ฝ”๋“œ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†์„ ๋•Œ ๋“ฑ์žฅ
500Internal server Error, ์„œ๋ฒ„์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ

โžฐย Headers

  • ์‘๋‹ต์— ๋“ค์–ด๊ฐ€๋Š” HTTP headers๋Š” ์š”์ฒญ ํ—ค๋”์™€ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.

    • ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๋ฌธ์ž์—ด, ์ฝœ๋ก (:), ๊ฐ’(ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฆ„) ์ž…๋ ฅ
  • General headers: ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋” / body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ ์—†๋Š” ํ—ค๋”

  • Response headers: fetch๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ๋ฆฌ์†Œ์Šค๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”

  • Representation headers: ์ด์ „์—” Entity headers๋กœ ๋ถˆ๋ฆผ / body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”

โžฐย Body

  • ์‘๋‹ต์˜ body๋Š” HTTP messages ๊ตฌ์กฐ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ (payload)
    • ๋ชจ๋“  ์‘๋‹ต์— body๊ฐ€ ํ•„์š”ํ•˜์ง„ ์•Š์Œ
  1. Single-resource bodies(๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ)
    a. ๊ธธ์ด๊ฐ€ ์•Œ๋ ค์ง„ body: 2๊ฐœ์˜ header(Content-Type & Content-Length)๋กœ ์ •์˜
    b. ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋Š” body: Transfer-Encoding์ด chunked๋กœ ์„ค์ • (ํŒŒ์ผ์€ chunk๋กœ ๋‚˜๋‰˜์–ด ์ธ์ฝ”๋”ฉ)
  2. Multiple-resource bodies(๋‹ค์ค‘-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ): ์„œ๋กœ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” body


โ˜‘๏ธย ๋ธŒ๋ผ์šฐ์ € ์ž‘๋™ ์›๋ฆฌ (See โญ•๏ธ)

๐Ÿ“Žย AJAX

Asynchronous JavaScript And XMLHttpRequest

  • ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ์›น ๊ฐœ๋ฐœ ๊ธฐ๋ฒ•

    โœ…ย ์›น ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„œ๋ฒ„์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ›์•„์™€ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง

โœ‹ย AJAX ๊ตฌ์„ฑ ํ•ต์‹ฌ ๊ธฐ์ˆ  - JavaScript, DOM, Fetch

โžฐย Fetch

  • Fetch ์‚ฌ์šฉ์‹œ, ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜์ง€ ์•Š์•„๋„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Œ

  • Fetch๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ์„œ๋ฒ„์™€ ํ†ต์‹คํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ

  • ๐Ÿ‘‰ ๋ธŒ๋ผ์šฐ์ €๋Š” Fetch๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋™์ž‘์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ณ„์†ํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋น„๋™๊ธฐ์ ์ธ ๋ฐฉ์‹ ์‚ฌ์šฉ

  • Fetch๋ฅผ ํ†ตํ•ด ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹ˆ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์™€ DOM์— ์ ์šฉ์‹œ์ผœ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ํŽ˜์ด์ง€์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

    fetch('http://~~/messages')
        .then(function(response) {
            return response.json();
        })
        .then(function(json) {
            ...
    });

โžฐย XHR

Fetch ์ด์ „์—” XHR(XML Http Request) ์‚ฌ์šฉ

โ‡’ Fetch: XHR ๋‹จ์ ์„ ๋ณด์™„ํ•œ ์ƒˆ๋กœ์šด Web API / XML๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  JS์™€ ํ˜ธํ™˜๋˜๋Š” JSON ์‚ฌ์šฉ

var xhr = new XMLHttpRequest();
xhr.open('get', 'http://~~/messages');

xhr.onreadystatechange = function() {
	if(xhr.readyState !== 4) return;

	if(xhr.status === 200) {
		console.log(xhr.responseText); //์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์˜จ response
	} else {
		console.log('Error: ' + xhr.status); // Request ์ค‘ error ๋ฐœ์ƒ
	}
}

xhr.send(); // Request ์ „์†ก

// Fetch์— ๋น„ํ•ด ํ›จ์”ฌ ์ฝ”๋“œ๋„ ๊ธธ๊ณ  ๋ณต์žก..

โžฐย AJAX ์žฅ์ 

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

โžฐย AJAX ๋‹จ์ 

  • Search Engine Optimization(SEO)์— ๋ถˆ๋ฆฌ
    (AJAX ๋ฐฉ์‹์˜ HTML ํŒŒ์ผ์€ ๋ผˆ๋Œ€๋งŒ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋Š” ์—†์–ด์„œ ์‚ฌ์ดํŠธ ์ •๋ณด๋ฅผ ๊ธ์–ด๊ฐ€๊ธฐ ์–ด๋ ค์›€)
  • ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ๋ฌธ์ œ (์ด์ „ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„ ์˜๋„๋Œ€๋กœ ๋™์ž‘ โŒย โ†’ ๋ณ„๋„ History API ์‚ฌ์šฉ)

๐Ÿ“Žย SSR & CSR

โžฐย SSR (Server Side Rendering)

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

  • ๊ฒฝ๋กœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ •์ ํŒŒ์ผ ์š”์ฒญ

ex. Naver Blog, The NewYork Times Homepage

app.get("/", (req, res) => {
  res.send(
    "<html><body><h1>" +
      infoArr[Math.floor(Math.random() * infoArr.length)] +
      "</h1><h1>SSR</h1>" +
      "<h2>Server Side Rendering์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?</h2>" +
      "</body></html>"
  );
});

โžฐย CSR (Client Side Rendering)

ํด๋ผ์ด์–ธํŠธ์—์„œ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง

ex. ์—ฌ๋Ÿฌ ์˜ˆ์•ฝ ์‚ฌ์ดํŠธ

app.get(`/`, (req, res) =>
  res.send(infoArr[Math.floor(Math.random() * infoArr.length)])
);
app.get(`/csr`, (req, res) =>
  res.send(infoArr[Math.floor(Math.random() * infoArr.length)])
);

app.listen(port, () =>
  console.log(`Example app listening at http://localhost:${port}`)
);

โœ… Summary

SSRCSR
ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์œ„์น˜์„œ๋ฒ„ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)

โœ‹ย CSR์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ โŒ, ๋™์ ์œผ๋กœ ๋ผ์šฐํŒ… ๊ด€๋ฆฌ


SSR ์‚ฌ์šฉCSR ์‚ฌ์šฉ
SEO(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”) ์šฐ์„ ์ˆœ์œ„์ธ ๊ฒฝ์šฐ ๐Ÿ‘SEO ์šฐ์„ ์ˆœ์œ„ ์•„๋‹Œ ๊ฒฝ์šฐ
์›น ํŽ˜์ด์ง€ ์ฒซ ํ™”๋ฉด ๋ Œ๋”๋ง์ด ๋น ๋ฅด๊ฒŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ,
๋‹จ์ผ ํŒŒ์ผ์˜ ์ž‘์€ ์šฉ๋Ÿ‰ ์ ํ•ฉ
์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์ธ ์ ์€ ์›น ํŽ˜์ด์ง€์ผ ๊ฒฝ์šฐํ’๋ถ€ํ•œ ๋™์  ์ƒํ˜ธ์ž‘์šฉ์ด ์žˆ๋Š” ์›น ํŽ˜์ด์ง€์ผ ๊ฒฝ์šฐ,
๋น ๋ฅธ ๋ผ์šฐํŒ…์œผ๋กœ ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต


โœ๏ธ
200 โ†’ ์„ฑ๊ณต
300 โ†’ Re-direction
400 โ†’ ํด๋ผ์ด์–ธํŠธ ์‹คํŒจ (๋‚ด ์ž˜๋ชป)
500 โ†’ ์„œ๋ฒ„ ์‹คํŒจ (๋‹ˆ ์ž˜๋ชป)

URL: www.naver.com.html (ํŒŒ์ผ ์ด๋ฆ„)
URI: www.naver.com

profile
FE developer

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