1. HTTP 프로토콜이란?🤷♂️
Hypertext Transfer Protocol
클라이언트(브라우저)와 서버간에 자원(Data)을 서로 주고받기 위한 통신규약 입니다.
"나는 이렇게 줄 테니 넌 이렇게 받고 난 너가 준거 그렇게 받을께" 와 같은 약속을 정하는 것!
Client ----------------요청(Request)---------------->> Server
Client <<----------------응답(Response)---------------- Server
2. HTTP 프로토콜 특징🤷♂️
HTTP는 비연결성(Connectionless)과 무상태성(Stateless)라는 특징이 있습니다.
비연결성이란 클라이언트가 서버에게 요청을 보내고, 서버에서는 요청에 알 맞은 응답을 클라이언트에게 보내면 연결을 끊는 특성 입니다.
무상태성이란 통신의 상태를 가지고 있지 않는다는 의미입니다. 즉, 첫번째 통신에서 주고받은 데이터를 두번째 통신에서는 기억하고 있지 않습니다. 왜냐하면 비연결성으로 인해 서로 요청과 응답을 주고 받으면 연결을 끊어버리기 때문입니다.
이로인해, 자원의 낭비를 줄일 수 있다는 장점이 있지만!
클라이언트의 상태를 유지시켜줄 수 없다는 단점이 있습니다. 즉, 사용자가 인증이 필요한 상태거나 로그인 한 상태일 때
매 페이지마다 인증을 다시 하고 로그인작업을 다시 해야하는 단점이 있습니다.
==> 이를 해결하기 위해 사용하는 것은 쿠키 및 세션 입니다. 밑에서 다시 정리해드리겠습니다.:)
그리고, HTTP 프로토콜은 TCP/IP 통신 위에서 동작하며 기본 포트 80번에서 동작합니다.
2-1-1. TCP/IP 통신이 무엇이지?🤷♂️
우선 프로토콜이 무엇인지 부터 알아봅시다.
컴퓨터와 네트워크 기기간에 통신을 하기 위해서는 서로 같은 방법으로 통신을 해야 합니다.
(예를들어, 상대를 어떻게 찾고, 어떻게 상대에게 이야기를 시작하고, 어떤 이야기를 하며, 어떻게 종료할 것인지에 대한 규칙이 필요하겠죠.)
이렇게, 서로 다른 하드웨어와 운영체제 등을 가지고 서로 통신을 하기 위해서는 규칙이 필요합니다. 이러한 규칙을 프로토콜 이라고 합니다.
정리하자면, 서로다른 기기간에 통신을 하기 위한 규약! 이라고 보면 됩니다.
인터넷과 관련된 프로토콜들을 모은 것을 TCP/IP라고 합니다.
종류가 정말 많죠..
2-1-2. TCP/IP의 계층?🤷♂️
TCP/IP는 애플리케이션 계층(Application), 트랜스포트 계층(Transport), 네트워크계층(Network), 링크 계층(Link) 이렇게 4 계층으로 나뉘어져 있습니다.
애(A)! 네(Ne) 아빠는 트랜스(Trans)젠더시니(Li)?
왜 굳이 4개의 계층으로 나누었을까요..?
=> 만약 사양이 변경되면 해당 계층만 바꾸면 되므로 자유롭습니다. 하나의 프로토콜로 되어있다면 사양이 변경되었을 때 전체를 바꿔야 하지만, 계층화되어 있다면 변경된 해당 계층만 변경하면 됩니다.
TCP/IP 계층 | 설명 |
Application Layer | 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정합니다. (FTP,DS,HTTP...) |
Transport Layer | 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공합니다. (TCP,UDP..) |
Network Layer | 네트워크 상에서 패킷의 이동을 다룹니다. 패킷이란 전송하는 데이터의 최소 단위 입니다. 어떠한 경로를 거쳐서 상대의 컴퓨터까지 패킷을 보낼 지 결정하기도 합니다. |
Link Layer | 네트워크에 접속하는 하드웨어적인 면을 다룹니다. |
2-1-3. TCP/IP 통신의 흐름🤷♂️
TCP/IP는 통신을 할 때 계층을 순서대로 거쳐 상대와 통신합니다.
HTTP를 예로 들어 설명하면 다음과 같은 순서로 통신합니다.
1. 송신측 클라이언트의 애플리케이션 계층에서 어느 웹페이지를 보고싶다는 HTTP request를 지시합니다.
2. 그 다음에 트랜스포트 계층에서 애플리케이션 계층에서 받은 HTTP메세지를 통신하기 쉽게 조각내어 안내번호와 포트번호를 붙여 네트워크층에 전달합니다.
3. 네트워크 계층에서는 수신지 MAC주소를 추가하여 링크계층에 전달합니다.
4. 수신측 링크계층에서 데이터를 받아들여 위의 계층에 전달합니다.
5. 수신측 애플리케이션 계층에 도달하면 클라이언트가 발신했던 HTTP request를 수신할 수 있습니다.
2-1-4. IP / TCP / DNS 에 대해서 알아보자.🤷♂️
IP : 컴퓨터 네트워크에서 장치들이 서로 인식하고 통신을 하기 위해 사용하는 특수한 번호.
IP의 역할은 개개인의 패킷들을 상대방에게 전달하는 것 입니다. (패킷: 통신망을 통해 전송하기 쉽도록 자른 데이터의 전송단위)
패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있습니다.
TCP : 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대에게 보내고, 정확하게 도착했는지 확인하는 역할 담당.
TCP는 데이터를 상대방에세 확실하게 보내기 위해 3-Way Handshaking을 사용합니다.
- 송신측에서 최초 'SYN' 플래그로 상대에게 접속함과 동시에 패킷을 보냅니다.
- 수신측에서는 'SYN/ACK' 플래그로 송신측에 접속함과 동시에 패킷을 수신한 사실을 전합니다.
- 마지막으로 송신측이 'ACK' 플래그를 보내 패킷 교환이 완료되었음을 전합니다.
DNS : 도메인 이름과 IP주소 이름을 확인을 제공합니다.
3. HTTP 요청 메서드
HTTP 요청 메서드는 아래와 같은 주요 메서드를 갖고 있습니다.
GET(존재하는 자원에 대한 요청)
POST(새로운 자원을 생성)
PUT(존재하는 자원에 대한 변경)
DELETE(존재하는 자원에 대한 삭제)
4. HTTP 상태 코드
HTTP상태 코드란 서버에서 설정해주는 응답 정보 입니다.
상태코드 | 설명 |
2XX | 대부분의 성공을 의미합니다. 200 : GET요청에 대한 성공 204 : 성공했으나 응답본문에 데이터가 X 205 : 성공했으나 클라이언트 화면 새로고침 206 : 성공했으나 일부범위 데이터만 반환 |
3XX | 새 URL로 리다이렉트를 유도하는 경우 301 : Moved Permanetly , 요청한 자원이 새 URL에 존재 303 : See Other , 요청한 자원이 임시 주소에 존재 304 : Not Modified |
4XX | 클라이언트에러 |
5XX | 서버 에러 |
출처: https://velog.io/@conatuseus/2019-09-10-2009-%EC%9E%91%EC%84%B1%EB%90%A8-xsk0ds2eqf
'👩🏻💻Technical things > Questions' 카테고리의 다른 글
자바정리 (0) | 2020.08.24 |
---|---|
추상클래스 VS 인터페이스 (0) | 2020.08.11 |
[ JAVA 개념정리 ] Part 4 ( Collection ~ END) (1) | 2020.08.05 |
[ JAVA 개념정리 ] Part 3 (인터페이스~Constructor) (0) | 2020.08.05 |
[ JAVA 개념정리 ] Part 2 (객체지향 프로그래밍) (0) | 2020.08.05 |