[Jungle] Week7. HTTP, Proxy

somi·2024년 5월 3일
0

[Krafton Jungle]

목록 보기
46/68

WEEK 07. Keyword

File Descriptor

: 운영체제가 특정파일, 입출력 장치에 할당해준 정수값.
-> 운영체제가 파일에 접근하기 쉽게 번호로 추상화시킨 것.
-> 열린 파일이나 리소스를 식별하는데 사용되는 정수
실제로 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 떄 파일 디스크립터(FD) 값으로 파일에 접근

stdin(표준입력): 0 : 키보드로 명령을 입력받는 것
stdout(표준출력): 1 : 키보드로 입력받은 명령의 실행결과를 모니터로 출력
stderr(표준에러): 2 : 에러를 모니터로 출력
표준 디스크립터가 0~2까지 상수로 존재, 우리가 생성, 관리하는 파일 디스크립터는 3이상부터 사용 가능. 3부터 순차적으로 할당받는다.


Datagram Socket vs. Stream Socket

Stream socket(TCP Sockets): 연결형 소켓. 데이터를 연속적인 stream으로 전송.
신뢰성 있게 데이터 전송. 전송 순서 보장.

Datagram socket(UDP sockets): 비연결형 소켓. 데이터를 데이터그램 단위로 전송. 데이터그램은 독립적인 패킷으로 처리 -> 전송 순서 보장 x, 데이터 중복 및 손실 발생 가능


CGI, WebServer, MIME type

MIME(Multipurpose Internet Mail Extension)

MIME으로 인코딩한 파일은 Content-type 정보 앞부분에 담는다.
브라우저는 파일 확장자가 아니라 MIME type을 사용하여 URL 처리 방법 결정함.
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types

CGI(Common Gateway Interface)

웹서버와 외부 프로그램사이에서 정보를 주고받는 방법, 규약

CGI를 사용하지 않으면 사용자가 만든 애플리케이션을 단순한 HTML 형식의 정적 페이지를 보여줌.


HTTP(Hyper Text Transfer Protocol)

: 서버와 클라이언트가 서로 데이터를 주고받기 위해 사용되는 통신 규약

클라이언트 - HTTP Request -> Server
Server - HTTP Response -> Client

  • 주요 메소드

    GET: 요청 입장에서 데이터를 가져올 때. 단순히 데이터를 조회만 함 -> 호출해도 리소스가 변경되지 않음.
    POST: 데이터를 생성할 때. -> 요청시마다 데이터 생성
    PUT: 지정한 데이터 전부 수정, 해당 리소스가 없으면 생성
    PATCH: 리소스를 일부만 수정
    DELETE: 리소스 삭제

POST 메소드는 URL에 정보가 들어있지 않아 보안 측면에서 GET 방식이 더 안전할 수도 있다.

  • HTTP Method의 속성

    1. 안전(Safe): 호출해도 리소스가 변경되지 않는 성질 => GET
    2. 멱등(Idempotent): 연산을 여러번 적용해도 결과가 달라지지 않는 성질 => GET, PUT, DELETE
    3. 캐시 가능(Cacheable): 응답 결과 리소스를 캐싱해서 효율적으로 사용할 수 있는가
    => GET, POST, PATCH
  • HTTP의 무상태성(Stateless)
    : 서버에서 클라이언트의 상태를 저장하지 않음.
    장점: 서버 확장성 높음
    단점: 클라이언트 추가 데이터 전송
  • HTTP의 비연결성(Connectionless)
    : 서버와 클라이언트의 Connection 연결을 지속하지 않는다.
    HTTP/1.0을 기준으로 HTTP는 연결을 유지하지 않는 모델. -> 실제로 요청을 주고받을 때만 연결 유지, 응답을 주고 나면 TCP/IP 연결을 끊음.
    =>단점) 트래픽이 많고 규모가 큰 서비스인 경우 한계를 가짐 -> 요청시마다 TCP/IP 연결 (3 Way handshake), 종료를 반복하는 것이 비효율적

HTTP/1.1(현재 가장 많이 쓰이는 프로토콜 버전)이후 부터
=> HTTP 지속 연결(Persistent Connections)로 문제 해결: 연결이 이뤄지고 난 뒤에 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후 연결을 종료함.
지정한 timeout 동안 연속적인 요청 사이에 커넥션 닫지 않음.

HTTP 상태 코드

Stateful vs. Stateless

Stateful: 서버가 클라이언트의 상태를 보존함
Stateless: 서버가 클라이언트의 상태를 보존하지 않음 -> UDP, HTTP

  • stateless 특징을 유지하면서도 로그인 상태 유지를 가능하게 하는 기술 => JWT 토큰

Proxy


클라이언트와 서버 중간에 위치, 클라이언트는 프록시 서버를 서버로, 서버는 프록시 서버를 클라이언트로 인식하게 됨.
=> 중복되는 데이터를 반복하여 전달한다면? 리소스 낭비와 서버의 부하
=> 본 서버에 도달하기 전에 새로운 Proxy server를 미리 배치하여 중복 요청에 대해 동일한 응답을 할수 있다면
클라이언트에겐 빠른 속도의 서비스를, 서버에게는 불필요한 부하를 줄이는 효과를 낼 수 있음

  • 데이터 전송 시간, 외부 트래픽 감소, 네트워크 병목 현상을 방지할 수 있음
  • 위험이 예상되는 컨텐츠나 악성 코드를 필터링함으로써 클라이언트 측 보안 향상
  • 회사나 중요 기관에서는 보안 유지를 위해 내부 통신과 외부 데이터 접근을 통제하기 위해 혹은, 인터넷 이용률 통계 수집을 위해 사용하기도 함
  • 사용자는 역으로 자신의 웹 서핑 기록을 익명화하기 위해 웹 프록시를 사용하기도 함.

Forward Proxy

우리가 흔히 말하는 프록시 서버는 포워드 프록시 서버

프록시 서버는 클라이언트 바로 뒤에 놓여있음. 클라이언트는 타겟 서버의 주소를 포워드 프록시에 전달, 포워드 프로시가 인터넷으로 요청된 내용을 가져옴.
장점:
1. 클라이언트 보안; 방화벽 같은 개념으로 제한을 위해 사용. 특정 사이트에 접속하는 것을 막을 수 있음
2. 캐싱(임시 보관): 프록시 서버는 해당 페이지 서버 정보를 캐싱. -> 4명의 클라이언트가 똑같은 페이지에 접근할 때, 프록시 내에 캐싱된 페이지를 그대로 불러오면 훨씬 빠름.
3. 암호화 -> 클라이언트 요청은 포워드 프록시서버를 통과할 때 암호화됨. -> 클라이언트 IP를 감춰주는 보안 효과 -> IP 추적을 해도 포워드 프록시의 서버 IP만 보이게 됨.

Reverse Proxy


웹서버/WAS 앞에 놓여 있는 것
클라이언트는 웹 서비스 접근할 때 웹 서버가 아닌 프록시로 요청. 프록시가 배후(Reverse의 서버로부터 데이터를 가져옴.

리버스 프록시 서버를 DMZ(내부망/외부망 둘 다 접근할 수 있는 공간)에 두고 실제 서비스 서버는 내부망에 위치시킨 후 서비스 하는 것이 일반적

장점: 로드 밸런싱(Load Balancing) : 리버스 프록시 서버를 여러 개의 본 서버 앞에 두면 특정 서버가 과부하되지 않게 로드 밸런싱 가능.



MAC 주소, IP 주소, DNS

주민등록 번호 -> MAC 주소
이름 -> IP
별명 -> DNS (www.naver.com)

실질적인 통신은 바꿀 수 없는 하드웨어 주소인 MAC address를 통해서 하고 논리적인 IP 주소는 라우팅(최적의 경로 찾기)를 하기 위한 주소

  • MAC 주소: Data Link 계층
    통신기기의 하드웨어 자체에 부여된 고유한 식별 번호. 컴퓨터 간 데이터를 전송하기 위한 컴퓨터의 물리적 주소.
    NIC(Network Interface Card - 흔히 LAN 카드)에 고유하게 할당됨
  • IP 주소: 네트워크 계층
    컴퓨터 네트워크에서 장치들이 서로 인식하고 통신하기 위해 사용하는 특수한 번호
    -> 집에서 사용하던 노트북을 밖에 가져가면 ip 주소는 바뀌지만 NIC는 바뀌지 않으므로 Mac address는 동일.

Web Server

client가 브라우저 주소창에 url을 입력하여 어떤 페이지를 요청하면 http 요청을 받아들여 Html 문서와 같은 정적인 콘텐츠를 사용자에게 전달
-> 정적인 콘텐츠(HTML, CSS, 이미지 등)을 제공하는 서버
HTTP 프로토콜을 이용해 클라이언트에게 웹 페이지 제공

WAS(Web Application Server)

: Web Server + Web Container
=> 동적인 요청(웹 어플리케이션)을 처리하고 제공하는 서버 - 어플리케이션을 돌리고 DB를 연결하고 어떤 로직을 수행해서, 데이터를 전달할 수 있음!
웹 애플리케이션 실행 및 데이터 처리, 웹 서버와 클라이언트 간의 중계 역할


참고) https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP%EC%9D%98-%EB%A9%B1%EB%93%B1%EC%84%B1-%C2%B7-%EC%95%88%EC%A0%95%EC%84%B1-%C2%B7-%EC%BA%90%EC%8B%9C%EC%84%B1-%F0%9F%92%AF-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

https://80000coding.oopy.io/2352c04e-8f98-4695-a5fe-8c789ee94d98

profile
📝 It's been waiting for you

0개의 댓글