Computer System 전체 지도
3줄 요약
- Computer System은 Java/Spring 코드가 OS, JVM, CPU, memory, I/O 위에서 실행되는 방식을 연결해 보는 학습 영역이다.
- 느린 API와 장애는 코드 한 줄이 아니라 thread 점유, GC, socket, file descriptor, disk I/O, scheduler 대기가 합쳐져 나타난다.
- 백엔드 개발자는 기능 구현뿐 아니라 실행 환경의 관찰 지표와 병목 원인을 연결할 수 있어야 한다.
핵심 정리
- 하나의 요청은 client, kernel socket, web server, Tomcat thread, Spring handler, service, DB/client I/O, JVM heap, OS scheduler를 통과한다.
- Application은 업무 규칙을 담고, JVM은 Java runtime과 memory를 관리하며, OS는 process, thread, file, socket, memory page, CPU scheduling을 관리한다.
- CPU, memory, I/O, network는 서로 독립된 체크리스트가 아니라 같은 요청의 다른 비용 모델이다.
- 개인 프로젝트는 기본 관찰과 timeout, dump 확보가 핵심이고, 기업 운영은 SLO, alert, capacity, runbook, 변경 통제가 추가된다.
- 학습 순서는 전체 흐름, 실행 단위, blocking, memory, file/socket, Linux 관찰, 동시성, JVM, 병목 분석, 플레이북으로 잡는다.
헷갈리는 지점
- Spring을 알면 실행 환경도 충분히 안다고 생각하기 쉽다.
- Spring은 요청 흐름을 추상화하지만 CPU, memory, socket, thread 비용을 없애지 않는다.
- 운영 장애에서는 추상화 아래 계층의 지표를 함께 봐야 한다.
- CPU 사용률만 보면 성능 병목을 판단할 수 있다고 오해하기 쉽다.
- CPU가 낮아도 lock, I/O, pool 대기 때문에 응답은 느릴 수 있다.
- CPU가 높아도 실제 원인은 GC나 재시도 폭주일 수 있다.
- 개인 프로젝트에는 운영 관찰이 필요 없다고 느끼기 쉽다.
- 작은 서비스도 장애가 나면 원인 분석과 복구가 필요하다.
- 기본 로그, timeout, dump 방법은 규모와 무관하게 필요하다.
확인 질문
- Computer System 문서를 백엔드 개발자가 배워야 하는 이유는 무엇인가?
- 서버 코드가 실제로 OS와 JVM 자원 위에서 실행되며 장애 원인도 그 자원에서 드러나기 때문이다.
- Web-Back(Spring) 문서와의 경계는 무엇인가?
- Spring 설정법보다 thread, memory, JVM, OS, I/O의 실행 원리를 다룬다는 점이다.
- 느린 API를 볼 때 가장 먼저 나눌 축은 무엇인가?
- CPU 계산 문제인지, thread 대기 문제인지, memory/GC 문제인지, I/O 또는 network 문제인지 나누는 것이다.