11.5 웹 서버

11.5 웹서버 11.5.1 웹 기초 Clients 와 servers 는 HyperText Transfer Protocol(HTTP)를 사용하여 의사소통한다. Client와 server는 TCP 연결을 설립한다. client는 컨텐츠(content)을 요구한다(request) server는 요청된 컨텐츠에 응답한다(respond). client와 서버는 연결을 끊는다(결국 언젠가는) 11.5.2 Web content 웹 서버는 **컨텐츠(content)**를 client에게 반환한다. content : 연관된 MIME(Multipurpose Internet Mail Extension) 타입을 갖는 바이트 배열 ex. MIME 타입의 예시 text/html HTML document text/plain Unformatted text image/gif Binary image encoded in GIF format image/png Binary image encoded in PNG format image/jpeg Binary image encoded in JPEG format Static and Dynamic content HTTP 응답에서 반환된 컨텐츠는 **정적(static)**일수도 **동적(dynamic)**일수도 있다. ...

2023년 4월 16일 · 8 분 · 배준수

TINY Web Server

11.6 종합 설계: 소형 웹 서버 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 /* * tiny.c - A simple, iterative HTTP/1.0 Web server that uses the * GET method to serve static and dynamic content */ #include "csapp.h" void doit(int fd); void read_requesthdrs(rio_t *rp); int parse_uri(char *uri, char *filename, char *cgiargs); void serve_sattic(int fd, char *filename, char *cgiargs); void get_filetype(char *filename, char *filetype); void serve_dynamic(int fd, char *filename, char *cgiargs); void clienterror(int fd, char *cause, char *errnum, char *shortmsg, char *longmsg); int main(int argc, char **argv) { int listenfd, connfd; char hostname[MAXLINE], port[MAXLINE]; socklen_t clientlen; struct sockaddr_storage clientaddr; /* Check command-line args */ if (argc != 2) { fprintf(stderr, "usage: %s <port>\n", argv[0]); exit(1); } listenfd = Open_listenfd(argv[1]); while (1) { clientlen = sizeof(clientaddr); connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen); Getnameinfo((SA *) &clientaddr, clientlen, hostname, MAXLINE, prot, MAXLINE, 0); printf("Accepted connection from (%s, %s)\n", hostname, port); doit(connfd); Close(connfd); } } TINY main 반복실행 서버로 명령줄에서 넘겨받은 포트로의 연결 요청 듣는다. ...

2023년 4월 16일 · 8 분 · 배준수

CSAPP 11단원 공부

CHAPTER 11. 네트워크 프로그래밍 웹 검색, 이메일 메시지, 온라인 게임 등 모두가 네트워크 응용을 사용 11.1 클라이언트-서버 프로그래밍 모델 모든 네트워크 응용 프로그램은 Client-server 모델에 기초 : 1개의 server process + 1개 이상의 client process로 구성 SERVER : 일부 리소스를 관리, 조작해서 Client를 위한 일부 서비스를 제공 예시 웹 서버 : 디스크 파일들을 관리, CLIENT를 대신해서 이들을 가져오고 실행 FTP 서버 : CLIENT를 위해 저장하고 읽어오는 디스크 파일들 관리 이메일 서버 : CLIENT를 위해서 읽고 갱신하는 스풀 파일 관리 CLIENT-SERVER 모델의 근본적인 연산은 트랜잭션(transaction), ...

2023년 4월 15일 · 20 분 · 배준수

3강 프로그램의 기계수준 표현(2)

CHAPTER 3 프로그램의 기계수준 표현 3.7 프로시저 프로시저 호출 : 스프트웨어에서의 주요 추상, 지정된 인자들과 리턴 값으로 특정 기능을 구현하는 코드를 감싸주는 방법을 제공 잘 설계된 소프트웨어 : 무슨 값이 게산되는가, 이 프로시저가 프로그램 상태에 무슨 효과를 갖는가 에 대한 간결한 인터페이스 정의 제공 일부 동작의 구체적인 구현은 감춰주는 방식으로 프로시저를 추상화 메커니즘으로 이용 ex. 프로시저 P가 프로시저 Q를 호출, Q가 실행한 후 다시 P로 리턴 제어권 전달 : 프로그램 카운터는 진입할 때 Q에 대한 코드의 시작주소로 설정되고, 리턴할 때는 P에서 Q를 호출하는 인스트럭션 다음의 인스트럭션으로 설정되어야 함 데이터 전달 : P는 하나 이상의 매개변수를 Q에 제공할 수 있어야 하며, Q는 다시 P로 하나의 값을 리턴할 수 있어야 함. 메모리 할당과 반납 : Q는 시작할 때 지역변수들을 위한 공간을 할당할 수도, 리턴할 때 이 저장소를 반납할 수 있음. 3.7.1 런타임 스택 C언어와 다른 대부분의 언어에서의 프로시저 호출 동작방식 : 스택 자료구조가 제공하는 후입선출 메모리 관리 방식을 활용 ...

2023년 3월 29일 · 2 분 · 배준수

3강 프로그램의 기계수준 표현(1)

Chapter 3 프로그램의 기계수준 표현 컴퓨터 : 데이터를 처리하고, 메모리를 관리하고, 저장장치에 데이터를 읽거나 쓰고, 네트워크를 통해 통신하는 등의 하위 동작들을 인코딩한 연속된 바이트인 기계어 코드(machinc code)를 실행한다. 컴파일러 : 프로그램 언어의 규칙, 대상 컴퓨터의 인스트럭션 집합, 운영체제의 관례 등에 따라 기계어 코드 생성 GCC C 컴파일러 : 기계어 코드를 문자로 표시한 어셈블리 코드의 형태로 출력을 만들어 프로그램의 각 인스트럭션 생성 GCC : 어셈블러와 링커 호출 => 어셈블리 코드로부터 실행 가능한 기계어 코드 생성 ...

2023년 3월 28일 · 15 분 · 배준수

1강 컴퓨터 시스템으로의 여행

1.1 정보는 **비트****와** **컨텍스트****로 이루어진다.** 비트(Bit) : binary digit의 준말. 0과 1로 이루어진 가공된 데이터(정보)의 최소 단위이다. 보통 8bit = 1byte이지만, 반드시 그렇게 정의된 것만은 아니다. 1Mb 와 1MB는 다르며, 전자를 8로 나눈 결과가 후자이다. 우리가 흔히 광고에서 보는 인터넷 속도도 100Mbps도 초당 12.5MB의 속도라는 뜻이다. 컨텍스트(Context) : 단순한 정보 원본 이상으로 문맥, 상황에 따라 어떤 해석이 가미되어 이해되는 한차원 높은 공간을 의미한다. 하드웨어나 운영체제 관점에서 프로세서 안에 있는 레지스터, 플래그등의 현재 값 상태들의 집합를 의미한다. 소프트웨어 관점에서는 상황에 맞게끔 실행/결정/판단 해야 하는 부분을 의미한다. 더 나아가 문맥 교환(context switching)은 멀티태스킹 작업 수행시 태스크 상태 정보를 레저스터들에 저장 또는 이전 상태를 불러오기 위한 작업을 의미한다. 여기서 태스크 상태 정보는 CPU 레지스터, 메모리 스택을 의미한다. ...