IP란?
IP(Internet Protocol): 인터넷이 통하는 네트워크에서 어떤 정보를 빠르게 수신하고 송신하는 통신에 대한 규약
- 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
- 비신뢰성: 인터넷 망의 문제가 생기면 중간에 패킷이 사라질 수 있으며, 패킷이 순서대로 오지 않을 수도 있다.
IPv4 VS IPv6
IPv4는 널리 사용되는 IP 주소로, 32비트의 값을 가진다. 보통 8비트씩 끊어 이를 0~255의 10진수 숫자로 나타내며, 각 숫자는 점(.)으로 구분한다.
IPv6는 주소체계를 128비트 크기로 확장한 차세대 인터넷 프로토콜 주소이다. 16비트씩 8자리로 각 자리는 콜론으로 구분한다. 네트워크 속도, 보안적인 부분뿐만 아니라 여러 면에서 뛰어나지만 기존의 주소체계를 변경하는데 비용이 많이 들어서 아직 완전히 상용화가 되지 않았다.
TCP와 UDP
OSI7계층
- 물리계층: 실제 장치를 연결하기 위한 전기적 및 물리적 세부 사항을 정의한 계층
- 데이터 링크 계층: 장치 간 신호를 전달하는 물리계층을 이용하여 네트워크 상의 주변 장치들 간의 데이터를 전송하는 역할을 한다.(Mac주소 사용)
- 네트워크 계층: 여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하는 계층. 경로를 선택하고 주소를 정하고 경로에 따라 패킷을 전달해주는 것이 주 역할이다.(IP)
- 전송 계층: 통신을 활성하기 위한 계층이며 보통 TCP 프로토콜을 이용하여 포트를 열어 전송한다.(Port)
- 세션 계층: 응용 프로세스가 통신을 관리하는 방법을 제공하는 계층이다. 연결이 손실되는 경우 연결 복구 시도가 가능하며 장시간 연결이 되지 않는다면, 세션 계층의 프로토콜이 연결을 닫고 다시 연결을 시도한다.(API, Socket)
- 표현 계층: 코드 간 번역을 담당하는 계층이다. 전송하는 데이터의 표현방식을 결정.(ASCII, JPEF, GIF)
- 응용 계층: 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행하는 계층이다.(HTTP, FTP)
TCP/IP 4계층이란?
- 네트워크 엑세스 계층: TCP/IP 패킷을 네트워크 매체로 전달하는 것과 네트워크 매체에서 TCP/IP 패킷을 받아들이는 과정을 담당한다.
- 인터넷 계층: 네트워크 상 최종 목적지까지 연결되도록 연결성을 제공하게 된다.
- 전송 계층: TCP/UDP를 담당하는 계층이다. 통신 노드 간의 연결 제어 및 자료 송수신을 담당한다.
- 응용 계층: 사용자와 가장 가까운 계층으로, 사용자가 소프트웨어와 소통할 수 있게 해준다.
TCP란?
TCP(Transmission Control Protocol): 전송을 제어하는 프로토콜 규약. 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함게 사용하는 프로토콜
- 연결 지향 방식이다.
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어.
- 높은 신뢰성을 보장한다.
- UDP보다 속도가 느리다.
- 전이중(Full-Duplex), 점대점(Point to Point) 방식.
UDP란?
UDP(User Datagram Protocol): 사용자 데이터그램 프로토콜이라는 뜻. 데이터를 데이터그램 단위로 처리하는 프로토콜. TCP와 다르게 비연결형 프로토콜이다.
- 비연결형 서비스로 데이터그램 방식을 제공한다
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- 신뢰성이 낮다
- TCP보다 속도가 빠르다
DNS란?
DNS(Domain Name System): 사용자가 숫자로 된 인터넷 프로토콜 주소 대신 인터넷 도메인 이름과 검색 가능한 URL을 사용하여 웹사이트에 접속하는 것을 가능하게 한다.
DNS 서버에 도메인 명에 대한 IP 주소를 등록해둔다.
- 클라이언트가 DNS 서버에 도메인 명에 대한 IP를 요청한다.
- DNS 서버는 해당 도메인 명에 대한 IP 주소를 클라이언트에 전달한다.
- 클라이언트는 해당 IP주소로 서버에 접근한다.
URI와 URL
URI
URI(Uniform Resource Identifier): 특정 리소스를 식별하는 통합 자원 식별자. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스
URL
URL(Uniform Resource Locator): 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약. URI의 서브셋이다.
- Uniform : 리소스를 식별하는 통일된 방식
- Resource : 자원, URI로 식별할 수 있는 모든 것
여기서 자원은 웹 브라우저의 파일만 뜻하는 게 아니라, 실시간 교통정보 등 우리가 구분할 수 있는 것은 모든 게 리소스가 된다. - Identifier : 다른 항목과 구분하는데 필요한 정보
HTTP란?
HTTP(Hypertext Transfer Protocol): 클라이언트와 서버 간 통신을 위한 통신 규칙 또는 프로토콜, 요청과 응답으로 구성되어 있으며, 일반적으로 80번 포트를 사용한다.
HTTP의 특징
- Plain text로 부터 JSON 데이터 및 XML과 같은 형태로 데이터를 주고 받는다.
- TCP/IP를 이용하는 응용 프로토콜이다.
- HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
HTTPS
HTTP는 암호화되지 않은 데이터를 전송한다. 즉, 브라우저에서 전송된 정보를 제3자가 가로채고 읽을 수 있다. HTTPS는 HTTP 요청 및 응답을 SSL 및 TLS 기술에 결합한다.
HTTP | HTTPS | |
본말 | Hypertext Transfer Protocol | Hypertext Transfer Protocol Secure |
기본 프로토콜 | HTTP/1과 HTTP/2는 TCP/IP를 사용합니다. HTTP/3은 QUIC 프로토콜을 사용합니다. | HTTP 요청 및 응답을 추가로 암호화하기 위해 SSL/TLS와 함께 HTTP/2 사용 |
포트 | 기본 포트 80 | 기본 포트 443 |
용도 | 이전 텍스트 기반 웹 사이트 | 모든 최신 웹 사이트 |
보안 | 추가 보안 기능 없음 | 퍼블릭 키 암호화에 SSL 인증서 사용 |
장점 | 인터넷을 통한 통신 지원 | 웹 사이트에 대한 권위, 신뢰성 및 검색 엔진 순위 개선 |
HTTP messages
HTTP messages는 클라이언트와 서버 사이에서 데이터가 교환되는 방식이다. HTTP messages에는 다음과 같은 두 가지 유형이 있다.
- 요청(Requests)
- 응답(Responses)
- start line : start line에는 요청이나 응답의 상태를 나타낸다. 항상 첫 번째 줄에 위치합니다. 응답에서는 status line이라고 부른다.
- HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합이다.
- empty line : 헤더와 본문을 구분하는 빈 줄이 있다.
- body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다. 요청과 응답의 유형에 따라 선택적으로 사용한다.
HTTP 메소드
- GET: 리소스 조회에 사용된다, 서버에 전달할 데이터를 URI query를 통해 전달된다.
- POST: 메시지 바디를 통해 서버로 요청 데이터를 전달하면 해당 데이터를 처리한다. 주로 등록 혹은 프로세스 처리등에 사용된다.(멱등성X)
- PUT: 리소스 대체의 목적으로 리소스가 있을 경우 대체, 없을 경우 생성한다.
- PATCH: 리소스 부분을 변경한다. PUT과 다르게 대치가 아닌 필요한 부분만 업데이트하는 방식이다.
- DELETE: 리소스를 제거할 때 사용한다.
*멱등: 메서드를 반복해서 호출하더라도 결과가 동일해야한다. POST의 경우 회원 등록을 두 번하거나 주문을 두 번할 경우 주문 중복이 생길 수 있기에 멱등성이 성립하지 않는다.
HTTP 상태코드
- 1XX: 요청이 수신되어 처리중이다.(거의 사용하지 않음)
- 2XX: 요청이 정상적으로 처리되었다
- 200(OK), 201(Created), 202(Accepted), 204(No Content)
- 3XX: 요청을 완료하기 위해 추가 행동이 필요하다(리다이렉션)
- 4XX: 클라이언트에서 잘못된 스펙으로 데이터를 보냈거나 인증, 인가가 만족되지 않아 서버에서 요청을 수행할 수 없다.
- 400(Bad Request), 401(Unauthorized), 403(Forbidden), 404(Not Found)
- 5XX: 서버에서 에러가 발생해 요청을 정상적으로 처리할 수 없다.
- 500(Internal Server Error), 503(Service Unavaliable)
요청 흐름 정리
- 웹 브라우저에 입력된 URL로 부터 IP, PORT 정보를 얻고 웹 브라우저가 HTTP 요청 메시지를 생성한다.
- 애플리케이션 계층의 소켓 라이브러리를 통해 IP, PORT 정보를 헤더 부분에 담아 연결을 위한 패킷을 만들고 3-way-handshake 로 웹 서버와 연결한다.
- 소켓 라이브러리를 통해 HTTP 메시지를 TCP/IP 계층으로 전달한다.
- 헤더 부분(출발지 IP, PORT, 목적지 IP, PORT 등)과 데이터 부분(HTTP 요청 메시지)을 합쳐 TCP/IP 패킷을 생성한다.
- 웹 브라우저에서 인터넷망(수많은 노드들)을 거쳐 웹 서버로 패킷을 전달한다.
- 웹 서버는 도착한 패킷의 헤더 부분은 버리고 데이터 부분(HTTP 요청 메시지)를 해석하여 HTTP 응답 메시지를 만든다.
- 헤더 부분(출발지 IP, PORT, 목적지 IP, PORT 등)과 데이터 부분(HTTP 응답 메시지)을 합쳐 TCP/IP 응답 패킷을 생성한다.
- 웹 서버에서 인터넷망(수많은 노드들)을 거쳐 웹 브라우저로 응답 패킷을 전달한다.
- 웹 브라우저는 도착한 응답 패킷의 헤더 부분은 버리고 HTTP 응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다.
Reference
'Spring > 개념' 카테고리의 다른 글
[Spring] CGLIB (0) | 2023.06.23 |
---|---|
[Spring] Annotation (0) | 2023.06.18 |
[Web] 서블릿(servlet)이란? (0) | 2023.05.23 |
[Spring] 스프링 PSA (0) | 2023.05.11 |
[Spring] 스프링 AOP (0) | 2023.05.11 |