📚 프로토콜(Protocol) : 컴퓨터 간에 데이터를 주고받기 위해 정한 통신규약.
📚 인터넷 프로토콜 IP(Internet Protocol) : 인터넷 네트워크에서 정보를 수신, 송신하는 통신에 대한 규약
📚 IP 주소 : 각 기기 간의 통신을 식별하는 전화번호. 지정한 IP 주소에 데이터를 Packet 단위로 전달
📚 Packet : 소스 IP(출발지), 대상 IP(도착지)를 포함하므로 어떤 컴퓨터에 데이터를 전송할지 판별 가능

📌 IP 방식의 문제점
애플리케이션 구분 : 대상 컴퓨터의 어떤 프로그램에 사용될 데이터인지 구분 불가

비연결성 : 수신 대상의 현재 상태에 상관없이 데이터를 전송

비신뢰성 : 패킷 소실 발생, 손상여부를 알 수 없으며 순서가 뒤죽박죽 섞여서 들어오는 경우 발생
❗ 용량이 큰 데이터는 패킷이 여러개로 나뉘어져 전송됨
👉 패킷 손실, 오류 발생 시에도 데이터를 재전송하지 않음 → TCP 프로토콜로 해결


Ⅰ. TCP(Transmission Control Protocol)
📚 서버와 클라이언트 간 데이터를 신뢰성 있게 전달하는 프로토콜
3 Way HandShake : 물리적으로 연결X, 최소한의 논리적 연결을 통해 연결 되었다고 가정하는 것

SYN (Synchronize)
ACK (Acknowledge)
1. SYN 접속 요청
2. ACK 요청 수락 → ACK가 없다면 연결 실패.
3. ACK → ACK 함께 데이터 전송 가능


💡TCP는 신뢰성이 있지만 연결 과정, 데이터 전송에 시간이 많이 소요되며 현재 단계 이상의 최적화가 힘듬
(최소한의 논리적 연결이 필요) → 3 way handshake 과정을 거치기에 속도가 느림
Ⅱ. UDP(User Datagram Protocol)
📚 비연결형, 신뢰성 없는 전송 프로토콜. 현대에는 UDP를 많이 사용함 HTTP3
실시간 통신이나 스트리밍에서 중요한 빠른 전송 충족을 위해 개발됨
비신뢰성TCP에도 PORT가 존재함잘못된 데이터 전송 방지Ⅲ. PORT
📚 같은 IP 내에서 프로세스 구분을 위해 사용. IP 주소가 같을 때 패킷의 도착지를 식별하는 방법

👉 PORT는 아파트 호수와 같은 역할

📌 자주 사용되는 PORT
FTP - 20, 21 (TCP)SSH - 22 (TCP)텔넷 - 23 (TCP)SMTP - 25 (TCP)DNS - 53 (TCP/UDP)DHCP - 67 (UDP)HTTP - 80 (TCP)HTTPS - 443 (TCP)RDP - 3389 (TCP/UDP)Ⅰ. DNS(Domain Name System)
📚 사람이 읽는 도메인 이름을 컴퓨터가 읽는 IP 주소로 변환


https://naver.com 등의 도메인 형태로 웹에 접속. URL이 DNS를 활용한 예Ⅱ. URI(Uniform Resource Identifier)
📚 인터넷 자원(Resource)을 나타내는 고유 식별자(Identifier)
💡 ISBN (International Standard Book Number) : 국제 표준도서번호
URI(Uniform Resource Identifier)
URL(Uniform Resource Locator)
URN(Uniform Resource Name)
💡 현재 대부분은 대중화된 URL을 사용하여, URI를 URL과 같은 의미로 사용
Ⅲ. URL 구조
⭐ scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
ex) https://www.google.com:443/search?q=스파르타+코딩클럽
http, https, ftp를 주로 사용.http**s**는 http에 보안(Secure)을 추가한 것포트는 일반적으로 생략ex) 프로토콜://쇼핑몰주소/products/macbookProex) https://nbcamp.spartacodingclub.kr/backendex) ?key1=value1**&**key2=value2**&**key3=valueex) http://www.google.com/index.html#imageⅣ. 브라우저에 URL 입력시 요청이 흘러가는 순서
https://www.google.com:443/search?q=스파르타+코딩클럽&hl=ko URL 입력
DNS 서버를 조회하여 www.google.com 에 해당하는 IP 주소를 응답받음
👉 포트 번호는 생략. https에서 사용되는 PORT는 443
웹 브라우저에서 HTTP 요청 메세지를 생성
요청 패킷(HTTP 메세지 포함)을 구글 서버로 전송
구글 서버에서 HTTP 요청 메세지를 기반으로 응답 HTTP 메세지를 만들어 응답
응답패킷 도착 → HTML 응답

_ 언더바로 이어줌. 모든 단어는 소문자나 대문자- 대시로 이어줌. 모든 단어는 소문자📌 Java의 명명법

📚 클라이언트와 서버간 통신시 사용하는 데이터 양식.
클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고받도록 해줌


{
"user": [
{
"first_name": "wonuk",
"last_name": "Hwang",
"age": 100,
"phone_agree": false,
"hobby": ["Java", "Spring"]
},
{
"firstName": "sparta",
"lastName": "Team",
"age": 200,
"phone_agree": true,
"hobby": ["React", "Spring", "Node"]
},
]
}snake_case, camelCase 모두 사용 가능. Application 내에서 변환해주는 무엇인가가 있다.key-value 형태로 구성null, number, string, array, object, boolean 형태의 데이터 사용가능📚 서버의 성능 향상을 위한 두 가지 방법
1. Scale Up : 수직적 확장

2. Scale Out : 수평적 확장
📚 클라이언트와 서버간의 통신 상태(state) 유지 여부에 따라 나뉘는 특성
1. Stateful : 클라이언트의 상태 유지

2. Stateless : 클라이언트의 상태를 유지하지 않음
Stateless 방식의 실제 요청방식

장점 : 같은 서버 유지 불필요, Scale Out 수평 확장성 높음, 갑자기 요청량이 증가해도 서버 증설 쉬움
단점 : 클라이언트가 데이터를 추가적으로 전송해야 함. 전송되는 데이터의 양이 많아짐
한계점 : WebApplication을 만들때 서버의 확장성을 고려하여 최대한 Stateless하게 만들어야 함
→ 실제로는 로그인처럼 상태 유지가 필요함 → Cookie, Session, Token 등으로 한계 극복
📚 클라이언트와 서버 간의 연결(Connection) 유지 여부에 따라 나뉘는 특성
1. Connection(연결)

2. Connectionless(비연결)
ex) 브라우저가 켜진 상태에서 인터넷이 종료되어도 홈페이지는 정상노출👉 HTTP 지속연결(Persistent Connections)
ex) HTML 요청 + CSS 요청 + JS 요청 + 이미지 요청