HTTP와 서블릿, 서블릿 컨텍스트 - (1). HTTP(HyperText Transfer Protocol)

Shiba·2023년 11월 6일
0

📝정리 노트

목록 보기
1/4
post-thumbnail

스프링 MVC에 대해 공부하던 중 서블릿에 대한 이해가 부족한 것 같아서 Http부터 서블릿, 서블릿 컨텍스트까지 이어서 정리를 해보기로 하였다.

📧 HTTP란 무엇인가?

위키백과에는 다음과 같이 적혀있다

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다.
예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력장치를 통해 사용자에게 나타나는 것이다.
HTTP를 통해 전달되는 자료는 http:로 시작하는 URL로 조회할 수 있다.

글로 보니 복잡해보이니 그림으로 보면서 살펴보도록 하자

  1. 클라이언트가 HTTP형식으로 정보를 요청
  2. 서버가 요청을 받고, 그에 맞는 정보를 HTTP형식으로 응답
  3. 서버가 보내준 정보를 클라이언트인 웹 브라우저가 모니터에 렌더링

더 쉽게 실생활에서 예를 들어보자면 문서나 A/S와 같은 자신이 필요한 것을 위해 동사무소, 고객센터, 은행과 같은 곳에서 양식을 작성하고, 그 양식을 토대로 정보를 처리하여 해당 문서나 A/S를 받는 경우가 존재하는데, 여기서 양식이 바로 HTTP인 것이다.

  1. 필요한 것을 얻기 위해 해당되는 곳에 맞는 양식(HTTP)을 작성
  2. 그 양식을 토대로 필요하다는 문서나 A/S를 제공

🧾 HTTP의 구조

위에서 보았듯이 HTTP는 통신을 위한 일종의 약속이다. 즉, 양식에 맞게 제출을 해주어야 서버가 정보를 처리할 수 있는 것이다. 그렇다면 HTTP는 어떠한 양식으로 서버에 보내지고, 클라이언트로 다시 전송되는 것일까?

📤 요청 메세지 (Request Message)

요청 메세지는 공백을 제외하고 세 가지로 나누어볼 수 있다

🔷 시작 라인 (start line)

HTTP Method, Request Target, HTTP Version으로 구성되어 있다.

HTTP Method
HTTP 요청시 보내는 HTTP 메소드 형태

  • GET : 자료를 요청할 때 사용
  • POST : 자료의 생성을 요청할 때 사용
  • PUT : 자료의 수정을 요청할 때 사용
  • DELETE : 자료의 삭제를 요청할 때 사용

Request Target
어디로 보내는지에 대한 사이트 주소(URL)

HTTP Version
HTTP 버전. 현재까지는 대부분이 HTTP/1.1

🔷 헤더 (Headers)

Host, User-Agent, Accept, Authorization, 기타 등등으로 구성되어 있다.

Host
호스트 URL

User-Agent
클라이언트 정보

Accept
서버에서 해당 타입에 데이터를 보내달라고 요청하는 헤더

Authorization
JWT 같은 인증 토큰을 서버로 보낼 때 사용하는 헤더

🔷 본문 (body)

위 예시는 GET 메소드를 사용해 따로 본문이 존재하지 않음.
(GET에도 body가 있는 경우가 존재하긴 하지만, GET방식의 body를 받지 못하는 서버가 존재해 권장하지는 않음)

📥 응답 메세지 (Response Message)

응답 메세지도 요청 메세지와 마찬가지로 공백을 제외하고 start line, header, body로 구성됨

🔷 시작 라인 (start line)

HTTP Version, Status Code, Status text로 구성되어 있다.

HTTP Version
응답이 온 메세지의 HTTP버전 정보

Status Code
상태 코드

  • 1XX (조건부 응답) : 요청을 받았으며, 작업을 계속한다.
  • 2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음
  • 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기위해 추가 동작을 취해야 한다
  • 4XX (요청 오류) : 클라이언트에 오류가 존재함
  • 5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음

Status text
응답 상태

🔷 헤더 (Headers)

Date, Content-Type, Cache-Control, 기타 등등으로 구성되어 있다.

Date
응답이 온 일시

Content-Type
응답 데이터의 타입

Cache-Control
캐시용 헤더

🔷 본문 (body)

요청에 대한 응답 값. 클라이언트가 주로 HTML을 요청하기 때문에 여기에 HTML이 담겨서 오게됨. 이 HTML을 웹 브라우저가 화면에 렌더링하는 것

❓ HTTPS란 무엇인가?

HTTP와 그 구조에 대해 살펴보았다. 하지만 우리가 방문하는 사이트들은 http:가 아닌 https:로 작성되어있다. https는 무엇이고, http와 어떤 차이점이 존재하며, 왜 https를 사용하는걸까?

🔐 HTTPS (HyperText Transfer Protocol Secure)

제목에서 알수있듯이 일반적인 HTTP에 'Secure', 즉 보안이 강화된 버전의 HTTP를 HTTPS라고 한다. 더욱 자세히 보자면 다음과 같다

HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 달리 443번 포트를 사용(HTTP는 80번 포트 사용)하며 네트워크상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.

🔒 HTTPS에서 사용하는 암호화 방식

🔑대칭키 암호화🔑

  • 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행
  • 키가 노출되면 매우 위험 - 동일한 키를 사용하기 때문
  • 연산속도가 빠름

🔑비대칭키 암호화🗝

  • 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화하는데 사용
  • 키가 노출되어도 비교적 안전함
    - 다른 하나의 키가 없으면 복호화가 불가능하기때문
  • 연산속도가 느림

⚙ HTTPS의 동작 과정

  1. 클라이언트가 서버에 연결시도
  2. 서버가 클라이언트에게 공개키 제공
  3. 클라이언트가 세션키를 생성
  4. 세션키를 공개키로 암호화
  5. 암호화한 세션키를 서버에 전달
  6. 서버는 개인키로 복호화하여 세션키를 얻음 (세션키 공유 완료)
    ⁕ 여기서 세션키는 대칭키 암호화방식을 사용하기 위해 전달한 것

    공유한 세션키를 통해 정보를 암호화하여 전달/복호화하여 처리하는 것을 반복

❓ 왜 HTTPS를 사용할까?

1. 보안

위에서 살펴보았듯이 HTTP는 보안이 취약하지만 HTTPS는 암호화를 통해 안전하게 웹 사이트를 사용할 수 있도록 함

2. 우선순위

위의 장점과 이어지는 것으로, 검색엔진은 HTTP보다 HTTPS의 신뢰성을 높게 평가하기때문에 웹사이트 콘텐츠의 순위를 높여 HTTP보다 더 앞쪽에 뜨도록 설정되어있다고 한다.

3. 성능

HTTPS 애플리케이션은 HTTP 애플리케이션보다 속도가 더 빠르다.
마찬가지로, HTTPS는 참조링크도 더욱 잘 추적한다.

⁕ 과거에는 HTTPS을 사용하기위해 보안관련 인증서가 필요했고, 여기서 비용이 청구되었다. 하지만 요즈음에는 무료로 인증서를 획득할 수 있는 소스가 존재한다.

마치며..

이로써 HTTP, 서블릿, 서블릿 컨텍스트 중 첫번째인 HTTP에 대해 정리해보았다.
HTTP가 무엇이고, 어떤 구조로 되어있는지에 대해 다시 한번 복기할 수 있는 기회가 되었으며, 작성 중에 궁금증이 생겼던 https에 대해서도 알게되었다.
바로 언어화가 되지않는 용어에 대해서 정리하는 습관을 지니도록 해야겠다.

📚 참고자료

HTTP 구조 정리 - 삽질중인 개발자
HTTP란 무엇인가?
[Web] HTTP와 HTTPS의 개념 및 차이점

profile
모르는 것 정리하기

0개의 댓글