네트워크 기본 기식
인터넷 : 컴퓨터 네크워크 통신망
ip : 인터넷 프로토콜, 즉 통신 규약, ip주소는 ip에 필요한 고유 주소
인터넷 통신 시에는 지정한 IP 주소에 데이터를 Packet 이라는 단위로 전달
TCP
- 신뢰성 통신이라 생각하면 됨, 키워드는 신뢰! -> 데이터 잘 받았어요!, 패킷 순서보장해요!
- 3 Way HandShake 수행, syn보내면 ack로 잘 받았다고 응답하는 과정, ack는 잘받았고 너의 요청을 수락한다는 의미, 그래서 클라이언트는 ack와 함께 데이터를 전송함 -> 이 과정을 통해서 신뢰성을 보장하지만 대신 시간이 오래걸린다 ㅜㅠ
UDP
- TCP랑 반대라고 보면 됨, 비신뢰성 비연결성 하지만! 3Way HandShake가 없기때문에 속도가 빠름
- 데이터 무결성 검사하는 체크섬(Checksum)을 포함하기 때문에 잘못된 데이터가 전송되지 않도록하긴함
- 속도빠르니까 스트리밍, 게임에 많이 사용~
PORT
- 그냥 간단하게 내 컴퓨터 아이피 주소는 딱 하나임 근데 나는 컴터에서 겜도 하고 인터넷도 하고 카톡도 함 그럼 패킷이 겜으로 갈지 카톡으로 갈지를 모름 -> 그 프로세스를 구분하기 위해서 PORT가 존재!
- 이미 사용되고 있는 포트 (0 ~ 1023) -> 여긴 피해서 사용하기, 80번은 HTTP
크롬 브라우저에 유튜브 URL을 입력했을 때 발생하는 일
1. DNS를 조회해서 해당 IP주소를 응답받음
2. 웹 브라우저에서 구글 서버로 유튜브 검색해줘!라는 내용의 HTTP요청 메시지가 담긴 요청 패킷을 보냄
3. 구글 서버에서 받은 HTTP요청 메시지를 기반으로 응답 HTTP메시지를 만들어 응답
4. 응답 패킷이 도착하면 HTML이 응답으로 오고 브라우저에 그려짐
Scale Up, Scale Out
Scale Up : 단일 서버의 하드웨어 사용을 높임, 처리를 더 빠르게 함
Scale Out : 같은 사영의 서버를 여러개 배치, 더 맣은 사용자 요청을 동시 처리 가능
Stateful, Stateless
Stateful : 서버는 클라이언트의 상태를 유지(기억)함. -> 그렇기에 같은 서버가 유지되야 함 -> 그렇기에 에러나면 큰일
Stateless : 클라이언트의 상태를 유지하지 않음 -> 같은 서버를 유지할 필요가 없기에 Scale Out 수평 확장성이 높음 -> 근데 로그인처럼 상태를 유지해야하는 경우가 생김. 그래서 그럴땐 뭐다? 쿠키 세션 토큰을 활용하여 극복!
Connection, Connectionless
Connection(연결) : 서버는 클라이언트와 계속해서 연결을 함 -> 새로운 연결 과정을 거치지 않기에 속도는 빠르지만 연결을 위한 자원이 많이 소모됨
Connectionless(비연결) : 서버는 클라랑 연결 유지 안 함 -> 자원을 효율적으로 사용하지만 요청이 오면 3Way HandShake 해야 되서 시간 걸림, 게다가 정적 자원 모두 다시 다운하기에 느림~> 그래서 캐싱 혹은 HTTP 지속연결로 해결
HTTP 지속연결(Persistent Connections)
하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지 즉, 정적 자원을 다 가지고 올 때까지 계속 연결 유지함, 비지속 연결은 정적자원에 대해서 하나씩 응답하고 끊고 연결
HTTP(HyperText Transfer Protocol)
- 요청 응답 구조
- 무상태 (Stateless) -> 클라이언트의 상태를 보존하지 않음, 로그인은 쿠키 토큰 세션으로 해결
- 비연결 (Connectionless) -> 서버 자원을 효율적, 정적자원은 계속 다시 받고 속도 오래걸림 -> HTTP 지속연결(Persistent Connections)로 문제를 해결
HTTP Message 구조
HTTP Message 구조
HTTP 요청 메세지(Request Message)
- Start Line
- HTTP Method(GET ...)
- path(HTTP Request가 전송되는 대상, Query String), /search?keyword=yena
- HTTP Version : 1.1
- Header
- Host
- field-name: OWS(띄어쓰기) field-value 구조 -> Content-Type : text/html
- Empty Line : 공백 한 줄, 필수값
- Message Body : 실제 전송하는 데이터가 담겨 있는 부분
HTTP 응답 메세지(Response Message)
Method
POST : Message Body를 통해 요청 데이터를 전달, 멱등성(여러 번 실행해도 동일한 결과)을 보장하지 않는다
GET : 서버에 추가적인 데이터 전송을 해야한다면, Message Body가 아닌 Query String(Query Parameter)를 사용
PUT : 리소스 덮어쓰기, 클라이언트 측에서 리소스를 식별하여 URI를 지정, 없으면 생성 있으면 아예 덮어씀
PATCH : 리소스 부분 업데이트
HTTP Status Code
- 1xx (정보)
- 2xx (성공)
- 3xx (리다이렉션)
- 4xx (클라이언트 에러)
- 5xx (서버 에러)
'Web' 카테고리의 다른 글
모듈, 프레임워크, 라이브러리, API 차이 (0) | 2025.01.22 |
---|---|
Restful API 설계 방법 (0) | 2025.01.22 |
팀 소개 웹페이지 프로젝트 회고 (2) | 2024.12.30 |
Firebase로 회원 상세 페이지 만들기 (0) | 2024.12.28 |
Firebase를 이용하여 이미지 및 데이터 저장하기 (0) | 2024.12.26 |