오늘은 페어 프로그래밍 없이 네트워크에 대해 배우는 시간이었다!
Chapter1-1. 클라이언트 & 서버
- 클라이언트
- 리소스를 사용하는 애플리케이션이며 사용자가 직접 눈으로 보며 대면하므로, 프론트엔드 영역
- 종류: 웹사이트(웹 앱), 스마트폰/태블릿용 앱(iOS나 안드로이드), 데스크탑 앱
- 서버
- 리소스를 전달하는 애플리케이션이며 사용자 눈에 직접 보이지 않게 뒤에서 작동하므로, 백엔드 영역
- 종류: 웹 서버, 파일 서버, 메일 서버, 데이터베이스 서버
- 클라이언트와 서버는 요청과 응답을 주고받는 관계임
- 2티어 아키텍처(클라이언트-서버 아키텍처)
- 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것
- 기존의 2티어 아키텍처에 데이터베이스(리소스를 저장하는 공간)가 추가된 형태를 3티어 아키텍처라고 함
Chapter1-2. 클라이언트 - 서버 통신과 API
- 프로토콜
- 프로토콜은 통신 규약, 즉 약속. 웹 애플리케이션 아키텍처에서 클라이언트와 서버는 서로 HTTP라는 프로토콜을 이용해서 서로 대화가능
- 다양한 방법이 존재. 각자의 프로토콜마다 지켜야 하는 규칙이 있음!
- OSI 7 Layers
- 7개의 계층이 존재, 각 프로토콜은 어떤 계층(layer)에 속해있음

- API (Application Programming Interface)
- 서버가 클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스를 제공하는 것 ex) 카페에서 정해진 음료를 주문해야 나오듯이 서버에게도 정해진 메뉴같은 API가 있음
- HTTP 요청에는 메서드라는 것이 존재하는데 CRUD 각각의 행동과 일치함
- Create(추가): POST
- Read(조회): GET
- Update(갱신): PUT 또는 PATCH
- Delete(삭제): DELETE

Chapter2. 브라우저의 작동 원리 (보이지 않는 곳)
브라우저의 주소창에 입력한 URL은 서버의 파일의 위치를 나타낸다. 예를 들어
https://codestates.com:443/ 사이트에 접속하게 되면, codestates.com 주소가 가리키는 서버의 기본 폴더를 뜻함
URL과 URI

- URL
- 네트워크 상에서 웹 페이지, 이미지, 동영상 등의 파일이 위치한 정보를 나타냄
- 구성요소는 scheme, hosts, url-path
- URI
- URL의 기본 요소인 scheme, hosts, url-path에 더해 query, fragment를 포함된 개념 -> 즉 , URI는 URL을 포함하는 상위개념

IP와 포트
-
IP
- Internet Protocol의 줄임말로, 인터넷상에서 사용하는 주소체계
- 점으로 0부터 255까지의 숫자를 4덩이로 나눈 IP 주소체계는 IPv4
- 정해진 IP (기억하기)
- localhost, 127.0.0.1 : 현재 사용 중인 로컬 PC를 지칭
- 0.0.0.0, 255.255.255.255: broadcast address로 로컬 네트워크에 접속된 모든 장치와 소통하는 주소
- IPv4로 할당할 수 있는 PC가 한계를 넘어서면서 IPv6 도 나옴
-
PORT
- IP 주소 뒤에 표현되는 숫자로, PC에 접속할 수 있는 통로(채널)를 의미

- 터미널에서 리액트를 실행하면 나타나는 화면에는, 로컬 PC의 IP 주소인 127.0.0.1 뒤에 :3000과 같은 숫자가 표현
- 포트 번호는 0~ 65535 까지 사용가능
- 정해진 PORT: 0 ~ 1024번 까지의 포트 번호는 주요 통신을 위한 규약에 따라 이미 정해져 있음 (기억하기)
- 22 : SSH
- 80 : HTTP
- 443: HTTPS
도메인과 DNS
-
Domain name
- 웹 브라우저를 통해 특정 사이트에 진입을 할 때, IP 주소를 대신하여 사용하는 주소
- 터미널에서
nslookup 으로 IP주소 확인 가능

- 위 그림에서 IP 주소는 3.34.153.168 이고, 도메인 이름은 codestates.com
-
DNS (Domain Name System)
- 사이트로 이동하기 위해서 도메인 이름과 IP주소를 확인하는 작업을 하는 네트워크 서버
- 도메인 이름은 일정 기간 동안 대여하여 사용하기 때문에, 도메인 이름과 매칭된 IP 주소를 확인하는 작업이 반드시 필요
Chapter3. HTTP (HyperText Transfer Protocol)
- 웹 브라우저와 웹 서버의 소통을 위해 디자인된 HTML과 같은 문서를 전송하기 위한 프로토콜
HTTP Messages
- 클라이언트와 서버 사이에서 데이터가 교환되는 방식
- 요청(Requests)과 응답(Responses)으로 나뉘고 비슷한 구조를 가짐

- 구조
- start line : 요청이나 응답의 상태를 나타냄. 응답에서는 status line이라고 부름
- HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합
- body : 요청과 관련된 데이터나, 응답과 관련된 데이터 또는 문서를 포함
- 이 중 start line과 HTTP headers를 묶어 요청이나 응답의 헤드(head)라고 함
- body는 payload라고 함 (payload: 전송되는 데이터)
- Stateless
- Stateless(무상태성)는 HTTP의 큰 특징
- HTTP는 통신 규약일 뿐, 상태를 저장하지 않음. 필요에 따라 다른 방법(쿠키-세션, API 등)을 통해 상태를 확인
Chapter4. 브라우저의 작동 원리 (보이는 곳)
SPA를 만드는 기술: AJAX란?
- Asynchronous JavaScript And XMLHttpRequest의 줄임말
- JavaScript, DOM, Fetch, XMLHttpRequest, HTML 등의 다양한 기술을 사용하는 웹 개발 기법
- 가장 큰 특징: 웹 페이지에 필요한 데이터만 비동기적으로 받아와 화면에 그려낼 수 있음
- 예시1: 구글 검색창에 글자를 하나씩 입력할 때, 해당 글자로 시작하는 단어들을 서버로부터 받아와, 아래 추천검색어로 보여주게 됨

- 예시2: 원티드의 채용 공고창에서 무한 스크롤이 발생할 때마다 Fetch를 통해 데이터를 가져와서 업데이트하고 렌더링
- 그 밖의 예시들: 페이스북 메시지나 네이버 포털사이트의 뉴스 탭
- 핵심 기술: JS & DOM 과 Fetch
- Fetch를 통해 필요한 데이터만 가져와 DOM에 적용시켜 기존 페이지에서 필요한 부분만 변경할 수 있음
- Fetch 이전에는 XHR(XMLHttpRequest)를 사용함
- AJAX 장점
- 서버에서 HTML을 완성하여 보내주지 않아도 웹페이지를 만들 수 있음
- 이전에는 서버에서 HTML을 완성하여 보내주어야 화면에 렌더링을 함
- 표준화된 방법
- XHR이 표준화되면서부터 브라우저에 상관없이 AJAX를 사용가능
- 유저 중심 애플리케이션 개발
- 필요한 일부분만 렌더링해서 빠르고 더 많은 상호작용이 가능
- 더 작은 대역폭
- 완성된 HTML 파일이 아니라 데이터를 텍스트 형태(JSON, XML 등)로 보내서 데이터 크기가 작음
- AJAX 단점
- Search Engine Optimization(SEO)에 불리
- HTML 파일은 뼈대만 있고 데이터는 없어 사이트의 정보를 긁어가기 어려움
- 뒤로가기 버튼 문제
- AJAX에서는 이전 상태를 기억X 별도로 History API를 사용해야 함
SSR vs CSR
- SSR(Server Side Rendering)
- 웹 페이지를 브라우저로 보내기 전에 서버에서 완전히 렌더링
- 사용자가 브라우저의 다른 경로로 이동할 때마다 서버는 같은 작업을 다시 수행
- SSR은 언제 사용할까?
- SEO(Search Engine Optimization) 가 우선순위인 경우
- 웹 페이지의 첫 화면 렌더링이 빠르게 필요한 경우, 파일의 용량이 작아 적합
- 웹페이지가 사용자와 상호작용이 적은 경우
- ex) 네이버 블로그, 뉴욕 타임스 홈페이지
- CSR (Client Side Rendering )
- SSR의 반대로 클라이언트(대표적으로 웹 브라우저)에서 페이지를 렌더링
- 사용자가 브라우저의 다른 경로로 이동할 때마다 서버가 웹 페이지를 다시 보내지 않음
- CSR은 언제 사용할까?
- SEO 가 우선순위가 아닌 경우
- 사이트에 풍부한 상호 작용이 있는 경우 , 빠른 라우팅으로 강력한 사용자 경험
- 웹 애플리케이션을 제작하는 경우, 더 나은 사용자 경험(빠른 동적 렌더링 등)을 제공
- ex) 아고다
⭐️ SSR, CSR차이점
주요 차이점 : 페이지가 렌더링되는 위치
SSR은 서버에서 페이지를 렌더링, CSR은 브라우저(클라이언트)에서 페이지를 렌더링
CSR은 사용자가 다른 경로를 요청할 때마다 페이지를 새로고침 하지 않고, 동적으로 라우팅을 관리