피드로 돌아가기
My .NET Docker image was 900MB - here's how I fixed it (and what I got wrong with JWT)
Dev.toDev.to
DevOps

Multi-stage Build 도입을 통한 .NET 이미지 88% 경량화 및 JWT 보안 강화

My .NET Docker image was 900MB - here's how I fixed it (and what I got wrong with JWT)

James Nguyen2026년 5월 7일3beginner

Context

SDK 이미지를 런타임 환경에 그대로 사용함에 따라 불필요한 빌드 도구가 포함된 912MB의 비효율적 이미지 생성. JWT를 LocalStorage에 저장하는 구조로 인해 XSS 공격 시 세션 탈취 가능성이 존재하는 보안 취약점 노출.

Technical Solution

  • 빌드와 실행 환경을 분리하는 Multi-stage Build 설계를 통한 이미지 최적화
  • 컴파일 전용 SDK 이미지에서 결과물만 추출하여 경량 런타임 기반의 Alpine 이미지로 이전
  • .dockerignore 설정을 통한 로컬 빌드 아티팩트의 이미지 컨텍스트 포함 방지
  • JavaScript 접근을 원천 차단하는 httpOnly Cookie 기반의 JWT 저장 방식으로 변경
  • Secure 및 SameSite.Strict 옵션 적용을 통한 전송 계층 보안 및 CSRF 방어 체계 구축

1. Dockerfile 작성 시 SDK와 Runtime 이미지를 분리하는 Multi-stage 구조 적용 여부 확인

2. .dockerignore 파일을 통한 bin, obj 등 불필요한 로컬 파일 배제 설정

3. 민감한 인증 토큰 저장 시 LocalStorage 대신 httpOnly, Secure 옵션이 적용된 Cookie 사용 검토

원문 읽기