이 글은 김영한 강사님의 강의를 참조하여 작성하였습니다.
사실 URI 안에는 URL과 URN 모두 들어간다.
Uniform: 리소스 식별하는 통일된 방식
Resource: 자원, URI 를 식별할 수 있는 모든 것
Identifier: 다른 항목과 구분하는데 필요한 정보
URL _location...
- 더 자주 쓰임
- 리소스가 있는 위치를 뜻함
URN _name...
- 리소스에 이름 부여
- 이름은 잘 변하지 x
=> 강사님께서는 URI와 URL을 같은 선상에서 보신다고 하셨다.
주로 프로토콜 사용
- 프로토콜? 어떤 방식으로 자원에 접근할 것인가 하는 약속
(ex http-80 포트, https = 443 포트.. )- 포트 생략 가능
- 호스트명
- 도메인 명 or ip 주소
- 포트
- 생략 가능
- 리소스 경로
- 구조를 뜻함
ex) /members -> 리소스가 members 아래에 경로임
/members/100 -> members 아래의 100번째? 100번 등 계층 구조에 따라 정보는 달라짐.
- key = value 형태
- ?로 시작, &으로 이어서 추가 가능함
ex) key1=valueA&keyB=valueB..- query parameter, query string 등으로 불린다.
-> 애초에 key value 형식이 string타입으로 들어가는지라
이런 식으로 메소드의 타입/ 계층 구조 등을 담아 요청을 보냄
- 웹 브라우저로부터 패킷으로 감싸여진 'HTTP 요청 메시지' 곧, 요청 패킷을 받은 서버는 패킷을 벗긴 후 메시지를 확인한다.
- 응답을 위해 서버는 'HTTP 응답 메시지'를 패킷에 감싸 전송한다(응답 패킷).
- 웹 브라우저는 응답 패킷을 받아 TCP/IP 패킷을 벗기고 HTML 본문 그대로 브라우저에 렌더링해 화면에 보여준다.
우선 HTTP는 뭘까?
그것에 대해선 간단히 정의하고 들어가자
HTTP 프로토콜(The Hypertext Transfer Protocol)은 이름 그대로, hypertext 를 전송하기 위한 프로토콜이다.
- hypertext : 인터넷 상에서 서로 연결될 수 있는 형태를 지닌 문서
이젠 HTTP 메시지에 모든 것을 담을 수 있다.
현재는 HTTP/1.1 을 가장 많이 사용하며 HTTP/2와 3의 경우 성능을 개선한 버전이다.
- TCP: HTTP/1.1, HTTP/2
- UDP: HTTP/3
요청(Request)과 응답(Response)의 형태로 이제 클라이언트와 서버가 확실하고 본인의 역할을 가져 명확히 구분되어 있다.
[중간에 서버에 문제가 생기면]
Stateless의 경우 상태를 기억(보관)하지 않고, 매번 클라이언트에서 요청을 받아서 응답하기 때문에
다른 서버로 전달하여 응답할 수 있다.
그에 반하여 Stateful의 경우 이에 대처할 수 없다는 단점이 있다.
=> Stateless로 개발을 하면 좋지만...!!
=> 물론 한계는 있다. 😥😥
매번 연결을 새로 맺거나 다시 화면의 앞단(html,css, javascript)와 같은 자원을 다시 다운받아야 함...
=> 그래도 지금은 HTTP 지속연결로 문제를 해결했다.
1) GET
2) /search?q=hello&hl=ko
3) HTTP/1.1
1) HTTP/1.1 200 OK
2) Content-Type: text/html;charset=UTF-8
Content-Length: 3423
3)
<html>
<body>...</body>
</html>