728x90
1. Cursor 확장 프로그램 베스트 프랙티스
1.1 필수 확장 (핵심)
- ESLint / Prettier – 린팅 + 일관 포맷
- Git Graph / Git History – 시각적 Git 관리
- Python / Pylance / Python Debugger – 파이썬 개발 필수
- PHP Intelephense – PHP 인텔리센스 (⚠️ 기본 PHP 확장 비활성 권장)
- Docker / DotEnv – 컨테이너/환경변수 관리
- Todo Highlighter – TODO 주석 트래킹
- (선택) Remote - SSH / Dev Containers – 원격/컨테이너 개발
1.2 프론트엔드/디자인
- Auto Rename Tag – 태그 자동 이름 동기화
- Tailwind CSS IntelliSense – 유틸리티 클래스 자동완성
- Nord Palette / Material Icon Theme / JetBrains Icon Theme – 가독성 높은 테마/아이콘
1.3 기타 유용
- Project Manager – 멀티 프로젝트 전환
- Path IntelliSense / npm IntelliSense – 경로/패키지 자동완성
- Vue / Svelte / NativeScript – 프레임워크별 생산성
- Markdown All in One / Highlight Matching Tag – 문서/태그 편의성
- (Python 팀 추천) Ruff – 초고속 Python 린팅(ESLint 느낌)
1.4 팀 공유용 설정 예시
- 확장 묶음 추천 파일:
.vscode/extensions.json
{
"recommendations": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.debugpy",
"ms-azuretools.vscode-docker",
"usernamehw.todo-highlight",
"pkief.material-icon-theme",
"bradlc.vscode-tailwindcss",
"formulahendry.auto-rename-tag"
]
}
- 팀 공통 설정:
.vscode/settings.json
{
"editor.formatOnSave": true,
"files.eol": "\n",
"eslint.validate": ["javascript", "typescript", "vue"],
"prettier.singleQuote": true,
"prettier.semi": false,
"python.analysis.typeCheckingMode": "basic",
"security.workspace.trust.enabled": true
}
✅ 보안 체크 (IDE/확장)
- Workspace Trust 켜고, 신뢰되지 않은 폴더는 자동 실행 금지.
- 확장 출처 검증(제작자·다운로드 수·최종 업데이트) 후 설치.
- Secret Auto-Reveal 금지: .env, 키 파일은 Workspace 제외 또는 Vault 사용.
- Git Hook로
pre-commit
에 gitleaks/ruff/eslint 실행.
2. Docker 기반 개발환경 (DevContainers 포함)
2.1 Dev Container로 “개발 표준화”
/.devcontainer/devcontainer.json
{
"name": "app-dev",
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"features": { "ghcr.io/devcontainers/features/docker-in-docker:2": {} },
"postCreateCommand": "pip install -U pip && pip install -r requirements.txt",
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-python.vscode-pylance",
"esbenp.prettier-vscode"
],
"settings": { "python.defaultInterpreterPath": "/usr/local/bin/python" }
}
}
}
2.2 Dockerfile (보안 모범 예시)
FROM python:3.12-slim@sha256:<고정된_이미지_다이제스트>
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
RUN adduser --disabled-password --gecos "" app \
&& apt-get update && apt-get install -y --no-install-recommends curl ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
USER app
ENTRYPOINT ["python","-m","app"]
2.3 docker-compose (개발용 핫리로드)
# docker-compose.dev.yml
services:
web:
build:
context: .
dockerfile: Dockerfile
command: uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
volumes:
- .:/app
ports:
- "8000:8000"
environment:
- ENV=dev
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
✅ 보안 체크 (컨테이너)
- 베이스 이미지 다이제스트 고정 + 주기적 취약점 스캔(Trivy)
- USER 지정(root 금지),
cap_drop: [ALL]
,no-new-privileges
적용 - 민감파일
.dockerignore
로 제외, 이미지에 비밀값 포함 금지 - SBOM(Syft) 생성 및 아티팩트 보관
3. VM & 원격 개발(SSH/Vagrant)
3.1 Vagrant 예시 (로컬 재현)
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y python3-pip docker.io
usermod -aG docker vagrant
SHELL
end
3.2 원격 개발 (SSH)
- Remote - SSH 확장으로
~/.ssh/config
에 호스트 정의 후 Cursor에서 바로 접속. - 팀 공용 미리 구성된 이미지/AMI로 환경 차이 최소화.
✅ 보안 체크 (VM/원격)
- SSH 하드닝(비밀번호 비활성화, 공개키만 허용, fail2ban)
- 불변 이미지 + 클라우드-이니트로 재현성 확보
- 감사로그(auth.log, shell history) → Wazuh/Elastic으로 전달
4. Windows & WMI(PowerShell) 자동화
4.1 상태 조회/제어 (CIM 권장)
# OS/빌드
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, BuildNumber
# 서비스 조회
Get-CimInstance Win32_Service -Filter "Name='Docker'" | Select-Object Name, State, StartMode
# 원격 명령 실행(출력 리디렉션 예시)
Invoke-CimMethod -ClassName Win32_Process -MethodName Create `
-Arguments @{ CommandLine = "cmd /c ipconfig /all > C:\temp\net.txt" }
4.2 실행 정책/보안
# 현재 세션만 스크립트 실행 허용(서명 필요)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
- 서명된 스크립트 사용, 자격증명은 Windows Credential Manager/DPAPI 사용.
- AMSI/Defender 우회 시도 탐지 켜고, PowerShell 로그(모듈/스크립트 블록) 수집.
✅ 보안 체크 (WMI/PowerShell)
- Just Enough Administration(JEA)로 최소권한 세션
- 스크립트 블록 로깅 + 이벤트 포워딩 → SIEM(Elastic/Wazuh)
- 서명·무결성: 사내 코드서명 CA 운영
300x250
5. CI/CD 파이프라인 & 테스트 자동화
5.1 GitHub Actions(예시: Python/Node + Docker 빌드·스캔·서명)
name: ci
on:
push:
branches: [ "main" ]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
lang: [python, node]
steps:
- uses: actions/checkout@v4
- name: Setup
if: matrix.lang == 'python'
uses: actions/setup-python@v5
with: { python-version: '3.12' }
- name: Install & Test (Python)
if: matrix.lang == 'python'
run: |
pip install -r requirements-dev.txt
tox -q
- name: Install & Test (Node)
if: matrix.lang == 'node'
uses: actions/setup-node@v4
with: { node-version: '20' }
- name: Node Test
if: matrix.lang == 'node'
run: |
npm ci
npm test --silent
build_and_scan:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write # OIDC용
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/metadata-action@v5
id: meta
with:
images: ghcr.io/${{ github.repository }}
- uses: docker/build-push-action@v6
with:
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
provenance: true
- name: Trivy Scan
uses: aquasecurity/trivy-action@0.24.0
with:
image-ref: ${{ steps.meta.outputs.tags }}
format: 'table'
exit-code: '1'
severity: 'CRITICAL,HIGH'
- name: SBOM (Syft)
uses: anchore/sbom-action@v0
with:
image: ${{ steps.meta.outputs.tags }}
artifact-name: sbom.spdx.json
- name: Cosign Sign
uses: sigstore/cosign-installer@v3
- run: cosign sign --yes ${{ steps.meta.outputs.tags }}
env:
COSIGN_EXPERIMENTAL: 1
5.2 Tox(멀티 파이썬)
# tox.ini
[tox]
envlist = py{310,311,312}
[testenv]
deps = -r requirements-dev.txt
commands = pytest -q
5.3 Docker 테스트 컴포즈
# docker-compose.test.yml
services:
sut:
build: .
command: pytest -q
depends_on:
- db
environment:
- DB_URL=postgresql://user:pass@db:5432/app
db:
image: postgres:16-alpine
environment:
- POSTGRES_PASSWORD=pass
5.4 E2E(예: Playwright)
npm i -D @playwright/test
npx playwright install
npx playwright test
✅ 보안 체크 (CI/CD)
- 의존성 고정 +
pip-audit
/npm audit
/safety
로 SCA - PR 필수 리뷰 & 서명 커밋(GPG/SSH Sig) + 브랜치 보호
- OIDC + 클라우드 권한 최소화,
secrets
는 환경별 분리 - Actions 버전 고정 또는 SHA 핀(임의 코드 삽입 방지)
6. “즉시 확인” 개발 워크플로우
6.1 핫 리로드/라이브 리로드
- 웹: Vite/Next.js/Live Server
- Node:
nodemon --watch src --exec node src/index.js
- Python(FastAPI):
uvicorn app.main:app --reload
- Docker 볼륨 마운트 +
--watch
조합으로 컨테이너 내 즉시 반영
6.2 로컬 CI 시뮬레이터
# GitHub Actions 로컬 검증
brew install act # 또는 https://github.com/nektos/act 참고
act -j ci
✅ 보안 체크 (즉시 확인)
- Dev/Prod 분리(디버그/핫리로드는 Dev 한정)
- 로컬 트래픽/로그 익스포즈 금지, 샘플 비밀값 사용
7. 실시간 모니터링 & 피드백
7.1 관측성 스택(docker-compose 예시)
services:
prometheus:
image: prom/prometheus
volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml" ]
ports: [ "9090:9090" ]
grafana:
image: grafana/grafana
ports: [ "3000:3000" ]
environment:
- GF_SECURITY_ADMIN_PASSWORD=changeme
app:
build: .
ports: [ "8000:8000" ]
# /metrics 노출 (Prometheus 스크랩)
- 헬스체크:
/healthz
,/readyz
를 CI/배포·LB·K8s Readiness와 연계 - 경보: Alertmanager 규칙으로 오류율/지연/리소스 이상 시 Slack 알림
- 사용자 피드백: 인앱 위젯/양식(예: Forms) → 중앙 이슈/CRM로 자동 집계
✅ 보안 체크 (모니터링/로그)
- 개인정보/비밀값 마스킹(로그/메트릭/트레이스)
- 경보 채널 접근통제(공개 채널 전송 금지), 알림에 민감정보 금지
- 로그/경보는 Wazuh/Elastic SIEM으로 이중 수집
8. 통합 자동화 시나리오
- 개발자는 Cursor에서 코딩 → ESLint/Prettier/테스트로 즉시 품질 피드백
- DevContainer/Docker로 동일 환경에서 실행 → 핫리로드로 즉시 확인
- PR 생성 시 CI가 단위·E2E 테스트 → 이미지 빌드 → 취약점 스캔 → SBOM/서명
- 승인 후 배포 → 헬스체크/모니터링/경보 → 결과 Slack/이메일 통보
- 모든 로그·이벤트는 SIEM(Elastic/Wazuh)에 집계 → 침해 지표/이상행동 탐지
9. 단계별 보안 점검 체크리스트
IDE/확장
- Workspace Trust 활성화, 신뢰되지 않은 폴더 제한
- 확장 출처/서명/업데이트 이력 검토
-
.vscode
로 팀 공통 규칙(포맷·린팅·탭/EOL) 강제
코드/비밀값
-
.env
는 로컬 한정 + Vault/Secrets Manager 사용 -
gitleaks
/trufflehog
CI에 상시 적용 - 의존성 버전 고정 +
pip-audit
/npm audit
주기 실행
컨테이너
- 베이스 이미지 다이제스트 고정
-
USER
비루트,cap_drop: [ALL]
,no-new-privileges
- Trivy 스캔 + SBOM 보관, 취약점 SLA 대응
VM/원격
- SSH 키 기반 접속, 루트 로그인 금지, MFA(가능 시)
- 표준 이미지·클라우드-이니트로 재현성/일관성
- 감사로그 중앙 수집
Windows/WMI
- RemoteSigned, 서명 스크립트만 실행
- PowerShell 스크립트 블록 로깅 + AMSI/Defender 활성
- JEA로 역할 최소화
CI/CD
- PR 리뷰 필수, 서명 커밋·태그
- Actions 버전/해시 고정, OIDC로 클라우드 권한 최소
- 빌드 아티팩트(이미지/해시/SBOM/서명) 감사가능 상태로 보관
모니터링/로깅
- 민감정보 마스킹 규칙
- 경보 채널 접근권한 제한
- SIEM(Elastic/Wazuh) 연동 완비
10. 치트시트 (명령 모음)
# Docker 개발(핫리로드)
docker compose -f docker-compose.dev.yml up --build
# Trivy 이미지 스캔
trivy image ghcr.io/org/app:latest
# Syft SBOM 생성
syft ghcr.io/org/app:latest -o spdx-json > sbom.spdx.json
# Python 테스트
tox -q
pytest -q
# Node 테스트
npm ci && npm test --silent
# Git 서명 확인(예: GPG)
git log --show-signature -1
# WMI/CIM 빠른 점검
Get-CimInstance Win32_OperatingSystem | fl *
Get-CimInstance Win32_Service -Filter "Name='Docker'" | fl *
위 구성은 Cursor 확장 추천 → 표준 개발환경(DevContainer/Docker/VM/WMI) → CI/CD·보안 스캔·서명·SBOM → 즉시 확인 → 관측·알림 → SIEM 연동으로 이어지는 현대적 개발·보안 일체화 흐름입니다.
728x90
그리드형(광고전용)
댓글