본 게시글은 인프런 김영한 님의강의 "모든 개발자를 위한 HTTP 웹 기본 지식" 을 수강한 후 정리한 게시글 임을 참고 바랍니다.
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
컴퓨터 간에 통신을 하는 방법
IP ( Internet protocol ) 주소
- 컴퓨터들은 IP 주소 ( 192.100.100.2 ) 를 통해 인터넷에 연결되어 있는 다른 컴퓨터들과 통신을 한다. 컴퓨터 A 에서 데이터를 보낼 때 IP 주소를 통해 어디로 갈지 알수 있는 것이다. 인터넷 네트워크 상으로 이 데이터를 보내면 네트워크의 경로 지정 역할을 해주는 녀석들이 IP 주소를 보고 올바른 곳으로 전달해 준다.
- 데이터를 보낼 때 시작 IP 주소, 목적지 IP 주소, 기타 정보 등을 함께 보내는데 이를 패킷이라고 한다.
- 패킷을 보낼 대상이 없어도 보내고(비연결성), 패킷의 순서나 도착여부를 보장하지 않으며(비신뢰성), 패킷이 대상 컴퓨터에 도착한다 해도 해당 아이피를 사용하는 프로그램이 둘 이상면 어떻게 해결한 것인지? 등의 문제가 있다.
TCP( Transmission Control Protocol )
- 연결지향 : 3 way handshake 라는 기법을 사용해서 두 컴퓨터간의 연결상태를 확인,유지한다. 접속 요청(SYN), 요청 수락(SYN,ACK), 요청 수락 확인 (ACK)의 3단계의 메시지 전달을 통해 서로의 연결 상태를 확인한다.
- 데이터 전달 보증 : 데이터 전송을 할시 데이터를 잘 받았음을 보낸다.
- 순서 보장 : 패킷 순서를 전달하여, 순서가 잘못되었을 경우 잘못된 패킷부터 다시 보내라는 응답을 보냄으로써 패킷 순서를 보장 가능하다.
UDP( User Datagram Protocol )
- 데이터 전달 및 순서가 보장되지 않지만, 전송 속도가 빠르다.
- IP에서 port, 체크섬 정도만 추가됨.
PORT
- IP를 통해서 컴퓨터로 메시지가 전달되었을 때, 컴퓨터 내의 어떤 프로세스에게 메시지를 전달할지 식별하는 번호
- 0~1023 까지는 예약된 포트로, 이를 제외하고 1024~65535 에서 선택하는 것이 좋음. HTTP 통신은 80, HTTPS 통신은 443 이다.
DNS( Domain Name System )
- 우리가 사용하는 웹 사이트의 주소는 IP 주소 형태가 아니다. www.naver.com 등 사람이 어느정도 이해 가능한 수준인데, 이 문자 주소와 IP 주소를 연결시켜 주는 시스템을 DNS라고 한다.
- DNS 서버는 이 IP주소 연결을 중계해 주는 서버를 의미한다. 우리가 주소를 입력하면 먼저 DNS 서버로 가서 IP 번호를 전달받고, 그 실제 주소로 이동된다.
HTTP ( HyperText Transfer Protocol )
- 거의 모든 형태의 데이터를 전달 가능한 프로토콜
- 클라이언트 - 서버 구조 : 클라이언트가 서버에게 HTTP 요청을 보내고, 서버는 클라이언트에게 응답을 생성하여 HTTP 응답을 전달해준다.
- 무상태 : 서버는 클라이언트의 상태를 별도로 저장하지 않는다.
- 무상태의 장점 : 클라이언트의 상태를 별도로 저장하지 않기에 서버의 리소스를 절약할 수 있다. 또 상태를 별도로 저장하지 않기에 서버의 증설이 용이하다. 상태를 저장하고 있어야 한다면 서버 증설시 저장하고 있던 상태를 모두 동기화 하는 작업등이 필요하기에 불편함.
- 상태를 유지해야되는 부분도 존재함. 로그인 정보 등은 유지해야 함. 실질적으로 완전한 무상태 서버는 어려움
- 비 연결성 : 클라이언트로의 응답이 끝나면 바로 연결을 해제한다.
HTTP 요청 메시지 구조
- start line
- request : HTTP 메서드 + 요청 타겟 + HTTP 버전
- response: HTTP 버전 + status code + reason phrase
- header : HTTP 전송에 필요한 모든 부가 정보들을 포함
- empty line
- body : 실제로 전송할 데이터를 적재. 영상, 문자, 사진, 문서 등 byte 로 표현가능한 모든 데이터를 전송
HTTP Method : HTTP 요청이 어떤 형식의 요청인지 구분하는 역할을 한다.
- GET : 특정 리소스 조회
- POST : 요청데이터를 처리할 필요가 있을 시
- PUT : 특정 리소스 완전대체
- DELETE : 특정 리소스 삭제
- PATCH : 리소스의 데이터를 부분 변경
- HEAD : GET 과 동일하지만 body 를 반환하지 않음
HTTP Status code : HTTP 응답이 어떤 결과를 가지는지를 의미. 흔히 알고있는 번호들은 404, 200 등 가끔 웹페이지에서 오류가 났을때 보이는 코드등이다.
- 1xx : 요청이 수신되어 처리중인 상태
- 2xx : 요청이 정상 처리됨
- 3xx : 요청 완료를 위한 추가 행동이 필요한 상태
- 4xx : 클라이언트의 잘못된 요청
- 5xx : 서버에서 오류가 발생함
'개발자의 길' 카테고리의 다른 글
[Network] OSI 7 Layer 정리 (0) | 2023.01.30 |
---|---|
[Backend] OAuth 2.0 이란 무엇인가? (0) | 2022.05.01 |
[Python3] Decorator(장식자) 란 무엇인가? (0) | 2022.03.06 |
[Python3] Nested function, First class function, Closure function 이란 무엇인가? (0) | 2022.03.06 |
[Java][SpringBoot] "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의노트 (0) | 2021.12.22 |