From 5a9cff2e80ee89b6d37c997ef1e7109d395b76d7 Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Thu, 4 Jul 2024 19:09:43 +0900 Subject: [PATCH 1/9] Create haechan.md --- "7\354\236\245-\354\272\220\354\213\234/src/haechan.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "7\354\236\245-\354\272\220\354\213\234/src/haechan.md" diff --git "a/7\354\236\245-\354\272\220\354\213\234/src/haechan.md" "b/7\354\236\245-\354\272\220\354\213\234/src/haechan.md" new file mode 100644 index 0000000..8b13789 --- /dev/null +++ "b/7\354\236\245-\354\272\220\354\213\234/src/haechan.md" @@ -0,0 +1 @@ + From f343f397af073b50601fb45a5abdef44b24d90cc Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Thu, 4 Jul 2024 19:10:28 +0900 Subject: [PATCH 2/9] Create haechan.md --- .../src/haechan.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" diff --git "a/8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" "b/8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" new file mode 100644 index 0000000..8b13789 --- /dev/null +++ "b/8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" @@ -0,0 +1 @@ + From 89c82c5ea387d2ccf2356d537f3f573a6315e2c0 Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Fri, 5 Jul 2024 19:40:05 +0900 Subject: [PATCH 3/9] Create README.md --- .../README.md" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "7\354\236\245-\354\272\220\354\213\234/README.md" diff --git "a/7\354\236\245-\354\272\220\354\213\234/README.md" "b/7\354\236\245-\354\272\220\354\213\234/README.md" new file mode 100644 index 0000000..c3442b9 --- /dev/null +++ "b/7\354\236\245-\354\272\220\354\213\234/README.md" @@ -0,0 +1,41 @@ +## 캐시 +- 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치 +- 웹 요청이 캐시에 도달했을 때, 캐시된 로컬 사본이 존재할 경우 그 문서는 원 서버가 아니라 그 캐시로부터 제공된다. +
+ +### 캐시 처리 단계 +1. 요청 받기: 커넥션을 통해 활동 감지하고, 들어오는 데이터를 읽어들인다. +2. 파싱: 캐싱 소프트웨어가 쉽게 처리할 수 있도록 헤더 부분을 조작하기 쉬운 자료 구조에 담는다. +3. 검색: 로컬 사본이 있는지 검사한다. +4. 신선도 검사: 사본의 유효 기간을 체크한다. 유효 기간이 지났을 경우 서버로부터 유효 기간을 재검사받는다. +5. 응답 생성: 캐시된 서버 응답 헤더를 토대로 응답 헤더를 생성한다. +6. 전송: 캐시는 응답을 클라이언트에게 돌려준다. +7. 로깅 +
+ +### 캐시 적중과 부적중 +- 캐시 적중: 캐시 사본이 존재하는 것. +- 캐시 부적중: 캐시 사본이 존재하지 않아 원 서버로 요청을 전달하는 것. +
+ +### 사본을 신선하게 유지하기 +1. 문서 만료 확인하기: Cache-Control, Expires 헤더 확인 +2. 조건부 메서드 사용하기(재검사): If-Modified-Since1(날짜), If-None-Match2(ID). +
+ +- 재검사: 캐시 사본이 유효한지 서버로부터 검사받는 것. +- 재검사 결과 캐시 사본이 유효하다면(느린 적중) 크기가 작은 304 Not Modified 응답을 받는다. +- 캐시 사본이 유효하지 않다면 크기가 큰 200 OK 응답을 받는다. +- 서버에 원본이 삭제되었다면 404 Not Found 응답을 받는다. 이 경우 캐시는 사본을 삭제한다. +
+ +### 캐시 제어 +1. no-cache: 항상 서버로부터 재검사받는다. +2. no-store: 캐시 사본조차 만들 수 없다. +3. max-age: 리소스의 유효 기간(단위: 초). 이 기간이 지나면 재검사를 진행한다. +4. Expires: 만료 날짜. +5. Must-Revalidate: 캐시 사본이 유효하지 않은 경우 반드시 재검사한다. +

+ +1클라이언트 요청의 If-Modified-Since 헤더와 서버 응답의 Last-Modified 항목을 비교한다.
+2클라이언트 요청의 tag(If-None-Match 헤더)와 서버 응답의 ETag를 비교한다. HTTP/1.1은 캐시 사본을 무효화하지 않으면서 문서를 수정하도록 하는 약한 검사기 기능을 지원한다.
From 25c269219a6a2f0b6dcf95cedbfccc8f41e9f1a4 Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Fri, 5 Jul 2024 19:40:35 +0900 Subject: [PATCH 4/9] =?UTF-8?q?Delete=207=EC=9E=A5-=EC=BA=90=EC=8B=9C/src/?= =?UTF-8?q?haechan.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "7\354\236\245-\354\272\220\354\213\234/src/haechan.md" | 1 - 1 file changed, 1 deletion(-) delete mode 100644 "7\354\236\245-\354\272\220\354\213\234/src/haechan.md" diff --git "a/7\354\236\245-\354\272\220\354\213\234/src/haechan.md" "b/7\354\236\245-\354\272\220\354\213\234/src/haechan.md" deleted file mode 100644 index 8b13789..0000000 --- "a/7\354\236\245-\354\272\220\354\213\234/src/haechan.md" +++ /dev/null @@ -1 +0,0 @@ - From 451592f5bac70f15a4547b569163b0cce8fc112e Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Fri, 5 Jul 2024 19:40:51 +0900 Subject: [PATCH 5/9] =?UTF-8?q?Delete=208=EC=9E=A5/=ED=86=B5=ED=95=A9?= =?UTF-8?q?=EC=A0=90:=20=EA=B2=8C=EC=9D=B4=ED=8A=B8=EC=9B=A8=EC=9D=B4,=20?= =?UTF-8?q?=ED=84=B0=EB=84=90,=20=EB=A6=B4=EB=A0=88=EC=9D=B4/src/haechan.m?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/haechan.md" | 1 - 1 file changed, 1 deletion(-) delete mode 100644 "8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" diff --git "a/8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" "b/8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" deleted file mode 100644 index 8b13789..0000000 --- "a/8\354\236\245/\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/src/haechan.md" +++ /dev/null @@ -1 +0,0 @@ - From 6b69d4dfbc794640380a757bd489c241cceaf3a1 Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Fri, 5 Jul 2024 20:05:32 +0900 Subject: [PATCH 6/9] Update README.md --- "7\354\236\245-\354\272\220\354\213\234/README.md" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/7\354\236\245-\354\272\220\354\213\234/README.md" "b/7\354\236\245-\354\272\220\354\213\234/README.md" index c3442b9..0603848 100644 --- "a/7\354\236\245-\354\272\220\354\213\234/README.md" +++ "b/7\354\236\245-\354\272\220\354\213\234/README.md" @@ -1,4 +1,5 @@ -## 캐시 +## 7장 - 캐시 +### 캐시 - 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치 - 웹 요청이 캐시에 도달했을 때, 캐시된 로컬 사본이 존재할 경우 그 문서는 원 서버가 아니라 그 캐시로부터 제공된다.
From ef70f044dffdc284c56e7f786947763f93a9b99c Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Fri, 5 Jul 2024 20:06:38 +0900 Subject: [PATCH 7/9] Create README.md --- .../README.md" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/README.md" diff --git "a/8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/README.md" "b/8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/README.md" new file mode 100644 index 0000000..f64d934 --- /dev/null +++ "b/8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/README.md" @@ -0,0 +1,37 @@ +## 8장 - 통합점: 게이트웨이, 터널, 릴레이 +### 게이트웨이 +- 리소스와 애플리케이션을 연결하는 역할 +- 동적인 콘텐츠를 생성하거나 데이터베이스에 질의를 보낼 수 있다. +- HTTP 트래픽을 다른 프로토콜로 자동으로 변환한다. +
+ +### 프로토콜 게이트웨이 +- 프로토콜 사이에 변환 기능 +- 클라이언트가 브라우저를 통해 명시할 수도 있고, 서버가 리버스 프록시로 사용할 수도 있다. +
+ +1. HTTP/* : 서버 측 웹 게이트웨이 +2. HTTP/HTTPS : 서버 측 보안 게이트웨이 +3. HTTPS/HTTP : 클라이언트 측 보안 가속 게이트웨이 +
+ +### 리소스 게이트웨이 +- 애플리케이션 서버는 게이트 웨이와 목적지 서버를 한 개의 서버로 결합하고 클라이언트와는 HTTP로 통신한다.
+Ex. 공용 게이트웨이 인터페이스(CGI), 서버 확장 API +
+ +### 애플리케이션 인터페이스 +- 애플리케이션 간에 정보를 공유할 수 있게 하는 메커니즘. HTTP 같은 표준 웹 기술 위에서 개발한다.
+Ex. XML(eXtensible Markup Language), SOAP(Simple Object Access protocol) +
+ +### 터널 +- HTTP를 사용하여 HTTP 프로토콜을 지원하지 않는 애플리케이션에 접근할 수 있게 한다. +- HTTP CONNECT 메서드를 사용해서 커넥션을 맺고 Raw 데이터를 전송한다. +- 터널 게이트웨이는 데이터를 감시할 수 없으므로 80이나 443과 같은 잘 알려진 포트로만 터널링할 수 있게 해야 한다. +
+ +### 릴레이 +- HTTP 명세를 완전히 준수하지 않는 간단한 HTTP 프락시 +- HTTP 커넥션을 맺고, 바이트를 전달한다. +- Connection 헤더를 제대로 처리하지 못해서 keep-alive 커넥션이 행(hang)에 걸리는 문제점이 있다. From cb921c97842c445fe9b49b50c0fa36da23d6b1cb Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Fri, 5 Jul 2024 20:43:50 +0900 Subject: [PATCH 8/9] Create QA.md --- .../QA.md" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "7\354\236\245-\354\272\220\354\213\234/QA.md" diff --git "a/7\354\236\245-\354\272\220\354\213\234/QA.md" "b/7\354\236\245-\354\272\220\354\213\234/QA.md" new file mode 100644 index 0000000..bb00aff --- /dev/null +++ "b/7\354\236\245-\354\272\220\354\213\234/QA.md" @@ -0,0 +1,31 @@ +## 7장 - 캐시 +### (찬규) [캐시 버스팅](https://toss.tech/article/smart-web-service-cache) +- 의도적인 캐시 무효화. +- 빌드 마다 이름 바꾸기 등. +
+ +### (찬규) 캐시 만료 기한은 얼마로 설정하는게 적절할까? +- 자주 바뀌는 건 몇 초 단위. +- 일반적으로는 분 단위. +- 거의 변하지 않는 데이터는 하루나 이틀. +
+ +### (연진) Must-Revalidate에서 유효성 검사를 하는 이유? +- 처음에는 무조건적으로 서버에 재검사를 받는다고 생각했음 +- 알고 보니 유효하지 않은 사본은 반드시 재검사하지만, 유효한 사본은 그냥 반환하는 것이었음. +
+ +### (연진) Must-Revalidate vs no-cache +- 일반적으로, 유효하지 않은 사본이라도 네트워크가 안되면 그냥 반환한다. +- 하지만 Must-Revalidate를 절대로 유효하지 않은 사본을 반환하지 않는다. +
+ +### (민지) no-cache와 max-age=0의 차이점 +- 대부분의 브라우저에서 동일한 뜻을 가진다. +- HTTP/1.0에는 no-cache가 없었기 때문에 max-age=0을 이용하곤 했다 +- no-cache = (max-age=0) + must-revalidate. (max-age=0은 네트워크가 안될때 유효하지 않은 사본을 반환할 수 있다) +
+ +### (민지) only-if-cached인데 캐시 사본이 없으면? +- 서버에 요청 자체를 보내지 않는다. +- 오프라인 모드에 활용되기도 한다. From b699861086bf85d44669fcc535df3f5ce016b57e Mon Sep 17 00:00:00 2001 From: Im Haechan Date: Fri, 5 Jul 2024 20:45:00 +0900 Subject: [PATCH 9/9] Create QA.md --- .../QA.md" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/QA.md" diff --git "a/8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/QA.md" "b/8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/QA.md" new file mode 100644 index 0000000..02249e2 --- /dev/null +++ "b/8\354\236\245-\355\206\265\355\225\251\354\240\220: \352\262\214\354\235\264\355\212\270\354\233\250\354\235\264, \355\204\260\353\204\220, \353\246\264\353\240\210\354\235\264/QA.md" @@ -0,0 +1,15 @@ +## 8장 - 통합점: 게이트웨이, 터널, 릴레이 +### (연진) 네트워크 게이트웨이와 애플리케이션 게이트웨이의 차이점 +- 네트워크 게이트웨이: 주로 네트워크 통신에서 사용되는 용어로, 로컬 네트워크(예: LAN)와 외부 네트워크(예: 인터넷) 사이에서 트래픽을 중계하는 장치. +- 애플리케이션 게이트웨이: 주로 애플리케이션 레벨에서 사용되는 용어로, 클라이언트와 백엔드 서버 사이에서 트래픽을 중계하고 다양한 기능을 제공하는 소프트웨어나 하드웨어. +
+ +### (연진) SSL 터널링을 사묭할떄 전송되는 프로토콜도 TCP 위에서 동작해야 할까? +- SSL 터널링을 사용하여 다른 프로토콜을 전송할 때, 그 위의 프로토콜은 일반적으로 TCP 위에서 동작하는 프로토콜이어야 한다. +- SSL/TLS 터널링은 TCP 연결을 설정하고 이후 SSL/TLS 핸드셰이크를 통해 보안 연결을 수립하는 방식으로 동작한다. +
+ +### (민지) 게이트웨이 vs 프록시 +- 프록시도 리다이렉팅을 통해 프로토콜 게이트웨이처럼 동작할 수 있다. +- API 게이트웨이를 검색해보면 혼용되는 걸 봐선 비슷한 역할인 것 같다. +- [참고 자료](https://velog.io/@dasa/내가-필요해서-정리-Proxy-vs-Gateway에-대해)