일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- TFX
- chatGPT
- BANDiT
- 네트워크
- BERT
- 클라우드자격증
- 플랫폼
- 머신러닝
- nlp
- transformer
- 자연어처리
- HTTP
- MSCS
- 중국플랫폼
- 추천시스템
- aws자격증
- MAB
- BERT이해
- 클라우드
- COFIBA
- 미국석사
- AWS
- 메타버스
- Collaborative Filtering Bandit
- 머신러닝 파이프라인
- RecSys
- llm
- MLOps
- docker
- 언어모델
- Today
- Total
Julie의 Tech 블로그
웹, HTTP - (1) HTTP 개괄, URL에 대하여 본문
HTTP, Hypertext Transfer Protocol의 약자이다.
HTTP는 웹브라우저, 서버, 웹 어플리케이션 간의 대화 언어이다.
많은 사람들이 웹에서 수많은 이미지와 동영상, 음성 파일 등을 조회한다.
HTTP는 이러한 대량의 정보를 빠르게 서버로부터 웹브라우저까지 전달하는 역할을 한다.
이러한 전송 과정에서 데이터가 손상되거나 잘못 전달되지 않도록 안전하게 배달해야한다.
웹에 표기되는 컨텐츠는 웹 서버에 저장되어 있다. 이 서버는 보통 HTTP 프로토콜로 통신하기 때문에 HTTP서버라고도 불린다.
사람들은 웹 브라우저인 크롬이나 인터넷 익스플로러 등으로 HTTP 클라이언트를 사용한다.
HTTP는 여러 타입의 데이터를 전송해야하기 때문에, 전송되는 객체에 MIME 타입을 붙이게 된다.
MIME 타입이란 객체의 종류를 구분하는 데이터 포맷 라벨인데, 예를 들어
- HTML로 작성된 텍스트 문서 : text / html
- JPEG 이미지 : image / jpeg
- GIF 이미지 : image / gif
이렇게 주 타입 / 부 타입으로 구성되어 있다.
클라이언트에서는 웹 서버에 저장되어있는 특정 리소스에 대해 접근할 수 있다.
이 접근을 위해서는 URI(uniform resource identifier)를 이용하는데, HTTP가 이 URI로 객체를 반환하게 된다.
ex. www.blog.naver.com/ilovelatale/page=1/julie.gif
URI에는 URL과 URN으로 나뉘어진다.
- URL : 요즈음 대부분 URI, 리소스에 대한 구체적인 위치를 알려줌, 앞선 예시도 URL에 해당. 스킴/인터넷주소/리소스로 구성
* http://www.yahoo.com/images/logo.gif (http:// - 스킴, www.yahoo.com - 인터넷 주소, /images/logo.gif - 리소스)
- URN : uniform resource name으로, 유니크한 이름 역할이다. 위치가 바뀌더라도 URN으로 접근할 수 있다.
* RFC 2141이라는 인터넷 표준문서가 URN 주소를 이용한다 - 어디에 있건, 얼마나 복사되었던 무관하게 접근 가능
HTTP 프로토콜은 HTTP 메서드를 이용하여 서버가 취해야하는 동작을 알려준다.
- PUT, GET, DELETE, POST, HEAD
HTTP프로토콜이 요청을 서버에게 보내면, 응답을 받게 되는데, 상태코드와 함께 반환된다.
- 200 : Succeess
- 302 : 다른 곳에서 리소스를 가져가라는 의미
- 404 : 리소스가 발견되지 않음. 없음
이에 덧붙여 reason phrase도 같이 보내게 되는데, 아래에 한 번쯤은 봤을법한 예시들을 나열했다.
- 200 OK, 200 Document attached, 200 Success ...
HTTP 네트워크 프로토콜 스택은 아래와 같다.
HTTP는 어플리케이션 계층 프로토콜로, TCP/IP를 흔히 사용하는데, 각각은 전송/네트워크 계층 프로토콜이다.
일단 TCP커넥션이 맺어지면, 클라이언트-서버 간의 메시지가 오류가 발생하거나/순서가 맞지 않거나/손상되는 일은 없다고 한다.
HTTP클라이언트가 서버와 메시지 전송을 하기 전, IP주소와 포트넘버를 통해 TCP/IP 커넥션을 맺게 된다.
클라이언트에서 입력한 URL로 DNS서버에스 IP로 반환되고, 포트 넘버는 지정되지 않는 이상 80 포트로 연결하게 된다.
이렇게 TCP/IP커넥션을 맺게 되면 HTTP요청을 통해 응답을 받게 되고, 커넥션이 닫히면 클라이언트는 웹브라우저에 컨텐츠를 보여준다.
* HTTP 프락시 서버란
HTTP 프락시 서버는 보안과 성능 최적화를 수행하는 중요한 역할을 한다.
HTTP 프락시 서버란 클라이언트-서버 사이에 위치하여 클라이언트의 HTTP요청을 대신 받아 서버로 전달한다.
중개자 역할을 함으로써 요청과 응답을 필터링하는 역할을 한다.
예를 들어 다운로드된 콘텐츠에 대한 바이러스 탐색이나 콘텐츠 내용물 필터링도 가능하다.
URL은 앞서 살펴보았듯이 인터넷의 리소스를 탐색하는 데에 필요하다.
일반적으로 HTTP프로토콜을 사용하지만, 다른 프로토콜을 사용하기도 한다. (FTP, mailto 등)
앞서 잠깐 언급되었듯이 '스킴://서버위치/경로' 구조로 되어있다.
URL문법은 스킴에 따라 조금씩 달라진다. 하지만 대부분 비슷하다. 일반적으로 아래와 같이 9개 부분으로 나뉘는데,
스킴://사용자이름:비밀번호@호스트:포트/경로;파라미터?질의#프레그먼트
파라미터는 key=value로 ;로 구분하여 여러 개를 입력할 수 있다.
경로 조각마다 파라미터를 다르게 구분할 수 있다.
예) ...com/hammers;sale=false/index.html;graphics=true
질의도 마찬가지로 key=value로 &로 연결하여 질문하게 된다.
프래그먼트는 리소스를 더 잘게 나누어, 예를 들어 긴 텍스트에서 문단마다 접근할 수 있도록 설정되어있을 경우
#이름 으로 접근할 수 있다. 예를 들어 웹 페이지의 drills라는 구간에 접근하려면,
ex. http://www.joes-hardware.com/tools.html#drills 로 입력하면 접근할 수 있다.
URL은 상대 URL과 절대 URL로 나뉜다.
상대 URL은 프래그먼트이거나 URL의 일부이다. 단축된 URL과 같은 것인데, 예를 들어
http://www.joes-hardware.com/tools.html이라는 기저 URL에
./hammers.html이라는 상대 URL이 있다면 절대 URL인 http://www.joes-hardware.com/hammers.html로 재구성할 수 있다.
다음편에서는 HTTP 메시지와 커넥션 관리에 대해 알아볼 것이다.
참고도서
'Tech' 카테고리의 다른 글
Docker, getting-started with Python (0) | 2021.05.15 |
---|---|
웹, HTTP - (2) HTTP 메시지와 커넥션 (0) | 2021.05.14 |
컨테이너 개념 이해 - (1) 가상화 (0) | 2021.05.14 |
인프라 구조 - 안정성과 성능 (0) | 2021.05.14 |
인프라 아키텍쳐 구조와 기초 용어에 대해 (0) | 2021.05.14 |