눈에 보이면서 클라이언트와의 상호작용을 위해 UI 를 개발하는 프론트 엔드와 눈에 보이지는 않는 시스템 설계를 맡는 백엔드로 구분지을 수 있다.
HTTP 프로토콜을 사용하며 주소 URL URI 를 통해 접근할 수 있다.
파라미터를 사용하기 위해 ? & 사용을 사용한다.
HTTP 요청 메서드 CRUD 를 사용한다
기능 | HTTP 요청 메서드 |
---|---|
CREATE(추가) | POST |
READ(조회) | GET |
UPDATE(갱신) | PUT or PATCH |
DELETE(삭제) | DELETE |
✅ URL (Uniform Resource Locator)
명칭 | 설명 | 부분 |
---|---|---|
scheme | 통신방식(프로토콜) 결정 | file:// , http:// https:// |
hosts | 웹 서버의 이름이나 도메인, IP(주소) | 127.0.0.1 (로컬PC) , www.google.com |
url-path | 웹 서버의 루트 디렉토리부터 웹 페이지, 이미지, 동영상 등의 파일의 위치까지의 경로와 파일명 | /Users/username/Desktop |
✅ URI (Uniform Resource Indetifier)
브라우저의 검색창을 클릭하면 나타나는 주소
URL을 포함하는 상위 개념이다. => URL은 URI이다.(O) , URI는 URL이다.(X)
URL의 scheme, hosts, url-path 에 추가적으로 query, fragment 를 포함한다.
명칭 | 설명 | 부분 |
---|---|---|
query | 웹 서버에 보내는 추가적인 질문 | q=JavaScript |
fragment | 일종의 북마크 기능(#) | |
port | 웹 서버로 진입할 수 있는 통로 | :80 , :3000 |
✅ IP 주소 (Internet Protocol address)
nslookup codestates.com
으로 IPv4 주소 확인 가능하다.localhost
, 127.0.0.1
은 현재 사용 중인 로컬 PC를 말한다.0.0.0.0
, 255.255.255.255
은 broadcast address로 로컬 네트워크에 접속된 모든 장치와 소통하는 주소이고 , 서버에서 접근 가능 IP 를 broadcast address 로 지정하면 모든 기기에서 서버에 접근할 수 있다.✅ PORT 포트
✅ Domain name
IP주소는 223.130.200.104 이지만 도메인주소는 naver.com 으로, IP 주소를 검색하지 않고 도메인주소를 검색하므로써 훨씬 더 빠르고 쉽게 접근할 수 있다.
✅ DNS (Domain Name System)
✅ HTTP HyperText Transfer Protocol
✅ 클라이언트와 서버 사이에서 데이터가 교환되는 방식으로 요청 Request 와 응답 Response 두 가지 유형이 있다.
✅ 클라이언트가 서버에게 보내는 메시지
start line
Headers : 헤더이름 : 값
Body : 모든 요청에 필요하지는 않음. (GET, HEAD, DELETE, OPTIONS 서버에 리소스를 요청하는 경우 필요x / POST, PUT 데이터 업데이트하기 위해 필요o)
✅ 서버가 클라이언트에게 보내는 메시지
status line
- 현재 프로토콜 버전
Headers 헤더이름 : 값
- General headers
Body
✅ 웹 페이지에 필요한 부분에 필요한 데이터만 비동기적으로 서버에서 받아와 브라우저에 렌더링하는 것
과거에는 <form>
태그를 이용해 서버에 데이터를 전송하여 요청에 대한 응답으로 새 웹 페이지를 제공하고 이동해야했다.
그러나 Fetch 를 용하여 페이지를 이동하지 않아도 서버로부터 필요한 데이터를 받아올 수 있다.
사용자가 현재 페이지에서 작업하는 동안 서버와 통신할 수 있도록 한다. 즉, 브라우저는 Fetch 가 서버에 요청을 보내고 응답을 받을 때까지 모든 동작을 멈추는 것이 아니라 계속해서 페이지를 사용할 수 있게 하는 비동기적인 방식 사용한다.
이전에는 XHR(XMLHttpRequest)를 사용하였는데, Cross-Site 이슈 등의 불편함이 있어 이를 보완한 새로운 Web API인 Fetch는 XML보다 가볍고 JavaSCcript 와 호환되는 JSON을 사용할 수 있다.
Fetch 를 통해 전체 페이지가 아닌 필요한 데이터를 가져와 DOM에 적용시켜 JavaScript 에서 조작하여 새로운 페이지로 이동하지 않고 기존 페이지에서 필요한 부분만 변경할 수 있다.
웹 페이지를 브라우저에서 렌더링하는 대신에 서버에서 렌더링
브라우저가 서버의 URI로 GET 요청하면 서버는 정해진 웹 페이지 파일(완성된 html파일)을 브라우저로 전송하는데, 이 과정 전에 서버에서 완전히 렌더링한다.
브라우저는 다른 경로로 이동할 때마다 서버는 같은 작업을 다시 수행한다.(서버 과부하 이슈 발생 가능)
웹 페이지의 첫 화면 렌더링이 빠르게 필요한 경우, 상호작용이 적은 경우, 단일 파일 용량이 작다.
검색 엔진 최적화(SEO)에 유리하기 때문에 SEO가 우선순위일 경우
SSR 과 반대로 클라이언트에서 페이지를 렌더링
브라우저의 요청을 서버로 보내면 서버는 웹 페이지를 렌더링하는 대신에 골격이 될 단일 페이지와 JavaScript 파일을 클라이언트에 보낸다. 파일들을 받은 클라이언트는 브라우저의 웹페이지를 완전히 렌더링 된 페이지로 바꾼다.
브라우저는 다른 경로로 이동할 때마다 서버가 웹페이지를 다시 보내는 것이 아니라 브라우저(클라이언트)가 페이지를 다시 렌더링한다.(동적으로 라우팅을 관리한다.)
빠른 라우팅, 풍부한 상호작용이 있는 경우