96262fc6904341541cab8b1e7938d2de3b0c7b50
index.html 은 왼쪽 탭(러시아 문학 / 영국 문학)과 게임을 띄우는 iframe 만 갖는 셸로 바꾸고, 게임 본체는 편별 페이지로 분리했다. 탭 상태는 해시(#russian, #british)에 남으므로 링크로 바로 들어갈 수 있고, 같은 탭을 다시 눌러도 프레임을 다시 읽어들이지 않아 풀던 내용이 유지된다. 두 편이 쓰는 화면 양식과 게임 엔진은 site/assets/ 로 빼내 한 벌만 둔다. 엔진에는 셸 안에서 열렸을 때 여백을 줄이는 표시와, 첫 렌더에서 단서 목록을 스크롤하지 않게 하는 처리(프레임 안에서 머리말이 밀려 올라감)를 더했다. 영국 문학 편은 9x9 39칸 12항목. 가로/세로로 길이 2 이상 이어지는 모든 구간이 단서가 붙은 항목과 일대일로 대응하는지 확인했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
crossword
문학 가로세로 낱말풀이 — 정적 사이트. 왼쪽 탭에서 편을 골라 본 프레임에서 바로 푼다.
- 공개 주소: https://crossword.plpark.ectech.co.kr
- 내부 주소: http://192.168.0.216:31380 (NodePort)
수록 편
| 탭 | 경로 | 격자 | 항목 |
|---|---|---|---|
| 러시아 문학 | /russian.html |
9 × 9 · 40칸 | 13 |
| 영국 문학 | /british.html |
9 × 9 · 39칸 | 12 |
각 페이지는 단독으로 열어도 동작한다. 셸(/)의 탭은 해시로 상태를 남기므로
/#russian, /#british 로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다.
구성
| 경로 | 설명 |
|---|---|
site/index.html |
셸 — 왼쪽 탭(좁은 화면에서는 위쪽 탭) + 게임을 띄우는 iframe |
site/russian.html |
러시아 문학 편 (머리말 + 퍼즐 데이터) |
site/british.html |
영국 문학 편 (머리말 + 퍼즐 데이터) |
site/assets/crossword.css |
두 편이 공유하는 화면 양식 |
site/assets/crossword.js |
두 편이 공유하는 게임 엔진 (한글 IME 입력, 검사/힌트/타이머) |
nginx/default.conf |
nginx 설정 (8080 리슨, /healthz 헬스체크) |
Dockerfile |
nginx:1.27-alpine 정적 서빙 이미지 |
k8s/deployment.yaml |
Deployment + NodePort Service (31380) |
Jenkinsfile |
Checkout → 이미지 빌드/푸시 → kubectl apply |
Spring Boot 등 런타임은 없음. HTML/CSS/JS 만으로 동작하는 완전 정적 사이트라 nginx 로 파일만 내려주면 끝.
편을 추가할 때
site/<편>.html을 기존 편 하나를 복사해 만든다. 고칠 곳은<title>, 머리말(.eyebrow/h1), 그리고const PUZZLE = {...}뿐이다.site/index.html의PAGES객체와.nav링크에 한 줄씩 추가한다.
PUZZLE 규약:
size— 격자 한 변 (9)grid[r][c]— 정답 음절, 빈 칸은nullnums[r][c]— 칸에 찍히는 번호, 없으면0. 길이 2 이상 구간의 시작 칸에 좌→우 · 위→아래 순서로 붙인다entries[]—{num, dir:"A"|"D", r, c, answer, clue, kind}
가로·세로로 길이 2 이상 이어지는 모든 구간은 반드시 entries 에 단서와 함께
등록돼 있어야 한다. 우연히 생긴 두 글자 구간이 남아 있으면 그 칸을 채워도
완료 판정이 나지 않는 것처럼 보이므로, 격자를 새로 짜면 이 조건을 먼저 확인한다.
배포
Jenkins 잡(crossword)을 돌리면 아래가 순서대로 진행된다.
- gitea
plpark/crosswordmain 브랜치 체크아웃 gitea.plpark.ectech.co.kr/plpark/crossword:<BUILD_NUMBER>빌드 & 푸시plpark-int-ns네임스페이스에 apply, rollout 대기
Jenkins credentials 는 기존 loggen/pilot1 과 동일하게
gitea-registry(usernamePassword), rancher-kubeconfig(file) 를 사용한다.
프록시 (NPM)
https://npm.ectech.co.kr 에서 Proxy Host 추가:
- Domain Names:
crossword.plpark.ectech.co.kr - Scheme:
http - Forward Hostname / IP:
192.168.0.216 - Forward Port:
31380 - Block Common Exploits / Websockets Support: ON
- SSL: Let's Encrypt 발급 + Force SSL + HTTP/2
콘텐츠 수정
site/ 아래만 고치고 커밋 → Jenkins 빌드. 그 외 변경 필요 없음.
Languages
HTML
83.2%
JavaScript
10.1%
CSS
5.8%
Dockerfile
0.9%