728x90

들어가기 앞서

  • 2023년 RIDI 개인정보 유출 사고 관련해서 CDN 서버 캐시 설정 오류 문제 발생
  • CDN 설정의 경우 여러 서비스 및 부서에서 활용하다보니 의도치 않게 오설정될 수 있는 가능성 존재
  • 결국 내부적으로 이런 오설정 문제를 방지할 필요가 있고, 이에 대한으로 API 서버에 Cache-Control: private 헤더를 추가하여 문제를 방지할 수 있음

 

Cache-Control

Cache-Control Header

The Cache-Control HTTP header field holds directives (instructions) — in both requests and responses — that control caching in browsers and shared caches (e.g. Proxies, CDNs).

  • Cache-Control은 브라우저 및 공유 캐시에 캐싱 동작을 지시하는 HTTP 헤더

 

Browser Cache

  • 브라우저 캐싱은 웹 브라우저에서 웹 사이트 리소스를 저장하여 서버에서 다시 가져오는 것을 방지
  • 예를 들어 웹 사이트의 배경 이미지를 캐시에 로컬로 저장하면 사용자가 해당 페이지를 두 번째로 방문할 때 이미지가 사용자의 로컬 파일에서 로드되므로 페이지가 훨씬 빠르게 로드

Shared cache

  • 서버와 클라이언트 사이에 존재하는 캐시 (e.g. Proxy, CDN)
  • 단일 응답을 저장한 후 여러 사용자에게 재사용 가능 (It stores a single response and reuses it with multiple users)
    • so developers should avoid storing personalized contents to be cached in the shared cache.

 

Cache directives

Request Response
max-age max-age
max-stale -
min-fresh -
- s-maxage
no-cache no-cache
no-store no-store
no-transform no-transform
only-if-cached -
- must-revalidate
- proxy-revalidate
- must-understand
- private
- public
- immutable
- stale-while-revalidate
stale-if-error stale-if-error

 

no-store / no-cache / private

no-store

The no-store response directive indicates that any caches of any kind (private or shared) should not store this response.

Cache-Control: no-store
  • 아무것도 캐싱하지 않음

 

no-cache

The no-cache response directive indicates that the response can be stored in caches, but the response must be validated with the origin server before each reuse, even when the cache is disconnected from the origin server.

Cache-Control: no-cache
  • 응답을 캐시에 저장할 수는 있지만, 오리전 서버와 연결이 끊어졌다면 재사용 전에 오리진 서버를 통해 확인(유효성 검사)를 진행해야 함

 

must-revalidate

The must-revalidate response directive indicates that the response can be stored in caches and can be reused while fresh. If the response becomes stale, it must be validated with the origin server before reuse.

  • 만료된 캐시만 서버에 확인하고, 만료되지 않은 캐시는 캐시에서 바로 사용 (no-cache 로직이 다름)

 

private

The private response directive indicates that the response can be stored only in a private cache (e.g. local caches in browsers).

Cache-Control: private
  • 브라우저와 같은 특정 사용자 환경에 한해 저장 가능

 

public

The public response directive indicates that the response can be stored in a shared cache. Responses for requests with Authorization header fields must not be stored in a shared cache; however, the public directive will cause such responses to be stored in a shared cache.

  • 공유 캐시(Proxy or CDN)에 저장 가능

 

cf-cache-status

  • cf-cache-status는 Cloudflare에서 제공하는 헤더로, 캐시 상태를 확인할 수 있음
  • cf-cache-status: DYNAMIC: 기본적으로 캐시를 사용하지 않음

 

Reference

728x90
728x90

IP 주소

  • 네트워크 상에서 유일하게 식별될 수 있는 컴퓨터 주소
  • 192.142.11.15 같이 숫자로 된 주소는 기억하기 어렵기 때문에 www.google.com과 같이 문자로 구성된 도메인 이름으로 바꿔서 사용 -> DNS(Domain Name System)
  • 윈도우의 경우 명령 프롬프트를 열어 ipconfig 명령을 통해 자신의 IP 주소를 확인할 수 있음

포트 (Port)

  • 통신하는 프로그램 간에 가상의 연결단
    - IP 주소를 통해 네트워크 상의 컴퓨터 또는 시스템을 식별하고
    - 포트 번호를 통해 통신할 응용 프로그램을 식별
  • 포트 번호 : MAC adress(호스트의 NIC 판별)와 IP adress(호스트 판별)를 통해
    상대 컴퓨터까지 데이터가 도달한 후, 데이터를 받을 프로세스를 식별하기 위해 포트번호 사용

URL (Uniform Resource Locater)

  • 인터넷 상의 자원에 대한 주소
  • 구조

 

 

728x90

'네트워크' 카테고리의 다른 글

TCP, UDP  (0) 2022.12.26
OSI 7계층  (0) 2022.12.26
728x90

본 글을 읽기 전에 OSI 7계층에 대해 먼저 알아보도록 하자

TCP(Transmission Control Protocol)

  • 송/수신 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공
  • IP의 비신뢰적인 최선형 서비스에다가 신뢰적인 연결지향성 서비스를 제공하게 됨
  • 신뢰적인 전송을 보장함으로써, 어플리케이션 구현이 한층 쉬워지게 됨
  • 신뢰성 있음 (Reliable)
  • 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
  • TCP 하위계층인 IP 계층의 신뢰성 없는 서비스에 대해 다방면으로 신뢰성을 제공
  • 연결지향적 (Connection-oriented)
  • 같은 전송계층의 UDP가 비연결성(connectionless)인 것과는 달리, TCP는 연결지향적임
  • 이 경우, 느슨한 연결(Loosly Connected)을 갖으므로 강한 연결을 의미하는 가상회선이라는 표현 보다는 오히려 연결지향적이라고 말함
  • 연결 관리를 위한 연결설정 및 연결해제 필요
  • 양단간 어플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통하여 서로 통신

UDP

  • 전송 계층의 통신 프로토콜의 하나 (TCP에 대비됨)
  • 신뢰성이 낮은 프로토콜로써 완전성을 보증하지 않으나,
  • 가상회선을 굳이 확립할 필요가 없고 유연하며 효율적 응용의 데이타 전송에 사용
  • 비연결성이고, 신뢰성이 없으며, 순서화되지 않은 Datagram 서비스 제공
  • 메세지가 제대로 도착했는지 확인하지 않음 (확인응답 없음)
  • 수신된 메세지의 순서를 맞추지 않음 (순서제어 없음)
  • 흐름 제어를 위한 피드백을 제공하지 않음 (흐름제어 없음)
  • 검사합을 제외한 특별한 오류 검출 및 제어 없음 (오류제어 거의 없음)
    UDP를 사용하는 프로그램 쪽에서 오류제어 기능을 스스로 갖추어야 함
  • 데이터그램 지향의 전송계층용 프로토콜 (논리적인 가상회선 연결이 필요없음)
    비연결접속상태 하에서 통신
  • 실시간 응용 및 멀티캐스팅 가능
  • 빠른 요청과 응답이 필요한 실시간 응용에 적합
  • 여러 다수 지점에 전송 가능 (1:多)
  • 헤더가 단순함
  • UDP는 TCP 처럼 16 비트의 포트 번호를 사용하나,
  • 헤더는 고정크기의 8 바이트(TCP는 20 바이트) 만 사용
    즉, 헤더 처리에 많은 시간과 노력을 요하지 않음

TCP vs UDP

  • 가장 큰 차이는 신뢰성과 연결성에 있음
  • TCP는 신뢰성 있고 연결지향적이지만 UDP는 신뢰성이 없고, 비연결적
  • TCP는 송신자-수신자 연결이 되어야 통신가능, UDP는 연결 없이도 통신 가능

TCP UDP 사용 예

  • TCP는 순서를 보장한다는 점과 신뢰도가 있다는 점에서 대부분의 HTTP 통신, 이메일이나 파일전송처럼 순서대로 도착해야 하는 상황에서 사용된다.
  • UDP는 순서는 보장해주지 못하지만 실시간으로 반응해야하는 실시간 동영상 플레이어나 게임, 혹은 DNS에서 사용. DNS의 경우 누군가 도메인을 쳤을때마다 그때 그때 서버와 클라이언트가 커넥션을 맺으면 속도가 느려지기 때문에 UDPf를 사용한다.

cf. 채팅에서 TCP를 사용하는 이유?
채팅에서 TCP를 사용하는 이유는 연결된 상태에서 순서대로 송신자와 수신자가 보낸 메세지를 그대로 전송할 수 있기 때문이다. 고로 양뱡향통신에 유리하다. (UDP는 그 순서를 보장해주지 못하기 때문이다.)

728x90

'네트워크' 카테고리의 다른 글

IP Address, Port, URL  (0) 2022.12.26
OSI 7계층  (0) 2022.12.26
728x90

OSI 7계층

  • 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것

목적

  • 흐름을 한 눈에 알아보기 쉽고, 문제 발생 시
    다른 층을 건들지 않고 문제가 발생한 곳만 고칠 수 있음.
  • 표준화를 통해 포트/프로토콜 문제 해결 -> 비용 절감
  • 계층별 기능과 통신 과정 정립을 통한 교육 목적

물리층(Physical Layer)

  • 전기적,기계적 특성을 이용해 통신 케이블로 데이터 전송
  • 데이터를 전기적인 신호로 변환 (비트 단위로 전송) (=전기적으로 On,Off)
  • 주요 장비 : 허브, 리피터, 케이블
    -> 케이블, 리피터, 허브를 통해 데이터를 전송
  • 물리적인 전송(물리적으로 직접 연결된 노드간의 전송)을 담당
  • 장치간 신뢰성 있는 정보를 전송 -> 에러 검출, 흐름 제어, 재전송
    ex. 데이터 전송 시 에러가 발생하면 DataLink층에서 검출하고, Transport층에서 에러를 수정
  • 전송되는 단위 : Frame
  • 주요 장비: 브리지, 스위치 (MAC address를 이용해서 통신)
  • 주요 프로토콜 : Ethernet(CSMA/CD), Token Ring, PPP, HDLC, ATM, LLC

-> 브릿지나 스위치를 통해 맥주소를 가지고 물리층에서 받은 정보를 전달
프레임에 주소 부여(MAC - 물리적 주소), 에러 검출, 흐름 제어, 재전송

네트워크층 (Network Layer)

  • 데이터를 목적지까지 가장 빠르게 전달하는데 목적 (라우팅)
  • 경로를 선택, 주소를 정하고, 경로에 따라 패킷을 전달 (IP를 주소 부여)
  • 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층
  • 전송되는 단위 : Packet
  • 주요 장비 : 라우터, L3 스위치(라우팅 기능이 장착된 스위치)
  • 주요 프로토콜 : IP, X.25

-> 패킷을 목적지까지 가장 빠르게 전달하는 것에 중점
에러는 상위계층에서 해결해 주기 때문에 신경X
IP 프로토콜 (신뢰성, 흐름제어 기능X) -> TCP 같은 상위 Transport층에 의존 (신뢰성 확보 위해)

전송층 (Transport Layer)

  • 양 끝단(End to End)의 사용자들이 신뢰성있고 정확한 데이터 전송을 담당
  • 보낼 데이터의 용량과 속도, 목적지 등을 처리하고, 통신을 활성화
  • 데이터가 잘 전송되고 있는지 확인하고, 에러가 발생하면 에러난 부분을 재전송 (TCP)
  • 시퀀스 넘버 기반의 오류 제어 방식 (세그먼트 관련)
  • 오류검출 및 복구, 흐름제어, 중복검사 수행
  • 전송되는 단위 : Segment
  • 주요 프로토콜 : TCP, UDP

세션층 (Session Layer)

  • 데이터가 통신하기 위한 논리적인 연결 (=포트 연결?)
  • 통신 세션을 구성하는 계층 (세션 설정, 유지, 종료, 전송 중단 시 복구 등)
  • 통신 장치간 상호작용 설정, 동기화, 통신을 관리하기 위한 방법 제공

표현층 (Presentation Layer)

  • 데이터의 형식을 정의
  • 서로 다른 환경의 컴퓨터, 프로그램들이 데이터를 서로 이해(번역)할 수 있도록 제공
  • 데이터의 인코딩, 디코딩, 암호화, 압축, 코드변환 수행

응용층 (Application Layer)

  • 사용자가 직접 눈으로 보고 실제로 작업하는 계층
  • 응용 프로서세와 관계하여 응용 서비스 수행 (ex. Telnet, SSH, SMTP, FTP, etc..)
  • 주요 프로토콜 : HTTP, FTP, SMTP

참고 사이트

728x90

'네트워크' 카테고리의 다른 글

IP Address, Port, URL  (0) 2022.12.26
TCP, UDP  (0) 2022.12.26

+ Recent posts