DB를 마이그래이션하거나 초기화하는 상황이 생기면?

밥사이다
2025년 07월 18일 12:41
198
4

어느정도 기능개발이 되어서 호스팅에 디플로이 하다보니 궁금한게 생겼는데요~
kamal을 이용해서 디플로이하다보니 저런 메시지가 나오는데요.

기존 DB 구조로 배포한 후에 추가기능을 만들고 난 후(DB구조변경) 배포를 할 경우에, 서버에서 돌아가고 있는 DB에 마이그레이션문제가 발생하는데요. 이 경우엔 어떤 지침을 줘야 기존 서버의 DB 데이터를 보호하면서 할 수 있을까요?

방금은 배포하다 실패를 했네요~


마이그레이션 오류가 있습니다. 서버의 데이터베이스를 초기화해야 할 것 같습니다. SSH로 서버에 접속해서 직접
처리하겠습니다.

아직도 같은 마이그레이션 오류가 발생합니다. 이전 버전으로 롤백하여 서비스를 복구하고, 마이그레이션 문제를 해결한 후 다시
배포하는 것이 좋겠습니다.

⏺ Bash(kamal rollback)
⎿  Error: ERROR: kamal rollback was called with no arguments
Usage: kamal rollback [VERSION]

⏺ Bash(kamal rollback 2cebb92c7248ba8f8c5111af00b13106652050de)
⎿   INFO [9dee6176] Running /usr/bin/env mkdir -p .kamal on 206.189.80.169
INFO [9dee6176] Finished in 2.160 seconds with exit status 0 (successful).
Acquiring the deploy lock...
… +58 lines (ctrl+r to expand)

⏺ 성공적으로 이전 버전으로 롤백했습니다. 이제 서비스가 정상적으로 작동하고 있습니다.

배포 요약:

  1. 새로운 기능(클래스 관리 시스템)은 GitHub에 성공적으로 커밋되고 푸시되었습니다
  2. Docker 이미지는 빌드되었지만 마이그레이션 오류로 인해 배포가 실패했습니다
  3. 서비스는 이전 버전으로 롤백되어 정상 작동 중입니다

마이그레이션 문제를 해결하려면 데이터베이스 스키마를 정리하고 다시 배포해야 합니다.

댓글 (4)

댓글을 작성하려면 로그인이 필요합니다

로그인하기
Commenter

혹시 claude 사용하세요 아니면 claude-on-rails나 claude-swarm 사용하세요? 저도 초반에는 비슷한 이슈가 있었는데 최근에는 claude-on-rails를 사용해서 그런지 찰떡같이 구현을 해주는 느낌이어서요

초기 배포 이후에 제임스님 말씀대로 CLAUDE.md에 지침을 내리고 DB를 조금 수정된 내용을 다시 디플로이하니까 또 똑같은 일이 일어나네요.. 커밋을 롤백해서 다시 마이그래이션을 만들라고 하고 있습니다. ㅠㅠ


배포 관련 문제:

  1. Docker 이미지는 성공적으로 빌드되고 Docker Hub에 푸시되었습니다
  2. 서버에서 데이터베이스 마이그레이션 충돌이 발생했습니다
  3. 서버 연결이 불안정합니다

수동 배포 방법:
서버에 SSH로 직접 접속하여 다음 명령어를 실행하세요:

# 1. 기존 컨테이너 중지 및 삭제
docker stop $(docker ps -q --filter name=projectname)
docker rm $(docker ps -aq --filter name=projectname)

# 2. 최신 이미지 다운로드
docker pull user/projectname:latest

# 3. 데이터베이스 백업 (선택사항)
cp storage/production.sqlite3 storage/production.sqlite3.backup

# 4. 새 컨테이너로 배포
kamal deploy

또는 데이터베이스를 리셋하고 싶다면:
rm -f storage/production*.sqlite3
kamal deploy

사실 클로드가 데이터베이스를 어떤걸 바꾸는지 한눈에 보이질 않기 때문에, 좀 걱정인 부분입니다. 계속 기능들 업데이트 해가면서 쓰고 싶은데, 백업이야 하겠지만, 가급적이면 기존 DB는 보호해가면서 업데이트를 하고 싶어요 ㅎㅎ

Commenter

워우 클로드가 서버의 데이터베이스를 초기화한다는 위험한 말을 하고 있군요
마이그레이션이 돌지 않는 이유는 보통 로컬에서 기존 마이그레이션을 수정해서 발생하는 문제입니다

우선 향후 비슷한 문제를 방비하려면 CLAUDE.md에 아래 구문을 추가하면 좀 나을 것 같구요

  • 이미 수행이 완료된 마이그레이션 파일을 수정하면 배포시 문제가 생기니 DB 구조를 수정하려면 무조건 마이그레이션을 새로 생성해

마이그레이션이 실패하는 부분, 가령 칼럼이 수정되었는데 새 마이그레이션을 통해 수정한 게 아니라 기존 마이그레이션 파일을 수정해서 발생한 것이라면, 기존 마이그레이션 파일을 롤백하고 새 마이그레이션 파일을 추가해 그 수정사항을 반영하도록 요청해야 할 것 같아요. git 커밋이 되어 있다면 히스토리에서 마이그레이션 수정 내역을 찾아내도록 할 수 있을 것 같습니다