이 사이트의 구조

글은 정적 파일로, 시뮬레이터 판정만 작은 API로 처리합니다. API가 멈춰도 글은 그대로 읽히고, 시뮬레이터 칸에만 점검 중 표시가 뜹니다.

요청 흐름

요청 흐름도브라우저의 요청은 nginx 로 들어가 정적 파일은 그대로 돌려주고, /api 로 시작하는 요청만 FastAPI 판정 서버로 넘긴다.브라우저페이지 · 시뮬레이터nginx정적 파일 · 보안 헤더요청 크기·속도 제한정적 파일 (Astro 빌드)프로젝트 · 이력서 · 글FastAPI · guard_core상태 없음 · 셸 실행 없음//api/*

시뮬레이터가 안전한 이유

  • 명령을 실행하지 않습니다. 입력은 문자열로만 분석합니다. 서버에 셸을 여는 코드가 없습니다.
  • 서버가 상태를 저장하지 않습니다. diff 기록 같은 세션 상태는 브라우저가 들고 다니며 요청마다 보냅니다. 서버에 쌓이는 것이 없어 저장소 남용이나 세션 관리 문제가 생기지 않습니다.
  • 입력에 상한이 있습니다. 명령 2,000자, 상태 항목 수와 경로 길이를 검증하고, nginx가 요청 크기와 속도를 제한합니다.
  • 판정 규칙은 실제 훅과 같습니다. 파일 시스템·시각·서버 접속 확인만 가상으로 바꿨고, 실제 훅을 검증했던 항목을 그대로 테스트로 옮겼습니다.

콘텐츠는 어디서 오나

  1. 업무 시스템 기록(업무·댓글·Jira·커밋)과 예전 이력 자료를 모아 비공개 저장소에 경력 정본을 만듭니다.
  2. 공개 원칙으로 거릅니다. 연락처는 이메일 하나, 고객사 보안 사항·내부 주소·사람 이름·고객사 데이터 규모는 싣지 않습니다.
  3. 프로젝트마다 근거 출처를 메모로 남기고, 쓴 사람과 다른 검토자가 근거와 대조합니다.
  4. Markdown 파일로 옮겨 Astro로 정적 페이지를 만듭니다.

사용한 것

페이지
Astro, TypeScript, Pretendard · JetBrains Mono(자체 호스팅)
시뮬레이터
Python 3.12, FastAPI, pydantic, pytest
실행
Docker Compose, nginx — 집 서버(맥미니)에서 돌리고 Cloudflare Tunnel로 공개
방문 통계
Cloudflare Web Analytics — 방문자 개인 정보를 수집하지 않는다고 밝힌 서비스입니다
다음 단계
가동 감시, 서버가 멈췄을 때 정적 사본으로 전환