📕 웹서버 (web server)
웹 서버가 어떻게 동작하는지 기본적인 구성에 대해 정리한다.
👉 웹 서버 구조
웹서버는 기본적으로 client & server 구조로 되어있다. IO bus의 disk처럼 연결되어 가상메모리의 데이터를 읽고 쓴다.
👉 네트워크 구조
네트워크는 계층 구조를 이룬다.
👉 프로토콜
네트워크를 이루는 물리적 환경은 정말 다양하다. (ex. 와이파이, 블루투스) 하지만, 밑단이 바뀐다고 데이터가 다 바뀌지 않도록 규약을 만들어 놓아 같은 레이어끼리 연결이 되도록 한다.
- naming scheme(호스트 주소)
- delievery mechanism(패킷)(헤더와 payload)
으로 이루어져 있다.
👉 IP주소
네트워크 장비들 고유의 식별 번호
IPv4 = 32bit의 ip 주소 -> 도메인 주소로도 통용된다.
IPv6 = 128bit의 ip 주소
도메인주소는 DNS에서 제공된다.
👉 포트
16bit integer
네트워크 서비스나 프로세스를 식별하는 번호
- ephemeral port : 자동으로 주어지는 포트
- well-known port : 특정 서비스를 위한 포트
-> 80 : web server (http)
-> 7 : echo (echo)
-> 22 : ssh
-> 25 : email (http)
👉 소켓
네트워크를 경유하는 프로세스 간 연결의 끝점이다. file descriptor로 볼 수 있다.
를 담고 있다.
👉 소켓 인터페이스
- getaddrinfo : 내부의 ip주소 등 정보, 도착지의 ip주소(client입장) 등의 정보를 소켓 구조체에 담음
- socket : 소켓 식별자를 생성한다.
- bind : 커널에 서버의 소켓주소와 소켓식별자를 연결 요청함
- listen : 클라이언트 대신 커널에 소켓 사용을 요청함, 소켓 식별자에서 listen 소켓으로 변환
- accept: 클라이언트로 부터 request를 받고 connection file descriptor를 할당시킴
listening 식별자는 서버와 클라이언트 연결 요청의 끝점이다.
connected 식별자는 서버와 클라이언트의 연결의 끝점이다. 서버가 acept 될 때마다 생성되면, 서버의 처리와 전송이 끝나면 사라진다.
- connect : 소켓주소로 서버와 연결하려 시도함
👉 URL
Universial resource loacation
- 주소 : 정보의 위치가 어디인지
- suffix : 파일이름
👉 MIME
컨텐츠 타입의 표준 포맷
👉 웹컨텐츠
- Static contents: 서버의 디스크 파일은 가져와 클라이언트에게 보낸다.
- Dynamic contents: 서버의 실행파일을 실행시켜 그 결과를 클라이언트에게 보낸다.
-> cgi(common gateway interface) : 웹서버에서 임의의 프로그램을 실행할 수 있도록 하는 기술 중 하나
-> fork를 통해 child 프로세스를 생성시킨다. child 프로세스는 식별자 테이블을 복사하고, 파일 테이블은 공유한다.
👉 HTTP 구성요소
- HTTP 요청 : Method URI version
-> methods: GET, POST, OPTIONS, HEAD, PUT, DELETE, TRACE
-> URI : 파일이름, 추가 argument
-> version : HTTP 버젼
요청 헤더: header-name: header-data
-> 서버에 브라우저 정보, MIME 등 추가적인 정보를 보낸다.
- HTTP 응답 : version status-code status-message
-> version : HTTP 버젼
-> status code : 상태 정보
-> status message : 상태 메시지