소프트웨어 정글을 끝내며 (1)
길었던, 어찌보면 너무나도 짧았던 대전에서의 생활이 종료되었다.

주말도 없이 밤낮도 없이 4개월 조금 넘게 달리는 동안 얻은 것도 많고 동시에 잃은 것도 조금 있다 생각한다. 소프트웨어 정글 과정을 거치면서 느꼈던 내 생각을 두서없이 써보고, 앞으로 무엇을 해야 할지 정리해 보려 한다.
정글에서 3주차 이후로 배운 것들
4주차 : RB트리
자가 균형 이진 탐색 트리인 RB트리를 직접 구현해봤다. RB 트리에 요소가 삽입되거나 삭제되면 어떻게 균형을 잡는 지 등을 배울 수 있었다.
단, 끝나고 나서 코치님의 질문에는 잘 대답하지 못해서 조금 찔린 기억이 있다. 너무 구현에만 집중한 나머지 실제 RB 트리가 어떻게 사용되고 있는지에는 조금 소홀하였다.
https://infrawhale.notion.site/ebde04f3d0574f10a3c8fb880a5cdffb?pvs=74
레드 블랙 트리 | Notion
RBTREE 이론
infrawhale.notion.site
열정이 아직 살아있을 때. 정글 과정중에서 가장 열심히 정리했다.
5주차 : Malloc Lab
동적 메모리 할당에 대해 공부하였다. C에서 메모리 할당을 하는 malloc과 free를 구현 해보고 테스트 케이스에 통과 시도를 하였다, 동시에 CSAPP을 사용하여 가상 메모리에 대해 공부하였다.
https://infrawhale.notion.site/9-7aee81918f1d4f7ab779d9c1a30d43a9
9장 가상메모리 | Notion
개념
infrawhale.notion.site
https://github.com/InfraWhale/malloclab-jungle
GitHub - InfraWhale/malloclab-jungle: 정글 5주차 과제 저장소
정글 5주차 과제 저장소. Contribute to InfraWhale/malloclab-jungle development by creating an account on GitHub.
github.com
6주차 : Proxy Lab
네트워크 기본 개념을 배우면서 이를 공부하기 위해 프록시 서버를 직접 구현하였다.
클라이언트가 보낸 HTTP 요청을 구현한 프록시 서버에서 받고, 이를 웹 서버에 전달한 다음 다시 응답을 받아 클라이언트에게 전달하는 걸 구현해야 했다. 추가 과제로 스레드 등을 이용해 동시에 프록시 서버에 요청이 올 경우 처리하도록 하는 것과, 캐시를 활용해 자료를 전달하는 것도 해결하였다.
특히 캐시는 조원 중 한명이 테스트 케이스가 너무 쉽다면서, 더 복잡한 테스트 케이스를 만들기도 하였다. 정글에서 준 테스트 케이스는 통과하였지만, 팀원이 다시 짠 테스트케이스에서 통과를 못해서 코드를 싹 바꾸기도 하였다.
https://infrawhale.notion.site/11-0ffeccb1373780ae9fb3e58ca75fa29b
11장 네트워크 프로그래밍 | Notion
개념
infrawhale.notion.site
https://github.com/InfraWhale/webproxy-jungle
GitHub - InfraWhale/webproxy-jungle: 정글 6주차 과제 저장소
정글 6주차 과제 저장소. Contribute to InfraWhale/webproxy-jungle development by creating an account on GitHub.
github.com
7~11주차 : PINT-OS
작은 OS를 구현해보고 테스트를 돌려서 잘 구현하였는지를 확인하는, 고통스럽기도 하고 재밌기도 했던 프로젝트를 하였다. 총 4개의 프로젝트가 있지만, 정글 일정 상 3번째 프로젝트 까지만 진행하였다.
Project 1 : Threads
스레드의 스케줄링을 구현하였다. 해당 내용을 구현하기 위해 아래와 같은 것들을 알아야 했다.
틱, 프로세스와 스레드, 세마포어와 락 & 상태변수
Project 2 : User Programs
명령어 인자를 스택에 push하는 과정과, fork()/wait()/read()/write() 등 14개의 시스템 콜을 직접 구현하였다. 아래와 같은 것들을 알아야 했다.
정수 레지스터, 시스템 콜, 커널 모드, 파일 시스템 (및 파일 디스크럽터)
Project 3 : Virtual Memory
지연 로딩을 통한 페이지 관리, mmap()과 munmap(), swap In/Out, Copy on write 등을 직접 구현했다. 아래와 같은 것들을 알아야 했다.
Pml4, supplemental page table, 페이지와 프레임, VA와 KVA, Anonymous page, File backed page
프로젝트를 진행하면서, 구현에 너무 집중한 나머지 이때부터는 기록을 잘 남기지 않은 게 너무 아쉬웠다.
https://github.com/InfraWhale/PINTOS_P3
GitHub - InfraWhale/PINTOS_P3
Contribute to InfraWhale/PINTOS_P3 development by creating an account on GitHub.
github.com
12 ~ 13 주차 : 알고리즘 복습 및 프레임워크 공부
이 다음에 있을 나만의 무기 만들기 프로젝트의 밑작업을 주로 하면서 보냈다.