Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: [Network] HTTP 개관(2) #23

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Feat: [Network] HTTP 개관(2) #23

wants to merge 2 commits into from

Conversation

sna0e
Copy link
Contributor

@sna0e sna0e commented Jan 5, 2025

개요

  • HTTP 완벽 가이드에서 다루게 될 모든 내용에 대해 정리해보았습니다. (일부러 간략히 적었습니다)
  • 1장은 개관이라 빠르게 넘어갔어도 되는데 너무 힘주고 읽은 것 같네요 ㅠㅜ
  • 1장은 스르륵 읽어주시고 차주부터 올라올 2장부터 힘써서 봐주시면 감사하겠습니다!!

체크리스트

  • [v] PR 제목을 Commit Convention에 맞게 작성
  • [v] Label 추가
  • [v] 리뷰어 팀 등록했나요?
  • [v] Assignee 등록했나요?

@sna0e sna0e added the Network label Jan 5, 2025
@sna0e sna0e self-assigned this Jan 5, 2025
Copy link

@thinkjin99 thinkjin99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HTTP의 개괄적인 내용을 잘 정리해주셨습니다.
더 고민해볼만한 부분들도 다뤄주시면 좋을 것 같아요

Network/Intro_HTTP.md Show resolved Hide resolved
Network/Intro_HTTP.md Show resolved Hide resolved
Network/Intro_HTTP.md Show resolved Hide resolved

## 7. 웹의 구성요소

1. Proxy : c 와 s 사이의 HTTP 중개자
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c와 s가 아니어도 c와 c, s와 s 사이에서 동작하는 서버도 프록시라고 할 수 있을까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c와 s가 아니어도 c와 c, s와 s 사이에서 동작하는 서버도 프록시라고 할 수 있을까요?

네! 프록시는 일반적으로 "중개 역할" 을 합니다. 데이터 중계, 변환, 필터링 등등을 하는 시스템을 프록시라고 부른다고 합니다. 따라서 c-c, s-s 에서도 프록시 기능이 있습니다!

예시를 찾아보니

  • c - c : P2P 네트워크, NAT 우회하여 두 클라이언트 연결
  • s - s : API Gateway, 여러 서버로의 요청 관리 및 요청을 적절한 서버에 전달
    이 있네요

Comment on lines +104 to +106
3. gateway : 다른 서버들의 중개자
- 주로 HTTP 트래픽을 다른 protocol 로 변환
- e.g. HTTP/FTP gateway
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

게이트웨이와 프록시의 차이가 뭘까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

게이트웨이와 프록시의 차이가 뭘까요?

프록시의 종류 중 하나가 게이트웨이 입니다! 특히 HTTP -> 다른 protocol 로 변환하는 역할을 하는 프록시를 게이트웨이라고 합니다!

Copy link
Contributor

@chaeyeon0130 chaeyeon0130 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

http에 대한 전반적인 요약 정리 감사합니다! 수고하셨습니당

Comment on lines +75 to +82
- 웹 브라우저가 HTTP 를 이용해 서버의 HTML 리소스를 가져오는 방법
a) 웹 브라우저 : 서버의 URL 에서 Host Name 추출
b) 웹 브라우저 : 서버의 Host Name -> IP 변환
c) 웹 브라우저 : URL 에서 Port num 추출 (있을 시)
d) 웹 브라우저 : 웹 서버와 TCP Connection
e) 웹 브라우저 : 서버에 HTTP request 전송
f) 서버 : 웹 브라우저에 HTTP response 전송
g) 웹 브라우저 : Connection 닫히면, HTML 리소스를 사용자에게 보여줌
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

클라이언트/서버 통신 과정에 있어 정적 리소스, 동적 리소스 간에 차이가 있나요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

클라이언트/서버 통신 과정에 있어 정적 리소스, 동적 리소스 간에 차이가 있나요?

오! 저도 이게 궁금해서 찾아봤는데요,

  1. 정적 리소스 : 서버에 미리 준비된 파일
  • e.g. HTML, CSS, JS 파일, 이미지 파일 ,동영상 파일
  • 변하지 않는 데이터, cache-friendly (리소스 변경이 없으므로 캐싱에 적합)
  • 예시 요청 : /style.css -> s가 파일을 찾음, c로 HTTP 응답 + 파일 전송
  1. 동적 리소스 : 요청 시마다 서버에서 생성되거나 가공된 데이터
  • 로그인한 사용자 이름, 사용자 맞춤형 콘텐츠, 실시간 API 응답 (주식 데이터)
  • 요청마다 변한 데이터, 캐싱 어렵 (요청마다 응답 달라짐)
  • 예시 요청 : 사용자가 검색창에 HTTP 입력 후 검색 -> 브라우저가 /search?query=HTTP 요청 -> 서버가 DB 조회해 검색 결과를 생성 -> 검색 결과를 포함한 HTML 브라우저에 반환

Comment on lines +86 to +92
- HTTP protocol 의 여러 버전을 잘 다루기 위해 HTTP 애플리케이션이 열심히 일해야 함!

1. HTTP/0.9
2. HTTP/1.0
3. HTTP/1.0+
4. HTTP/1.1
5. HTTP/2.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 어떤 버전이 가장 많이 사용되나요? 해당 버전은 어떤 이유로 주로 쓰이고 있나요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 어떤 버전이 가장 많이 사용되나요? 해당 버전은 어떤 이유로 주로 쓰이고 있나요?!

HTTP/1.1 이 가장 많이 쓰이는 버전이라고 합니다.
그 이유는,

  1. 대부분의 웹 s 와 c 가 HTTP/1.1 을 기본적으로 지원 -> 호환성 문제 최소
  2. 오랜 기간 동안 사용 -> 안정적이고 효율적인 작업 가능
  3. 새로운 버전은 성능 향상과 기능 추가가 목표, 기존의 인프라와 호환성 문제 야기, 완전한 전환에 시간 소요

입니다. 향후에는 성능 향상과 효율성을 제공하는 HTTP/2 같은 버전이 (안정화된다면) 사용이 증가할 것으로 보인다고 합니다!

Comment on lines +101 to +103
2. cache : 자추 찾는 웹페이지 사본을 c 근처에 저장하는 HTTP 창고
- 특별한 종류의 HTTP Proxy s
- 용도 : 빨리, 효율적 동작 & 프라이버시 보호
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

캐시된 사본의 원본이 변경되면 캐시는 어떻게 최신 상태를 유지하나요??

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

캐시된 사본의 원본이 변경되면 캐시는 어떻게 최신 상태를 유지하나요??

우선, 캐시 업데이트는 해당 리소스를 요청할 때만 이루어집니다.

크게 3가지의 방식으로 캐시가 최신 상태를 유지한다고 합니다.

  1. Cache Expiration 캐시 만료
  • HTTP 헤더에 명시된 리소스 유효기간 활용하여 사용
  • s 설정 : Cache-Control or Expires 헤더
  1. Cache Validation 캐시 유효성 검사
  • 만료된 리소스나 유효기간이 명시되지 않은 리소스에 대해 변경 여부 확인 (ask ot s)
  • s 가 원본 리소스 변경 여부 알려주면 캐시가 최신 상태로 갱신
  • 캐시된 리소스의 만료 or 서버가 유효성 검사 요구시 ETag, Last-Modified 설정
  1. Forced Refresh 강제 갱신
  • 기존 캐시 무시하고 서버에서 최신 리소스 요청
  • user 가 브라우저에서 강제 새로 고침 or c 가 Cache-Control: no-cache 요청 헤더 사용

일반적으로 : Cache Expiration -> Cache Validation 흐름, Forced 는 요청에 의해서만 발생

저의 추가 질문 : 그렇다면, 리소스 유효기간 전에 업데이트 되면 캐시 업데이트는 어케 되나?

  1. 캐시 만료일이 지나지 않았는데, 리소스가 업데이트 되었을 경우, 캐시된 리소스는 변경 사항을 자동으로 반영 X
  2. 그러나 캐시 유효성 검사는 작동 가능 (if 캐시된 리소스의 만료되지 않았을 경우)
  • c : 캐시 유효성 검사(If-Modified-Since / If-None-Match) 요청
  • s : Etag or Last-Modified 정보 확인, 리소스 변경시 200 OK 와 함께 변경 리소스 변환 -> 캐시 최신화

입니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants