문제 해결
자주 겪는 문제
자주 겪는 문제
설치 · 실행 · 테스트 중 자주 겪는 문제를 증상 · 원인 · 해결로 적는다.
web(React) 화면이 비어 있다
- 증상: 테스트 · 빌드는 통과하는데 브라우저에서 web 이 빈 화면이고 콘솔에만 오류가 난다.
- 원인:
react와react-dom버전이 다르다.^범위로 두면 pnpm 이 둘을 따로 고를 수 있다. - 해결:
pnpm-workspace.yaml카탈로그에서 두 패키지를 Expo 가 정한 같은 버전으로 고정한다. 올릴 때도 카탈로그에서 함께 바꾼다.
site(Next)가 엉뚱한 서버를 부른다
- 증상:
API_URL을 바꿔 띄웠는데 브라우저의/api요청이 예전 서버로 간다. - 원인:
next.config.ts의 rewrites 주소는next build때 정해진다.API_URL을 실행할 때 읽는 것은 서버 컴포넌트뿐이다. - 해결: 빌드할 때 준다:
API_URL=http://127.0.0.1:8103 pnpm --filter @app/site build. 이미지는 빌드 인자API_URL.
앱의 요청이 502 나 프록시 오류로 실패한다
- 증상: 화면에
notes 서버에 연결할 수 없습니다같은 오류가 뜨거나, 개발 서버 로그에/api프록시 오류(ECONNREFUSED 127.0.0.1:8003)가 난다. - 원인: 앱은 gateway 하나로 부른다. 앞의 것은 gateway 는 떴는데 그 뒤의 서버가 없고, 뒤의 것은 gateway 자체가 없다.
앱만 따로 띄우면(
pnpm --filter @app/web dev) 둘 다 생긴다. - 해결: 루트
pnpm dev로 서버 셋과 gateway 를 같이 띄운다. 따로 띄운 서버에 붙일 때는 gateway 에NOTES_URL·TAGS_URL·ACTIVITY_URL을 준다.
pnpm install 이 설치 스크립트 때문에 실패한다
- 증상:
ERR_PNPM_IGNORED_BUILDS와 함께 설치가 멈춘다. - 원인: pnpm 12 는 의존성의 설치 스크립트를 기본으로 막고, 막힌 것이 있으면 실패한다.
- 해결: development.md 처럼
allowBuilds에 적는다.
테스트가 ECONNREFUSED 127.0.0.1:5432 로 실패한다
- 원인: 테스트는 docker 의 Postgres 를 쓰는데 떠 있지 않다.
- 해결:
pnpm infra. 루트의pnpm test·pnpm dev는 먼저 띄우지만pnpm --filter로 하나만 돌릴 때는 직접 띄운다.
5432 포트가 이미 쓰이고 있다
- 원인: 이 컴퓨터에 다른 Postgres 가 떠 있다.
- 해결:
docker/.env.example을docker/.env로 복사해POSTGRES_PORT를 바꾸고, 서버 · 테스트에는 같은 값으로PGPORT를 준다.
이름을 바꾼 뒤 DB 가 비어 있다
- 원인:
pnpm rename이 compose 프로젝트 이름을 바꿔서 Postgres 볼륨도 새 이름(<slug>_db)으로 만들어진다. - 해결: 템플릿 상태로 띄운 적이 있다면 예전 볼륨이 남아 있다. 필요 없으면 지운다:
docker volume rm initializer-stack_db.
브랜치를 바꾼 뒤 서버가 마이그레이션 오류로 뜨지 않는다
-
증상: 브랜치를 바꾸거나 main 을 받은 뒤 서버 · 테스트가 시작하다 멈춘다.
-
원인: DB 의 적용 기록과 마이그레이션 파일이 다르다. 도구마다 멈추는 경우가 다르다:
경우 notes (node-pg-migrate) activity (Flyway) tags (Alembic) 적용한 마이그레이션을 고쳤다 고친 내용을 무시하고 뜬다 Migration checksum mismatch for migration version 3고친 내용을 무시하고 뜬다 main 에도 같은 번호가 생겼다 main 의 것이 이름순으로 앞이면 Not run migration 0003_a is preceding already run migration 0003_bFound more than one migration with version 3Multiple head revisions are present적용한 마이그레이션이 없는 브랜치로 왔다 뜬다 (만든 표는 남는다) 뜬다 (만든 표는 남는다) Can't locate revision identified by '0003' -
해결:
- 고쳤다: 되돌리고 바꿀 것을 새 번호로 더한다. notes · tags 도 같다. 오류는 없지만 이미 적용한 DB 에는 고친 내용이 들어가지 않아 DB 마다 스키마가 달라진다.
- 번호가 겹쳤다: 내 것을 main 의 마지막 다음 번호로 바꾼다 (tags 는
revision·down_revision도). 내 DB 에는 예전 번호가 기록돼 있으니 그 서버의 개발 · 테스트 DB 를 다시 만든다 → database.md. - 브랜치를 오갔다: 마이그레이션이 있는 브랜치로 돌아가면 그대로 쓴다. 이 브랜치에서 계속 쓰려면 그 서버의 DB 를 다시 만든다.
admin 의 vue-tsc · site 의 next build 가 TypeScript 7 에서 돌지 않는다
- 원인: 저장소 기본은 TypeScript 7 인데 vue-tsc 와 next build 는 TS 의 JS API 를 쓰고, TS 7 에는 아직 그 API 가 없다.
- 해결: 그 앱만
"typescript": "catalog:ts6".
Expo 패키지를 설치할 수 없다
- 증상: Expo 를 올리거나
npx expo install --fix뒤 pnpm 이 너무 새 버전이라며 설치하지 않는다. - 원인: pnpm 은 나온 지 하루가 안 된 버전을 설치하지 않는다(
minimumReleaseAge). - 해결: development.md 처럼 예외를 두지 않고 범위의 아래 끝을 그 전 버전으로 낮춘다.
zsh 에서 정리 명령이 통째로 멈춘다
- 증상:
rm -rf clients/apps/*/dist같은 명령이no matches found로 아무것도 하지 않는다. - 원인: zsh 는 맞는 파일이 없는
*를 만나면 명령 전체를 멈춘다. - 해결:
find를 쓴다:find clients/apps -maxdepth 2 -name dist -type d -prune -exec rm -rf {} +.