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 분 · 배준수

malloc을 구현하는 방법

메모리 구조 프로그램 실행 시 운영체제에 의해 마련되는 메모리의 구조는 다음과 같다. 코드 영역(code Area) 실행할 프로그램의 코드가 저장되는 메모리 공간. CPU는 코드 영역에 저장된 명령문들을 하나씩 가져가서 실행한다. 데이터 영역(Data Area) 전역 변수와 static 변수가 할당된다. 프로그램의 시작과 동시에 메모리에 할당되어 프로그램 종료 시까지 남아있다. main 함수가 호출되기 이전에 데이터 영역이 먼저 초기화되고, (return문이 실행되어) 프로그램이 종료된 이후에 운영체제에 의해 할당된 메모리 공간 전체를 반환하는데, 이때가 전역 변수가 소멸하는 시점이다. ...

2023년 4월 12일 · 6 분 · 배준수

동적 메모리 할당 이론

메모리 구조 프로그램 실행 시 운영체제에 의해 마련되는 메모리의 구조는 다음과 같다. 코드 영역(code Area) 실행할 프로그램의 코드가 저장되는 메모리 공간. CPU는 코드 영역에 저장된 명령문들을 하나씩 가져가서 실행한다. 데이터 영역(Data Area) 전역 변수와 static 변수가 할당된다. 프로그램의 시작과 동시에 메모리에 할당되어 프로그램 종료 시까지 남아있다. main 함수가 호출되기 이전에 데이터 영역이 먼저 초기화되고, (return문이 실행되어) 프로그램이 종료된 이후에 운영체제에 의해 할당된 메모리 공간 전체를 반환하는데, 이때가 전역 변수가 소멸하는 시점이다. ...

2023년 4월 11일 · 7 분 · 배준수

C에서 동적 메모리 할당에 관한 질문 10개

C에서 동적 메모리 할당에 관한 10개의 질문 커리어의 시작에서 많은 개발자들은 동적 메모리 할당을 사용하는 것을 두려워 한다. 이 기사에서, 나는 동적 메모리 할당에 관한 10개의 면접 질문을 설명할 것이다. 만약 만약 당신이 C의 동적 메모리 할당에 관한 면접 질문이나 C에서 메모리 할당과 관련된 함정 질문들을 찾고 있다면, 잘 찾아왔다. C 관련 면접에서 면접관에게 들을 수 있는 10개의 C 동적 메모리 할당에 관한 문제와 답을 만들었다. 그래서 나는 C의 동적 메모리 할당에 관한 면접 질문들이 당신에게 도움이 되길 바란다. 행운을 빈다. ...

2023년 4월 7일 · 7 분 · 배준수

C에서 1,2 차원 배열에 동적으로 메모리를 할당하는 법

C에서 1,2차원 배열에 동적으로 메모리를 할당하는 법 우리는 C에서 정적, 동적 배열을 모두 만들 수 있다. 이러한 배열은 1차원 혹은 다차원이다. 정적으로 할당된 배열 문제는 우리가 배열의 크기를 구체화해야 한다는 것이다. 그래서 문제는 앞으로 필요한 배열의 크기를 모를때 발생한다. 우리는 이 문제를 동적 메모리 할당으로 해결할 수 있다. 동적 메모리 할당의 이점은 실행동안 힙에 할당된다는 것이다. C 언어는 실행 중 메모리를 요청하는 함수들을 제공한다. 아래 프로그램에서, 1차원과 2차원 메모리에 동적 메모리를 할당하기 위해 malloc 함수를 사용할 것이다. ...

2023년 4월 5일 · 7 분 · 배준수

malloc과 calloc의 차이

malloc과 calloc의 차이 malloc 함수와 calloc 함수의 기본적인 차이는 calloc()은 두개의 변수를 취하고 모두 0이라는 bits로 공간이 만들어지는 반면, malloc은 한개의 변수만 취하고 공간의 값이 결정되지 않았다는 것이다(indeterminate). malloc과 calloc은 메모리를 동적으로 할당하기 위해 사용하는 메모리 관리 함수이다. C언어에서, calloc()이 0으로 초기화된 buffer를 제공하고 malloc()은 메모리를 초기화되지 않은 채로 둔다. malloc과 callo의 차이를 보기 전에 기두 함수에 대한 기본적인 정보들을 보자. malloc function in C malloc은 실행중에 메모리를 할당하는 메모리 관리 함수이다. 값이 정해지지 않고 크기에 의해 구체화된 크기를 가진 객체를 위한 공간을 할당한다. ...

2023년 4월 5일 · 3 분 · 배준수

C에서 동적 메모리 할당

출처 : https://aticleworld.com/dynamic-memory-allocation-in-c/ C에서 동적 메모리 할당 이 기사에서, 저장기간이 아닌 동적 메모리 할당과 실행기간동안 메모리를 할당하는데 사용되는 함수에 관해 얘기할 것이다. 동적 메모리 할당이 가진 각각의 장단점도 살펴볼 것이다. C 표준에 따르면, 4개의 저장기간(storage duration)이 있다. : static, thread(C11), automatic, allocated. 저장기간은 객체의 일생(lifetime)을 결정한다. 일생은 객체가 살아있는 시간(저장이 보존된 시간)이며 이전에 저장된 값이 유지되는 시간이다. 객체의 일생 범위 밖에 접근하려는 행동은 정의되지 않았을 것이다. C언어에서, 우리가 프로그램을 실행할 때 얼마나 메모리가 필요한지 모른다면 작동 시간에 변수가 된다. 예를 들어, 서버통신에서 우리는 반응 데이터(response data)의 정확한 크기를 모르기 때문에 두 가지 해결책을 준비한다. 하나는 충분한 크기의 buffer를 만드는것이고 또 하나는 실행할 때 메모리를 할당하는 것이다. ...

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

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 분 · 배준수