๐Ÿ“•CS

AJAX: SSR๊ณผ CSR

stonesy 2024. 3. 17. 19:09
728x90

๐Ÿ“–AJAX(Asynchronous Javascript and XML)

  • AJAX๋Š” ์–ธ์–ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธ
  • AJAX๋Š” ์›น(Web)์—์„œ ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธ
  • JavaScript์˜ XMLHttpRequest(XHR) ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • ํ™”๋ฉด๊ฐฑ์‹ ์ด ์—†์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ๋™์ ์œผ๋กœ DOM์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๋‹ค.

 

โ—์ผ๋ฐ˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต

  • data๋ฅผ ์ž…๋ ฅ ํ›„ event ๋ฐœ์ƒ
  • Ajax๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์€ ์š”์ฒญ์€ ์„œ๋ฒ„์—์„œ data๋ฅผ ์ด์šฉํ•˜์—ฌ logic ์ฒ˜๋ฆฌ
  • logic ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์‘๋‹ต page๋ฅผ ์ƒ์„ฑํ•˜๊ณ  client์— ์ „์†ก(ํ™”๋ฉด ์ „ํ™˜์ด ์ผ์–ด๋‚จ)

 

โ—Ajax ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต

  • data๋ฅผ ์ž…๋ ฅ ํ›„ event ๋ฐœ์ƒ
  • Ajax๋ฅผ ์ ์šฉํ•˜๋ฉด event ๋ฐœ์ƒ์‹œ ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„ Text, XML ๋˜๋Š” JSON์œผ๋กœ ์‘๋‹ต
  • client(Browser)์—์„œ๋Š” ์ด ์‘๋‹ต data๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜์—†์ด ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•œ๋‹ค. (ํ™”๋ฉด ์ „ํ™˜ X)

 

๐Ÿ”ŽSSR๊ณผ CSR

์›น ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์€ ์„œ๋ฒ„ ์ค‘์‹ฌ์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹(SSR)๊ณผ ํด๋ผ์ด์–ธํŠธ ์ค‘์‹ฌ์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹(CSR) ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

1) SSR(Server-Side Rendering)

  • ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
  • ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ™”๋ฉด(html)์„ ์ œ๊ณต
  • ์„œ๋ฒ„๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ์ฃผ์ฒด๊ฐ€ ๋จ
  • MPA(Multiple Page Application)์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

2) CSR(Server-Side Rendering)

  • ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์š”์ฒญ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์‘๋‹ต์„ ๋ฐ›์•„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹
  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์‹œ ๋ชจ๋“  data(JSON, XML)์„ ์ œ๊ณต
  • ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ์ฃผ์ฒด๊ฐ€ ๋จ
  • SPA(Single Page Application)์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

 

https://jaeone94.github.io/posts/Web-SSR%28%EC%84%9C%EB%B2%84%EC%82%AC%EC%9D%B4%EB%93%9C-%EB%A0%8C%EB%8D%94%EB%A7%81%29%EC%9D%B4-%EB%8C%80%EC%B2%B4-%EB%AD%90%EC%95%BC/

 

 

๐Ÿ”ŽAJAX ์‚ฌ์šฉ๋ฐฉ์‹

1. fetch

2. ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์šฉ๋ฐฉ์‹-jQuery, axios

 

โ—fetch

๋ธŒ๋ผ์šฐ์ €์—์„œ fetch() ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๊ธฐ ์ด์ „์—๋Š” XMLHttpRequest๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง์ ‘ HTTP ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณต์žกํ•œ ๊ตฌํ˜„ ๋•Œ๋ฌธ์— jQuery๋‚˜ axios์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ fetch() ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋ฉด์„œ ์œ„์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ ๊ฐ€๋Šฅ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

  • fetch()ํ•จ์ˆ˜๋Š” ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ URL, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ options ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค.
  • options์— ์•„๋ฌด๊ฒƒ๋„ ๋„˜๊ธฐ์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ์€ GET ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜๋ฉฐ url๋กœ๋ถ€ํ„ฐ content๊ฐ€ ๋‹ค์šด๋กœ๋“œ ๋œ๋‹ค.
  • ์‹คํ–‰๊ฒฐ๊ณผ Promise ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฐ˜ํ™˜๋œ Promise ๊ฐ์ฒด๋Š” API ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ ์‘๋‹ต๊ฐ์ฒด(response)๋ฅผ resolveํ•˜๊ณ , ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ(error) ๊ฐ์ฒด๋ฅผ rejectํ•œ๋‹ค.

*์‘๋‹ต ๋ณธ๋ฌธ(data)๋ฅผ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•

  • response.text(): ์‘๋‹ต์„ ์ฝ๊ณ  text ๋ฐ˜ํ™˜
  • response.json(): ์‘๋‹ต์„ JSONํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜
  • response.formData(): ์‘๋‹ต์„ formData ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜
  • response.blob(): ์‘๋‹ต์„ Blob ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋™

 

๐Ÿ”Ž๋ฐ์ดํ„ฐ ์ „์†ก ํ˜•์‹

1. CSV

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

 

2. XML

  • xml์€ tag ํ˜•ํƒœ๋กœ data๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
  • tag๋ฅผ ๋ณด๋ฉด ๊ฐ data๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • tag์— ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณต์žกํ•œ data๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. JSON

  • CSV์™€ XML์˜ ๋‹จ์ ์„ ๊ทน๋ณตํ•œ ํ˜•์‹์œผ๋กœ JavaScript์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์˜ ํ˜•์‹์œผ๋กœ data๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
  • AJAX ์‚ฌ์šฉ์‹œ ๊ฑฐ์˜ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” data ํ‘œํ˜„ ๋ฐฉ์‹์ด๋‹ค.
  • key-value ์Œ์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค.

 

 

๐Ÿ”Ž๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ์™€ ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ

1. ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ(Synchronous)

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

 

2. ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ(Asynchronous)

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

 

728x90