자주 쓰는 명령
테스트
npm test는 tests/api.test.ts와 tests/i18n.test.ts를 실행합니다. api.test.ts가 나머지 테스트 파일을 가져오므로 명령 하나로 모든 테스트를 실행할 수 있습니다. 디버깅할 때는 tsx로 특정 파일만 실행할 수도 있습니다.
프로젝트 구조
화면 문구 추가
문구는app/i18n/messages.ts에 정의되어 있습니다. 간체 중국어 원문이 키이고, 나머지 세 언어가 값입니다.
app/i18n/messages.ts
t("历史记录")로 사용합니다. 문구를 새로 추가할 때는 zh-TW, en, ko 세 가지 번역을 모두 제공하세요. i18n.test.ts가 완전성을 검사합니다.
지속적 통합
.github/workflows/docker.yml은 모든 브랜치에 푸시할 때, v* 태그를 푸시할 때, Pull Request를 제출할 때, 수동으로 실행할 때 동작합니다.
1
검증
Node.js 22로
npm ci, npm test, npm run lint, npm run build를 차례로 실행합니다.2
이미지 빌드
검증을 통과하면 Docker 이미지를 빌드합니다. 일반 브랜치와 Pull Request에서는 이미지가 빌드되는지 확인하기 위해
linux/amd64만 빌드합니다.3
이미지 게시
기본 브랜치,
howendev/dev 브랜치 또는 임의의 태그에 푸시하면 linux/amd64와 linux/arm64를 함께 빌드하고, Docker Hub secrets가 설정되어 있으면 멀티 아키텍처 이미지를 푸시합니다.이미지 태그
Docker Hub secrets
GitHub 저장소에서 Settings → Secrets and variables → Actions를 열고 다음을 추가하세요.
두 secrets를 설정하지 않으면 워크플로는 이미지를 빌드만 하고 푸시하지 않으며 경고를 하나 출력합니다.
Docker 이미지
Dockerfile은 node:22-alpine 기반 멀티 스테이지 빌드이며 Next.js standalone 출력을 사용합니다.
- 실행 단계에서는 root가 아닌 사용자
nextjs로 실행합니다. - 기본적으로
0.0.0.0:3002에서 수신합니다. - 이미지에는
LICENSE,NOTICE,LICENSING.md,LICENSES/라이선스 파일이 포함됩니다.
