Spring 입문 1주차
인터넷 프로토콜 IP(Internet Protocol)
→ 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약
우리가 들어본 192.168.0.1과 같은 숫자는 IP 자체가 아닌 IP에 필요한 고유 주소인 IP 주소이다.
IP 주소는 쉽게 말하면 각 기기 간의 통신을 식별할 수 있는 전화번호
인터넷 통신 시에는 지정한 IP 주소에 데이터를 Packet 이라는 단위로 전달한다.
패킷(Packet)
- 소스 IP, 대상 IP를 포함하고 있어서 어떤 컴퓨터에 데이터를 전송할지 판별할 수 있다.
- 크게 헤더, 페이로드, 트레일러(수신여부 포함)로 구분된다.
- 데이터를 주기만 하는 것이 아닌 받고 응답한다.
IP 방식의 문제점
애플리케이션 구분
- 대상 컴퓨터의 어떤 프로그램에 사용될 데이터인지 구분할 수 없다.
비연결성
- 수신 대상의 현재 상태에 상관없이 데이터를 전송한다.
비신뢰성
- 패킷이 소실되는 경우가 발생한다.
- 패킷의 손상여부를 송신, 수신측 모두 알 수 없다.
- 패킷의 순서가 뒤죽박죽이 되어 섞여서 들어오는 경우가 발생한다.
- 용량이 큰 데이터의 경우 패킷이 여러개로 나뉘어져 전송된다.
이와같은 문제점들을 해결해주는 것이 바로 TCP 프로토콜
TCP(Transmission Control Protocol)
서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜
- 3 Way HandShake
최소한의 논리적인 연결을 통하여 연결이 되었다고 가정

- SYN (Synchronize)
- 클라이언트가 서버에게 연결을 요청하는 첫 번째 단계
- 클라이언트는 서버에게 "연결을 시작하고 싶다"는 의사를 나타내기 위해 SYN 플래그가 설정된 패킷을 전송한다.
- 패킷에는 시퀀스 번호도 포함되어 있고 데이터 전송 순서를 관리할 준비를 한다.
- ACK (Acknowledge)
- 서버가 클라이언트의 SYN 패킷을 받고, 이를 확인했다는 신호를 보내는 단계
- 서버는 클라이언트의 SYN 요청을 수락하며, 자신도 연결을 시작하고 싶다는 뜻을 담아 SYN 플래그와 함께 ACK 플래그가 설정된 패킷을 클라이언트에게 전송한다.
- 이때, 서버는 클라이언트의 시퀀스 번호에 1을 더한 값을 ACK로 응답한다.
- SYN 접속 요청
- ACK 요청 수락 → ACK가 없다면 연결 실패
- ACK → ACK 함께 데이터 전송 가능
- 데이터 전송 여부
TCP를 통해 통신하면 데이터를 잘 받았다는 응답을 반환해준다. - 패킷 순서
패킷이 나뉘어져 올지라도 순서를 보장한다.
UDP(User Datagram Protocol)
비연결형, 신뢰성이 없는 전송 프로토콜
현대에서는 실시간성 보장이 중요하기 때문에 UDP를 많이 사용하는 추세이다.
ex) 실시간 스트리밍 서비스, 온라인 게임, 인터넷 전화
특징
- 3 way handshake를 하지 않는다.
데이터 전송, 응답, 순서를 보장하지 않음(비신뢰성) - 추가적인 기능이 거의 없고 연결을 하지 않는 대신 속도가 빠르다.
- IP와 차이점으로 PORT 가 존재한다.
TCP에도 PORT가 존재한다. - 데이터 무결성 검사 → **체크섬(Checksum)**을 포함하고 있다.
잘못된 데이터가 전송되지 않도록 만들어준다.
PORT
같은 IP 내에서 프로세스 구분을 하기 위해서 사용
현재 전송하고자 하는 패킷이 어떤 곳에 필요한 패킷인지 IP만으로는 해결이 되지 않는데, 이때 프로그램을 구분하기 위해 사용되는 것이 바로 PORT이다.
TCP/IP Packet 구조
→ 소스 PORT, 대상 PORT를 포함한다.
Web 기초
DNS(Domain Name System)
사람이 읽을 수 있는 도메인 이름을 컴퓨터가 읽을 수 있는 IP 주소로 변환한다.
URI(Uniform Resource Identifier)
인터넷 자원(Resource)을 나타내는 고유 식별자(Identifier)
URL(Uniform Resource Locator)
프로토콜을 포함한, 자원(Resource)의 위치
용어 모음집
JSON (JavaScript Object Notation)
클라이언트와 서버가 통신할 때 사용하는 데이터 양식
클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고받을 수 있도록 만들어준다.
- snake_case, camelCase 모두 사용 가능
- key-value 형태로 구성
- null, number, string, array, object, boolean 형태의 데이터를 사용할 수 있다.
Scale Up, Scale Out
서버의 성능 향상을 위한 두가지 방법
Scale Up
- 수직적 확장
- 단일 서버의 하드웨어의 사용을 높인다.
- 요청에 대한 처리를 더욱 빠르게 할 수 있도록 만든다.
Scale Out
- 수평적 확장
- 같은 사양의 서버(인스턴스)를 여러 대 배치
- 동시에 더 많은 사용자 요청을 처리할 수 있도록 만든다.
Stateful, Stateless
클라이언트와 서버간의 통신 상태(state) 유지 여부에 따라 나뉘는 특성
Stateful(상태 유지)
클라이언트의 상태를 유지
Stateless(무상태)
클라이언트의 상태를 유지하지 않음
Connection, Connectionless
클라이언트와 서버 간의 연결(Connection) 유지 여부에 따라 나뉘는 특성
Connection(연결)
서버는 클라이언트와 연결을 유지하기 위해서 자원을 소모한다.
Connectionless(비연결)
클라이언트와 서버는 연결을 유지하지 않고 서버는 최소한의 자원만을 사용한다.
HTTP 지속연결(Persistent Connections)
하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지한다.
'TIL' 카테고리의 다른 글
| TIL 241031 (0) | 2024.10.31 |
|---|---|
| TIL 241030 (1) | 2024.10.30 |
| TIL 241028 (0) | 2024.10.28 |
| TIL 241025 (0) | 2024.10.25 |
| TIL 241024 (0) | 2024.10.24 |