본문 바로가기
카테고리 없음

Zero-Copy는 왜 서버 성능을 높여줄까

by by_merry 2026. 5. 23.

고성능 서버 구조를 공부하다 보면 어느 순간부터는 CPU 계산 속도보다 “데이터를 어떻게 옮기느냐”가 훨씬 중요한 문제처럼 느껴지기 시작한다. 나도 예전에는 서버 성능이라고 하면 CPU나 RAM만 생각했었다. 그런데 Epoll이나 Context Switching 구조를 조금씩 이해하고 나니까, 실제 서버는 생각보다 계산보다도 데이터 이동 때문에 훨씬 많은 비용을 쓰고 있다는 걸 알게 됐다. 그리고 그 흐름 끝에서 등장하는 대표적인 최적화 기술 중 하나가 바로 Zero-Copy다.

처음 이름만 들었을 때는 “복사를 안 한다고?”라는 생각부터 들었다. 컴퓨터는 데이터를 복사하면서 움직이는 게 당연한 줄 알았기 때문이다. 그런데 실제로는 서버가 파일 하나를 네트워크로 전송할 때조차 메모리 복사가 여러 번 발생하고 있었고, 그 복사 비용 자체가 CPU 부담이 될 수 있다는 걸 알고 꽤 충격이었다.

 

서버는 데이터를 생각보다 엄청 많이 복사한다

예를 들어 웹서버가 사용자에게 이미지 파일이나 영상을 전송한다고 생각해보자. 처음에는 나도 그냥 SSD에서 읽어서 바로 인터넷으로 보내는 줄 알았다. 그런데 실제 운영체제 내부에서는 생각보다 훨씬 많은 단계가 존재한다.

기본적인 방식에서는:

  • 디스크 → 커널 버퍼
  • 커널 버퍼 → 사용자 공간(User Space)
  • 사용자 공간 → 다시 커널 네트워크 버퍼
  • 커널 → 네트워크 카드

같은 흐름으로 데이터가 이동한다.

즉, 단순 파일 하나 보내는 과정에서도 메모리 복사가 여러 번 발생하는 것이다.

나도 처음 이 구조를 봤을 때 꽤 의외였다. SSD 속도나 네트워크 속도만 중요할 줄 알았는데, 실제로는 중간 메모리 복사 자체가 CPU 자원을 계속 사용하고 있었다.

특히 서버가 수천~수만 개 요청을 동시에 처리하는 환경에서는 이 복사 비용이 엄청나게 커질 수 있다고 한다. 예를 들어 대용량 파일 다운로드 서버나 스트리밍 서버에서는 CPU 계산보다 메모리 복사가 더 큰 병목이 되는 경우도 있다고 한다.

그걸 보면서 처음으로 “서버 최적화는 단순 계산 속도 문제가 아니구나”라는 걸 느끼게 됐다.

Zero-Copy는 불필요한 메모리 복사를 최대한 줄이는 구조다

Zero-Copy의 핵심은 굉장히 단순하다. “굳이 사용자 공간까지 데이터를 복사하지 말자”는 것이다.

대표적으로 리눅스의 sendfile() 같은 시스템 호출이 자주 사용된다. 이 구조에서는 파일 데이터를 굳이 사용자 프로그램 메모리까지 복사하지 않고, 커널 내부에서 바로 네트워크로 전달할 수 있다.

즉:

  • 디스크 → 커널
  • 커널 → 네트워크 카드

처럼 중간 복사 과정을 크게 줄이는 것이다.

처음에는 나도 “복사 몇 번 줄어드는 게 그렇게 큰 차이인가?” 싶었는데, 현대 서버에서는 네트워크 속도와 SSD 속도가 워낙 빨라져서 오히려 CPU가 메모리 복사 때문에 바빠지는 상황도 생길 수 있다고 한다.

특히 Zero-Copy를 사용하면:

  • CPU 사용량 감소
  • 메모리 대역폭 절약
  • 캐시 오염 감소

같은 효과를 얻을 수 있다.

나도 예전에 Nginx가 왜 그렇게 빠른 서버로 유명한지 궁금했는데, Epoll뿐만 아니라 이런 Zero-Copy 최적화까지 적극적으로 사용하고 있다는 걸 알고 꽤 인상 깊었다.

결국 현대 서버는 “얼마나 계산을 빨리하느냐”보다 “얼마나 불필요한 작업을 줄이느냐”가 훨씬 중요한 시대가 된 것이다.

그래서 현대 서버는 CPU보다 데이터 흐름 최적화에 더 집중하기도 한다

예전에는 서버 성능이라고 하면 단순히 더 비싼 CPU를 쓰면 해결될 거라고 생각하기 쉬웠다. 나도 처음에는 서버 최적화라는 게 결국 CPU 업그레이드 정도라고만 생각했었다.

그런데 실제 대규모 서버 구조를 보다 보니까 현대 시스템은:

  • Context Switching 줄이기
  • Epoll 기반 이벤트 처리
  • Zero-Copy 사용
  • 캐시 효율 최적화

같이 “CPU 낭비 자체를 줄이는 방향”으로 계속 발전하고 있었다.

특히 데이터센터나 CDN 서버처럼 엄청난 네트워크 트래픽을 처리해야 하는 환경에서는, 단순 메모리 복사 비용조차 엄청난 차이를 만들 수 있다고 한다.

나도 처음에는 “복사 정도야 컴퓨터가 금방 하지 않을까?”라고 생각했는데, 서버 규모가 커질수록 아주 작은 비효율도 엄청난 비용 차이로 이어질 수 있다는 걸 알게 됐다.

이걸 공부하면서 가장 인상 깊었던 건 현대 서버는 단순 계산기가 아니라는 점이었다. 결국 핵심은 데이터를 얼마나 효율적으로 움직이고, CPU가 불필요한 일에 시간을 쓰지 않게 만드는가에 가까웠다.

한 줄로 정리하면 Zero-Copy는 사용자 공간과 커널 공간 사이의 불필요한 데이터 복사를 줄여 CPU 사용량과 메모리 비용을 낮추는 기술이며, 대규모 서버 성능 최적화에 중요한 역할을 한다.