[CSAPP 12장 골라읽기] 12.3 스레드를 이용한 동시성 프로그래밍 빠삭하게 이해하기
·
크래프톤 정글/컴퓨터구조(CSAPP)
스레드를 이용한 동시성 프로그래밍 빠삭하게 이해하기이제 기존의 웹 서버를 하나의 요청만 처리하던 반복적 서버에서, 동시에 여러 클라이언트를 처리할 수 있는 동시성 서버로 발전시켜나갈 시점인데요. 그 핵심 열쇠 중 하나가 바로 스레드입니다. 프로세스 vs 스레드프로세스: 프로그램의 독립된 실행 단위. 각각의 주소 공간을 가진다스레드: 하나의 프로세스 안에서 실행되는 작업 단위. 스레드 간 메모리를 공유한다스레드의 장점같은 메모리 공간에서 통신하므로 빠르고 가볍다문맥 전환(context switch) 비용 감소스레드의 단점공유된 공간으로 인해 경쟁 조건(race condition)이 발생할 위험이 커진다. pthread로 스레드 다루기, 핵심 API 세트pthread_create(&tid, NULL, th..
[CSAPP 10장 골라읽기] 10.5 안정적인 읽기와 쓰기를 위한 RIO 패키지 완전정복
·
크래프톤 정글/컴퓨터구조(CSAPP)
안정적인 읽기와 쓰기를 위한 RIO 패키지 완전정복이번 포스트에서는 네트워크와 파일 I/O에서 반드시 마주치는 불편한 진실인 short count 문제와 그 해결책인 RIO(Robust I/O) 패키지를 살펴보겠습니다. 이 글에서는 CSAPP 10.5의 내용을 바탕으로 우리가 흔히 쓰는 read(), write() 시스템 콜이 왜 신뢰할 수 없는지, 그리고 rio_readn(), rio_writen(), rio_readlineb()가 어떤 원리로 안정적인 I/O를 보장하는지 정리해 봅니다. 시스템 콜 수준의 I/O, 왜 믿을 수 없을까?short count 문제read(), write()는 요청한 만큼의 바이트를 처리하지 않을 수 있다특히 소켓, 파이프 등 네트워크 I/O에서 흔하게 발생한다이유: EI..
[CSAPP 11장 완전 정복] 11.5~11.6(Part3) Tiny 웹 서버 확장성과 실전 응용
·
크래프톤 정글/컴퓨터구조(CSAPP)
Tiny 웹 서버 확장성과 실전 응용이번 편에서는 CGI를 활용한 동적 콘텐츠 처리와 함께, Tiny 서버가 실제 환경에서 어떻게 확장될 수 있는지 살펴볼 예정인데요. 이제 단순한 정적 파일 제공을 넘어서, 사용자 요청에 따라 동적으로 HTML을 생성해 응답하는 구조까지 이해할 수 있는 능력을 키워 보는 시간을 가져보도록 하겠습니다. CGI 프로그램 흐름 복습하기Tiny는 CGI(Common Gateway Interface)를 통해 동적 콘텐츠를 처리합니다. 예를 들어, /cgi-bin/adder?15000&213 요청이 오면, adder.cgi라는 프로그램이 실행되어 두 숫자를 더해 결과를 HTML로 출력합니다.서버 측 처리 흐름 (serve_dynamic)fork()로 자식 프로세스 생성setenv..
[CSAPP 11장 완전 정복] 11.5~11.6(Part 2) Tiny 웹 서버 구조 뜯어보기
·
크래프톤 정글/컴퓨터구조(CSAPP)
Tiny 웹 서버 구조 뜯어보기지난 글에서 HTTP 구조와 Tiny 서버의 역할을 살펴봤다면, 이번엔 실제 코드 흐름을 따라가며 Tiny 서버가 클라이언트 요청을 어떻게 처리하는지 단계별로 정리해보겠습니다. 이 글을 읽고 나면 doit(), serve_static(), serve_dynamic() 세 개의 함수가 어떻게 연결되고, 각각 무슨 일을 하는지 눈에 그려질 것입니다. 서버의 입구, main 함수Tiny 서버는 가장 먼저 포트를 받아들이고, 해당 포트에 대해 리스닝 소켓을 생성합니다. 이후 무한 루프를 돌면서 클라이언트 요청을 기다리죠.listenfd = Open_listenfd(argv[1]);while (1) { connfd = Accept(listenfd, ...); doit(c..
[CSAPP 11장 완전 정복] 11.5~11.6(Part 1) 웹 서버의 세계로 한 걸음, Tiny는 왜 필요한가?
·
크래프톤 정글/컴퓨터구조(CSAPP)
웹 서버의 세계로 한 걸음, Tiny는 왜 필요한가?이번 포스트에서는 CSAPP 11장 중 11.5절의 상단부 핵심을 중심으로 Tiny 웹 서버의 존재 이유와 구조에 대해 정리해 보겠습니다. 여기서 중요한 건 단순히 '웹 서버는 클라이언트의 요청을 받고 응답을 준다'의 개념을 넘어서, '왜 그렇게 동작하는가?'에 대한 철학적 구조를 파악하는 것이죠. HTTP의 요청과 응답은 어떻게 구성되어 있을까?웹 서버를 이해하려면 먼저 HTTP 프로토콜의 동작 방식을 알아야 합니다.1. HTTP 요청 메시지 (Client → Server)요청 줄 (Request Line): METHOD URI VERSION (ex. GET /index.html HTTP/1.1)요청 헤더들: Host, User-Agent, 등빈 줄..
CSAPP 11.5~11.6 rawdata 공유 (전체 학습 목표, 학습 정리 자료)
·
크래프톤 정글/컴퓨터구조(CSAPP)
CSAPP 11.5~11.6 rawdata 공유 (전체 학습 목표, 학습 정리 자료)echo 서버를 성공적으로 구현했다면, 이제는 tiny 서버 구현을 목표로 개념을 정리해야 할 차례입니다. 해당 장에서 가장 중요한 내용인 tiny 서버에 대해 다루고 있는 두 절이기 때문에, 각 절마다 학습하는 데 도움이 될 수 있도록 명확한 학습 목표를 설정하고, 각 목표에 대응하는 핵심 개념과 세부 내용을 정리해 보았습니다. 이후에 게시될 요약본만으로도 전체적인 흐름을 파악하는 데에는 무리가 없지만, 아무래도 분량 상의 제한으로 인해 일부 중요한 내용이 생략될 수밖에 없는데요. 따라서 이 절의 내용을 보다 깊이 있게 이해하고자 하시는 분들은 아래에 제시된 세부 학습 목표와 정리 자료를 함께 참고하시기를 권장드립니다...
[CSAPP 11장 완전 정복] 11.4(Part 2) addrinfo, sockaddr 구조체부터 변환 함수까지 한 번에 정리하기
·
크래프톤 정글/컴퓨터구조(CSAPP)
addrinfo, sockaddr 구조체부터 변환 함수까지 한 번에 정리하기앞선 포스트에서는 소켓 함수의 흐름을 정리했었는데요. 이번엔 그 함수들을 실제로 사용할 때 꼭 알아야 할 도구들인 sockaddr, addrinfo 구조체와 getaddrinfo(), inet_pton() 같은 핵심 함수들을 정리해보겠습니다. 구체적으로 실제 코드를 해석할 수 있는 안목을 기르는 데 초점을 맞췄습니다. 소켓 주소 구조체 제대로 이해하기sockaddr (상위 타입 주소)모든 주소 구조체의 공통 부모 역할을 하는 구조체입니다. 실제 주소는 sockaddr_in처럼 구체적인 타입에서 정의하고, 소켓 함수에 넘길 땐 형 변환을 통해 사용하게 됩니다. sockaddr_in (IPv4 주소용 구조체)sin_family: 주..
[CSAPP 11장 완전 정복] 11.4(Part 1) 소켓 함수 흐름 완전정복, 클라이언트-서버 연결의 모든 것
·
크래프톤 정글/컴퓨터구조(CSAPP)
소켓 함수 흐름 완전정복, 클라이언트-서버 연결의 모든 것이번 포스트에서는 소켓 프로그래밍의 핵심 흐름인 socket() → connect()/bind() → listen() → accept() 과정을 전체적으로 잡고 가려고 하는데요. 이 흐름이 머릿속에 들어오면, 이후 나올 Tiny Web Server의 코드가 '왜 이렇게 구성되었는지'가 명확히 보이게 됩니다. 클라이언트 vs 서버, 연결 흐름의 차이클라이언트 측socket(): 통신의 엔드포인트 소켓 생성connect(): 서버 IP와 포트를 지정해 연결 요청연결이 성공되면 이 소켓은 이제 데이터를 주고받을 수 있게 됩니다. 서버 측socket(): 통신의 엔드포인트 소켓 생성bind(): 해당 소켓을 포트에 바인딩 (IP + Port)listen..