Skip to content

Commit 2f739d5

Browse files
author
GoGoComputer
committed
Ch003 H1: new 17k chars (네트워크 기본 오리엔테이션 — 우편비유/TCP·IP·HTTP·DNS·HTTPS/ping·curl 손풀기/8H 큰그림/사진업로드 7단계/12회수지도/macOS-Linux 변환표) + Ch002 H8 Ch003 다리 수정(파일시스템→네트워크)
1 parent 02f4ef8 commit 2f739d5

3 files changed

Lines changed: 277 additions & 22 deletions

File tree

‎chapters/002-cs-os-basics/lecture/H8-apply-wrap.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
7. macOS ↔ Linux 변환표(OS 버전 확장)
1717
8. 흔한 오해 다섯 가지
1818
9. FAQ 다섯 개
19-
10. Ch003 다리 — 파일 시스템(inode·블록·디렉토리 트리·마운트)
19+
10. Ch003 다리 — 네트워크 기본(TCP/IP·HTTP·DNS·HTTPS)
2020
11. 본인 페이스 가이드 + 8시간 약속 회수
2121
12. 한 줄 정리 + 두 해 코스에서 우리 위치
2222

@@ -42,7 +42,7 @@ crontab -l # 새벽 3시 점검 등록 확인
4242

4343
## 1. 들어가며 — 7교시 회수와 8교시 약속
4444

45-
자, 마지막 시간입니다. 진짜로 마지막. Ch002의 여덟 번째이자 마지막 시간이에요. 지난 7교시에서 우리는 굉장히 깊은 데까지 내려갔죠. 커널 공간과 사용자 공간이 왜 갈라져 있는지, ring 0과 ring 3의 의미가 무엇인지, 시스템 콜이라는 다리를 건널 때 CPU 안에서 어떤 일곱 단계가 일어나는지를 봤습니다. RAX 레지스터에 번호 넣고, MSR_LSTAR에 적힌 주소로 점프하고, 권한 비트가 3에서 0으로 바뀌고, 일을 마치면 sysret으로 돌아오는 그 7단계요. 그리고 페이지 폴트, 컨텍스트 스위치, strace와 dtruss로 실제 시스템 콜을 눈으로 확인해 봤고, 마지막에는 Meltdown과 KPTI까지 갔다가 vDSO와 io_uring으로 마무리했습니다. 머리가 좀 무거우셨을 거예요. 괜찮습니다. 7교시는 두 번째 코스의 시작에서 다시 만날 내용이에요. 지금은 "아, 커널은 진짜 다른 세계구나"라는 감각만 남기시면 충분합니다. 자, 그래서 8교시는 약속드린 대로 도구를 손에 쥐어 드리는 시간입니다. 응급실 키트를 만들 거예요. emergency.sh라는 이름의, 새벽 3시에 알람이 울려도 졸린 눈으로 한 줄만 치면 자동으로 다섯 종류 사고를 점검하고 최소한의 응급조치까지 해 주는, 100줄짜리 셸 스크립트요. 그리고 Ch002 여덟 시간을 한 장의 그림으로 정리합니다. 다섯 원리, 12회수지도 갱신, macOS와 Linux 변환표 확장, 흔한 오해 다섯 개, FAQ 다섯 개를 거쳐, 마지막에 Ch003 — 파일 시스템 — 으로 다리를 놓고 마칩니다. Ch002의 메시지는 한 문장으로 줄이면 이거예요. 운영체제는 호텔 매니저고, 우리는 그 매니저와 대화하는 법을 8시간 동안 배웠다. 오늘은 그 대화를 손에 쥐는 도구로 만드는 시간입니다.
45+
자, 마지막 시간입니다. 진짜로 마지막. Ch002의 여덟 번째이자 마지막 시간이에요. 지난 7교시에서 우리는 굉장히 깊은 데까지 내려갔죠. 커널 공간과 사용자 공간이 왜 갈라져 있는지, ring 0과 ring 3의 의미가 무엇인지, 시스템 콜이라는 다리를 건널 때 CPU 안에서 어떤 일곱 단계가 일어나는지를 봤습니다. RAX 레지스터에 번호 넣고, MSR_LSTAR에 적힌 주소로 점프하고, 권한 비트가 3에서 0으로 바뀌고, 일을 마치면 sysret으로 돌아오는 그 7단계요. 그리고 페이지 폴트, 컨텍스트 스위치, strace와 dtruss로 실제 시스템 콜을 눈으로 확인해 봤고, 마지막에는 Meltdown과 KPTI까지 갔다가 vDSO와 io_uring으로 마무리했습니다. 머리가 좀 무거우셨을 거예요. 괜찮습니다. 7교시는 두 번째 코스의 시작에서 다시 만날 내용이에요. 지금은 "아, 커널은 진짜 다른 세계구나"라는 감각만 남기시면 충분합니다. 자, 그래서 8교시는 약속드린 대로 도구를 손에 쥐어 드리는 시간입니다. 응급실 키트를 만들 거예요. emergency.sh라는 이름의, 새벽 3시에 알람이 울려도 졸린 눈으로 한 줄만 치면 자동으로 다섯 종류 사고를 점검하고 최소한의 응급조치까지 해 주는, 100줄짜리 셸 스크립트요. 그리고 Ch002 여덟 시간을 한 장의 그림으로 정리합니다. 다섯 원리, 12회수지도 갱신, macOS와 Linux 변환표 확장, 흔한 오해 다섯 개, FAQ 다섯 개를 거쳐, 마지막에 Ch003 — 네트워크 기본 — 으로 다리를 놓고 마칩니다. Ch002의 메시지는 한 문장으로 줄이면 이거예요. 운영체제는 호텔 매니저고, 우리는 그 매니저와 대화하는 법을 8시간 동안 배웠다. 오늘은 그 대화를 손에 쥐는 도구로 만드는 시간입니다.
4646

4747
## 2. Ch002 8시간 큰 그림 회수
4848

@@ -241,21 +241,21 @@ Ch002의 내용은 Ch003에서 잊히는 게 아니라 살아 돌아옵니다.
241241

242242
**Q4. Ch002 끝났는데 자신감이 없어요.** 정상입니다. 8시간으로 OS 전체를 가져갈 수는 없어요. 두 해 코스 중 두 번째 마디일 뿐입니다. Ch003부터 Ch120까지 가는 동안 Ch002 내용은 평균 한 챕터에 한 번씩 다시 등장합니다. 그때마다 "아, 봤던 거다"가 쌓이면서 진짜 자신감이 생겨요. 지금은 emergency.sh 한 개를 손에 쥔 사람이 됐다는 사실만 챙기시면 됩니다. 그리고 자신감의 척도를 바꿔 보세요. "OS를 다 안다"가 아니라 "ps 출력에서 좀비 하나는 알아본다", "df -h에서 80% 넘는 줄 하나는 골라낸다", "kill -9 대신 -15부터 쓴다" — 이 세 가지가 되시면 Ch002는 충분히 가져가신 거예요. 자신감은 전체를 아는 데서 오는 게 아니라, 하나를 확실히 손에 쥐는 데서 옵니다.
243243

244-
**Q5. 다음 챕터 예습은 뭘 하나요?** ls -la / 쳐 보세요. 그리고 stat ~/.zshrc, df -h, mount(또는 macOS는 mount -t apfs) 쳐 보세요. 출력에서 모르는 단어 — inode, 블록, 마운트 포인트 — 를 메모해 두시면, Ch003 H1 첫 5분에 그 단어들이 다 풀립니다. 추가로 du -sh ~/* 도 한 번 쳐 보세요. 본인 홈 디렉토리에서 어떤 폴더가 가장 무거운지가 한 줄로 보입니다. Downloads가 1등인 분이 많을 거예요. 그 한 줄을 보는 순간 "디스크는 냉장고고, 안 쓰는 음식이 자리만 차지한다"는 비유가 머리에 박힙니다. 예습은 길지 않아도 됩니다. 다섯 줄짜리 명령으로 충분해요.
244+
**Q5. 다음 챕터 예습은 뭘 하나요?** ping 1.1.1.1 쳐 보세요. 그리고 dig example.com, curl -I https://example.com, traceroute google.com 쳐 보세요. 출력에서 모르는 단어 — TTL, A 레코드, HTTP/2, hop — 를 메모해 두시면, Ch003 H1 첫 5분에 그 단어들이 다 풀립니다. 추가로 ss -tn 또는 macOS의 lsof -nP -iTCP -sTCP:ESTABLISHED 도 한 번 쳐 보세요. 본인 머신이 지금 이 순간 어디와 통화 중인지가 한 줄씩 보입니다. 브라우저가 띄워 둔 연결 수십 개가 보일 거예요. 그 출력을 보는 순간 "내 노트북도 인터넷이라는 호텔 단지의 한 객실"이라는 비유가 머리에 박힙니다. 예습은 길지 않아도 됩니다. 다섯 줄짜리 명령으로 충분해요.
245245

246246
FAQ에 들어가지 못한 짧은 메모도 두세 개 남길게요. 첫째, **launchd 사용자**는 cron 대신 ~/Library/LaunchAgents 밑에 plist를 두는 걸 권합니다. macOS는 cron이 점점 더 권장되지 않아서 새 머신에서는 launchctl load가 표준이에요. plist는 XML이라 처음엔 낯설지만, RunAtLoad와 StartCalendarInterval과 StandardOutPath 세 키만 알면 절반은 끝납니다. 둘째, **WSL2에서 보고 계신 분**은 Linux 명령이 거의 그대로 돕니다. 다만 dmesg가 비어 보일 수 있는데 wsl 종료 후 재실행하면 나와요. 셋째, **컨테이너 안에서**는 ps가 호스트 프로세스를 못 봅니다. 그게 namespace 격리예요. Ch047에서 다시 다룹니다. 넷째, **Apple Silicon이나 Graviton 같은 ARM64**와 x86_64는 ps·top 출력이 거의 같지만 perf 같은 깊은 도구는 명령어가 다를 수 있어요. Ch091에서 다룹니다. 다섯째, **회사 정책으로 sudo가 막힌 분**은 dry-run 모드만 cron에 박으세요. 그것만으로도 평소 분량 추적이 됩니다. 권한 없이도 할 수 있는 운영이 의외로 많아요. 그리고 마지막으로 — 회사 보안팀과 친해지세요. emergency.sh를 운영 서버에 두려면 보안팀 검토가 필요한 회사도 많습니다. 100줄짜리 짧은 스크립트라는 게 검토 통과의 가장 큰 무기예요. 1000줄짜리 도구는 검토에서 막혀요. 짧음 자체가 운영의 자산입니다.
247247

248-
## 10. Ch003 다리 — 파일 시스템(inode·블록·디렉토리 트리·마운트)
248+
## 10. Ch003 다리 — 네트워크 기본(TCP/IP·HTTP·DNS·HTTPS)
249249

250-
자, 다음 챕터로 다리를 놓을 시간이에요. Ch003은 파일 시스템입니다. 한 줄로 요약하면 "디스크라는 냉장고를 OS가 어떻게 정리하는가"예요. Ch002에서 디스크는 냉장고라고만 비유했죠. Ch003에서는 그 냉장고 안의 선반과 라벨과 봉투의 이름을 배웁니다. 핵심 단어는 네 개. **inode** — 파일 한 개의 신분증(크기, 권한, 시간, 블록 주소들이 다 여기 적혀 있어요. 이름은 안 들어 있습니다. 이름은 디렉토리 안에). **블록** — 디스크의 최소 저장 단위. 보통 4KB. 1바이트짜리 파일도 블록 한 개를 잡아먹어요. 그래서 작은 파일 백만 개가 큰 파일 한 개보다 디스크를 더 먹는 일이 생깁니다. **디렉토리 트리** — 파일 시스템의 골격. /에서 시작해서 /Users, /etc, /var로 가지를 칩니다. 윈도우의 C 드라이브, D 드라이브와 달리 유닉스는 root 하나에서 모든 디스크가 가지로 합쳐져요. **마운트** — 새 디스크나 USB나 네트워크 드라이브를 트리 어딘가에 붙이는 행위. /Volumes/USB가 마운트 포인트예요. mount 명령어가 그걸 합니다. Ch003 8시간에서는 이 네 단어를 ls, stat, du, df, ln, find, mount, fsck, lsof로 손에 쥐고, 마지막에 "왜 git은 .git이라는 디렉토리에 모든 걸 넣는가"까지 갑니다. 비유 사전도 늘어요. 디렉토리는 호텔의 층, 파일은 방에 둔 짐, inode는 짐의 송장, 블록은 송장에 적힌 칸. 마운트는 옆 호텔과 복도를 잇는 행위. 이 다리가 머리에 그려지면 Ch003은 절반 이상 가져가신 겁니다. 그리고 Ch003이 끝나면 Ch004 — 네트워크 — 로 갑니다. 그땐 배달앱 비유가 7계층 OSI까지 확장돼요. 욕심내지 마시고 한 챕터씩 가시면 됩니다. 한 가지 약속을 미리 드리면, Ch003 H1에서 우리는 ls -la 한 줄의 의미를 30분 동안 풀어낼 거예요. 권한 문자 10칸, 링크 카운트, 소유자, 그룹, 크기, 시각, 이름. 이 일곱 칸이 사실 inode와 디렉토리의 모든 비밀을 담고 있거든요. ls 한 줄을 진짜로 읽을 줄 알게 되면 파일 시스템의 절반이 풀립니다.
250+
자, 다음 챕터로 다리를 놓을 시간이에요. Ch003은 네트워크 기본입니다. 한 줄로 요약하면 "내 호텔 방에서 보낸 편지가 어떻게 지구 반대편 호텔 방에 도착하는가"예요. Ch002에서 네트워크는 배달앱이라고만 비유했죠. Ch003에서는 그 배달앱 안의 7층짜리 시스템 — OSI 7계층, 실무에선 TCP/IP 4~5계층 — 의 이름을 하나씩 배웁니다. 핵심 단어는 네 개. **TCP/IP** — 인터넷의 우편 시스템. IP는 "어느 건물 몇 호"라는 주소 체계고, TCP는 "편지가 깨지지 않게 순서대로 도착하게"라는 보증서예요. **HTTP** — 그 편지에 적는 양식. "GET /cats HTTP/1.1"이라는 한 줄이 전 세계 웹의 90%를 움직입니다. **DNS** — 전화번호부. cat-vigilante.com이라는 이름을 192.0.2.42 같은 숫자 주소로 바꿔주는 분산 데이터베이스예요. **HTTPS** — TLS로 봉투에 봉인 도장을 찍은 HTTP. 자물쇠 아이콘 하나 안에 인증서·암호화·무결성이라는 삼중 잠금이 들어 있습니다. Ch003 8시간에서는 이 네 단어를 ping, dig, curl, nslookup, traceroute, openssl, nc, ss로 손에 쥐고, 마지막에 "왜 https://cat-vigilante.com을 누르면 0.3초 안에 페이지가 뜨는가"라는 한 질문에 7단계로 답합니다. 비유 사전도 늘어요. 패킷은 우편 봉투, 포트는 호텔 객실 번호, 소켓은 두 호텔 사이의 통화 회선, TLS는 봉투에 찍힌 봉인 도장. 이 다리가 머리에 그려지면 Ch003은 절반 이상 가져가신 겁니다. 그리고 Ch003이 끝나면 Ch004 — Git & GitHub — 로 갑니다. 그땐 git push가 결국 HTTPS 위에서 돌아간다는 사실이 보여요. 욕심내지 마시고 한 챕터씩 가시면 됩니다. 한 가지 약속을 미리 드리면, Ch003 H1에서 우리는 curl -v https://example.com 한 줄의 출력을 30분 동안 풀어낼 거예요. DNS 조회, TCP 핸드셰이크 3단계, TLS 핸드셰이크, HTTP 요청, 응답 헤더, 응답 본문. 이 여섯 단계가 사실 인터넷의 모든 비밀을 담고 있거든요. curl -v 한 줄을 진짜로 읽을 줄 알게 되면 네트워크의 절반이 풀립니다.
251251

252252
## 11. 본인 페이스 가이드 + 8시간 약속 회수
253253

254254
8시간 약속을 회수합니다. 1교시 시작에서 제가 드린 약속은 세 개였어요. 하나, **OS를 호텔 매니저로 한 번에 그릴 수 있게 만들겠다.** 회수했습니다. 네 자원, 다섯 사고, 7단계 응급 절차, 다섯 원리가 한 그림이에요. 둘, **명령어를 외우게 하지 않고 손에 쥐게 하겠다.** 회수했습니다. ps와 7신호와 lsof와 ss를 procmon.sh와 emergency.sh라는 두 도구로 묶었어요. 셋, **Ch002 끝나면 새벽 3시 알람에 졸린 눈으로도 1차 대응이 가능한 사람이 되게 하겠다.** 회수했습니다. emergency.sh --dry-run --case oom 한 줄이면 5초 안에 답이 나와요. 자, 본인 페이스에 대해서. 8시간을 4주에 걸쳐 보신 분도 있을 거고, 8주에 걸쳐 보신 분도 있을 겁니다. 둘 다 정상입니다. 평균 두 해 코스에서 사람들이 Ch002에 쓰는 시간은 6주 ± 2주예요. 빠르다고 자랑할 일도 아니고, 느리다고 자책할 일도 아닙니다. 더 중요한 건 8주가 지난 시점에 손에 뭐가 남아 있느냐예요. 4주에 끝낸 사람이 손에 아무것도 없으면, 8주에 emergency.sh 하나 들고 나온 사람보다 못 갑니다. 다만 두 가지만 약속해 주세요. 첫째, **emergency.sh를 본인 노트북에 ~/bin/ 밑에 두고 권한을 주는 것**. 이건 오늘 안에 해 주세요. 둘째, **다음 7일 동안 매일 한 번 procmon.sh를 돌리는 것**. 일주일이면 본인 머신의 평소 분량이 손에 들어옵니다. 이 두 약속이 Ch002의 진짜 졸업장이에요. 책장에 책을 꽂는 게 졸업이 아닙니다. 손이 그 책의 명령어를 누르는 게 졸업입니다. 그리고 마지막 권유 — Ch003 시작 전에 이틀 정도 휴식을 두세요. 머리가 너무 빡빡한 채로 다음 챕터에 들어가면 첫 시간에서 30분도 못 가서 "아, 이거 봤던 거 같은데"가 흐려집니다. 충분한 간격은 학습의 일부입니다. 잠과 산책과 멍 때리기가 학습의 절반이에요. 진심입니다.
255255

256256
## 12. 한 줄 정리 + 두 해 코스에서 우리 위치
257257

258-
한 줄 정리. **운영체제는 호텔 매니저고, 우리는 8시간 동안 그 매니저와 다섯 가지 원리로 대화하는 두 도구(procmon·emergency)를 손에 쥐었다.** 두 해 코스 우리 위치는 16/960 = 1.67%입니다. 1교시 시작 때 0.83%였으니 정확히 두 배가 됐어요. 한 챕터씩 1%, 두 챕터에 2%, 다섯 챕터에 4%. 이 속도면 100주 즈음에 코스가 끝납니다. 멀어 보이지만 매주 1%씩 자라는 건 복리예요. 1년 뒤엔 다른 사람이 됩니다. 그리고 한 가지 더 — Ch001과 Ch002, 두 챕터를 끝낸 시점에서 우리는 이미 컴퓨터의 두 큰 기둥을 봤어요. 하드웨어(Ch001)와 운영체제(Ch002). 다음 Ch003은 그 두 기둥 위에 얹히는 첫 번째 추상화 — 파일 시스템 — 입니다. 그 위에 Ch004 네트워크가 얹히고, 그 위에 Ch005 데이터베이스가 얹혀요. 한 층씩 쌓이는 건축물이라고 생각하시면 됩니다. 1층, 2층은 끝났습니다. 3층으로 올라갈 시간이에요. 그리고 마지막 한 마디 — 오늘 배운 emergency.sh를 GitHub에 올려 두세요. 본인 dotfiles 레포에 두셔도 좋고, 따로 ops-toolkit 같은 레포를 파셔도 좋습니다. 이게 두 해 코스의 첫 번째 포트폴리오가 됩니다. 100줄짜리 셸 스크립트지만 "운영을 아는 사람"이라는 신호예요. 면접관이 README 한 페이지만 봐도 압니다. 자, Ch002는 여기서 닫습니다. 다음 시간 Ch003 H1 — 파일 시스템 오리엔테이션 — 에서 만나요. 그동안 ls -la /와 stat ~/.zshrc 두 줄만 쳐 두세요. 그게 Ch003의 첫 단어들이에요. 8시간 따라와 주신 분, 정말 수고 많으셨습니다.
258+
한 줄 정리. **운영체제는 호텔 매니저고, 우리는 8시간 동안 그 매니저와 다섯 가지 원리로 대화하는 두 도구(procmon·emergency)를 손에 쥐었다.** 두 해 코스 우리 위치는 16/960 = 1.67%입니다. 1교시 시작 때 0.83%였으니 정확히 두 배가 됐어요. 한 챕터씩 1%, 두 챕터에 2%, 다섯 챕터에 4%. 이 속도면 100주 즈음에 코스가 끝납니다. 멀어 보이지만 매주 1%씩 자라는 건 복리예요. 1년 뒤엔 다른 사람이 됩니다. 그리고 한 가지 더 — Ch001과 Ch002, 두 챕터를 끝낸 시점에서 우리는 이미 컴퓨터의 두 큰 기둥을 봤어요. 하드웨어(Ch001)와 운영체제(Ch002). 다음 Ch003은 그 두 기둥 위에 얹히는 첫 번째 외부 통신 — 네트워크 — 입니다. 그 위에 Ch004 Git이 얹히고(git push가 결국 HTTPS), 그 위에 Ch031 SQL과 Ch056 백엔드가 얹혀요. 한 층씩 쌓이는 건축물이라고 생각하시면 됩니다. 1층, 2층은 끝났습니다. 3층으로 올라갈 시간이에요. 그리고 마지막 한 마디 — 오늘 배운 emergency.sh를 GitHub에 올려 두세요. 본인 dotfiles 레포에 두셔도 좋고, 따로 ops-toolkit 같은 레포를 파셔도 좋습니다. 이게 두 해 코스의 첫 번째 포트폴리오가 됩니다. 100줄짜리 셸 스크립트지만 "운영을 아는 사람"이라는 신호예요. 면접관이 README 한 페이지만 봐도 압니다. 자, Ch002는 여기서 닫습니다. 다음 시간 Ch003 H1 — 네트워크 기본 오리엔테이션 — 에서 만나요. 그동안 ping 1.1.1.1과 curl -I https://example.com 두 줄만 쳐 두세요. 그게 Ch003의 첫 단어들이에요. 8시간 따라와 주신 분, 정말 수고 많으셨습니다.
259259

260260
---
261261

@@ -280,6 +280,6 @@ FAQ에 들어가지 못한 짧은 메모도 두세 개 남길게요. 첫째, **l
280280
7. macOS-Linux 변환표는 인쇄해서 모니터 옆에 붙이세요. 한 장입니다. 한 달이면 손이 외워요.
281281
8. Ch003 예습은 ls -la / 한 줄이면 충분합니다. 모르는 단어 메모만 하세요.
282282
9. 8시간 동안 따라와 주신 분, 정말 수고 많으셨습니다. 1.67%지만 시작이 절반이에요.
283-
10. 다음 시간 — 파일 시스템 — 에서 만나요. 냉장고 안 선반의 이름을 배웁니다.
283+
10. 다음 시간 — 네트워크 기본 — 에서 만나요. 배달앱 안의 7계층 우편 시스템을 배웁니다.
284284
11. 한 가지만 더. 오늘 마이크 끄고 가실 때, ~/bin/emergency.sh가 본인 머신에 있는지 한 번 확인해 주세요. 그게 8시간의 진짜 결과물입니다. 책 한 권 읽은 게 아니라 도구 하나가 손에 남은 거예요. 다음 챕터에서 또 뵙겠습니다. 감사합니다.
285285
12. 마지막으로, Ch001과 Ch002를 끝낸 본인을 칭찬해 주세요. 16시간이라는 건 적지 않은 시간이에요. 영화 여덟 편을 본 시간이고, 책 두 권을 읽은 시간이고, 잠을 두 번 깬 시간입니다. 그 시간을 컴퓨터의 기둥 두 개에 쓰셨다는 건 자기 자신에게 좋은 투자를 한 거예요. 다음 챕터로 가는 사이에 잠깐 그 사실을 인정해 주시고, 충분히 쉬고 오세요. 그게 다음 시간의 첫 단어를 가볍게 받는 가장 좋은 준비입니다.

0 commit comments

Comments
 (0)