CPU는 명령어를 해석해서 실행하거나 연산 작업을 할 때는 무조건 메모리를 통해서만 데이터를 가져온다. 디스크에 직접 접근하지 않는다.
실행할 프로그램의 코드, 변수(전역 변수, 매개 변수…)
RAM이라 부르기도 한다.
[디스크(Disk)]
C드라이브와 같은 컴퓨터 저장 공간
영구적으로 데이터, 파일 등을 저장
데이터를 가져올 때 속도가 상대적으로 느림
✅ CPU, 메모리(Memory)의 직관적인 이해
CPU를 많이 사용하는 작업
app.js
let num = 1;
while (true) {
num += 1;
}
메모리를 많이 사용하는 작업
app.js
while (true) {
let largeArray = [];
for (let i = 0; i < 10000000; i++) {
largeArray.push(i);
}
}
✅ CPU, 메모리, 디스크의 직관적인 이해를 위한 연습
DB는 CPU, 메모리, 디스크를 어떻게 사용할까?
디스크로부터 데이터를 조회해서 메모리에 올림
메모리에서 연산, 필터링, 집계 등의 작업을 CPU가 처리함
⇒ DB의 특성상 많은 양의 데이터를 가지고 작업을 해야 하는 경우가 빈번해서,
CPU, 메모리 둘 다를 많이 사용하는 편이다.
백엔드 서버는 CPU, 메모리, 디스크를 어떻게 사용할까?
백엔드 서버의 로직에 파일을 읽어오거나, 파일을 생성하는 로직이 없다면 디스크는 거의 사용할 일이 없다.
파일 업로드나 파일 조회 같은 건 S3와 같은 서비스를 활용해 별도로 분리하는 추세다.
DB로부터 불러오는 데이터의 양이 그렇게 크지 않을 경우 메모리를 많이 사용할 일이 없다.
많은 요청에 대해 로직을 처리해야 하기 때문에 CPU를 많이 사용하는 편이다.
복잡한 연산 작업(인코딩, 디코딩, 암호화 등)을 사용할 경우 CPU를 많이 사용한다.
로드밸런서는 CPU, 메모리, 디스크를 어떻게 사용할까?
요청이 들어오면 적절하게 서버들한테 골고루 트래픽을 분배해주는 역할을 한다.
임시로 저장해야 하는 데이터가 많은 게 아니기 때문에 메모리를 많이 사용할 일이 없다.
많은 요청을 분배해주는 로직(= 연산)을 처리하기 때문에 CPU를 많이 사용한다.
캐시(Redis)는 CPU, 메모리, 디스크를 어떻게 사용할까?
캐시의 특성상 빠르게 데이터를 조회해야 하기 때문에 디스크에 데이터를 저장하지 않고 메모리에 데이터를 저장해둔다.
디스크보다 메모리가 데이터 접근 속도(읽기, 쓰기)가 훨씬 빠르기 때문이다.
캐시의 주 역할은 데이터 조회다. 연산할만한 작업은 많이 없다. 따라서 CPU보다는 메모리를 많이 사용하는 편이다.
✅ Disk I/O, Network I/O란?
서버의 성능을 측정할 때 CPU, 메모리 이외에도 Disk I/O, Network I/O와 같은 다양한 값들이 있다. 하지만 입문자 입장에서는 너무 많은 메트릭을 한 번에 이해하려고 하면 어렵게 느껴진다. 파레토의 법칙에 따라 CPU, 메모리에 최대한 초점을 맞춰서 부하 테스트를 진행할 예정이다.
실제 AWS 클라우드를 사용하면 대부분 CPU, 메모리 부족으로 인해 병목 현상이 발생한다. 따라서 CPU, 메모리 이 2가지 메트릭만 가지고 부하 테스트 및 성능 개선을 연습해보자.
🧑🏻🏫
CPU, 메모리, 디스크와 같은 장치에 대해 더 자세히 알고 싶다면 운영체제(OS)에 대해 추가적으로 학습해보는 걸 추천한다. 개발자가 필수적으로 공부해야 하는 과목 중 하나가 운영체제(OS)이다.