인터넷 브라우저(클라이언트) 와 서버가 데이터를 주고받는 통신 방법인 HTTP(HyperText Transfer Protocol) 는 결국,
Web 기반에서 동작하기 때문에 네트워크에 대한 지식이 필수
복잡한 인터넷 세상에서 컴퓨터와 컴퓨터끼리 데이터를 주고받기 위하여 정한 통신 규약
컴퓨터 네트워크 통신망
World Wide Web(WWW)
가 구축됨Packet
이라는 단위로 전달함소스 IP(출발지)
, 대상 IP(도착지)
를 포함하고 있어서 어떤 컴퓨터에 데이터를 전송할지 판별 가능헤더, 페이로드, 트레일러(수신여부 포함)
로 구분됨--> 위와 같은 IP 방식의 문제점들을 해결해주는 것 : TCP 프로토콜
신뢰성
있게 전달하기 위해 만들어진 프로토콜데이터 전송에 시간이 많이 소요됨
SYN 플래그가 설정된 패킷을 전송
패킷에는 시퀀스 번호도 포함
되어 있고, 데이터 전송 순서를 관리할 준비를 함SYN 요청을 수락
하며, 자신도 연결을 시작하고 싶다는 뜻을 담아 SYN 플래그와 함께 ACK 플래그가 설정된 패킷
을 클라이언트에게 전송시퀀스 번호에 1을 더한 값을 ACK 로 응답
HTTP3
에서 채택한 방식, HTTP에도 버전이 있음PORT
가 존재체크섬(Checksum)
을 포함하고 있음같은 IP 내에서 프로세스 구분을 위해 사용
ex ) 같은 IP 에서 동시에 여러가지 프로그램이 실행되고 있다면 IP 주소가 같으니, 패킷의 도착지를 식별하기 위해
인터넷 자원(Resource) 을 나타내는 고유 식별자(Identifier)
- Locator, Name 혹은 둘 다 추가로 분류될 수 있음
- 현재 대부분은 대중화된 URL을 사용하여, URI를 URL과 같은 의미로 사용한다.
프로토콜을 포함한, 자원(Resource)의 위치를 나타냄
- 일반적으로 도메인주소로 알려져있다.
- 프로토콜을 포함한다.(https://spartacodingclub.kr/)
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
https://www.google.com:443/search?q=스파르타+코딩클럽
http, https, ftp
를 주로 사용한다.http**s**
는 http
에 보안(Secure)을 추가한 것.리소스의 경로
계층 구조로 구성되어있다.
ex) 프로토콜://쇼핑몰주소/products/macbookPro
ex) https://nbcamp.spartacodingclub.kr/backend
key=value 형태로 구성된다.
Query Parameter, Query String 이라고도 한다.
?로 시작되고 &으로 구분된다.
ex) ?key1=value1**&**key2=value2**&**key3=value
html 내부 북마크 등에 사용한다.
- 전달받은 URL로 접속 시 특정 위치(fragment)로 이동할 수 있음
ex) http://www.google.com/index.html#image
https://spartacodingclub.kr/
사이트가 노출된다.https://spartacodingclub2.kr/
로 바꾼다면 기존 경로를 아는 사람들은 검색 페이지의 URL이 업데이트되지 않으면 페이지를 찾을 수 없다.클라이언트와 서버가 통신할 때 사용하는 데이터 양식
클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고받을 수 있도록 만들어줌
- 클라이언트 to 서버 통신
- 서버 to 서버의 통신
XML
- 과거 웹 초기 시절부터 사용됨
- 헤더와 태그 등의 여러 요소로 가독성이 떨어지고, 불필요한 용량을 잡아먹는다는 단점
이에 대응해 간결하고 통일된 양식으로 각광을 받고 있는 것이 JSON
아주 작은 단위로 서비스를 잘게 나누어 운영하는 아키텍처
해당 아키텍처를 가지게 되면 구성된 Application마다 어떠한 언어를 사용하는지에 상관없이 서로 통신을 할 수 있는데,
이것이 가능한 이유는 JSON 형태로 데이터 통신을 하기 때문
{
"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
모두 사용이 가능하다.key-value
형태로 구성되어 있다.null, number, string, array, object, boolean
형태의 데이터를 사용할 수 있다.