[TIL] Day31
[SEB FE] Day31
๋ฆฌ์์ค๊ฐ ์กด์ฌํ๋ ๊ณณ๊ณผ ๋ฆฌ์์ค ์ฌ์ฉ ์ฑ์ ๋ถ๋ฆฌ์ํจ ๊ฒ (์์ฒญ โ ์๋ต)
โย ์๋ฒ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํด ์ฃผ๋ ์ญํ ๋ง ๋ด๋น, ๋ฆฌ์์ค ์ ์ฅ ๊ณต๊ฐ์ ๋ณ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค
์!
๐ย ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ
์ฒ
+ ๋ฐ์ดํฐ๋ฒ ์ด์ค
โ 3-Tier ์ํคํ
์ฒ
โย ํด๋ผ์ด์ธํธ ์ฑ์ ์ฌ์ฉ์ ๋์ ๋ณด์ด๋ฏ๋ก, ํ๋ก ํธ์๋ ์์ญ
โย ์๋ฒ ์ฑ์ ์ฌ์ฉ์ ๋์ ๋ณด์ด์ง ์์ผ๋ฏ๋ก, ๋ฐฑ์๋ ์์ญ
โ
ย ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ ์์ฒญ์ ๋ฐ๋ผ ์ ์ ํ ์๋ต์ ํด๋ผ์ด์ธํธ๋ก ํ์
โ
ํ์์ ๋ฐ๋ผ ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฒญ์ ๋ณด๋ด๊ณ , ํ์ ๋ฐ์ ์๋ต์ ํ์ฉ
protocol
)ํต์ ๊ท์ฝ
HTTP
: Web Application ProtocolOSI 7 Layers |
---|
7. ์์ฉ ๊ณ์ธต ๐ |
6. ํํ ๊ณ์ธต |
5. ์ธ์ ๊ณ์ธต |
4. ์ ์ก ๊ณ์ธต ๐ |
3. ๋คํธ์ํฌ ๊ณ์ธต |
2. ๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต |
1. ๋ฌผ๋ฆฌ ๊ณ์ธต |
Protocol Name | Description |
---|---|
HTTP | Web์์ HTML, JSON ๋ฑ์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ (์ฃผ์-URL, URI๋ฅผ ํตํด ์ ๊ทผ) |
HTTPS | HTTP์์ ๋ณด์์ด ๊ฐํ๋ ํ๋กํ ์ฝ |
FTP | ํ์ผ ์ ์ก ํ๋กํ ์ฝ |
SMTP | ๋ฉ์ผ ์ ์ก์ ์ํ ํ๋กํ ์ฝ |
SSH | CLI ํ๊ฒฝ์ ์๊ฒฉ ์ปดํจํฐ์ ์ ์ํ๊ธฐ ์ํ ํ๋กํ ์ฝ |
RDP | Windows ๊ณ์ด์ ์๊ฒฉ ์ปดํจํฐ์ ์ ์ํ๊ธฐ ์ํ ํ๋กํ ์ฝ |
WebSocket | ์ค์๊ฐ ํต์ , Push ๋ฑ์ ์ง์ํ๋ ํ๋กํ ์ฝ |
Protocol Name | Description |
---|---|
TCP | HTTP, FTP ํต์ ๋ฑ์ ๊ทผ๊ฐ์ด ๋๋ ์๋ฐฉํฅ ์ธํฐ๋ท ํ๋กํ ์ฝ |
UDP | ๋จ๋ฐฉํฅ์ ์๋ํ์ฌ ๋จ์ํ๊ณ ๋น ๋ฅด์ง๋ง, ์ ๋ขฐ์ฑ์ด ๋ฎ์ ์ธํฐ๋ท ํ๋กํ ์ฝ |
API
(Application Programming Interface
)์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฆฌ์์ค๋ฅผ ์ ํ์ฉํ ์ ์๋๋ก ์ธํฐํ์ด์ค ์ ๊ณต
โยInterface
๋ฅผ โ์์ฌ์ํต์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด์ง ์ ์ โ์ผ๋ก ์ดํดํ๊ธฐ!
โย API
์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ?
, &
๊ธฐํธ ์ฌ์ฉ
HTTP ๋ฉ์๋๋ CRUD ํ๋์ ๋ฐ๋ผ ๋ชฉ์ ์ ๋ง๊ฒ ์จ์ผ ํจ
์์ฒญ(Request) | ๋ฉ์๋ |
---|---|
์กฐํ(Read) | GET |
์ถ๊ฐ(Create) | POST |
๊ฐฑ์ (Update) | PUT / PATCH |
์ญ์ (Delete) | DELETE |
์์ฒญ(Request) | URL Design | ์ฌ์ฉ ๋ฉ์๋ |
---|---|---|
๋ชจ๋ ์ฌ์ฉ์ ์กฐํ | /users | GET |
์ ์ฌ์ฉ์ ์ถ๊ฐ | /users | POST |
1๋ฒ ์ฌ์ฉ์ ์ ๋ณด ๊ฐฑ์ | /users/1 | PUT |
1๋ฒ ์ฌ์ฉ์ ์ ๋ณด ์ญ์ | /users/1 | DELETE |
1๋ฒ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ | /users/1 | GET |
scheme / hosts / url-path / query
http:// www.google.com:80 /search ?q=JavaScript
๋คํธ์ํฌ ์์์ ์น ํ์ด์ง, ์ด๋ฏธ์ง, ๋์์ ๋ฑ์ ํ์ผ์ด ์์นํ ์ ๋ณด
scheme
: ํต์ ๋ฐฉ์(ํ๋กํ ์ฝ) ๊ฒฐ์ (์ผ๋ฐ์ ์ธ ์น ๋ธ๋ผ์ฐ์ -http(s)
)hosts
: ์น ์๋ฒ ์ด๋ฆ/๋๋ฉ์ธ/IP๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ฃผ์๋ฅผ ์๋ฏธurl-path
: ์น ์๋ฒ์์ ์ง์ ํ ๋ฃจํธ ๋๋ ํ ๋ฆฌ~์นํ์ด์ง, ์ด๋ฏธ์ง, ๋์์ ๋ฑ์ด ์์นํ ๊ฒฝ๋ก์ ํ์ผ๋ช
URL์ ๊ธฐ๋ณธ ์์์ธ scheme, hosts, url-path +
query
,bookmark
ํฌํจ๋ธ๋ผ์ฐ์ ๊ฒ์์ฐฝ ํด๋ฆญ์ ๋ํ๋๋ ์ฃผ์
URL๋ฅผ ํฌํจํ๋ ์์๊ฐ๋
โย URL์ URI๋ค. โTRUE
| URI๋ URL์ด๋ค. โFALSE
query
: ์น ์๋ฒ์ ๋ณด๋ด๋ ์ถ๊ฐ์ ์ธ ์ง๋ฌธ
โฐย ๊ฐ๋ ์์ฝ
Name | Description | example |
---|---|---|
scheme | ํต์ ํ๋กํ ์ฝ | file://, http://, https:// |
hosts | ํ์ผ์ด ์์นํ ์น ์๋ฒ / ๋๋ฉ์ธ / IP | 127.0.0.1, ww.google.com |
port | ์น ์๋ฒ์ ์ ์ํ๊ธฐ ์ํ ํต๋ก | :80, :443, :3000 |
url-path | ์น ์๋ฒ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก๋ถํฐ~ ํ์ผ ์์น๊น์ง์ ๊ฒฝ๋ก | /search, /Users/username/Desktop |
query | ์น ์๋ฒ์ ์ ๋ฌํ๋ ์ถ๊ฐ ์ง๋ฌธ | q=JavaScript |
IP address
(Internet Protocol address; IP ์ฃผ์)๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ํน์ PC ์ฃผ์๋ฅผ ๋ํ๋ด๋ ์ฒด๊ณ
IPv4
(Internet Protocol version 4): ๋ค ๋ฉ์ด์ ์ซ์๋ก ๊ตฌ๋ถ๋ IP ์ฃผ์์ฒด๊ณ / IP์ฃผ์์ฒด๊ณ์ 4๋ฒ์งธ ๋ฒ์ localhost
, 127.0.0.1
: ํ์ฌ ์ฌ์ฉ ์ค์ธ ๋ก์ปฌ PC0.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
IP์ฃผ์๊ฐ ๊ฐ๋ฆฌํค๋ PC์ ์ ์ํ ์ ์๋ ํต๋ก(์ฑ๋)
โ ย ๊ธฐ์ตํด์ผ ํ ํฌํธ ๋ฒํธ
Port Num | Protocol |
---|---|
22 | SSH |
80 | HTTP |
443 | HTTPS |
ํ๋์ ํ์ ํ๊ธฐ ํ๋ IP ์ฃผ์๋ฅผ ๋ณด๋ค ๊ฐ๋จํ๊ฒ ๋ํ๋ด๋ ์ฃผ์
ํด๋น ๋๋ฉ์ธ ์ด๋ฆ๊ณผ ๋งค์นญ๋ IP ์ฃผ์๋ฅผ ํ์ธํ๋ ์์ ์ด ๋ฐ๋์ ํ์ โ ์ด๋ฅผ ์ํ ์๋ฒ
์ฆ, ํธ์คํธ์ ๋๋ฉ์ธ ์ด๋ฆ์ IP ์ฃผ์๋ก ๋ณํํ๊ฑฐ๋ ๋ฐ๋์ ๊ฒฝ์ฐ๋ฅผ ์ํํ ์ ์๋๋ก ๊ฐ๋ฐ๋ DB ์์คํ
- ๋๋ฉ์ธ ์ฃผ์๋ฅผ IP์ฃผ์๋ก ๋ณํํด ์ฃผ๋ ๊ท์น๊ณผ ๋ ์ฝ๋๋ค์ ๋ชจ์
๐ซถ ์ฌ๋๋ค์ด ๊ธฐ์ตํ๊ธฐ ์ฌ์ด ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ IP์ฃผ์๋ก ๋ณํ
sub-domain.domain.TLD
www.co.kr
โย TLD
: Top Level Domain
โย kr
, us
์ ๊ฐ์ ๊ตญ๊ฐ ์ฝ๋๋ co
, ac
์ ๊ฐ์ 2๋จ๊ณ ๋๋ฉ์ธ๊ณผ ํจ๊ป ์ฌ์ฉ
ํ์ ๋๋ฉ์ธ์ ๊ด๋ฆฌํ๋ ์๋ฒ(์กด)
ย โย ๋๋ฉ์ธ ๋ค์ ์๋ฒ๋ ํ๋์ ์๋ฒ๋ก ๊ตฌ์ฑ โ (์์ ์ฑ์ ์ํด ์ต์ 2๊ฐ ์ด์์ ์๋ฒ๊ฐ ํ๋ ๋๋ฉ์ธ ๋ค์ ๋ด๋น)
โฐย example:
www.naver.com
www
: Sub-domainnaver.com
: Root-domainResolver
(๋ฆฌ์กธ๋ฒ): ์์ฒญ๋ฐ์ ๋๋ฉ์ธ์ IP ์ฃผ์๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฌ๋ฌ ๋ค์ ์๋ฒ์ ๋ฐ๋ณต์ ์ธ ์ง์๋ฅผ ํ๋ ๋ค์ ์๋ฒDNS Lookup
์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๋์ ๊ณผ์ ๋ฐ์Zone File
์ ๊ฐ์ง๊ณ ์์์ด๋ฆ | ๋ ์ฝ๋ ํด๋์ค | TTL | ๋ ์ฝ๋ ํ์ | ๋ ์ฝ๋ ๋ฐ์ดํฐ |
---|---|---|---|---|
๋๋ฉ์ธ ์ด๋ฆ | ๋คํธ์ํฌ ํ์
(๋ณดํต IN;์ธํฐ๋ท์ผ๋ก ์ง์ ) | ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ ์ ์ฅ๊ฐ๋ฅํ ์๊ฐ Resolver๊ฐ ๋ ์ฝ๋๋ฅผ ๋ช ์ด๋์ ์ ์ฅํ ์ง ๋ช ์ โ ํด๋น ์๊ฐ์ด ์ง๋๋ฉด ํด๋น ๋ ์ฝ๋ ์ญ์ (Time To Live) | ๋ฐํ๋ ๋ฐ์ดํฐ ํ์ | ๋ฐํ๋๋ ๋ฐ์ดํฐ |
๐ย ๋ค์ ์๋ฒ๋ค์ Zone File๋ค์ ๋ฐํ์ผ๋ก ์์ฒญ์ ํด๋น๋๋ ๋ ์ฝ๋ Return
๐ย Resolver๋ ์ด ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ ๋ฆฌํดํด์ผ ํ IP๋ ๋ค์์ ์ฟผ๋ฆฌ๋ฅผ ์งํํ ์๋ฒ ์ฃผ์ ํ์ธ
ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์
- ์์ฒญ(
Requests
)- ์๋ต(
Responses
)
start line
: ์์ฒญ์ด๋ ์๋ต ์ํstatus line
์ผ๋ก ๋ถ๋ฆHTTP headers
: ์์ฒญ์ ์ง์ ํ๊ฑฐ๋, ๋ฉ์์ง์ ํฌํจ๋ ๋ณธ๋ฌธ์ ์ค๋ช
ํ๋ ํค๋ ์งํฉempty line
: ํค๋์ ๋ณธ๋ฌธ์ ๊ตฌ๋ถํ๋ ๋น ์คbody
: ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ ์๋ต๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ/๋ฌธ์ ํฌํจโย start line
& HTTP headers
๋ฅผ ๋ฌถ์ด ์์ฒญ์ด๋ ์๋ต์ ํค๋(head
)๋ผ๊ณ ํจ.
์ํ๋ฅผ ๊ฐ์ง์ง ์๋๋ค
- HTTP๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ์ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์, HTTP๊ฐ ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์ํ ํ์ธ โ
โ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ํ ์ด๋ฐ ๋ชจ๋ ์ํ๋ฅผ HTTP ํต์ ์ด ์ถ์ โ
โ
ย HTTP์ ํฐ ํน์ง์ Stateless(๋ฌด์ํ์ฑ)
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ๋ณด๋ด๋ ๋ฉ์์ง
origin
ํ์: โ?โ์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ๋ถ๋ ์ ๋ ๊ฒฝ๋ก (GET, POST, HEAD, OPTIONS ๋ฑ์ method์ ํจ๊ป ์ฌ์ฉ)absolute
ํ์: ์์ ํ URL
ํ์ / ํ๋ก์์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ GET method์ ํจ๊ป ์ฌ์ฉauthority
ํ์: ๋๋ฉ์ธ ์ด๋ฆ๊ณผ ํฌํธ ๋ฒํธ๋ก ์ด๋ฃจ์ด์ง URL์ ์ผ๋ถ๋ถCONNECT
์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅasterisk
ํ์: OPTIONS
์ ํจ๊ป *
(๋ณํ) ํ๋๋ก ์๋ฒ ์ ์ฒด ํํ start line
์ HTTP ๋ฒ์ ์ ํจ๊ป ์
๋ ฅGeneral headers
: ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋๋ ํค๋ / body๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์๋ ๊ด๋ จ ์๋ ํค๋Request headers
: fetch๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ๋ฆฌ์์ค๋ ํด๋ผ์ด์ธํธ ์์ฒด์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํค๋Representation headers
: ์ด์ ์ Entity headers
๋ก ๋ถ๋ฆผ / body์ ๋ด๊ธด ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ํฌํจํ๋ ํค๋GET
, HEAD
, DELETE
, OPTIONS
)POST
, PUT
๊ณผ ๊ฐ์ ์ผ๋ถ ์์ฒญ์ ๋ฐ์ดํฐ ์
๋ฐ์ดํธ๋ฅผ ์ํด ์ฌ์ฉSingle-resource bodies
(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ): Header 2๊ฐ(Content-Type & Content-Length)๋ก ์ ์๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑMultiple-resource bodies
(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ): ๊ฐ ํํธ๋ง๋ค ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ง๋์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๋ ๋ฉ์์ง
HTTP/1.1 404 Not Found
Status line
์ด๋ผ๊ณ ๋ถ๋ฆ / ๐ย ์๋ ์ ๋ณด ํฌํจState Code | Description |
---|---|
200 | OK, ์ฑ๊ณต์ ์ผ๋ก ์๋ต ๋ง์นจ |
302 | Found, ๋ฆฌ๋ค์ด๋ ํธํ URL ํ์ธ |
404 | Not Found, ํด๋ผ์ด์ธํธ๊ฐ ์๋ชป๋ ํ์ด์ง๋ฅผ ์๋ฒ์ ์์ฒญํ์ฌ ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์์ ๋ ๋ฑ์ฅ |
406 | Not Acceptable, ํด๋ผ์ด์ธํธ๊ฐ ์๋ต ์ฝ๋๋ฅผ ๋ฐ์ ์ ์์ ๋ ๋ฑ์ฅ |
500 | Internal server Error, ์๋ฒ์์ ์๋ฌ ๋ฐ์ |
์๋ต์ ๋ค์ด๊ฐ๋ HTTP headers๋ ์์ฒญ ํค๋์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์.
General headers
: ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋๋ ํค๋ / body๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์๋ ๊ด๋ จ ์๋ ํค๋
Response headers
: fetch๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ๋ฆฌ์์ค๋ ํด๋ผ์ด์ธํธ ์์ฒด์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํค๋
Representation headers
: ์ด์ ์ Entity headers
๋ก ๋ถ๋ฆผ / body์ ๋ด๊ธด ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ํฌํจํ๋ ํค๋
Single-resource bodies
(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ)Multiple-resource bodies
(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ): ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ bodyAsynchronous JavaScript And XMLHttpRequest
- ๋ค์ํ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์น ๊ฐ๋ฐ ๊ธฐ๋ฒ
โ ย ์น ํ์ด์ง์ ํ์ํ ๋ถ๋ถ์ ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ฒ์์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง
โย AJAX
๊ตฌ์ฑ ํต์ฌ ๊ธฐ์ - JavaScript
, DOM
, Fetch
Fetch ์ฌ์ฉ์, ํ์ด์ง๋ฅผ ์ด๋ํ์ง ์์๋ ์๋ฒ๋ก๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์
Fetch๋ ์ฌ์ฉ์๊ฐ ํ์ฌ ํ์ด์ง์์ ์์ ํ๋ ๋์ ์๋ฒ์ ํต์คํ ์ ์๋๋ก ํด์ค
๐ ๋ธ๋ผ์ฐ์ ๋ Fetch๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต ๋ฐ์ ๋๊น์ง ๋์์ ๋ฉ์ถ๋ ๊ฒ์ด ์๋ ๊ณ์ํด์ ํ์ด์ง๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ๋ ๋น๋๊ธฐ์ ์ธ ๋ฐฉ์ ์ฌ์ฉ
Fetch๋ฅผ ํตํด ์ ์ฒด ํ์ด์ง๊ฐ ์๋ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ DOM์ ์ ์ฉ์์ผ ์๋ก์ด ํ์ด์ง๋ก ์ด๋ํ์ง ์๊ณ ๊ธฐ์กด ํ์ด์ง์์ ํ์ํ ๋ถ๋ถ๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅ
fetch('http://~~/messages')
.then(function(response) {
return response.json();
})
.then(function(json) {
...
});
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์ ๋นํด ํจ์ฌ ์ฝ๋๋ ๊ธธ๊ณ ๋ณต์ก..
์น ํ์ด์ง๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋งํ๋ ๋์ ์๋ฒ์์ ๋ ๋๋ง
- ๊ฒฝ๋ก๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋ก์ด ์ ์ ํ์ผ ์์ฒญ
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>"
);
});
ํด๋ผ์ด์ธํธ์์ ํ์ด์ง ๋ ๋๋ง
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}`)
);
SSR | CSR | |
---|---|---|
ํ์ด์ง ๋ ๋๋ง ์์น | ์๋ฒ | ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) |
โย CSR์ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ์์ฒญํ ๋๋ง๋ค ํ์ด์ง ์๋ก๊ณ ์นจ โ, ๋์ ์ผ๋ก ๋ผ์ฐํ ๊ด๋ฆฌ
SSR ์ฌ์ฉ | CSR ์ฌ์ฉ |
---|---|
SEO(๊ฒ์์์ง ์ต์ ํ) ์ฐ์ ์์์ธ ๊ฒฝ์ฐ ๐ | SEO ์ฐ์ ์์ ์๋ ๊ฒฝ์ฐ |
์น ํ์ด์ง ์ฒซ ํ๋ฉด ๋ ๋๋ง์ด ๋น ๋ฅด๊ฒ ํ์ํ ๊ฒฝ์ฐ, ๋จ์ผ ํ์ผ์ ์์ ์ฉ๋ ์ ํฉ | |
์ฌ์ฉ์์ ์ํธ์์ฉ์ธ ์ ์ ์น ํ์ด์ง์ผ ๊ฒฝ์ฐ | ํ๋ถํ ๋์ ์ํธ์์ฉ์ด ์๋ ์น ํ์ด์ง์ผ ๊ฒฝ์ฐ, ๋น ๋ฅธ ๋ผ์ฐํ ์ผ๋ก ๊ฐ๋ ฅํ ์ฌ์ฉ์ ๊ฒฝํ ์ ๊ณต |
โ๏ธ
200 โ ์ฑ๊ณต
300 โ Re-direction
400 โ ํด๋ผ์ด์ธํธ ์คํจ (๋ด ์๋ชป)
500 โ ์๋ฒ ์คํจ (๋ ์๋ชป)
URL: www.naver.com.html (ํ์ผ ์ด๋ฆ)
URI: www.naver.com