시작하기 전에
저번에 TCP와 UDP를 살펴봤으니 HTTP로 넘어가 봅시다.
앞의 글에서 HTTP는 TCP/IP 4계층에서 응용 계층에 속한다고 언급했습니다. 출발해봅시다.
HTTP(HyperText Transfer Protocol)
2가지 특징이 있다:
1. 비연결성
- 클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는 것이다.
- 비연결성은 불특정 다수를 대상으로 한 서비스에 유리하다.
- 연결을 유지하지 않음으로써 자원을 아낄 수 있다.
- 하지만 클라이언트를 기억할 수 없다. 따라서 동일한 클라이언트에게 반복적인 요청이 오면 연결과 연결 해제를 반복해서 자원을 낭비할 수 있다.
- 이러한 단점을 극복하기 위해 일정 시간 동안 연결을 유지하는 HTTP Keep Alive가 있다. 클라이언트에서 HTTP 요청을 보낼 때 연결 헤더에 Keep Alive를 추가해서 보내면 된다.
2. 무상태(stateless)
- 서버에서 클라이언트의 상태를 저장하지 않는 것이다.
- 예를 들어, '아이스 아메리카노 한 잔 주세요'와 '카드로 할게요'라는 주문을 따로 하면 카드 요청 때는 클라이언트(손님)가 아이스 아메리카노를 주문했다는 것을 까먹는다. 따라서 '아이스 아메리카노 한 잔을 카드로 결제할게요.'라고 요청 사항을 모두 담아 하나로 물어봐야 한다.
- 클라이언트가 요청에 필요한 데이터를 모두 가지고 있거나 서버가 클라이언트로부터 받은 요청 사항을 모두 저장해야 한다.
이를 각각 쿠키(cookie)와 세션(session)이라고 한다. - 서버 확장성이 좋다는 장점이 있다. 클라이언트의 요청에 응답하는 서버가 바뀌어도 되기 때문에 서버를 계속 확장해도 된다. 특정 서버에 문제가 생겨 응답하지 못하는 문제점도 보완할 수 있다.
HTTP에서는 클라이언트와 서버가 메시지를 주고받을 때 정형화된 형식인 HTTP 메시지를 주고받는다.
구조는 다음과 같다:
- 요청 라인: 요청 URI, 요청 방법, HTTP 버전 등을 포함한다.
- 상태 라인: 요청에 대한 HTTP 상태 코드와 HTTP 버전을 포함한다.
- 헤더(header): 키-값으로 구성된 다수의 헤더 항목으로 구성된다.
- 빈 줄: 헤더의 끝을 나타내고, 헤더와 바디를 구분한다.
- 바디(body): 요청 방법 메서드가 POST인 경우만 바디가 있고, 그 외 메서드에서는 비어 있다.
HTTP 상태 코드란, 클라이언트의 요청에 대한 서버의 상태를 알려 주는 코드다. 세 자리 숫자이며, 시작 숫자로 의미를 알 수 있다.
- 1xx: 클라이언트로부터 요청을 받아 처리 중
- 2xx: 요청을 성공적으로 처리함
- 3xx: 요청 처리를 위해 추가 처리 필요
- 4xx: 클라이언트 오류
- 5xx: 서버 오류
자주 나오는 HTTP 상태 코드:
- 200: 요청을 성공적으로 처리함
- 401: 인증되지 않음
- 403: 접근 실패
- 404: 클라이언트에서 요청한 자원을 찾지 못함
- 500: 서버 내부 오류 발생
정리하고 싶었던 HTTP를 정리했다.
우리는 HTTP보다 HTTPS를 더 자주 볼 것이다. 이건 뭘까?
HTTPS(HyperText Transfer Protocol Secure)
보안 계층 SSL/TLS를 이용해 HTTP의 보안을 강화한 웹 통신 프로토콜이다.
HTTP는 데이터 암호화를 거치지 않아서 보안에 취약하다.
SSL(Secure Socket Layer) 암호화 프로토콜이 몇 가지 문제점이 있어, 이를 보완한 TLS(Transport Layer Security)가 등장했다.
현재 HTTPS에서는 TLS가 통용되고 있다.
- 데이터를 송신 시 응용 계층에서 보안 계층으로 데이터를 보내면 SSL/TLS가 데이터를 암호화해 전송 계층으로 전달한다.
- 데이터를 수신 시 전송 계층에서 보낸 데이터를 보안 계층의 SSL/TLS에서 받아 복호화한 후 응용 계층으로 전달한다.
SSL/TLS에는 암호화를 위해 2가지 암호화 방식, 대칭키 암호화 방식과 공개키 암호화 방식을 사용하는데 이는 앞에서 정리한 적이 있으니 넘어가도록 한다.
※ 대칭키 암호화 방식과 공개키 암호화 방식
※ 대칭키 암호화 방식과 공개키 암호화 방식
'SKT 유심 해킹 - 사건 정리' 글에서 정리했다:
https://hazel-nut-library.tistory.com/entry/CS-Study-SKT-%ED%95%B4%ED%82%B9-%EC%82%AC%EA%B1%B4
웹 통신 프로토콜들을 살펴봤으니 이제는 사용자가 URL을 입력했을 때 화면이 어떻게 나타나는 것인지를 알아보자.
웹 페이지 접속 과정
과정은 다음과 같다:
- 사용자가 URL을 웹 브라우저에 입력한다.
- 웹 브라우저는 입력한 URL을 바탕으로 DNS(Domain Name System) 서버에 연결할 IP를 요청한다.
- DNS 서버는 IP 주소를 웹 브라우저에게 응답으로 제공한다.
- 웹 브라우저는 DNS 서버에서 받은 IP를 통해 웹 서버와 TCP/IP 연결을 하고 HTTP 요청을 보낸다.
- 웹 서버는 받은 HTTP 요청에 웹 페이지와 필요한 리소스를 포함하여 응답한다.
- 웹 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지를 보여 준다.
HTTP 통신을 활용할 수 있는 대표적인 방법으로 REST가 있다. 또한 위에서 HTTP 매서드라는 워딩이 나왔다.
다음 글에서는 이를 알아보자.
'📖 Computer Science > 네트워크' 카테고리의 다른 글
[CS Study] 네트워크 (4) - REST (0) | 2025.05.08 |
---|---|
[CS Study] 네트워크 (2) - TCP와 UDP (0) | 2025.05.07 |
[CS Study] 네트워크 (1) - 네트워크 계층 (0) | 2025.05.06 |