PetitPet — NCP 클라우드 캠프 팀 프로젝트, 배포 트러블슈팅 3연타
팀 프로젝트에서 맡은 몫
PetitPet은 NaverCloud 부트캠프 4인 팀(NaverCloud-Team4)이 만든 반려동물 헬스케어 AI 상담 서비스다. Next.js 16 프론트 + AI 상담 챗봇 + 관리자 대시보드로 구성돼 있고, 팀 안에서는 주로 Docker 배포와 인프라 쪽 버그를 맡았다.
Dockerfile이 원상복구되어 있었다
dev 브랜치의 Dockerfile을 열어보니 prisma 복사 단계가 빠진 일반 템플릿으로 되돌아가 있었다. feat/ncp-docker-deploy 브랜치에서 검증해둔 버전을 그대로 가져와 복원하고, 실제 배포(docker run 직접 실행)에서 쓰지 않던 docker-compose.yml(fe/be 분리형)은 제거했다.
타입 에러가 프로덕션 빌드를 막고 있었다
activePet null 체크 누락, User 타입 name/nickname 불일치 같은 실제 타입 버그가 있었지만 당장 빌드 자체가 막혀 있어서 next.config.ts에서 타입 체크를 임시로 우회했다. 연동 작업 때 근본 수정 후 이 옵션을 빼야 한다고 커밋 메시지에 남겨뒀다.
mariadb 드라이버가 사라졌다
DB 연결이 pool timeout으로 계속 실패했다. standalone 빌드의 자동 파일 추적(Next.js가 런타임에 필요한 node_modules만 골라 담는 기능)이 mariadb 패키지를 빠뜨리고 있었다. 근본 원인을 더 파는 대신, 런타임 이미지에 node_modules 전체를 포함시키는 쪽으로 실용적으로 해결했다.
lock 파일 동기화
package.json에는 markdown-it 등 새 의존성이 추가돼 있었는데 lock 파일이 안 맞아서 npm ci가 실패하고 있었다. package-lock.json과 yarn.lock 둘 다 동기화해서 해결했다.
돌아보면
4명이 각자 브랜치에서 작업하다 보니, 검증된 설정이 다른 브랜치의 "기본값"으로 조용히 되돌아가는 일이 종종 있었다. Docker 관련 파일은 누가 마지막으로 건드렸는지보다 실제로 배포에서 검증됐는지를 기준으로 판단해야 했다.