[트러블 슈팅] 협업 간 데이터베이스 ddl 충돌 문제
이제 프로젝트를 진행하며 발생하는 문제 해결과정을 정리해보려고 한다.. 파이팅 !
문제 없이 돌아가고 있던 우리의 개발 서버가 갑자기 작동하지 않게 되었다
작업이 끝난 브랜치를 머지하고 나서 ci/cd를 통해 다시 배포를 진행한 것인데,
이 이후에 문제가 발생해서 당연히 새로 머지한 브랜치에 문제가 있다고 생각을 했다.
하지만 머지하기 전에 다 테스트를 진행하고 머지를 한 것이어서, 서버가 돌아가지 않을 이유가 없었고, 도대체 어디서 문제가 발생한 것인지 로그를 뒤적 거려보았다.
에러 로그 발견 !
alter table if exists study add column start_date timestamp(6) not null
2024-11-29 15:51:18 [main] WARN o.h.t.s.i.ExceptionHandlerLoggedImpl - GenerationTarget encountered exception accepting command : Error executing DDL " alter table if exists study add column start_date timestamp(6) not null" via JDBC [ERROR: column "start_date" of relation "study" contains null
이 부분을 살펴보면 study 테이블의 start_date 컬럼은 not null이나 현재 데이터베이스엔 null 값이 들어있기 때문에
alter table에 실패했다는 것이다...
문제 발생 원인
study 담당 팀원이 새롭게 브랜치를 파서 작업하고 있었다
-> 해당 브랜치에서 특정 컬럼의 NotNull 속성을 없애고 rds를 업데이트 시킴
-> rds에 start_date 컬럼에 null 값이 들어감
-> 메인 브랜치에는 start_date가 NotNull로 설정돼있음
-> 메인 브랜치를 기준으로 ci/cd를 진행
-> start_date는 NotNull인데 Null값이 들어가 있어!
-> 에러 발생
이런 흐름이었던 것이다.
아직 개발 단계여서 테스트 데이터만 들어있기 때문에 간단하게 문제가 되는 행만 삭제하고
문제를 해결해주었다.
결론
협업을 할 때 공용 데이터베이스를 사용하면 충돌이 발생할 수 있다.
이를 예방하기 위해 개발 단계에서는 h2 데이터베이스를 사용하도록 하자!