Asynchronous JavaScript + XML(AJAX)
HTML
또는 XHTML
, CSS
, JavaScript
, DOM
, XML
, XSLT
, 그리고 제일 중요한 XMLHttpRequest
객체를 비롯해 기존의 여러 기술을 사용하는 "새로운" 접근법을 설명하는 용어
다양한 기술을 AJAX 모델로서 결합했을 때, 웹 어플리케이션은 전체 페이지를 새로 고칠 필요 없이
사용자 인터페이스에 빠르고 점진적인 업데이트를 적용
할 수 있다
AJAX의 X가 XML을 의미하긴 하지만, 요즘은 더 가벼운 용량과 JavaScript의 일부라는 장점 때문에 JSON을 더 많이 사용합니다. JSON과 XML 양쪽 모두 AJAX 모델에서 정보를 담을 때 사용
Ajax
란 Asynchronous JavaScript and XML(비동기식 자바스크립트와 XML)의 약자
이다
중요한 것은 ‘비동기식(Asynchronous)'
이라는 단어다
XMLHttpRequest(XHR) 객체
는 서버
와 상호작용
하기 위하여 사용
전체 페이지의 새로고침없이도 URL로부터 데이터를 받아올 수 있다
XMLHttpRequest는 이름으로만 봐서는 XML 만 받아올 수 있을 것 같아 보이지만, 모든 종류의 데이터를 받아오는데 사용
할 수 있다
웹 브라우저에서는 서버로부터 데이터를 요청하는 XML 객체들을 내장하고 있다
XMLHttpRequest를 이용하면 웹 페이지를 전부 로딩하고도 서버로부터 데이터를 요청하거나 전송받을 수 있으며, 웹 페이지를 전부 로딩하지 않고도 일부만을 갱신하는 게 가능하다
페이지 깜빡임 없이 semless하게 동작하게 도와준다 (부분적 업데이트. 랜더링) => JavaScript와 DOM이용
fetch 매서드는 JavaScript에서 서버로 네트워크 요청을 보내고 응답을 받을 수 있도록 해주는 매서드이다
XMLHttpRequest와 같이 비슷하지만
새로운 Fetch API는 좀더 강력하고 유연한 조작이 가능하다는 차이가 있다
웹페이지를 브라우저에서 랜더링하는 대신에, 서버에서 랜더링 한다
브라우저가 서버의 URI로 GET요청을 보내면, 서버는 정해진 웹페이지 파일을 브라우저로 전송한다
그리고 서버의 웹페이지가 브라우저에 도착하면 완전히 랜더링 된다
서버에서 웹페이지를 브라우저로 보내기 전에, 서버에서 완전히 랜더링 했기 때문에 Server Side Rendering
이라고 한다
웹페이지의 내용에 데이터베이스의 데이터가 필요할 경우
서버
는 데이터베이스의 데이터
를 불러온 다음 웹페이지를 완전히 랜더링 된 페이지로 변환 후에 브라우저에 응답으로 보낸다
웹페이지를 살펴보던 사용자가, 브라우저의 다른 경로로 이동
하면,
브라우저가 다른 경로로 이동할 때마다 서버는 이작업을 다시 수행
한다
클라이언트에서 페이지를 랜더링한다
웹개발에서 사용하는 대표적인 클라이언트는 웹 브라우저
다
브라우저의 요청을 서버로 보내면 서버는 웹페이지를 랜더링하는 대신,
웹페이지의 골격이 될 단일 페이지를 클라이언트에 보낸다
이때 서버는 웹페이지와 함께 JavaScript파일
을 보낸다
클라이언트가 웹페이지를 받으면 웹페이지가 함께 전달된 JavaScript 파일은 브라우저에서 웹페이지를 완전히 랜더링 된 페이지로 바꾼다
서버 ->(웹페이지 골격 + JavaScript 파일) -> 클라이언트
JavaScript 파일은 -> 브라우저 웹페이지를 완젼히 -> 랜더링 페이로 바꾼다
웹페이지에 필요한 내용이 데이터베이스에 저장된 경우
브라우저는 데이터베이스에 저장된 데이터를 가져와서 웹페이지에 랜더링 해야한다
이것을 위해 API
가 필요하다(사용된다)
웹페이지를 랜더링 하는데에 필요한 데이터를 API 요청으로 해소
한다
브라우저가 다른 경로로 이동하면
서버가 웹페이지를 다시 보내지 않는다
프라우저는 브라우저가 요청한 경로에 따라 페이지를 다시 랭더링 한다
이때 보이는 퓁페이지의 파일은 맨 처츰 서버로 부터 전달 받은 웹페이지 파일과 동일한 파일이다
차이점
SSR은 서버에 랜더링 하고,
CSR은 브라우저(클라이언트)에서 페이지를 앤더링 한다
브라우저는 사용자가 다른경로를 요청할때 마다 페이지를 새로고침하지 않고, 동적으로 라우팅을 관리 한다
서버보안, 데이터베이스 보안, client 보안
(Cross-Origin Resource Sharing)
서로 다른 origin 간에 리소스를 공유
GET
no side effects
POST
perform an action
PUT
place a resource, idempotent
DELETE
delete a resource, idempotent
HEAD, OPTIONDS
2xx: Sussece
200 OK
3xx: Redirect
301 Moved Permanently, 302 Found
4xx: client errors
404 Not Found, 403 Forbidden, 400 Bad Request
5xx: Server errors
500 Internal Server Error, 502 Bad Gateway
도메인 주소를 IP주소로 변환해 주는 규칙과 레코드들의 모음
도메인 네임 시스템을 간단하게 설명하자면
사람이 기억하기 쉬운 www.naver.com
과 같은 도메인을 컴퓨터가 이해할 수 있는 125.209.222.142
으로 변환하여 요청이 원하는 곳에 도달할 수 있도록 도와주는 시스템 이다
도메인 주소는 오른쪽부터 왼쪽으로 최상위 도메인과 여러개의 도메인으로 구성되어 있다
탑 레벨 도메인은 .com, .kr, .net 등 도메인의 가장 오른쪽에 위치하는 도메인이다
kr, us와 같은 국가코드를 사용하는 도메인은 co, ac와 같은 2단계 도메인과 함께 사용되기도 한다
서브도메인은 일반적으로 www, m
와 같은 제일 왼쪽에 위치한 도메인 들이 해당된다
호스트 이름으로 불리기도 하는 서브도메인은 웹 사이트의 특정 부분을 나눠서 보여줘야 하는 경우 사용한다
m(모바일)
, www(기본)
, store(스토어)
등의 도메인에 따라 사이트의 구성이 달라지는것을 기억하면 쉽게 이해할 수 있다
도메인을 관리하는 도메인 서버(존)이다
대표적으로 모든 도메인을 관리하는 루트 네임 서버, TLD를 관리하는 네임 서버, 권한 있는 네임 서버로 구성된다
이때 도메인 이름 서버는 하나의 서버로 구성되지 않는다
안정성을 위해 최소한 두개 이상의 서버가 하나의 도메인 네임을 담당한다
여러개의 서버를 구성한다면 하나의 서버로 운영될 경우 생길수 있는 과부하 및 서비스 거부 공격에 대해 효율적으로 대응할 수 있다
루트 도메인 네임 서버는 각 최상위 도메인 네임 서버들의 주소를 알고 있으며 최상위 도메인 네임 서버는 권한 있는 네임 서버의 주소를 알고 있다
권한 있는 네임 서버는 example.com
등의 도메인 IP 주소 및 도메인 정보를 관리하는 권한을 가진 서버다
URL에 deploy.states.com 주소를 입력하면 ‘DNS Lookup’ 이라고 불리는 다음 과정이 발생한다
리졸버는 우선 기존에 찾아본 도메인정보가 내용이 담긴 캐시 파일을 살펴본다
해당되는 도메인정보가 있다면 즉시 IP주소를 리턴한다
해당되는 도메인 정보를 찾을수 없는 경우 2번을 진행한다
이때 리졸버는 쿼리수를 줄일 목적으로 기록되지 않은 도메인 네임 서버들의 주소를 저장하기도 한다
도메인 네임 서버는 응답을 보내기위해 한개 이상의 존 파일이라는 파일을 가지고 있다
존 파일은 네임과 클래스, TTL, 레코드 타입, 레코드 데이터로 구성된 레코드들로 구성되어 있다
네임 서버들은 이러한 존 파일들을 바탕으로 요청에 해당되는 레코드를 리턴한다
리졸버는 이 레코드를 살펴보고 리턴해야할 IP 혹은 다음에 쿼리를 진행할 서버의 주소를 확인한다
이름은 example.com
과 같은 도메인 네임 혹은 서브 도메인의 이름 등을 저장한다
레코드 클래스는 네트워크 타입을 지정한다
일반적으로 IN(인터넷)으로 지정된다
TTL은 Time To Live의 약자로서 리졸버가 레코드를 몇 초동안 저장할 지를 명시한다
해당 시간이 지나면 리졸버는 해당 레코드를 삭제한다
레코드 타입은 레코드 데이터의 내용의 형식이다
이름
도메인 이름
레코드 크랠스
네트워크 타입
TTL
클라이언트가 데이터를 저장가능한 시간
레코드 타입
반환될 데이터의 형식
레코드 데이터
반환되는 데이터
A - 데이터가 IPv4 주소임을 명시한다
IPv4 주소는 보통 알고있는 127.0.0.1과 같은 주소를 말한다
AAAA - 데이터가 IPv6 주소임을 명시한다
IPv6주소는 IPv4주소가 부족해지자 새롭게 도입된 주소 형식이다
2001:0db8:85a3:08d3:1319:8a2e:0370:7334 과 같은 형식을 사용한다
CNAME - 데이터가 도메인 주소임을 명시한다
NS - 데이터가 도메인 네임 서버들의 주소임을 명시한다
SOA - 데이터가 도메인 네임 서버들중 주 서버의 정보들에 대한 데이터다
주 네임 서버와 통신할 수 있는 포트번호, TTL, 도메인 주소등이 적혀 있다
따라서 위 상단의 레코드들은 인터넷 네트워크를 사용하며 192.168.0.2 는 deploy 서브도메인의 주소이고 www 서브도메인은 states.com 도메인으로 연결되어 있음을 알 수 있다