43. Ajax

Jun_Gyu·2025년 3월 21일
0

한 발자국 더, JS

목록 보기
29/34
post-thumbnail

Ajax란?

JS를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청, 응답받은 데이터를 통해 웹페이지를 동적으로 갱신하는 프로그래밍 방식을 이야기함.
  • Ajax는 브라우저에서 제공하는 Web API인 XMLHttpRequest를 기반으로 동작.
  • XMLHTTPRequest는 HTTP 비동기 통신을 위한 메서드와 프로퍼티를 제공.

  • Ajax가 등장하며 아래와 같은점들이 개선되었다.
    • 웹페이지의 변경에 필요한 데이터만 서버로부터 비동기 방식으로 수신, 불필요한 데이터 통신이 발생하지 않음.
    • 이를 통해 브라우저에서도 애플리케이션과 유사한 빠른 퍼포먼스, 부드러운 화면전환이 가능해짐. 즉, 화면이 순간적으로 깜빡이는 현상이 발생하지 않음.
    • 비동기 방식으로 동작하기 때문에, 서버로 요청을 보낸 이후 블로킹 현상이 발생되지 않는다.

JSON

클라이언트 <-> 서버간 HTTP 통신을 위한 텍스트 데이터 포맷으로, JS에 종속되지 않는 언어 독립형 데이터 포맷이며, 대부분의 프로그래밍 언어에서 사용 가능함.

  • 객체 리터럴처럼 key-value 형식으로 구성된 순수 텍스트이다.
  • key값은 반드시 큰따옴표로 묶어야 한다.

1) JSON.stringify

클라이언트로부터 서버로 객체를 전송하기 위해서는 객체를 문자열화 하는 직렬화 과정을 거쳐야 하는데, 이를 JSON.stringify 메서드를 이용해 직렬화 과정을 거칠 수 있다.

  • JSON.stringify메서드는 객체 뿐 아니라 배열또한 JSON 포맷의 문자열로 변환함.'
  • 또한, 객체뿐만 아니라 배열도 JSON 포맷의 문자열로 변환한다.
const obj = {
	name: 'json',
  	age: 20
};

const example = JSON.stringify(obj);
console.log(typeof example, example);
// string {"name":"json","age":20}


const example2 = JSON.stringify(obj, null, 2);
console.log(typeof example2, example2);
/* 
string {
   "name":"json",
   "age":20
}
*/

2) JSON.parse

JSON.parse 메서드는 JSON.stringify 메서드와는 반대로 JSON 포맷의 문자열을 객체로 변환하며, 역직렬화라고 부른다.

const obj = {
	name: 'json',
  	age: 20
};

const example = JSON.stringify(obj); // 직렬화 수행


const example2 = JSON.parse(example); // 역직렬화 수행
console.log(typeof example2, example2);
/*string {"name":"json","age":20}*/

XMLHttpRequest

자바스크립트를 사용하여 HTTP 요청을 전송하려면 XMLHttpRequest 객체를 사용한다. HTTP요청 전송, HTTP 응답 수신을 위한 다양한 메서드와 프로퍼티가 있다.

  • XMLHttpRequest 객체는 브라우저에서 제공하는 Web API이므로, 브라우저환경에서만 정상적으로 실행된다.

1) HTTP 요청 전송 순서

1) XMLHttpRequest.prototype.open 메서드로 HTTP 요청을 초기화 한다.

2) 필요에 따라 XMLHttpRequest.prototype.setRequestHeader 메서드로 특정 HTTP 요청의 헤더 값을 설정한다.

3) XMLHttpRequest.prototype.send메서드로 HTTP 요청을 전송한다.

2) HTTP 응답 처리

send 메서드를 통해 HTTP 요청을 서버로 전송하면 서버는 응답을 반환한다. 하지만, 응답이 언제 클라이언트로 도달할지 알 수 없기 때문에 readystatechange이벤트를 통해 HTTP 요청의 현재 상태를 확인해야 하며, readyState의 프로퍼티가 변경될 때 마다 발생한다.

  • readystatechange 이벤트 대신 load 이벤트를 캐치해도 좋으며, load 이벤트는 HTTP 요청이 성공적으로 완료된 경우 발생하게 된다.
profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글