☃️❄️개발일지, 트러블슈팅❄️☃️

[트러블 슈팅] 협업 간 데이터베이스 ddl 충돌 문제

대기업 가고 싶은 공돌이 2024. 11. 29. 16:15

이제 프로젝트를 진행하며 발생하는 문제 해결과정을 정리해보려고 한다.. 파이팅 !

 

문제 없이 돌아가고 있던 우리의 개발 서버가 갑자기 작동하지 않게 되었다

 

작업이 끝난 브랜치를 머지하고 나서 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 데이터베이스를 사용하도록 하자!