티스토리 뷰
웹의 동작 방식
- 사용자가 브라우저에 URL 입력 => 브라우저는 DNS를 통해 서버의 진짜 주소를 찾음 => HTTP 프로토콜을 사용해 HTTP 요청 메시지를 생성 => TCP/IP 연결을 통해 HTTP 요청이 서버로 전송됨 => 서버는 HTTP 프로토콜을 활용해 HTTP 응답 메시지를 생성 => TCP/IP 연결을 통해 요청한 컴퓨터 전송 => 도착한 HTTP 응답 메시지는 웹페이지 데이터로 변환되고 웹 브라우저에 의해 출력되어 사용자가 볼 수 있음
TCP와 UDP의 차이
- TCP: 연결형 서비스, 전송 순서 보장, 수신 여부 확인, 신뢰성이 높고 속도가 느리다.
- UDP: 비연결형 서비스, 전송 순사 바뀜, 수신 여부 확인X, 신뢰성이 낮고 속도가 빠르다.
GET과 POST의 차이
- GET: 데이터를 조회하기 위해 사용되는 방식으로 데이터를 헤더에 추가하여 전송하는 방식, URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안된다.
- POST: 데이터를 추가 또는 수정하기 위해 사용되는 방식으로 데이터를 바디에 추가하여 전송하는 방식
HTTP 프로토콜
- 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜
- HTTP: 평문 데이터를 전송하는 프로토콜로 비밀번호 또는 주민번호 주고 받을 시 보안 문제가 있음
- HTTPS: HTTP에 암호화가 추가된 프로토콜로 대칭키 암호화와 비대칭키 암호화가 모두 사용.
3 Way-Handshake
- 송신자와 수신자가 총 3번에 걸쳐 데이터를 주고 받으며 통신이 가능한 상태임을 확인
클라이언트에서 서버로 데이터 전송의 상황
- 정적 데이터 조회: 쿼리 파라미터 없이 리소스 경로로 단순하게 조회가 가능하다. (GET)
- 동적 데이터 조회: 쿼리 파라미터를 사용하여 주로 검색, 게시판 목록에서 정렬 필터 데이터 전송 (GET)
- HTML Form을 통한 데이터 전송: 회원가입, 상품주문, 데이터 변경 등 (POST), GET/POST만 지원
- multipart/form-data: 파일 업로드 같은 바이너리 데이터 전송시 사용
- HTTP API를 통한 데이터 전송
- 서버 to 서버의 백엔드 시스템 통신 방식
- JS를 통한 AJAX 통신
- application/json 주로 사용
REST API
- web의 장점을 최대한 활용할 수 있는 아키텍처
- 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해서 사용하는 인터페이스
- 구성: 자원(URI), 행위(HTTP METHOD), 표현(Representations)
- 특징
- Stateless
- Cacheable
- Client-Server
- 계층형 구조
- 리소스명은 동사보다 명사를 사용
- 장점: 확장성, 유연성, 독립성
* HTTP API 설계 예시
ex) 회원관리 시스템
- 회원 목록 /members -> GET
- 회원 등록 /members -> POST
- 회원 조회 /members/{id} -> GET
- 회원 수정 /members/{id} -> PATCH, PUT, POST
- 회원 삭제 /members/{id} -> DELETE
ex) 파일관리 시스템
- 파일 목록 /files -> GET
- 파일 조회 /files/{filename} -> GET
- 파일 등록 /files/{filename} -> PUT
- 파일 삭제 /files/{filename} -> DELETE
- 파일 대량 등록 /files -> POST
HTTP API - 컬렉션
- POST 기반 등록
- 서버가 리소스 URI 결정
- 컬랙션: 서버가 관리하는 리소스 디렉터리
HTTP API - 스토어
- PUT 기반 등록
- 클라이언트가 리소스 URI 결정
- 스토어: 클라이언트가 관리하는 자원 저장소
HTTP API - 문서
- 단일 개념
- ex) /members/100, /files/star.jpg
HTTP API - 컨트롤러
- 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
- 동사를 직접 사용
HTML FORM 사용
- 순수 HTML 사용
- GET, POST만 지원