-
Notifications
You must be signed in to change notification settings - Fork 2
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
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
HTTP의 개괄적인 내용을 잘 정리해주셨습니다.
더 고민해볼만한 부분들도 다뤄주시면 좋을 것 같아요
|
||
## 7. 웹의 구성요소 | ||
|
||
1. Proxy : c 와 s 사이의 HTTP 중개자 |
There was a problem hiding this comment.
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 사이에서 동작하는 서버도 프록시라고 할 수 있을까요?
There was a problem hiding this comment.
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, 여러 서버로의 요청 관리 및 요청을 적절한 서버에 전달
이 있네요
3. gateway : 다른 서버들의 중개자 | ||
- 주로 HTTP 트래픽을 다른 protocol 로 변환 | ||
- e.g. HTTP/FTP gateway |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
게이트웨이와 프록시의 차이가 뭘까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
게이트웨이와 프록시의 차이가 뭘까요?
프록시의 종류 중 하나가 게이트웨이 입니다! 특히 HTTP -> 다른 protocol 로 변환하는 역할을 하는 프록시를 게이트웨이라고 합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
http에 대한 전반적인 요약 정리 감사합니다! 수고하셨습니당
- 웹 브라우저가 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 리소스를 사용자에게 보여줌 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
클라이언트/서버 통신 과정에 있어 정적 리소스, 동적 리소스 간에 차이가 있나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
클라이언트/서버 통신 과정에 있어 정적 리소스, 동적 리소스 간에 차이가 있나요?
오! 저도 이게 궁금해서 찾아봤는데요,
- 정적 리소스 : 서버에 미리 준비된 파일
- e.g. HTML, CSS, JS 파일, 이미지 파일 ,동영상 파일
- 변하지 않는 데이터, cache-friendly (리소스 변경이 없으므로 캐싱에 적합)
- 예시 요청 :
/style.css
-> s가 파일을 찾음, c로 HTTP 응답 + 파일 전송
- 동적 리소스 : 요청 시마다 서버에서 생성되거나 가공된 데이터
- 로그인한 사용자 이름, 사용자 맞춤형 콘텐츠, 실시간 API 응답 (주식 데이터)
- 요청마다 변한 데이터, 캐싱 어렵 (요청마다 응답 달라짐)
- 예시 요청 : 사용자가 검색창에 HTTP 입력 후 검색 -> 브라우저가
/search?query=HTTP
요청 -> 서버가 DB 조회해 검색 결과를 생성 -> 검색 결과를 포함한 HTML 브라우저에 반환
- HTTP protocol 의 여러 버전을 잘 다루기 위해 HTTP 애플리케이션이 열심히 일해야 함! | ||
|
||
1. HTTP/0.9 | ||
2. HTTP/1.0 | ||
3. HTTP/1.0+ | ||
4. HTTP/1.1 | ||
5. HTTP/2.0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현재 어떤 버전이 가장 많이 사용되나요? 해당 버전은 어떤 이유로 주로 쓰이고 있나요?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현재 어떤 버전이 가장 많이 사용되나요? 해당 버전은 어떤 이유로 주로 쓰이고 있나요?!
HTTP/1.1 이 가장 많이 쓰이는 버전이라고 합니다.
그 이유는,
- 대부분의 웹 s 와 c 가 HTTP/1.1 을 기본적으로 지원 -> 호환성 문제 최소
- 오랜 기간 동안 사용 -> 안정적이고 효율적인 작업 가능
- 새로운 버전은 성능 향상과 기능 추가가 목표, 기존의 인프라와 호환성 문제 야기, 완전한 전환에 시간 소요
입니다. 향후에는 성능 향상과 효율성을 제공하는 HTTP/2 같은 버전이 (안정화된다면) 사용이 증가할 것으로 보인다고 합니다!
2. cache : 자추 찾는 웹페이지 사본을 c 근처에 저장하는 HTTP 창고 | ||
- 특별한 종류의 HTTP Proxy s | ||
- 용도 : 빨리, 효율적 동작 & 프라이버시 보호 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
캐시된 사본의 원본이 변경되면 캐시는 어떻게 최신 상태를 유지하나요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
캐시된 사본의 원본이 변경되면 캐시는 어떻게 최신 상태를 유지하나요??
우선, 캐시 업데이트는 해당 리소스를 요청할 때만 이루어집니다.
크게 3가지의 방식으로 캐시가 최신 상태를 유지한다고 합니다.
- Cache Expiration 캐시 만료
- HTTP 헤더에 명시된 리소스 유효기간 활용하여 사용
- s 설정 :
Cache-Control
orExpires
헤더
- Cache Validation 캐시 유효성 검사
- 만료된 리소스나 유효기간이 명시되지 않은 리소스에 대해 변경 여부 확인 (ask ot s)
- s 가 원본 리소스 변경 여부 알려주면 캐시가 최신 상태로 갱신
- 캐시된 리소스의 만료 or 서버가 유효성 검사 요구시
ETag
,Last-Modified
설정
- Forced Refresh 강제 갱신
- 기존 캐시 무시하고 서버에서 최신 리소스 요청
- user 가 브라우저에서 강제 새로 고침 or c 가
Cache-Control: no-cache
요청 헤더 사용
일반적으로 : Cache Expiration -> Cache Validation 흐름, Forced 는 요청에 의해서만 발생
저의 추가 질문 : 그렇다면, 리소스 유효기간 전에 업데이트 되면 캐시 업데이트는 어케 되나?
- 캐시 만료일이 지나지 않았는데, 리소스가 업데이트 되었을 경우, 캐시된 리소스는 변경 사항을 자동으로 반영 X
- 그러나 캐시 유효성 검사는 작동 가능 (if 캐시된 리소스의 만료되지 않았을 경우)
- c : 캐시 유효성 검사(If-Modified-Since / If-None-Match) 요청
- s :
Etag
orLast-Modified
정보 확인, 리소스 변경시200 OK
와 함께 변경 리소스 변환 -> 캐시 최신화
입니다!
개요
체크리스트