본문 바로가기
일반IT

BPF의 심장에 새겨진 이름, '버클리'는 어디에서 왔을까?

by gasbugs 2025. 8. 4.

https://www.sciencedirect.com/topics/computer-science/berkeley-packet-filter

 

오늘날 클라우드 네이티브, 쿠버네티스 환경에서 모니터링, 네트워킹, 보안을 이야기할 때 절대 빼놓을 수 없는 기술이 있습니다. 바로 BPF(Berkeley Packet Filter), 그리고 그 확장판인 eBPF입니다. 강력한 성능과 유연성으로 리눅스 커널의 심장부에서 활약하는 이 기술의 이름 앞에 붙은 '버클리(Berkeley)'는 과연 무엇을 의미할까요?

 

단순히 지명일까요? 아니면 사람 이름일까요? 오늘은 BPF라는 이름의 어원을 따라 그 탄생의 순간으로 시간 여행을 떠나보겠습니다.

모든 것은 '느림'에서 시작되었다: BPF 이전의 시대

이야기는 1980년대 후반으로 거슬러 올라갑니다. 당시에도 네트워크 트래픽을 분석하고 디버깅하는 것은 매우 중요한 작업이었습니다. tcpdump와 같은 도구들은 네트워크 관리자와 개발자들에게 필수적이었습니다.

 

하지만 당시의 패킷 필터링 기술에는 심각한 성능 문제가 있었습니다. 대표적으로 썬 마이크로시스템즈의 SunOS에서 사용되던 NIT(Network Interface Tap)를 예로 들어보겠습니다.

  1. 무차별적인 데이터 복사: NIT의 가장 큰 문제는, 필터링 로직이 사용자 공간(User Space)에 있었다는 점입니다. 이 때문에 네트워크 인터페이스에서 들어오는 모든 패킷이 일단 커널 공간(Kernel Space)에서 사용자 공간의 애플리케이션(예: tcpdump)으로 복사되어야 했습니다.
  2. 비효율적인 필터링: tcpdump는 이렇게 복사된 모든 패킷을 받아본 후에야 비로소 자신이 원하는 조건(예: '80번 포트로 들어오는 TCP 패킷')에 맞는지 검사하고, 나머지는 버렸습니다.
  3. 잦은 컨텍스트 스위칭: 이 과정에서 커널 공간과 사용자 공간을 오가는 비싼 컨텍스트 스위칭(Context Switching)이 반복적으로 발생했습니다.

결과적으로, 네트워크 트래픽이 조금만 많아져도 시스템 전체에 엄청난 부하를 주었고, 정작 필요한 패킷은 놓치는 일도 다반사였습니다. "단지 특정 패킷 몇 개를 보고 싶을 뿐인데, 왜 모든 패킷을 다 복사해야 하는가?"라는 근본적인 질문이 나올 수밖에 없었습니다.

 

혁신의 요람, 로렌스 버클리 연구소(LBL)

이러한 비효율을 해결하기 위해 두 명의 천재적인 개발자가 등장합니다. 바로 스티븐 맥캔(Steven McCanne)밴 제이콥슨(Van Jacobson)입니다.

로렌스 버클리 국립 연구소(LBNL) 로고 https://en.wikipedia.org/wiki/File:Berkeley_Lab_Logo_Large.jpg

 

그들은 당시 캘리포니아 대학교 버클리(University of California, Berkeley) 산하의 로렌스 버클리 연구소(Lawrence Berkeley Laboratory, LBL)에서 근무하고 있었습니다. 바로 이 장소가 BPF 이름의 핵심입니다.

그들은 1992년, 기념비적인 논문 "The BSD Packet Filter: A New Architecture for User-level Packet Capture"를 발표하며 기존의 문제를 완벽하게 해결할 새로운 아키텍처를 세상에 내놓습니다.

 

'버클리 패킷 필터'의 탄생: 발상의 전환

그들의 아이디어는 단순하면서도 혁명적이었습니다.

"필터링을 비싼 사용자 공간이 아닌, 빠르고 효율적인 커널 공간 내부에서 직접 처리하자!"

 

이를 위해 그들은 커널 내부에 아주 작고 빠른 가상 머신(Virtual Machine)을 만들었습니다. BPF 프로그램이라 불리는 필터링 규칙(Bytecode)을 사용자 공간에서 커널로 전달하면, 커널에 있는 이 가상 머신이 각 패킷에 대해 직접 필터링을 수행하는 방식이었습니다.

이 방식의 장점은 명확했습니다.

  • 선별적인 데이터 복사: 오직 필터링 규칙을 통과한(matching) 패킷만이 사용자 공간으로 복사됩니다. 불필요한 99%의 패킷 복사 비용이 사라졌습니다.
  • 커널 수준의 빠른 처리: 커널 내부에서 직접 필터링이 이루어지므로 컨텍스트 스위칭이 최소화되고 처리 속도가 극적으로 향상되었습니다.

이 새로운 기술은 그들의 소속 기관인 로렌스 버클리 연구소(Lawrence Berkeley Laboratory)의 이름을 따 버클리 패킷 필터(Berkeley Packet Filter, BPF)라고 명명되었습니다. 또한, 이 기술은 버클리 소프트웨어 배포판(Berkeley Software Distribution, BSD) 운영체제에 처음으로 구현되어 널리 알려지면서 '버클리'라는 이름은 더욱 굳건해졌습니다.

 

결론: 단순한 이름 이상의 의미

결론적으로 BPF에 '버클리'라는 이름이 붙은 이유는 다음과 같이 요약할 수 있습니다.

  1. 개발의 산실: BPF 기술이 탄생하고 개발된 핵심 장소가 바로 캘리포니아 대학교 버클리(UC Berkeley) 산하의 로렌스 버클리 연구소(LBL)였기 때문입니다.
  2. 최초의 보금자리: 이 기술이 최초로 적용되고 배포된 운영체제가 바로 버클리 소프트웨어 배포판(BSD)이었기 때문입니다.

오늘날 우리가 사용하는 eBPF는 본래의 BPF(현재는 cBPF, classic BPF라 불림)를 리눅스 환경에서 알렉세이 스타로보이토프(Alexei Starovoitov)가 확장한 것입니다. 패킷 필터링을 넘어 커널의 거의 모든 영역을 추적하고 프로그래밍할 수 있는 '커널계의 자바스크립트'로 진화했죠.

 

하지만 그 뿌리는 1990년대 초, 네트워크의 비효율을 해결하려던 '버클리'의 천재 개발자들의 열정과 통찰력에 닿아있습니다. 따라서 BPF 앞의 '버클리'는 단순한 지명을 넘어, 혁신적인 아이디어가 탄생한 역사와 그 기술적 정통성을 상징하는 이름이라고 할 수 있겠습니다.