: 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것 (클라이언트 & 서버)
=> 클라이언트와 서버는 요청과 응답을 주고받는 관계
클라이언트(client) : 리소스를 사용하는 앱 = 브라우저
브라우저를 통해 주로 이용하는 웹(Web) 플랫폼에서의 클라이언트 (플랫폼에 따라 구분)
=> 웹사이트(웹 앱), 스마트폰/태블릿용 앱, 데스크탑 앱
서버(server) : 리소스가 존재하는 곳 (리소스 전달)
=> 웹 서버, 파일 서버, 메일 서버, 데이터베이스 서버
- 3 Tier Architecture : 클라이언트 - 서버 아키텍처에 데이터베이스가 추가된 형태
프론트엔드 : 클라이언트 앱은 사용자가 눈으로 보고 대면
백엔드 : 서버 앱은 사용자 눈에 직접 보이지 않게 뒤에서 작동
클라이언트 서버 간의 통신은 요청과 응답으로 구성된다.
HTTP : 웹 애플리케이션 프로토콜
: 서버가 클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스를 제공
보통 인터넷에 있는 데이터를 요청할 때 HTTP 프로토콜 사용, 주소(URL, URI)를 통해 접근 가능
HTTP 요청 메서드 : CRUD 행동에 따라 목적에 맞게 써야한다.
GET - 조회 (Read)
POST - 추가 (Create)
PUT(PATCH) - 갱신 (Update)
DELETE - 삭제 (Delete)
URL(Uniform Resource Locator)
: 네트워크 상에서 웹 페이지, 이미지, 동영상 등의 파일이 위치한 정보를 나타낸다.
- scheme, hosts, url-path로 구분
URI(Uniform Resource Identifier)
: 일반적으로 URL의 기본 요소인 scheme, hosts, url-path에 더해 query, fragment를 포함한다.
=> URI는 URL을 포함하는 상위개념 ( URL은 URI다 : 참 / URI는 URL이다 : 거짓 )
( + 127.0.0.1은 로컬 PC를 나타낸다. port는 서버로 진입할 수 있는 통로이다. )
IP address(Internet Protocol address, IP 주소)
: 네트워크에 연결된 특정 PC의 주소를 나타내는 체계
- IPv4(Internet Protocol version 4) : IP 주소체계의 네 번째 버전
127.0.0.1
, localhost
: 현재 사용 중인 로컬 PC를 나타낸다.0.0.0.0
, 255.255.255.255
: 브로드캐스트, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소이다.- IPv6(Internet Protocol version 6)
: IPv4로 할당할 수 있는 PC가 한계를 넘어서게 되면서 만들어졌다.
- 16비트 x 8자리 = 128비트이다.
PORT(포트)
: IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)
DNS(Domain Name System)
: 호스트의 도메인 이름을 IP주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 시스템
- 터미널에서 도메인 이름을 통해 IP 주소를 확인하는 명령어 : nslookup
아래에 해당하는 에러 메시지가 나타난다면, 페이지를 여는 중에 문제가 발생했다는 뜻이다.
클라이언트와 서버 사이에서 데이터가 교환되는 방식
1) start line : 요청이나 응답의 상태를 나타낸다. 항상 첫 줄에 위치 (응답에선 status line)
2) HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합
3) empty line : 헤더와 본문을 구분하는 빈 줄이 있다.
4) body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다. 요청과 응답의 유형에 따라 선택적으로 사용한다.
: HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서 HTTP가 클라이언트나 서버의 상태를 확인하지 않는다. ( HTTP의 가장 큰 특징 )
: 클라이언트가 서버에게 보내는 메시지
헤더 이름(대소문자 구분이 없는 문자열), 콜론(:), 값(헤더에 따라 달라짐)을 입력한다.
General, Request, Representation headers 등의 여러 종류의 헤더가 있다.
요청의 본문은 HTTP message 구조의 마지막에 위치한다. 모든 요청에 body가 필요하지 않다.
: 서버가 클라이언트에게 보내는 메시지
현재의 프로토콜 버전, 상태 코드(요청의 결과를 나타냄), 상태 텍스트(상태 코드에 대한 설명)의 정보를 포함한다.
요청 헤더와 동일한 구조를 가지고 있다.
응답의 본문은 HTTP message 구조의 마지막에 위치한다. 요청과 마찬가지로 모든 응답에 body가 필요하지 않다.
: JavaScript, DOM, Fetch, XMLHttpRequest, HTML 등의 다양한 기술을 사용하는 웹 개발 기법
Fetch : XHR의 단점을 보완한 새로운 Web API이며, XML보다 가볍고 JavaScript와 호환되는 JSON을 사용한다.
=> Fetch 등장 이전에는 표준화된 XHR(XMLHttpRequest) 사용했지만, XHR은 Cross-Site 이슈 등의 불편함이 있었고, 그에 비해 Fetch는 promise 지원 등의 장점을 가지고 있기 때문에 이제는 많은 사람들이 Fetch를 사용한다.
: 웹 페이지를 브라우저에서 렌더링하는 대신에 서버에서 렌더링한다.(서버에서 웹 페이지를 브라우저로 보내기 전에 서버에서 완전히 렌더링함)
: 웹 페이지를 클라이언트에서 렌더링한다.
SSR은 서버에서 페이지를 렌더링 하고, CSR은 브라우저(클라이언트)에서 페이지를 렌더링한다.
CSR은 사용자가 다른 경로를 요청할 때마다 페이지를 새로고침 하지 않고, 동적으로 라우팅한다.