정글사관학교 46

정글사관학교 50일차 TIL: 웹서버 개념 정리

웹서버 1. Web Basics 클라이언트와 서버는 텍스트 베이스인 HTTP로 통신함. HTTP: 매우 단순. 클라이언트는 서버와 인터넷 연결을 open하고 콘텐츠를 요청한다. 서버는 요청받은 콘텐츠에 대해 응답하고 연결을 종료한다. 브라우저는 콘텐츠를 읽고 화면에 띄운다. FTP와 HTTP와의 차이? 가장 큰 차이는 웹 콘텐츠가 HTML 언어로 쓰여진다는 점. HTML 프로그램은 태그를 갖고 있는데, 이 태그는 브라우저에게 어떻게 다양한 텍스트와 그래픽 요소들을 페이지에 띄울 것인지 알려준다. 반면 FTP는 파일을 전송하는 프로토콜. 2. Web content 클라이언트와 서버에게 content란 MIME type을 지닌 바이트의 연속. MIME는 파일의 유형을 나타냄.(html, gif, png, j..

정글사관학교 49일차 TIL: 파일 디스크립터, 소켓 프로그래밍

파일 디스크립터(File descriptor) 파일 디스크립터란 운영체제가 특정 파일에 할당해준 정수값을 말한다. 컴퓨터 프로그래밍 시 운영체제가 파일에 접근하기 쉽게 번호로 추상화시켰다고 보면 된다. 예컨대 3학년 8반 5번 김철수라는 아이를 일일이 김철수라 부르지 않고 "3-8반 5번"으로 부른다고 생각하면 된다. 우리가 자주 사용하는 표준 입출력 역시 이미 파일 디스크립터 값이 할당되어 있는데, 값은 아래와 같다. stdin(표준입력): 0 stdout(표준출력): 1 stderr(표준에러): 2 위처럼 0-2까지는 이미 파일 디스크립터 값이 할당되어 있으니, 우리가 사용할 수 있는 건 3 이상부터다. 하지만 이 번호는 OS에서 알아서 매겨주기 때문에 신경 쓸 필요는 없다. 파일 디스크립터 값 할당..

정글사관학교 48일차 TIL: 웹브라우저 요청 흐름, HTTP

웹브라우저 요청 흐름(중요!) 면접 단골 질문이니 잘 정리해두자. 자, 구글에 접속해보자. 이제 면접관이 질문을 한다. 지금부터 구글에 "hello"를 검색할 거예요. 검색창이 뜨기까지, 컴퓨터에서는 무슨 일이 벌어지고 있는지 설명해주세요. 검색창에 hello를 적고 enter를 누르는 순간부터 시작한다. 1. HTTP 요청 메시지 생성 구글 창에서 입력을 받으면 웹브라우저는 URI를 위와 같이 변경하며, 이 URI를 parsing해 HTTP 요청 메시지를 생성한다. 이때 DNS를 조회해 해당 호스트 주소의 IP를 가져온다. 저 메시지 안에는 아래와 같은 내용이 들어있다. 검색한 내용을 조회하는 요청이니 GET 요청에 해당되며, 검색 내용(q=hello)과 언어(hl=ko), HTTP 버전, 그리고 호스..

정글사관학교 47일차 TIL: PORT, URI, 웹브라우저 요청 흐름(중요)

PORT 클라이언트가 동시에 여러 서버와 연결해야 하는 경우를 생각해보자. 예를 들어 내 컴퓨터에서 게임도 하고, 화상통화도 하며, 그 와중에 웹서핑까지 하면 어떻게 될까? 아래 이미지처럼 두 개의 서버가 필요하다고 할때, IP만으로는 한 서버에서 게임/화상통화 요청시 응답오는 패킷을 구별할 수 없다. (둘다 200.200.200.2) 우리가 이전 공부 자료에서 봤던 것처럼, TCP/IP 패킷에서는 PORT라고 하는 글자를 본 적이 있을 것이다. 이것이 바로 이러한 상황에서 필요한 정보이다. 아래처럼 TCP의 PORT 정보를 활용하면 우리는 한 서버 내에서 오는 다양한 프로세스를 구별할 수 있게 된다. 즉, PORT는 같은 IP 내에서 프로세스를 구분하게 해주는 식별자라고 보면 되겠다. 이름부터가 "항구..

정글사관학교 45일차 TIL: 인터넷 네트워크 개념 정리(TCP/IP, UDP)

malloc 주차가 끝나고, 이제 OS 전 마지막 준비 단계인 주차에 들어섰다. 간만에 밀린 운동도 해서 기분은 좋으나 매우 피곤한 관계로, 빠르게 정리하고 집에 갈 예정. 인터넷 네트워크 인터넷 통신 클라이언트와 서버는 어떻게 통신할까? 중간에 인터넷이라는 놈이 둘 사이를 연결해준다. 그러면 이 인터넷은 어떻게 구성되어 있는 걸까? 인터넷은 수많은 서버 노드의 집합이라고 생각하면 된다. IP(인터넷 프로토콜) 클라이언트와 서버는 무작정 소통하는 게 아니다. 둘 사이에는 일종의 전송 규칙을 설정해 통신하는데, 이때 정하는 규칙을 IP(인터넷 프로토콜)이라고 한다. IP의 역할은 크게 두 가지이다. IP address를 통해 데이터를 전달 패킷 형태로 데이터를 전송 IP는 일종의 통신 규약이라고 했다. I..

정글사관학교 44일차 TIL: Explicit malloc 정리 및 구현 review

어제 떡하니 코드만 달랑 올려놓고 말아서 많은 분들이 실망했을 것으로 아는 바, 오늘은 디테일하게 Explicit 방식에 대해 정리하고 코드까지 리뷰하는 것으로 TIL 정리를 해보겠다. 정리를 하기 전에, 동적 메모리 할당 이전에 나오는 개념인 시스템 콜에 대해 간단히 정리하고 넘어간다. 시스템 콜 시스템 콜: OS(특히 커널)이 제공하는 서비스에 접근하기 위한 상호작용을 말한다. 커널(kernel): 메모리에 상주하고 있는 운영체제 핵심 중 일부를 뜻한다. 응용프로그램이 컴퓨터 시스템에서 수행되기 위해서는 메모리에 프로그램이 올라가 있어야 한다. 운영체제 역시 하나의 프로그램으로, 메모리에 올라가야 하는데 OS는 무겁기 때문에 필요한 핵심만 메모리에 올라간다. 이때, 메모리에 상주해 있는 OS의 일부를..

정글사관학교 42일차 TIL: Implicit free list(묵시적 가용 리스트)

지난 포스팅에 이어서 진행. 정글사관학교 40일차 TIL: 동적 메모리 할당(malloc), 힙 단편화(fragmentation) malloc: Dynamic memory allocation(동적 메모리 할당) Dynamic Memory Allocator 우리는 왜 동적 메모리 할당을 이용할까? C언어에서는 배열을 만들 때, 반드시 그 사이즈를 미리 선언해줘야 한다. 예컨대 2학년.. woonys.tistory.com 이번에는 가장 기본으로 구현하는 Implicit free list(묵시적 가용 리스트)부터 정리해본다. 번역한 단어가 영 입에 감기지 않아 여기서는 implicit이라고 부르겠다. Implicit free list(묵시적 가용 리스트) allocator는 블록 간 경계를 구분하고 할당된 블..

정글사관학교 37일차 TIL: Red-Black Tree(RB트리) 삭제 구현

지금 시간은 3시 3분..자그마치 6명의 집단 지성이 힘을 합쳐 겨우 디버깅을 완료하고 모든 테스트 케이스 통과!! 삭제 기능에 대해 빠르게 로직 정리하고 집 가야겠다.. 삭제(Deletion) 옮기거나 삭제하는 노드의 원래 색을 기억해뒀다가 옮기거나 지우려는 노드 색이 검정인 경우에만(=이중 흑색 노드) 트리를 고친다. 지우려는 노드 z 혹은 옮기려는 노드가 빨간색이면 rb트리 특성을 위반하지 않으니 고칠 필요가 없다. 지우려나 옮기려는 노드가 검정일 때는 경로 상의 검정 노드 개수가 변하므로 트리 특성을 위반한다. 이 경우에는 fixup 함수로 수정한다. 삭제 기능은 세 가지 케이스로 나눠서 구현한다. 1. 삭제하려는 노드(=z)의 왼쪽 자식만 있는 경우 (=오른쪽 자식이 NIL인 경우) 이때는 왼쪽..

정글사관학교 36일차 TIL: Red-Black Tree(RB트리) 삽입 구현

요 며칠간 끊임없이 고통을 안겨줬던 레드블랙 트리(이하 RB트리)..그래도 계속 보다 보니까 얼추 감이 잡히기 시작한다. 아직 가장 큰 관문인 삭제가 남아있지만 그래도 삽입 구현 완료! RB트리 개념부터 시작해서 삽입까지 빠르게 정리하고 마무리할 예정. 오늘 풀었던 알고리즘 문제는 따로 포스팅해야겠다. Red-Black Tree(레드블랙 트리) 1. RB트리 정의 rb트리는 균형 이진 탐색 트리의 여러 버전 중 하나이다. 균형 이진 탐색 트리란, 이진 탐색 트리에 노드를 삽입/삭제하는 과정에서 어느 한 쪽으로 노드가 쏠리는 것을 방지하기 위해 규칙을 추가한 심화 버전 이진 탐색 트리라고 보면 되겠다. 왜 이런 짓을 하냐? 이진 탐색 트리를 만드는 이유는 특정 노드를 검색하는데 드는 시간 복잡도가 O(lo..

정글사관학교 34일차 TIL: 구조체(Struct), 동적 메모리 할당(malloc)

Ch.14 구조체(Struct) 배열에 여러 가지 정보를 매번 추가해야 한다고 생각해보자. 예컨대 도서 관리 프로그램을 만든다고 할때, i번째 책에 대한 정보를 저장한다. 책 이름, 저자, 출판사, 대출 횟수를 저장하려면 다음과 같은 i-1번째 순서에 다음과 같이 변수를 입력한다. book_name[i-1], auth_name[i-1], publ_name[i-1], borrow[i-1] 근데 더 적을 것도 없이 객체 개념을 떠올려보면 구조체가 왜 필요한지 생각하게 되는데, 이제까지 배웠던 C의 자료구조인 배열은 하나의 배열에 동일한 형만 담을 수 있다. 예를 들어, int 형 배열이면 int 값만, char 형이면 char만. 그런데 하나의 자료형에 여러 자료형을 담을 수 있다면 어떨까? 예를 들어 ch..