File Descriptor
: 운영체제가 특정파일, 입출력 장치에 할당해준 정수값.
-> 운영체제가 파일에 접근하기 쉽게 번호로 추상화시킨 것.
-> 열린 파일이나 리소스를 식별하는데 사용되는 정수
실제로 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 떄 파일 디스크립터(FD) 값으로 파일에 접근
stdin(표준입력): 0 : 키보드로 명령을 입력받는 것
stdout(표준출력): 1 : 키보드로 입력받은 명령의 실행결과를 모니터로 출력
stderr(표준에러): 2 : 에러를 모니터로 출력
표준 디스크립터가 0~2까지 상수로 존재, 우리가 생성, 관리하는 파일 디스크립터는 3이상부터 사용 가능. 3부터 순차적으로 할당받는다.
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_typesCGI(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 동안 연속적인 요청 사이에 커넥션 닫지 않음.
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 계층IP 주소
: 네트워크 계층client가 브라우저 주소창에 url을 입력하여 어떤 페이지를 요청하면 http 요청을 받아들여 Html 문서와 같은 정적인 콘텐츠를 사용자에게 전달
-> 정적인 콘텐츠(HTML, CSS, 이미지 등)을 제공하는 서버
HTTP 프로토콜을 이용해 클라이언트에게 웹 페이지 제공
: 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