<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=AJAX</id>
	<title>AJAX - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=AJAX"/>
	<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=AJAX&amp;action=history"/>
	<updated>2026-07-22T20:10:21Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.gaonwiki.com/w/index.php?title=AJAX&amp;diff=107959&amp;oldid=prev</id>
		<title>Gaon12: 시작</title>
		<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=AJAX&amp;diff=107959&amp;oldid=prev"/>
		<updated>2025-08-20T11:14:34Z</updated>

		<summary type="html">&lt;p&gt;시작&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Asynchronous JavaScript and XML&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;AJAX&amp;#039;&amp;#039;&amp;#039;(에이잭스)는 &amp;#039;&amp;#039;&amp;#039;Asynchronous JavaScript and XML&amp;#039;&amp;#039;&amp;#039;의 줄임말로, 웹페이지를 새로고침하지 않고도 서버와 데이터를 주고받을 수 있게 해주는 웹 개발 기술이다. &lt;br /&gt;
&lt;br /&gt;
~~사실 요즘엔 XML보다 JSON을 더 많이 쓰지만 이름은 그대로다~~&lt;br /&gt;
&lt;br /&gt;
2005년 제시 제임스 개럿(Jesse James Garrett)이 처음 명명했으며, [[Web 2.0]] 시대의 핵심 기술 중 하나로 자리잡았다.&lt;br /&gt;
&lt;br /&gt;
== 상세 ==&lt;br /&gt;
&lt;br /&gt;
=== 작동 원리 ===&lt;br /&gt;
기존의 웹 방식은 사용자가 어떤 동작을 할 때마다 서버에 요청을 보내고, 서버가 완전히 새로운 HTML 페이지를 응답으로 보내주는 방식이었다. 이는 다음과 같은 문제점들이 있었다:&lt;br /&gt;
&lt;br /&gt;
* 페이지 전체가 다시 로드되어 &amp;#039;&amp;#039;&amp;#039;깜빡임&amp;#039;&amp;#039;&amp;#039; 현상 발생&lt;br /&gt;
* 불필요한 데이터 전송으로 인한 &amp;#039;&amp;#039;&amp;#039;대역폭 낭비&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 사용자 경험(UX) 저하&lt;br /&gt;
&lt;br /&gt;
AJAX는 이러한 문제를 해결하기 위해 다음과 같은 방식으로 작동한다:&lt;br /&gt;
&lt;br /&gt;
# 사용자가 특정 동작 수행 (버튼 클릭, 입력 등)&lt;br /&gt;
# JavaScript가 &amp;#039;&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;&amp;#039; 객체를 생성&lt;br /&gt;
# 백그라운드에서 서버에 &amp;#039;&amp;#039;&amp;#039;비동기&amp;#039;&amp;#039;&amp;#039; 요청 전송&lt;br /&gt;
# 서버가 필요한 데이터만 응답 (전체 페이지가 아닌)&lt;br /&gt;
# JavaScript가 받은 데이터로 페이지의 &amp;#039;&amp;#039;&amp;#039;일부분만&amp;#039;&amp;#039;&amp;#039; 업데이트&lt;br /&gt;
&lt;br /&gt;
=== 구성 요소 ===&lt;br /&gt;
AJAX는 사실 하나의 기술이 아니라 여러 기술들의 조합이다:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[JavaScript]]&amp;#039;&amp;#039;&amp;#039; - 클라이언트 사이드 스크립팅&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[XMLHttpRequest]]&amp;#039;&amp;#039;&amp;#039; - 서버와의 비동기 통신을 담당하는 객체&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[DOM]]&amp;#039;&amp;#039;&amp;#039; (Document Object Model) - 페이지 요소 조작&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[CSS]]&amp;#039;&amp;#039;&amp;#039; - 스타일링 및 시각적 효과&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[XML]]&amp;#039;&amp;#039;&amp;#039; 또는 &amp;#039;&amp;#039;&amp;#039;[[JSON]]&amp;#039;&amp;#039;&amp;#039; - 데이터 교환 형식&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[HTML]]&amp;#039;&amp;#039;&amp;#039; / &amp;#039;&amp;#039;&amp;#039;[[XHTML]]&amp;#039;&amp;#039;&amp;#039; - 마크업&lt;br /&gt;
&lt;br /&gt;
~~요즘은 거의 JSON이 XML을 대체했지만 이름은 여전히 AJAX다~~&lt;br /&gt;
&lt;br /&gt;
== 특징 ==&lt;br /&gt;
&lt;br /&gt;
=== 장점 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;페이지 새로고침 없음&amp;#039;&amp;#039;&amp;#039; - 사용자 경험 크게 향상&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;빠른 응답속도&amp;#039;&amp;#039;&amp;#039; - 필요한 데이터만 전송하므로 효율적&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;서버 부하 감소&amp;#039;&amp;#039;&amp;#039; - 전체 페이지가 아닌 일부 데이터만 처리&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;동적인 웹페이지&amp;#039;&amp;#039;&amp;#039; 구현 가능&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;실시간 업데이트&amp;#039;&amp;#039;&amp;#039; 가능 (채팅, 알림 등)&lt;br /&gt;
&lt;br /&gt;
=== 단점 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;브라우저 호환성&amp;#039;&amp;#039;&amp;#039; 문제 ~~IE는 언제나 문제다~~&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SEO 최적화 어려움&amp;#039;&amp;#039;&amp;#039; - 검색엔진이 동적 콘텐츠를 인덱싱하기 어려움&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;뒤로가기 버튼&amp;#039;&amp;#039;&amp;#039; 문제 - 브라우저 히스토리 관리 복잡&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;JavaScript 비활성화&amp;#039;&amp;#039;&amp;#039; 시 동작하지 않음&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;디버깅의 어려움&amp;#039;&amp;#039;&amp;#039; - 비동기 처리로 인한 복잡성&lt;br /&gt;
&lt;br /&gt;
== 예제 코드 ==&lt;br /&gt;
&lt;br /&gt;
=== 순수 JavaScript ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// XMLHttpRequest 객체 생성&lt;br /&gt;
var xhr = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
// 요청 설정&lt;br /&gt;
xhr.open(&amp;#039;GET&amp;#039;, &amp;#039;/api/data&amp;#039;, true);&lt;br /&gt;
&lt;br /&gt;
// 응답 처리&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
    if (xhr.readyState === 4 &amp;amp;&amp;amp; xhr.status === 200) {&lt;br /&gt;
        var data = JSON.parse(xhr.responseText);&lt;br /&gt;
        document.getElementById(&amp;#039;result&amp;#039;).innerHTML = data.message;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// 요청 전송&lt;br /&gt;
xhr.send();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== jQuery 사용 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.ajax({&lt;br /&gt;
    url: &amp;#039;/api/data&amp;#039;,&lt;br /&gt;
    type: &amp;#039;GET&amp;#039;,&lt;br /&gt;
    dataType: &amp;#039;json&amp;#039;,&lt;br /&gt;
    success: function(data) {&lt;br /&gt;
        $(&amp;#039;#result&amp;#039;).html(data.message);&lt;br /&gt;
    },&lt;br /&gt;
    error: function() {&lt;br /&gt;
        alert(&amp;#039;요청 실패!&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// 더 간단한 방법&lt;br /&gt;
$.get(&amp;#039;/api/data&amp;#039;, function(data) {&lt;br /&gt;
    $(&amp;#039;#result&amp;#039;).html(data.message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 현대적인 방법 (Fetch API) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fetch(&amp;#039;/api/data&amp;#039;)&lt;br /&gt;
    .then(response =&amp;gt; response.json())&lt;br /&gt;
    .then(data =&amp;gt; {&lt;br /&gt;
        document.getElementById(&amp;#039;result&amp;#039;).innerHTML = data.message;&lt;br /&gt;
    })&lt;br /&gt;
    .catch(error =&amp;gt; {&lt;br /&gt;
        console.error(&amp;#039;Error:&amp;#039;, error);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
// async/await 사용&lt;br /&gt;
async function getData() {&lt;br /&gt;
    try {&lt;br /&gt;
        const response = await fetch(&amp;#039;/api/data&amp;#039;);&lt;br /&gt;
        const data = await response.json();&lt;br /&gt;
        document.getElementById(&amp;#039;result&amp;#039;).innerHTML = data.message;&lt;br /&gt;
    } catch (error) {&lt;br /&gt;
        console.error(&amp;#039;Error:&amp;#039;, error);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 활용 사례 ==&lt;br /&gt;
&lt;br /&gt;
=== 일반적인 사용 예 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;검색 자동완성&amp;#039;&amp;#039;&amp;#039; - 구글, 네이버 등의 검색창&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;무한 스크롤&amp;#039;&amp;#039;&amp;#039; - 페이스북, 인스타그램 피드&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;실시간 채팅&amp;#039;&amp;#039;&amp;#039; - 카카오톡 웹버전, 디스코드 등&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;폼 검증&amp;#039;&amp;#039;&amp;#039; - 실시간 아이디 중복 확인&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;장바구니&amp;#039;&amp;#039;&amp;#039; - 페이지 이동 없이 상품 추가/제거&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;좋아요/북마크&amp;#039;&amp;#039;&amp;#039; - 소셜미디어의 즉시 반응&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;주식/환율 정보&amp;#039;&amp;#039;&amp;#039; - 실시간 가격 업데이트&lt;br /&gt;
&lt;br /&gt;
=== 대표적인 AJAX 사이트들 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Gmail]]&amp;#039;&amp;#039;&amp;#039; - 이메일 확인과 전송을 페이지 새로고침 없이&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Google Maps]]&amp;#039;&amp;#039;&amp;#039; - 지도 이동 시 해당 부분만 로드&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[YouTube]]&amp;#039;&amp;#039;&amp;#039; - 댓글 로드, 추천 영상 등&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Netflix]]&amp;#039;&amp;#039;&amp;#039; - 콘텐츠 미리보기, 추천 시스템&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[트위터]]&amp;#039;&amp;#039;&amp;#039; - 실시간 트윗 업데이트&lt;br /&gt;
&lt;br /&gt;
== 보안 고려사항 ==&lt;br /&gt;
&lt;br /&gt;
=== CSRF (Cross-Site Request Forgery) ===&lt;br /&gt;
AJAX 요청도 CSRF 공격의 대상이 될 수 있다. 따라서 다음과 같은 보안 조치가 필요하다:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CSRF 토큰&amp;#039;&amp;#039;&amp;#039; 사용&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SameSite 쿠키&amp;#039;&amp;#039;&amp;#039; 설정&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Referer 헤더&amp;#039;&amp;#039;&amp;#039; 검증&lt;br /&gt;
&lt;br /&gt;
=== CORS (Cross-Origin Resource Sharing) ===&lt;br /&gt;
다른 도메인으로의 AJAX 요청은 브라우저의 &amp;#039;&amp;#039;&amp;#039;동일 출처 정책&amp;#039;&amp;#039;&amp;#039;에 의해 제한된다. 이를 해결하기 위해:&lt;br /&gt;
* 서버에서 적절한 &amp;#039;&amp;#039;&amp;#039;CORS 헤더&amp;#039;&amp;#039;&amp;#039; 설정 필요&lt;br /&gt;
* 또는 &amp;#039;&amp;#039;&amp;#039;JSONP&amp;#039;&amp;#039;&amp;#039; 같은 우회 방법 사용 ~~하지만 JSONP는 보안상 권장하지 않는다~~&lt;br /&gt;
&lt;br /&gt;
=== XSS (Cross-Site Scripting) ===&lt;br /&gt;
서버로부터 받은 데이터를 DOM에 직접 삽입할 때 XSS 공격에 노출될 수 있다:&lt;br /&gt;
* 입력 데이터 &amp;#039;&amp;#039;&amp;#039;검증&amp;#039;&amp;#039;&amp;#039; 및 &amp;#039;&amp;#039;&amp;#039;이스케이핑&amp;#039;&amp;#039;&amp;#039; 필수&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;innerHTML&amp;#039;&amp;#039;&amp;#039; 대신 &amp;#039;&amp;#039;&amp;#039;textContent&amp;#039;&amp;#039;&amp;#039; 사용 권장&lt;br /&gt;
&lt;br /&gt;
== 관련 기술 ==&lt;br /&gt;
&lt;br /&gt;
=== XMLHttpRequest 대안들 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Fetch API]]&amp;#039;&amp;#039;&amp;#039; - 모던 브라우저의 표준&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Axios]]&amp;#039;&amp;#039;&amp;#039; - 인기 있는 HTTP 클라이언트 라이브러리&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[jQuery.ajax()]]&amp;#039;&amp;#039;&amp;#039; - jQuery의 AJAX 메서드&lt;br /&gt;
&lt;br /&gt;
=== 프레임워크에서의 AJAX ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[React]]&amp;#039;&amp;#039;&amp;#039; - useEffect + fetch 또는 axios&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Vue.js]]&amp;#039;&amp;#039;&amp;#039; - axios 또는 Vue Resource&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Angular]]&amp;#039;&amp;#039;&amp;#039; - HttpClient 서비스&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Svelte]]&amp;#039;&amp;#039;&amp;#039; - 내장 fetch 사용&lt;br /&gt;
&lt;br /&gt;
== 현재 상황과 미래 ==&lt;br /&gt;
&lt;br /&gt;
=== Fetch API의 등장 ===&lt;br /&gt;
XMLHttpRequest의 복잡함을 해결하기 위해 &amp;#039;&amp;#039;&amp;#039;Fetch API&amp;#039;&amp;#039;&amp;#039;가 등장했다. Promise 기반으로 더 직관적이고 모던한 API를 제공한다.&lt;br /&gt;
&lt;br /&gt;
=== 서버 사이드 렌더링 (SSR) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Next.js]]&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;[[Nuxt.js]]&amp;#039;&amp;#039;&amp;#039; 등의 프레임워크에서는 SEO 문제를 해결하기 위해 서버 사이드 렌더링과 AJAX를 적절히 조합해서 사용한다.&lt;br /&gt;
&lt;br /&gt;
=== GraphQL ===&lt;br /&gt;
REST API의 한계를 극복하기 위해 &amp;#039;&amp;#039;&amp;#039;[[GraphQL]]&amp;#039;&amp;#039;&amp;#039;이 등장했고, 이 역시 AJAX를 기반으로 동작한다.&lt;br /&gt;
&lt;br /&gt;
== 트리비아 ==&lt;br /&gt;
* AJAX라는 용어가 만들어지기 전에도 해당 기술들은 이미 존재했다. 다만 통칭할 이름이 없었을 뿐.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Microsoft&amp;#039;&amp;#039;&amp;#039;가 1999년 Internet Explorer 5에서 XMLHttpRequest를 처음 도입했다. ~~그때는 Microsoft가 혁신적이었다~~&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Gmail&amp;#039;&amp;#039;&amp;#039;의 성공이 AJAX 기술의 대중화에 큰 역할을 했다.&lt;br /&gt;
* 현재 모든 주요 브라우저에서 AJAX를 지원한다.&lt;br /&gt;
&lt;br /&gt;
== 참고 자료 ==&lt;br /&gt;
* [https://developer.mozilla.org/ko/docs/Web/Guide/AJAX MDN Web Docs - AJAX]&lt;br /&gt;
* [https://www.w3schools.com/js/js_ajax_intro.asp W3Schools - AJAX Introduction]&lt;br /&gt;
&lt;br /&gt;
== 관련 문서 ==&lt;br /&gt;
* [[JavaScript]]&lt;br /&gt;
* [[XMLHttpRequest]]&lt;br /&gt;
* [[JSON]]&lt;br /&gt;
* [[REST API]]&lt;br /&gt;
* [[Web 2.0]]&lt;br /&gt;
* [[SPA (Single Page Application)]]&lt;br /&gt;
* [[Fetch API]]&lt;br /&gt;
* [[CORS]]&lt;br /&gt;
&lt;br /&gt;
[[분류:웹 기술]]&lt;br /&gt;
[[분류:JavaScript]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Gaon12</name></author>
	</entry>
</feed>