콘텐츠로 건너뛰기

Odoo Tracking Field 완전정복: 기록 변경사항 안전하게 추적하기

Odoo에서 추적(tracking) 속성이 어떤 역할을 하는지, 언제 활성화해야 하는지, 그리고 데이터 모델에서 어떻게 설정하는지 한눈에 정리합니다.
2026년 3월 6일 작성자
Odoo Tracking Field 완전정복: 기록 변경사항 안전하게 추적하기
Dasolo
| 아직 댓글이 없습니다

레코드의 어떤 필드가 언제 누가 바꿨는지 궁금했던 적이 있다면, Odoo의 변경 추적 기능이 그 해답입니다.


Odoo는 특정 필드의 변경을 자동으로 기록해 레코드의 채터(chatter)에 쌓습니다. 별도 감사 시스템을 만들지 않아도 팀은 데이터가 언제, 어떻게 바뀌었는지 한눈에 파악할 수 있습니다.

Odoo Studio로 간단히 설정하든, 직접 Python 모듈을 만들든 필드 추적의 작동 원리를 이해하는 것은 Odoo 데이터 모델 작업의 핵심입니다. 이 가이드는 필요한 개념과 실무 적용법을 모두 정리합니다.

Odoo의 필드 변경 이력(Tracking)이란 무엇인가요?


Odoo에서 추적은 독립적인 필드 타입이 아닙니다. Char, Many2one, Selection, Integer, Date 등 기존 필드에 추가하는 속성입니다. 추적을 활성화하면 값 변경 때마다 이전값, 변경값, 시각, 변경 사용자가 채터에 기록됩니다.

사용자 인터페이스에는 메시지 로그 형태로 표시됩니다. 예를 들어 CRM의 리드에서는 "단계가 신규에서 검증됨으로 변경됨" 같은 기록이 영업 담당자가 단계 이동할 때 자동으로 남습니다.

대부분 표준 필드 타입에 추적 속성을 붙일 수 있으며, Odoo Studio를 통해 손쉽게 켜거나 Python 코드에서 직접 설정할 수 있습니다.

어떤 데이터가 저장되나요?

각 변경 내역은 해당 문서에 연결된 mail.message 레코드로 저장됩니다. 메시지에는 다음 정보가 포함됩니다:

  • 변경된 필드의 라벨(이름)
  • 변경 전의 값
  • 변경 후의 값
  • 수정이 발생한 타임스탬프(시각)
  • 변경을 수행한 사용자

이 히스토리는 레코드에 대한 읽기 권한이 있는 누구에게나 항상 보입니다. 필드에 추적을 활성화하는 것 외의 추가 설정은 필요 없습니다.

필드 추적 기능은 어떻게 작동하나요?


추적 기능이 작동하려면 모델이 mail.thread 믹스인을 사용해야 합니다. 이 믹스인은 채터의 메시징과 로그 인프라를 제공합니다. sale.order, crm.lead, account.move, stock.picking 같은 표준 모델은 대부분 이미 mail.thread를 상속합니다.

사용자가 추적된 필드를 가진 레코드를 저장하면 Odoo가 이전값과 새값을 비교해 자동으로 채터에 로그 메시지를 작성합니다. 사용자가 별도 작업을 할 필요는 없습니다.

Odoo ORM에서의 기술적 동작 방식

기술적으로는 Odoo ORM이 모델 레벨에서 write 호출을 가로채 처리합니다. write()가 추적 필드를 바꾸면 프레임워크가 이전 값을 가져와 변경을 적용한 뒤, 차이를 설명하는 mail.message 레코드를 생성합니다.

Python에서는 필드 정의에 tracking=True를 추가해서 추적을 활성화합니다.

예시:

여러 필드가 한 번에 변경될 때 로그에 표시되는 순서를 제어하려면 1~10 사이의 우선순위 숫자를 사용할 수 있습니다. 숫자가 작을수록 먼저 나타납니다.

예시: partner_id = fields.Many2one('res.partner', tracking=1)
priority = fields.Selection(tracking=10)

관련 레코드와의 상호작용

추적된 변경은 해당 필드가 속한 레코드에 직접 저장됩니다. 관련 레코드로 자동 전파되지는 않습니다. 관련 모델 전반에 걸쳐 추적을 원하면 각 모델에 별도로 활성화해야 합니다.

이 설계는 감사 이력을 변경된 객체 가까이에 보관해, 관련 기록을 여러 단계로 찾아다니지 않고도 이력을 검토할 수 있게 해 줍니다.

비즈니스 적용 사례들


실무에서 추적을 켜면 바로 효과를 보는 다섯 가지 사례


1) CRM 및 영업 파이프라인 관리

영업팀은 리드가 어느 단계에서 누가 이동시켰는지 알아야 합니다. CRM 모델의 stage_id에 추적을 켜면 모든 상태 전환의 타임라인을 관리자가 확인할 수 있습니다.

이 정보는 거래가 정체된 지점을 찾아내고, 파이프라인 리뷰를 돕고, 실제 데이터 기반으로 영업 코칭을 하기 쉽게 만듭니다.


2) 구매 및 전표 승인 흐름

회계·구매 쪽에서는 누가 언제 문서를 승인했는지를 증명해야 하는 경우가 많습니다. 주문서나 공급업체 청구서의 state 필드에 추적을 켜면 채터에서 바로 승인 이력을 확인할 수 있습니다.

금융 통제가 필요한 회사나 내부 감사 대상인 조직에는 특히 유용합니다.


3) 재고 및 입출고 관리

수량이나 보관 위치가 바뀌었을 때 원인을 빨리 찾으려면 stock.move나 product의 핵심 필드에 추적을 켜 두면 창고 담당자가 문제 발생 시점을 바로 확인할 수 있습니다.

별도 로그 뒤지거나 동료에게 확인하지 않아도 관련 레코드의 채터에서 답을 찾을 수 있습니다.


4) 고객 데이터 품질 관리

파트너 모델의 email, phone, pricelist_id 같은 주요 필드 변경을 추적하면 고객 연락처 이력과 요금표 변경 이력을 CRM 내부에서 바로 관리할 수 있어 CS와 데이터 품질 점검에 유리합니다.


5) 인사·사원 기록 관리

직책, 부서, 급여 등 직원 레코드의 핵심 필드 변경을 추적하면 HR 컴플라이언스와 내부 감사 준비가 훨씬 쉬워집니다.


추적 필드 추가 또는 커스터마이징 방법


Odoo에서 필드 추적을 켜는 방법은 두 가지입니다. 코드 없이 Studio로 설정하거나, 개발자가 Python으로 직접 정의하는 방식입니다.

Odoo Studio 사용법

Odoo Studio는 코딩 없이 기존 필드에 추적을 켤 수 있게 해 줍니다. 해당 모델에서 Studio를 열고 추적할 필드를 클릭한 뒤 필드 설정에서 '변경 추적(Track Changes)' 토글을 켜면 됩니다.

설정 후 그 필드에 대한 모든 향후 변경은 채터에 자동으로 쌓입니다. 개발자 개입 없이 관리자나 비즈니스 사용자가 직접 적용하기에 권장되는 방법입니다.

Studio로 새 커스텀 필드를 만들 때도 생성 시점에 추적을 바로 활성화할 수 있습니다.

Python 코드로 커스텀 모듈에서 설정하기

개발자는 모델 클래스의 필드 정의에 tracking 속성을 추가해 추적을 활성화합니다. 이는 Odoo 개발 가이드의 표준 패턴입니다.

모델은 또한 mail.thread를 상속해야 합니다. 최소 예시는 다음과 같습니다.

예시 코드(요약):
from odoo import models, fields

class ProjectTask(models.Model):
    _name = 'project.task'
    _inherit = ['project.task', 'mail.thread']

    x_client_priority = fields.Selection(
        [('low', 'Low'), ('medium', 'Medium'), ('high', 'High')],
        string='Client Priority',
        tracking=True
    )

기존 모델을 확장할 때 일반적으로 쓰이는 패턴입니다. 필드는 평소처럼 동작하지만 값이 바뀔 때마다 자동으로 변경 이력이 남습니다.

커스텀 모델 주의사항

완전히 새 모델을 만들 때는 반드시 _inherit = ['mail.thread', 'mail.activity.mixin']를 포함하세요. 이 항목이 빠지면 tracking 속성은 무시되어 채터에 기록이 남지 않습니다.

처음 Odoo를 다루는 개발자들이 흔히 놓치는 부분입니다. 추적 기능을 원한다면 믹스인은 필수입니다.

권장 운영 방식(베스트 프랙티스)


추적 기능은 설정은 쉽지만 잘못 쓰면 무용지물이 됩니다. 아래 가이드라인을 따라 최적의 효과를 얻으세요.

정말 필요한 필드만 추적하라

모든 필드에 추적을 켜면 채터가 잡음으로 가득 차 유의미한 이력을 찾기 어려워집니다. 상태, 담당자, 주요 날짜, 금액 같은 감사 가치가 높은 필드에만 집중하세요.

우선순위 숫자를 활용하라

같은 모델에서 여러 필드가 바뀔 때 우선순위를 부여하면 채터에서 로그를 그룹화해 읽기 쉽게 만들 수 있습니다. 복잡한 모델일수록 유용합니다.

접근 권한과 함께 사용하라

추적은 적절한 레코드 규칙과 액세스 제어와 함께 쓸 때 진가를 발휘합니다. 시스템의 누구나 기록을 마음대로 수정할 수 있다면 감사 이력은 무의미합니다.

추적 필드 목록을 문서화하라

공유 프로젝트나 다수 개발자가 참여하는 경우 어떤 필드에 추적이 켜져 있는지 명확히 기록해 두세요. 코드 리뷰나 모듈 업그레이드 시 혼선을 줄일 수 있습니다.

운영 전 반드시 테스트하라

스테이징 환경에서 추적 동작을 확인하세요. 특히 계산(computed) 필드나 related 필드는 저장 방식에 따라 동작이 다를 수 있습니다.

자주 발생하는 실수와 함정


추적 사용 시 자주 발생하는 실수들

mail.thread를 상속하지 않는 것 잊기

가장 흔한 문제입니다. 커스텀 모델이 mail.thread를 상속하지 않으면 추적 속성은 조용히 무시됩니다. 에러도 없고 로그도 남지 않으니 상속 체인을 먼저 확인하세요.

저장되지 않는(compute, store=False) 계산 필드를 추적하려는 경우

계산 필드는 store=True로 저장되어야만 추적할 수 있습니다. 저장되지 않는 계산 필드는 DB에 값이 남지 않아 비교 대상이 없으므로 추적이 작동하지 않습니다.

너무 많은 필드에 추적을 켜는 실수

투명성을 극대화하려고 모든 필드를 켜면 채터가 난잡해져서 오히려 쓸모가 없어집니다. 실제 감사·운영 가치가 있는 필드에만 적용하세요.

ORM을 거치지 않는 대량 처리나 직접 SQL 업데이트 기대하기

추적은 ORM의 표준 write()를 통해 트리거됩니다. 직접 SQL 업데이트, ORM을 우회하는 대량 임포트, 일부 저수준 API 호출은 추적을 생성하지 않습니다. XML-RPC나 배치 작업 시에도 실제로 ORM을 통해 쓰기가 이뤄지는지 확인하세요.

Studio와 코드 정의 간 충돌

필드를 처음 Studio에서 만들고 추적을 켰다면, 이후 동일 필드를 코드에서 수정할 때 충돌이 발생할 수 있습니다. 업그레이드나 DB 업데이트 시 예상치 못한 동작이 날 수 있으니 주의하세요.

자주 묻는 질문(FAQ)


모든 모델에서 필드 추적을 사용할 수 있나?

mail.thread를 상속하는 모델만 필드 추적을 지원합니다. 표준 비즈니스 모델은 대부분 포함하지만 커스텀 모델은 명시적으로 상속을 선언해야 합니다.

추적을 켜면 성능에 영향이 있나요?

대부분 경우 영향은 미미합니다. 추적 하나당 mail.message 레코드가 생성되어 쓰기 작업에 약간의 오버헤드가 생깁니다. 트랜잭션이 매우 빈번한 모델에서는 추적 필드 수를 신중히 결정하세요.

추적을 끄면 기존 이력이 사라지나요?

아니요. 추적을 비활성화하면 새로운 변경만 기록되지 않습니다. 이미 채터에 저장된 로그 메시지는 그대로 남아 접근할 수 있습니다.

Many2many 필드도 추적이 되나요?

Many2many 필드 추적은 지원됩니다. 추가되거나 제거된 레코드가 채터에 표시되며, 일반 값 필드와는 다른 형식으로 보여진다는 점을 유의하세요.

Odoo Studio 없이 추적을 사용할 수 있나요?

물론입니다. tracking 파라미터는 Odoo 프레임워크의 표준 Python 필드 속성입니다. Studio는 단지 시각적 인터페이스일 뿐이며, 모든 설정은 코드로 직접 할 수 있습니다.

마무리 요약


추적 속성은 복잡한 설정 없이도 큰 가치를 더하는 기능입니다. 적절한 필드에 적용하면 누구가 무엇을 바꿨는지 분쟁을 줄이고 데이터 거버넌스를 강화할 수 있습니다.

Studio로 빠르게 설정하든, 커스텀 Python 모듈로 통제된 방식으로 구현하든 결과는 같습니다. 비즈니스 데이터 변경 이력을 명확히 볼 수 있게 됩니다.

핵심은 어디에 적용할지 아는 것입니다. 의사결정, 승인, 책임 추적이 필요한 핵심 필드에만 적용하면 소규모 노력으로도 큰 효과를 얻을 수 있습니다.

Dasolo에서는 고객사의 비즈니스 프로세스에 맞춰 Odoo를 구현·커스터마이징·최적화해 드립니다. 데이터 모델 설계, 필드 추적 적용, 맞춤 모듈 개발 등 필요하신 부분을 지원합니다.

지금 문의하시면 귀사에 맞는 Odoo 구현 방안을 함께 논의하겠습니다. 문의하기 함께 최선의 접근법을 찾아 프로젝트를 성공으로 이끌어봅시다.

Odoo Tracking Field 완전정복: 기록 변경사항 안전하게 추적하기
Dasolo 2026년 3월 6일
이 게시물 공유하기
로그인 의견을 남기기