뭔가 되게 길게 배워야 할 것들을 하루만에 배운 느낌이다. 이해도 뭔가 되다 만듯한.. 어렵다 어려워 ... 차라리 알고리즘 풀고싶어 ...
클라이언트 - 서버 아키텍쳐(2티어 아키텍쳐)
상품 정보 같은 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것을 2티어 아키텍처, 또는 클라이언트-서버 아키텍처라고 부른다. 리소스를 사용하는 앱이 바로 "클라이언트", 리소스를 제공(serve)하는 곳은 "서버"
3티어 아키텍쳐
리소스를 저장하는 공간을 별도로 마련해 두는데 이 공간을 "데이터베이스"라고 부른다. 데이터베이스는 창고와 같은 역할을 한다. 이처럼 기존 2티어 아키텍처에 데이터베이스가 추가된 형태를 3티어 아키텍처라고 부른다.
클라이언트 - 리소스에 접근하려는 앱, 카페 손님 , 요청
서버 - 리소스가 존재하는 곳, 리소스를 전달해주는 앱(3티어), 서빙하는 사람, 응답
데이터베이스 - 리소스를 저장하는 공간, 창고
프로토콜 - 통신 규약, 약속 , HTTP, TCP, 앱 이용하기, 키오스크
API - 서버가 제공하는 인터페이스, 메뉴판(메뉴판이 있어야 주문을 할 수 있으므로 거의 필수다)
URL & URI
URL
브라우저의 주소창에 입력한 URL은 서버가 제공되는 환경에 존재하는 파일의 위치를 나타낸다.
CLI 환경에서 폴더와 파일의 위치를 찾아 이동하듯이, 슬래시(/)를 이용해 서버의 폴더에 진입하거나 파일을 요청할 수 있다. 그러나 기본적인 보안의 일환으로 외부에서 직접 접근이 가능한 경우는 거의 없다.
URL은 Uniform Resource Locator의 줄임말로, 네트워크 상에서 웹 페이지, 이미지, 동영상 등의 파일이 위치한 정보를 나타낸다. URL은 scheme, hosts, url-path로 구분할 수 있다. 가장 먼저 작성하는 scheme은 통신 방식(프로토콜)을 결정한다. 일반적인 웹 브라우저에서는 http(s)를 사용한다. hosts는 웹 서버의 이름이나 도메인, IP를 사용하며 주소를 나타낸다. url-path는 웹 서버에서 지정한 루트 디렉토리부터 시작하여 웹 페이지, 이미지, 동영상 등이 위치한 경로와 파일명을 나타낸다.
URI
URI는 Uniform Resource Identifier의 줄임말로, 일반적으로 URL의 기본 요소인 scheme, hosts, url-path에 더해 query, bookmark를 포함한다. query는 웹 서버에 보내는 추가적인 질문이다.
IP address
네트워크에 연결된 특정 PC의 주소를 나타내는 체계를 IP address(Internet Protocol address, IP 주소)라고 한다.
IP는 Internet Protocol의 줄임말로, 인터넷상에서 사용하는 주소체계를 의미한다. 네 덩이의 숫자를 이용한다. 각 덩이는 0~255까지 입력 가능하다. 이런 네 덩이의 숫자 체계를 IPv4라고 한다. IPv4로 할당할 수 있는 PC가 한계를 넘어서면서 IPv6이 나왔다. 이는 2^(128)개의 IP주소를 표현할 수 있다.
- localhost, 127.0.0.1 : 현재 사용 중인 로컬 PC를 지칭한다.
- 0.0.0.0, 255.255.255.255 : broadcast address, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소다. 서버에서 접근 가능 IP 주소를 broadcast address 로 지정하면, 모든 기기에서 서버에 접근할 수 있다.
PORT
127.0.0.1 뒤에 :3000과 같은 숫자가 표현된다. 이 숫자는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)를 의미한다.
이미 사용 중인 포트는 중복해서 사용할 수 없다. 포트 번호는 0~ 65535 까지 사용할 수 있다. 그중에서 0 ~ 1024번 까지의 포트 번호는 주요 통신을 위한 규약에 따라 이미 정해져 있다.
- 22 : SSH
- 80 : HTTP
- 443 : HTTPS
Domain name
IP 주소를 대신하여 사용하는 주소가 있다. 만약 IP 주소가 지번 또는 도로명 주소라면, 도메인 이름은 해당 주소에 위치한 상호로 볼 수 있다. 도메인 이름을 이용하면 한눈에 파악하기 힘든 IP 주소를 보다 간단하게 나타낼 수 있다.
IP 주소는 3.38.227.206 이고, 도메인 이름은 codestates.com 이다.
DNS
모든 IP 주소가 도메인 이름을 가지는 것은 아니다. 브라우저의 검색창에 도메인 이름을 입력하여 해당 사이트로 이동하기 위해서는 해당 도메인 이름과 매칭된 IP 주소를 확인하는 작업이 반드시 필요하다. 네트워크에는 이것을 위한 서버가 별도로 있는데 이를 DNS(Domain Name System)이라고 한다. DNS는 호스트의 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템이다.
DNS는 응답을 보내기 위해 한 개 이상의 존 파일을 가지고 있다. 존 파일은 레코드 클래스, TTL, 레코드 타입, 레코드 데이터로 구성되어 있다. 네임 서버들은 이러한 존 파일을 바탕으로 요청에 해당되는 레코드를 리턴한다.
URL에 deploy.states.com 주소를 입력하면 ‘DNS Lookup’이라고 불리는 다음 과정이 발생한다.
- 브라우저는 리졸버에게 IP 주소를 요청한다. 리졸버는 요청받은 도메인의 IP 주소를 찾기 위해 여러 네임 서버에 반복적인 질의를 하는 네임 서버다. 리졸버는 우선 기존에 찾아본 도메인 정보의 내용이 담긴 캐시 파일을 살펴본다. 해당되는 도메인 정보가 있다면 즉시 IP 주소를 리턴한다. 해당되는 도메인 정보를 찾을수 없는 경우 2번을 진행한다.
- DNS 리졸버는 IP 주소를 얻기 위해 네임 서버들에게 재귀적인 쿼리를 진행한다.
루트, 탑 레벨, 권한 있는 네임 서버에 차례대로 쿼리를 진행하며 IP 주소를 알아낸다. 이때 리졸버는 쿼리수를 줄일 목적으로 기록되지 않은 도메인 네임 서버들의 주소를 저장하기도 한다. - 마지막으로 리졸버는 전달받은 deploy.states.com의 IP 주소를 기록하고 브라우저에게 전달한다.
HTTP Messages
HTTP Messages는 클라이언트와 서버 사이에서 데이터가 교환되는 방식이다. 개발자는 이런 메시지를 직접 작성할 필요가 거의 없다. 구성 파일, API, 기타 인터페이스에서 HTTP Messages를 자동으로 완성한다.
- start line : start line에는 요청이나 응답의 상태를 나타낸다. 항상 첫 번째 줄에 위치한다. 응답에서는 status line이라고 부른다.
- HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합이다.
- empty line : 헤더와 본문을 구분하는 빈 줄이 있다.
- body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다. 요청과 응답의 유형에 따라 선택적으로 사용한다.
HTTP Requests
1. Start line
수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method.
요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성.
HTTP 버전에 따라 HTTP message의 구조가 달라진다. 따라서 start line에 HTTP 버전을 함께 입력한다.
- origin 형식 : '?'와 쿼리 문자열이 붙는 절대 경로. GET, POST, HEAD, OPTIONS 등의 method와 함께 사용한다.
POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
- absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method와 함께 사용한다.
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
- authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 일부분. HTTP 터널을 구축하는 경우, CONNECT와 함께 사용할 수 있다.
CONNECT developer.mozilla.org:80 HTTP/1.1
- asterisk 형식 : OPTIONS 와 함께 별표(*) 하나로 서버 전체를 표현한다.
OPTIONS * HTTP/1.1
2. Headers
헤더 이름(대소문자 구분이 없는 문자열), 콜론( : ), 값을 입력. 값은 헤더에 따라 다르다.
- General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더다.
- Request headers : fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더를 의미한다. User-Agent, Accept-Type, Accept-Language와 같은 헤더는 요청을 보다 구체화한다. Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있다.
- Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더다.
3. Body
HTTP message 구조의 마지막에 위치하고 필수는 아니다.
- Single-resource bodies(단일-리소스 본문) : 헤더 두 개로 정의된 단일 파일
- Multiple-resource bodies(다중-리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 나타낸다.
AJAX
AJAX는 Asynchronous JavaScript And XMLHttpRequest의 약자로, JavaScript, DOM, Fetch, XMLHttpRequest, HTML 등의 다양한 기술을 사용하는 웹 개발 기법이다.
예전에는 클라이언트에서 요청을 보내면 매번 새로운 페이지로 이동해야 했다. 그러나 fetch를 이용하면 페이지를 이동하지 않아도 서버로부터 필요한 데이터를 받아올 수 있다. 계속해서 페이지를 사용할 수 있게 하는 비동기적인 방식을 사용한다.
AJAX의 장점
- 서버에서 HTML을 완성하여 보내주지 않아도 웹페이지를 만들 수 있다.
- 표준화된 방법
- 유저 중심 애플리케이션 개발
- 작은 대역폭(필요한 데이터만 가져오므로 데이터의 크기가 작음)
AJAX의 단점
- Search Engine Optimization(SEO)에 불리 (HTML이 비어있기 때문에 사이트의 정보를 긁기 어려움)
- 뒤로가기 버튼 문제 (AJAX는 이전 상태를 기억하지 않기 때문에 따로 History API를 사용해야함)
SSR (Server Side Rendering)
- 웹 페이지를 브라우저에서 렌더링하는 대신에 서버에서 렌더링
- 브라우저가 서버의 URI로 GET 요청을 보내면, 서버는 정해진 웹 페이지 파일을 브라우저로 전송
- 첫 화면 렌더링이 빠르다. 웹 페이지가 사용자와 상호작용이 적다. SEO가 우선순위인 경우 사용
CSR (Client Side Rendering)
- CSR은 SSR의 반대
- SSR이 서버 측에서 페이지를 렌더링한다면, CSR은 클라이언트에서 페이지를 렌더링
- 브라우저의 요청을 서버로 보내면 서버는 웹 페이지를 렌더링하는 대신, 웹 페이지의 골격이 될 단일 페이지(Single Page)를 클라이언트에 보낸다.
- 이후에 웹 페이지와 함께 JavaScript 파일을 보낸다.
- 데이터를 가져와서 웹 페이지에 렌더링을 하기위해 Fetch와 같은 API가 사용된다.
- CSR에서는 SSR과 다르게, 서버가 웹 페이지를 다시 보내지 않는다.
- 페이지를 새로고침 하지 않고, 동적으로 라우팅을 관리
- 사이트에 풍부한 상호 작용이 있는 경우, CSR 은 빠른 라우팅으로 강력한 사용자 경험을 제공
'코드스테이츠 > section2' 카테고리의 다른 글
[React] 클라이언트 Ajax 요청 (0) | 2022.06.16 |
---|---|
REST API (0) | 2022.06.10 |
React Props & State (0) | 2022.06.09 |
React SPA (0) | 2022.06.04 |
React intro (0) | 2022.06.03 |