AJAX

์ฝœ๋ผ๋ง˜ยท2023๋…„ 7์›” 11์ผ
0

Spring

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

๐Ÿ€ AJAX(Async JavaScript and XML)

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

๐Ÿ€ XMLHttpRequest

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

๐Ÿ€ ์„œ๋ฒ„์— ์š”์ฒญ(request)ํ•˜๊ธฐ

๐ŸŒผ open(method, url) ๋ฉ”์†Œ๋“œ

  • ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ajax ์š”์ฒญ์˜ ํ˜•์‹์„ ์„ค์ •
  • ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ์š”์ฒญ ๋ฐฉ์‹์„ ์„ค์ •(GET, POST ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜ ์„ ํƒ, ์ด์™ธ์˜ ๋ฉ”์„œ๋“œ(PUT, DELETE)๋Š” xhttp๋กœ๋งŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค(form์œผ๋กœ๋Š” ๋ชป๋ณด๋ƒ„))
  • ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ์š”์ฒญ URL์„ ์„ค์ •ํ•œ๋‹ค

๐ŸŒผ send() ๋ฉ”์†Œ๋“œ

  • ์ž‘์„ฑ๋œ ajax ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•œ๋‹ค
  • ์ „๋‹ฌ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ธ์ˆ˜๋ฅผ ๊ฐ€์งˆ์ˆ˜๋„, ์•ˆ๊ฐ€์งˆ์ˆ˜๋„ ์žˆ๋‹ค(GET๋ฐฉ์‹์˜ ๊ฒฝ์šฐ๋Š” url๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€๋งŒ POST์ธ ๊ฒฝ์šฐ์—๋Š” send()์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‹ค์–ด์„œ ๋„˜๊ฒจ์ค˜์•ผ ํ•œ๋‹ค)

โ€ป AJAX์—์„œ๋Š” ์ฃผ๋กœ GET๋ฐฉ์‹ ๋ณด๋‹ค๋Š” POST๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค


๐Ÿ€ ์„œ๋ฒ„์— ์‘๋‹ต(response)ํ•˜๊ธฐ

๐ŸŒผ readyState

  • XMLHttpRequest ๊ฐ์ฒด์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค
  • ๊ฐ์ฒด์˜ ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฐ’์ด ๋ณ€ํ™”ํ•œ๋‹ค
	1. UNSENT(์ˆซ์ž 0) : XMLHttpRequest ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ
    2. OPENED(์ˆซ์ž 1) : open()๋ฉ”์„œ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋จ
    3. HEADERS_RECEIVED(์ˆซ์ž 2) : ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋„์ฐฉ
    4. LOADING(์ˆซ์ž 3) : ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ์ค‘
    5. DONE(์ˆซ์ž 4) : ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์‘๋‹ตํ•  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋จ

๐ŸŒผ status

  • ์„œ๋ฒ„์˜ ๋ฌธ์„œ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค(HTTP ์ƒํƒœ์ฝ”๋“œ)
   - 1xx : ์กฐ๊ฑด๋ถ€ ์‘๋‹ต
   - 2xx : ์„ฑ๊ณต(์„œ๋ฒ„์— ๋ฌธ์„œ๊ฐ€ ์กด์žฌํ•จ)
   - 3xx : ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์™„๋ฃŒ
   - 4xx : ์š”์ฒญ ์˜ค๋ฅ˜ (404- ์„œ๋ฒ„์— ๋ฌธ์„œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ)
   - 5xx : ์„œ๋ฒ„ ์˜ค๋ฅ˜

๐ŸŒผ onreadystatechange

  • XMLHttpRequest ๊ฐ์ฒด์˜ readyState ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ
  • ์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ readyStateํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์ด 5๋ฒˆ ํ˜ธ์ถœ๋œ๋‹ค
  • ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ์„œ๋ฒ„์— ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ณ , ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ๋„์ฐฉํ•˜๋Š” ์ˆœ๊ฐ„์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋‹ค
  • readyState 0 : XMLHttpRequest ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ
  • readyState 1 : open()์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ (send()ํ•˜๊ธฐ ์ „)
  • readyState 2 : ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋„์ฐฉํ–ˆ์„ ๋•Œ
  • readyState 3 : ์‘๋‹ต์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ
  • readyState 4 : ์‘๋‹ต์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ชจ๋‘ ๋๋‚ฌ์„ ๋•Œ

๐Ÿ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ์‘๋‹ต ๋ฐ์ดํ„ฐ ํ™•์ธํ•˜๊ธฐ

๐ŸŒผ responseText

  • ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค
  • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ…์ŠคํŠธํŒŒ์ผ์„ ์‘๋‹ต๋ฐ›์€ ๊ฒฝ์šฐ์—๋Š” responseText๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ ํ›„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

๐ŸŒผ responseXML

  • ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ XML DOM ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค
  • ์ด๋ฐฉ๋ฒ•์€ ์ž˜ ์•ˆ์“ด๋‹ค ,,, (๊ท€์ฐฎ์Œ)

๐Ÿ€ HttpHeader

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ํ†ต์‹ ์‹œ ์„œ๋กœ์—๊ฒŒ ์ „๋‹ฌํ•ด์•ผ ํ•  ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค
  • AJAX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Http์š”์ฒญ ํ—ค๋”๋ฅผ ์ง์ ‘ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ Http์‘๋‹ต ํ—ค๋”์˜ ๋‚ด์šฉ์„ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ๋‹ค
  • ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— setRequestHeader()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Http์š”์ฒญ ํ—ค๋”๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

๐ŸŒผ HttpRequestHeader(name, value)

  • ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— setRequestHeader()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Http์š”์ฒญ ํ—ค๋”๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
  • name์€ Http์š”์ฒญ ํ—ค๋”์— ํฌํ•จํ•˜๊ณ ์ž ํ•˜๋Š” ํ—ค๋”์˜ ์ด๋ฆ„์ด๋ฉฐ, ๊ฐ’๋„ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค

๐ŸŒผ HttpResponseHeader

  • ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ Http์‘๋‹ต ํ—ค๋” ๋‚ด์šฉ์„ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค
  • getAllResponseHeaders() : Http์‘๋‹ต ํ—ค๋”์˜ ๋ชจ๋“  ํ—ค๋”๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค
  • getResponseHeader() : Http์‘๋‹ต ํ—ค๋” ์ค‘ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋Š” ํ—ค๋”์˜ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค

๐ŸŒผ Content-Type

  • ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ํ˜•์‹์ธ์ง€ ํŒ๋‹จ
  • ์ž์›์˜ ํ˜•์‹(Media Type)์„ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด ํ—ค๋”์— ์‹ค๋ ค์„œ ์ „์†ก๋œ๋‹ค
  • ๊ธฐ๋ณธ๊ฐ’์€ html๋ฌธ์„œ์˜ MIMEํƒ€์ž…์ธ "text/html"์ด๋‹ค

๐Ÿ“š ์ฐธ๊ณ ์ž๋ฃŒ

โœ… Ajax_์‚ฌ์šฉ๋ฒ•

profile
์ฝœ๋ผ๋ง˜ ์ฝ”๋”ฉ์ผ๊ธฐ

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