CBO 테이블 변경이력 남기기 - SCDO와 Log Data Changes

CBO 테이블 변경이력 남기기 배너

"이 값 누가 언제 바꿨나요?"

CBO(Custom Business Object, 커스텀) 테이블을 운영하다 보면 "이 필드 값이 언제 누구에 의해 바뀌었는지" 를 추적해야 할 일이 생깁니다. SAP 표준은 변경이력을 CDHDR(헤더)/CDPOS(상세) 테이블에 남기는 구조를 제공하는데, 커스텀 테이블도 설정을 통해 같은 구조에 이력을 쌓을 수 있습니다. 크게 두 가지 방법이 있습니다.

방법 1. SCDO - Change Document Object

CDHDR에서 조회되도록, 변경 문서 오브젝트(Change Document Object)를 만들어 직접 이력을 기록하는 방식입니다.

  1. T-Code SCDO에서 변경 문서 오브젝트를 생성합니다. 이때 변경이력을 기록/조회하는 함수 모듈이 생성됩니다.
  2. 프로그램에서 데이터를 변경하는 시점에 그 함수 모듈을 호출하는 소스코드를 작성해, 변경 전/후 값을 CDHDR/CDPOS에 기록합니다.

이력을 남길 필드는 데이터 엘리먼트의 Change Document 플래그로 제어합니다. 데이터 엘리먼트(SE11) 속성에서 Change Document를 켜 둔 필드만 이력 대상이 됩니다.

logflag

변경이력을 남길지 여부는 결국 데이터 엘리먼트의 logflag속성이 컨트롤합니다. 이력이 안 남는다면 먼저 해당 필드 데이터 엘리먼트의 Change Document 설정을 확인하세요.

방법 2. 테이블의 Log Data Changes 옵션

테이블 기술 설정(SE11 → Technical Settings)의 Log Data Changes 옵션을 켜는 방식입니다. 이 경우 SCDO 오브젝트를 따로 만들지 않아도, T-Code SCU3를 통해 변경이력을 조회할 수 있습니다.

말하자면 Log Data Changes 옵션이 SCDO 오브젝트 클래스 기능을 대신해 주는 셈입니다. 별도 코딩 없이 테이블 변경을 기록할 수 있어 간편합니다.

SCU3 테이블 변경 로그 조회 화면 예시

변경 전/후 값과 변경자·일시가 행 단위로 쌓입니다. (값은 모두 익명 예시)

단점 - DB 사용량 증가

Log Data Changes는 변경이 일어날 때마다 로그를 쌓으므로 DB 사용량이 증가합니다. 변경이 잦은 대용량 테이블에 무턱대고 켜면 부담이 될 수 있어, 정말 추적이 필요한 테이블에만 적용하는 것이 좋습니다. (이 옵션은 시스템 파라미터 rec/client설정에도 영향을 받으므로 실제 시스템에서 확인하세요.)

두 방법 비교

SCDO + 소스코드
  • 조회: CDHDR / CDPOS
  • 변경 시점에 FM 호출 코드 필요
  • 기록 범위를 세밀하게 제어 가능
Log Data Changes 옵션
  • 조회: SCU3
  • 코딩 불필요 (옵션 체크만)
  • ⚠️ DB 사용량 증가
T-Code용도
SCDO변경 문서 오브젝트 생성 (기록/조회 FM 생성)
SCU3Log Data Changes로 쌓인 테이블 변경이력 조회
SE11데이터 엘리먼트 Change Document 플래그 / 테이블 Log Data Changes 옵션 설정

코딩 부담 없이 빠르게 이력만 보면 된다면 Log Data Changes 옵션, 표준 변경이력(CDHDR)과 동일하게 관리하고 기록을 세밀하게 통제하고 싶다면 SCDO 방식이 적합합니다.

Disclaimer — 이 포스트는 AI(Claude)를 활용하여 작성된 초안을 바탕으로 검수 및 보완하여 작성되었습니다. 내용 중 오류나 오타가 있다면 댓글로 알려주시면 감사하겠습니다.