본문으로 건너뛰기

kern과 Docker의 LangChain Shell 세션 비용 비교

kern은 LangChain Shell 세션 시작·종료 비용을 Docker보다 크게 낮추지만 격리 방식은 다릅니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

LangChain의 ShellToolMiddleware에 kern 실행 정책을 주입하면 Docker보다 세션 생성과 종료 비용을 크게 낮출 수 있습니다. 동일한 이미지와 한 머신에서 n=16으로 측정한 결과 kern은 안정 상태 시작 4.1 ms, 종료 1.1 ms였고 Docker는 각각 157.4 ms, 63.4 ms였습니다. 명령별 왕복 시간은 둘 다 1 ms보다 작아 차이는 세션 수명 주기에 집중됐으며, kern은 더 강한 격리가 아니라 데몬 없는 rootless 실행으로 세션을 저렴하게 만드는 선택지입니다. raw socket, mount, setuid 처리와 timeout 뒤 상태 손실 같은 차이는 별도로 고려해야 합니다.

실용적 조언

  • 세션 생성과 종료가 자주 발생하는 LangChain Shell 작업에서는 kern 실행 정책과 Docker 실행 정책의 세션 수명 주기 비용을 별도로 측정하는 편이 적절합니다. kern을 사용하려면 kern-sandbox[langchain-shell]를 설치하고 ShellToolMiddleware에 kern_execution_policy()를 주입하면 됩니다. langchain>=1.3이 필요합니다.
  • 보안 동작을 Docker와 동일하다고 가정하지 말고 네트워크, capability, memory cap, pid cap 기본값과 raw socket·mount·setuid 차이를 README 기준으로 확인해야 합니다. 특히 ping이나 mount가 필요한 명령은 backend별 동작 차이를 사전에 검증해야 합니다.
  • timeout 복구를 설계할 때는 세션 재시작으로 작업 디렉터리와 export 변수, 백그라운드 프로세스가 사라진다는 점을 고려해야 합니다. 인자가 없는 cat처럼 프로토콜 marker를 소비하는 명령은 세션 동기화를 깨뜨릴 수 있으므로 피해야 합니다.

섹션별 상세

01
동일한 이미지를 두 런타임에 미리 내려받고 한 머신에서 n=16으로 측정한 결과, kern의 첫 세션 시작 시간은 14.5 ms, 안정 상태는 4.1 ms였고 Docker는 각각 159.6 ms와 157.4 ms였습니다. 왕복 시간은 kern 0.05 ms, Docker 0.16 ms로 둘 다 1 ms보다 작았습니다. 따라서 차이는 명령 실행보다 세션 생성과 종료 과정에서 발생했습니다.
02
첫 세션과 안정 상태의 차이를 이미지 캐시 효과로 볼 수 없다는 추가 측정이 제시됐습니다. 프로세스마다 첫 세션만 측정한 8개의 새 프로세스에서 12~25 ms가 나왔고 어느 것도 4 ms까지 낮아지지 않아, 해당 차이는 클라이언트의 프로세스별 warm-up으로 해석됐습니다. 부하 평균이 0.8일 때와 22.8일 때도 같은 결과가 나와 부하 변화가 결론을 바꾸지 않았습니다.
03
세션을 만드는 비용은 명령 시간 초과가 발생할 때 더 커집니다. Shell middleware는 timeout마다 전체 세션을 다시 시작하므로 작업 디렉터리, export 변수, 백그라운드 프로세스를 잃지만 모델에는 이를 알리지 않으며, 인자가 없는 cat이 프로토콜 marker를 소비하면 세션이 영구적으로 동기화에서 벗어납니다. 이 문제는 DockerExecutionPolicy에서도 동일하게 재현됐고, 재시작 비용은 kern 5.4 ms, Docker 219.6 ms였습니다.
04
kern은 데몬 없는 rootless 실행을 사용하지만 Docker와 마찬가지로 커널 경계를 넘지 않으므로 격리가 더 강해지는 것은 아닙니다. 기본 정책은 네트워크를 차단하고 capability를 모두 제거하며 memory cap과 pid cap을 적용하고, match_docker_capabilities=True를 지정하면 컨테이너가 유지하는 14개 capability를 그대로 복원합니다. raw socket 부재로 ping이 작동하지 않고 mount는 seccomp로 실패하며 setuid 비트는 nosuid rootfs에서 숨겨지는 차이가 남습니다.

용어 해설

실행 정책 인터페이스(BaseExecutionPolicy)
BaseExecutionPolicy는 ShellToolMiddleware가 명령 실행 환경을 선택할 때 받는 정책 인터페이스입니다. Docker 대신 kern 같은 백엔드를 주입해 세션 생성과 종료 방식을 바꿀 수 있습니다.
비루트 실행(rootless)
rootless는 별도의 특권 데몬이나 호스트의 root 권한 없이 프로세스를 실행하는 방식입니다. kern은 이 방식으로 컨테이너와 같은 커널 경계를 사용하면서 세션 생성 비용을 줄입니다.
seccomp 시스템 호출 필터(seccomp)
seccomp는 프로세스가 사용할 수 있는 시스템 호출을 제한하는 커널 보안 기능입니다. 이 비교에서는 kern에서 mount가 EPERM이 아니라 seccomp 차단으로 실패하는 차이를 만듭니다.
nosuid 루트 파일 시스템(nosuid rootfs)
nosuid rootfs는 파일 시스템에서 setuid·setgid 비트를 적용하지 않는 루트 파일 시스템입니다. kern에서는 이 설정 때문에 setuid 비트가 숨겨져 Docker와 실행 환경이 달라집니다.

코드 예제

bash
pip install 'kern-sandbox[langchain-shell]'

LangChain Shell 미들웨어에서 kern 실행 정책을 사용하기 위한 Python 패키지를 설치합니다.

python
from langchain.agents.middleware import ShellToolMiddleware
from kern_sandbox.langchain import kern_execution_policy

middleware = ShellToolMiddleware(execution_policy=kern_execution_policy())

ShellToolMiddleware에 kern_execution_policy를 주입해 Docker 대신 kern에서 세션을 실행합니다.

언급된 도구

LangChain중립

ShellToolMiddleware를 통해 실행 정책을 주입하고 명령 세션을 관리합니다.

kern추천링크

LangChain Shell 세션을 Docker 대신 rootless 환경에서 실행하는 백엔드입니다.

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 26.수집 2026. 08. 27.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.