소개
Odoo에서 ‘레코드가 존재하지 않거나 삭제되었습니다’라는 메시지는 사용자에게 가장 당혹스러운 알림 중 하나입니다. 폼을 열거나 기록을 처리하거나 자동화된 작업을 실행할 때 예기치 않게 뜨는 경우가 많아 업무 흐름을 멈추게 합니다.
문구가 위협적으로 들리지만, 대부분의 경우 실제 데이터 손상이라기보다는 참조(레퍼런스)가 끊어진 상태를 알리는 신호입니다.
이제 문제의 실체가 무엇인지, 그리고 안전하게 해결하는 방법을 하나씩 정리해보겠습니다.
이 오류가 뜻하는 바
Odoo가 특정 ID로 데이터베이스의 레코드를 조회하려 했을 때 발생합니다. 그 ID는 대개 다음 중 하나에 해당합니다:
- 더 이상 존재하지 않음
- 삭제된 상태
- 권한 문제로 접근할 수 없음
- 다른 회사(컴퍼니)에 속해 현재 컨텍스트에서 보이지 않음
예시:
record = self.env['res.partner'].browse(45)
만약 ID 45인 레코드가 존재하지 않으면 Odoo는 오류를 발생시킵니다.
자주 발생하는 원인
1. 삭제된 레코드를 참조하는 경우
Many2one 같은 관계 필드가 이미 지워진 항목을 가리키고 있을 수 있습니다.
이런 상황은 흔히 다음 작업 이후에 발생합니다:
- 수동 삭제
- 테스트 데이터 정리 과정
- 잘못된(또는 실패한) 가져오기(import) 작업
2. 외부 ID 매핑 오류
API 연동 과정에서 외부 시스템이 잘못된 ID를 밀어넣는 경우가 있습니다.
예컨대 Odoo가 받는 데이터가:
{ "partner_id": 99999 }
인데 그 ID가 존재하지 않으면 동일한 오류가 발생합니다.
3. 멀티컴퍼니 제한
실제로는 레코드가 존재하지만 현재 회사 컨텍스트에서는 볼 수 없는 상태일 수 있습니다.
슈퍼유저로 전환하면 레코드가 보이는 경우가 많습니다.
4. 마이그레이션 또는 업그레이드 문제
모듈 업그레이드나 데이터 마이그레이션 이후에 참조가 바뀌어 오래된 ID를 가리키게 되는 경우가 있습니다.
해결 방법
1단계 – 레코드 존재 여부 확인
record = self.env['model.name'].browse(record_id) if record.exists(): # 안전하게 사용 가능
2단계 – 접근 권한 점검
관리자 계정으로 테스트해 보세요.
관리자는 볼 수 있는데 일반 사용자가 못 본다면 → 접근 규칙(Access Rule) 문제일 가능성이 큽니다.
3단계 – 관계 필드 정리
고아 상태로 남은 Many2one 필드를 찾아 값을 바로잡거나 NULL 처리합니다.
4단계 – 외부 연동 유효성 검사
다음 항목을 점검하세요:
- API 페이로드
- 매핑 로직
- 동기화 레이어
통합된 시스템에서는 ID 매핑 불일치가 자주 문제를 일으킵니다.
사전 예방책
- ID를 하드코딩하지 마세요.
- 외부 ID를 올바르게 사용하세요.
- API 입력값을 검증하세요.
- 마이그레이션은 스테이징 환경에서 충분히 테스트하세요.
- 다른 곳에서 참조 중인 레코드를 함부로 삭제하지 마세요.
Dasolo가 “레코드가 존재하지 않습니다” 문제를 막는 방식
‘레코드가 존재하지 않습니다’ 오류는 모델 간 참조가 깨질 때 자주 나타납니다. UI에서 드러나지만 근본 원인은 삭제된 레코드, 끊어진 관계 링크, 혹은 안전하지 않은 DB 조작인 경우가 많습니다.
Dasolo에서는 이 오류를 단순 장애로 보지 않고 시스템 구조의 취약점을 드러내는 신호로 봅니다. 주로 다음 문제들을 가리킵니다:
- 관계가 끊긴(고아 상태) 참조
- 부적절한 삭제 절차
- 연동 데이터 불일치
- 레코드 접근 전의 검증 부족
- 멀티컴퍼니 컨텍스트 처리의 불일치
이를 방지하기 위해 Dasolo는 데이터 라이프사이클을 통제하는 설계를 적용합니다. 중요한 레코드는 삭제 대신 보관(아카이브)하고, ORM을 통한 안전한 참조 관리를 강제하여 운영 중 예기치 않은 ‘레코드 없음’ 예외 발생을 최소화합니다.
결론
요약하면, Odoo의 ‘레코드가 존재하지 않습니다’ 오류는 시스템이 삭제되었거나 제대로 생성되지 않은 레코드에 접근하려 할 때 발생합니다. 단순한 누락처럼 보여도, 실제로는 관계 로직의 붕괴나 안전하지 않은 데이터 조작이 원인인 경우가 많습니다.
관계 구조를 일관되게 설계하고, 접근 전에 레코드 존재를 검증하며, 직접 DB를 건드리지 않는 규율을 지키면 이 오류를 크게 줄일 수 있습니다. 잘 짜인 Odoo 환경에서는 통제된 워크플로와 예측 가능한 데이터 관리로 레코드 무결성이 유지됩니다.
이 문제를 올바르게 해결하면 즉시 오류를 고칠 뿐 아니라 데이터베이스 안정성과 장기적인 시스템 신뢰성도 함께 강화됩니다.
자주 묻는 질문
반드시 그렇지는 않습니다. 단순히 현재 컨텍스트에서 접근 불가한 상태일 수 있습니다.
네, 특히 자동 동기화 작업에서는 예기치 못한 실패를 초래할 수 있습니다.
다른 레코드가 참조 중이 아니라는 확신이 있을 때만 안전합니다.