# crossword 문학 가로세로 낱말풀이 — 정적 사이트. 왼쪽 탭에서 편을 골라 본 프레임에서 바로 푼다. 낱말풀이 목록 아래 **휴게실** 구획에는 곁들이로 탱크게임을 두었다. - 공개 주소: https://crossword.plpark.ectech.co.kr - 내부 주소: http://192.168.0.216:31380 (NodePort) ## 수록 편 | 탭 | 경로 | 격자 | 항목 | |---|---|---|---| | 한국 문학 | `/korean.html` | 9 × 9 · 41칸 | 15 | | 러시아 문학 | `/russian.html` | 9 × 9 · 40칸 | 13 | | 영국 문학 | `/british.html` | 9 × 9 · 39칸 | 12 | | 프랑스 문학 | `/french.html` | 9 × 9 · 40칸 | 15 | | 독일 문학 | `/german.html` | 9 × 9 · 41칸 | 14 | | 일본 문학 | `/japanese.html` | 9 × 9 · 44칸 | 14 | 기본으로 열리는 탭은 한국 문학이다. 각 페이지는 단독으로 열어도 동작한다. 셸(`/`)의 탭은 해시로 상태를 남기므로 `/#korean`, `/#russian`, `/#british`, `/#french`, `/#german`, `/#japanese`, `/#tank` 로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다. ## 휴게실 | 탭 | 경로 | 내용 | |---|---|---| | 탱크게임 | `/tank.html` | 2단계 구성 — 1단계 요새(적 4대) / 2단계 미로(적 6대). 방향키 이동, 스페이스 발사 | 낱말풀이와 공유하는 자산이 없는 단독 페이지다. 캔버스와 WebAudio 만 쓰므로 자산 해시 스탬프(아래 캐시 항목)의 영향도 받지 않는다. iframe 안에서는 **화면을 한 번 클릭해 포커스를 준 뒤** 키를 눌러야 한다. ## 구성 | 경로 | 설명 | |---|---| | `site/index.html` | 셸 — 왼쪽 탭(좁은 화면에서는 위쪽 탭) + 게임을 띄우는 iframe | | `site/korean.html` | 한국 문학 편 (머리말 + 퍼즐 데이터) — 기본 탭 | | `site/russian.html` | 러시아 문학 편 (머리말 + 퍼즐 데이터) | | `site/british.html` | 영국 문학 편 (머리말 + 퍼즐 데이터) | | `site/french.html` | 프랑스 문학 편 (머리말 + 퍼즐 데이터) | | `site/german.html` | 독일 문학 편 (머리말 + 퍼즐 데이터) | | `site/japanese.html` | 일본 문학 편 (머리말 + 퍼즐 데이터) | | `site/tank.html` | 휴게실 · 탱크게임 (단독 페이지 — 캔버스 + WebAudio) | | `site/assets/crossword.css` | 각 편이 공유하는 화면 양식 | | `site/assets/crossword.js` | 각 편이 공유하는 게임 엔진 (한글 IME 입력, 검사/힌트/타이머) | | `nginx/default.conf` | nginx 설정 (8080 리슨, `/healthz` 헬스체크) | | `Dockerfile` | 자산 URL 에 내용 해시를 박는 단계 + nginx:1.27-alpine 정적 서빙 | | `k8s/deployment.yaml` | Deployment + NodePort Service (31380) | | `Jenkinsfile` | Checkout → 이미지 빌드/푸시 → kubectl apply | Spring Boot 등 런타임은 없음. HTML/CSS/JS 만으로 동작하는 완전 정적 사이트라 nginx 로 파일만 내려주면 끝. ## 편을 추가할 때 1. `site/<편>.html` 을 기존 편 하나를 복사해 만든다. 고칠 곳은 `