💭 Minji's Archive

[s2n] 런타임 환경 격리화 vs 개발 환경 격리화

November 16, 2025

1) 런타임 환경 격리

목적

  • 패키지가 실제로 배포된 뒤, 사용자 시스템에서 안전하고 일관되게 실행되도록 보장하는 것 -> 즉 PyPI에 올라간 s2n이 현업에서 충돌 없이 동작해야 하는 환경
  • 최종 사용자에게 문제가 생기지 않게 배포본을 감싸서 보호하는 것.

특징

  • 운영 환경(OS, 패키지 버전, 의존성)이 확정된 상태
  • 보안/안정성/성능이 우선
  • Docker 이미지, AWS Lambda Layer, venv/conda 환경, system-level deps 등이 포함됨
  • 변경은 매우 보수적
  • 개발 편의 기능 거의 없음

예시 (s2n 기준)

  • pip install s2n한 유저의 익명 서버
  • 우리가 배포하는 도커 이미지
  • CI 실행 환경 (테스트 -> 빌드 -> 배포)

2) 개발 환경 격리

목적

  • 개발자마자 다른 로컬 환경에서도 동일하게 빌드/테스트가 재현되게 하기 위해 -> 팀원 5명이 모두 같은 버전 조건에서 s2n 코드를 수정하기 위해 필요한 환경
  • 개발자가 쓰는 작업 공간을 깔끔하게 만드는 것

특징

  • 개발자 편의를 위한 도구 포함 (Pytest, black, …)
  • 소스 코드 수정/테스트/디버깅 중심
  • 업데이트 자주 가능

예시

  • .venv/ 안에서 개발
  • pdm install로 dev dependencies 설치
  • plugin 디버깅, scan-engine 실험
  • FastAPI 개발 서버 띄워서 테스트

정리

플러그인 실행 로직을 개발 환경에서 실행하지 않고, 격리된 도커 컨테이너 안에서 실행시키는 구조. 즉 CLI/코드가 플러그인 실행 -> 내부적으로 docker exec 혹은 컨테이너 호출을 통해 실행

(1) 개발 환경

개발자가 로컬에서 명령 호출하면 플러그인 실행은 도커 안에서

dev 환경 (내 로컬)
  ↓   CLI 호출
docker exec ... s2n-plugin-runner ...
  ↓
컨테이너 내부에서 플러그인 실행
___ENV__ = "dev"
  • 로컬에서 명령 실행
  • 내부적으로 dev용 도커 컨테이너 자동 실행
  • 모든 플러그인은 컨테이너 내부

(2) 런타임 환경

유저가 pip install s2n 해도 플러그인은 결국 s2n이 내장한 도커 이미지 내에서 실행

사용자 서버 ( pip install s2n )
  ↓
s2n CLI
  ↓ 내부적으로
docker exec ... run plugin
  ↓
컨테이너에서 실행됨
__ENV__ = "prod"
  • 사용자는 pip로 받은 s2n 실행
  • s2n 내부에서 prod용 도커 이미지 실행
  • 플러그인 실행은 항상 prod 컨테이너 안에서 처리