Mendix 배포 실패: ConnectionBusException과 Unique 제약 충돌 해결

Mendix 개발 과정에서 로컬 테스트는 완벽했는데, 운영(Production) 서버 배포 단계에서 DB 에러로 식은땀을 흘렸던 경험을 정리해 드립니다.
로컬에서 기능 개발을 마치고 기분 좋게 운영 서버로 배포(Deploy)를 눌렀습니다. 그런데 진행률 바가 멈추더니 빨간색 에러 로그를 뱉어내며 배포가 중단되었습니다.
1. 문제 상황: 40개의 DB 명령, 그리고 실패
로그를 확인해보니 GitHub 통신 오류 같은 네트워크 문제가 아니었습니다. 명백한 Database Synchronization(DB 동기화) 오류였습니다.
ERROR: ... The database has to be updated.
INFO - ConnectionBus: Executing 40 database synchronization command(s)...
ERROR: Executing execute_ddl_commands did not succeed ... caused by ConnectionBusException ...
Mendix가 "모델이 변경되었으니 운영 DB 구조도 업데이트해야겠다"라고 판단하고 40개의 SQL 명령(DDL)을 실행하다가, 그중 하나가 실패해서 전체 롤백(Rollback)된 상황이었습니다.
2. 원인 분석: "이미 중복인데 유니크(Unique) 하라니요?"
원인은 바로 **'데이터 제약조건(Validation Rule)'**과 '기존 데이터(Existing Data)' 간의 충돌이었습니다.
제가 메인 도메인 모델과 연관 관계(Association)가 있는 다른 모듈의 특정 속성(Attribute)에 Unique (중복 금지) 조건을 새로 추가했었는데요.
- Mendix(모델): "자, 이제부터 이 컬럼은 중복된 값이 들어오면 안 돼! DB야, 제약조건(Constraint) 걸어!"
- 운영 DB: "잠깐만, 이미 쌓여있는 데이터 중에 중복된 값이 잔뜩 있는데? 이 조건 못 받아들여!"
로컬 환경에서는 개발 도중 DB를 날리고 새로 만들어서(Clean Deployment) 문제가 없었지만, 실제 데이터가 쌓여있는 운영 서버에서는 이 제약조건이 기존 데이터를 위배했기 때문에 DDL 실행이 거부된 것입니다.
[Image Prompt: A cartoon illustration showing a Database looking angry. A Mendix developer is trying to put a "Unique Constraint" sticker on a box full of duplicate items. The Database runs a red light and shows a "Rollback" sign.]
3. 해결: 타협과 정제
해결 방법은 DB와의 타협이었습니다. 운영 DB의 데이터를 쿼리로 직접 수정하기는 위험하니, Mendix 모델을 수정해서 우회해야 했습니다.
긴급 조치 순서:
- 제약조건 해제: Studio Pro에서 문제가 된 엔티티의 Validation Rules 탭으로 이동해 Unique 체크를 해제합니다.
- 재배포: 제약조건이 없는 상태로 배포를 진행합니다. (DB가 거부할 명분이 사라지므로 성공!)
- 데이터 정제: 배포된 앱(관리자 페이지)에 접속해 실제로 중복된 데이터를 눈으로 확인하고 정리합니다.
- 제약조건 재적용: 데이터가 깔끔해진 것을 확인한 뒤, 다음 배포 때 다시 Unique 조건을 걸어줍니다.
4. 결과: 시행착오 없이 해결!
로그만 보고 "DB가 깨졌나?" 하고 당황할 뻔했는데, **"운영 DB의 기존 데이터가 추가된 Validation 조건을 충족하지 않아서 DDL 작업 중에 터진 것"**이라는 원인을 바로 파악할 수 있었습니다.
덕분에 불필요한 삽질 없이 원인을 캐치하고 손쉽게 해결했네요! (개꿀따리)
Lesson Learned: 운영 중인 시스템의 도메인 모델을 수정할 때, 특히 Unique 같은 강력한 제약조건(Constraint)을 추가할 때는 반드시 운영 DB에 이미 쌓여있는 데이터와 충돌하지 않는지 먼저 확인해야 합니다!
함께 읽을 글
Mendix Datagrid2 대신 HTMLSnippet과 JS로 목록 화면 만들기
점검 유형 4종의 목록 화면을 Datagrid2 대신 HTMLSnippet 3개와 JS로 다시 만들었다. 조회는 JSON 한 번으로 받고, 필터와 정렬은 브라우저에서 처리하며, 저장과 삭제는 Microflow를 호출한다.
로우코드 운영기 2/16실무 · 로우코드2026.04.24PI 담당자가 로우코드로 사내 시스템을 직접 만들고 운영한 기록
현업 PI 담당자가 Mendix로 점검 이슈 관리 시스템을 기획부터 운영까지 직접 맡았다. 개발 Activity 약 240건을 유형별로 나눠 보면 출시 후 개선이 약 80%였다. 그 과정에서 정리한 원칙과 숫자를 남긴다.
로우코드 운영기 1/16실무 · 로우코드2026.04.15Datagrid2에서 HTML+JS 위젯으로: Mendix 그리드 교체 첫 기록
[Mendix] Datagrid2 버리고 HTML+JS 위젯으로 갈아탄 삽질기 MENDIX TROUBLESHOOTING [Mendix] Datagrid2 버리고 HTML+JS 위젯으로 갈아탄 삽질기 Mendix 기본 위젯의 한계를 넘기 위해 Java Action + H
실무 · 로우코드2026.03.31