용량 관리: ContentDocumentLink

Salesforce 용량 문제를 ContentDocumentLink로 해결하는 방법 제시
calendar icon

2026년 2월 6일

tag icon

Salesforce를 사용하다보면 여러 첨부파일을 업로드하는 경우가 빈번합니다.

제품의 이미지, 광고물, 전개도, 계약서, 인보이스 등등 파일 형식도 이미지부터 pptx, pdf까지 여러 종류의 파일을 업로드하게 되는데, 아무 생각 없이 올리다보면 어느 순간 저장 공간이 꽉 차는걸 볼 수 있습니다.


모자란 Org의 저장 공간

“그럼 Org의 저장 공간을 늘리면 되는거 아니야?”

맞습니다. 늘리면 문제가 해결되긴 합니다. 컴퓨터도 용량이 모자라면 HDD나 SSD를 추가로 연결하여 저장 공간을 마련하면 문제가 해결되듯이 말입니다. 하지만, 문제는 이게 “비싸다”는 것입니다.

HDD나 SSD를 추가로 구매하는 것은 돈이 드는 일입니다. 용량의 크기 별로 단순 몇 만원부터 몇 십만원까지도 늘어나는게 디스크 가격입니다.

하물며 Salesforce Org의 저장 공간은 라이선스/계약(에디션/사용량 정책)에 따라 추가 비용이 꽤 큰 편이고, “운영 중 쌓여가는 파일” 때문에 이를 계속 구매하는 것은 납득이 잘 안 되는 경우가 많습니다.

특히 사용자 수가 많아질수록(=활동이 많아질수록), 파일 업로드와 공유가 빈번해지고, 관리되지 않은 파일들이 누적되면서 저장공간이 가파르게 차기 시작합니다.

처음부터 시스템적으로 필요한 용량이라 사는 저장 공간 비용이라면 몰라도, 단순 운영 중에 발생하는 파일 및 부가적인 요소들로 인해 이런 비용을 계속 내는 것은 좋지 못하다는 생각이 들게 되죠.

그럼 어떻게하면 돈을 들이지 않고 용량을 최대한 줄일 수 있을까요?

방법은 여러 가지가 있습니다.

  • 불필요한 파일 정리(오래된 첨부 제거)
  • 파일의 해상도/용량 최적화(이미지 리사이즈, PDF 압축)
  • 외부 스토리지 연동(S3, SharePoint, Google Drive 등)
  • 그리고 오늘 이야기할 방법: 중복 업로드를 없애는 구조 만들기

그 중 “중복 업로드 제거”에 가장 직접적으로 연결되는 것이 바로 ContentDocumentLink입니다.

중요 포인트

저장공간을 갑자기 많이 잡아먹는 경우는 “파일이 너무 많아서”라기보다, 같은 파일이 여러 번 업로드되어 중복 저장되는 경우가 정말 많습니다.


ContentDocument / ContentDocumentLink 란?

Salesforce에서 “파일(첨부)”을 다루다 보면 아래 3가지 객체가 항상 같이 등장합니다.

  • ContentVersion: 실제 업로드되는 “파일 데이터(본문) + 버전 정보”
  • ContentDocument: 파일을 대표하는 “상위(마스터) 레코드”
  • ContentDocumentLink: 파일(ContentDocument)이 “어떤 레코드에 연결되어 있는지”를 나타내는 연결(링크)

이 구조를 이해하면, 파일 저장 공간이 왜 빠르게 차는지, 그리고 어떻게 줄여야 하는지도 같이 보이기 시작합니다. 이에 대한 자세한 내용은 Salesforce의 File 뜯어보기에서 확인할 수 있습니다.

결론적으로 관계를 딱 한 줄로 정리하면 아래와 같습니다.

ContentDocument(파일 대표) 1개

여러 레코드에 붙일 때마다 ContentDocumentLink가 N개 생긴다.


왜 ContentDocumentLink가 필요한가?

현업에서 저장공간이 불필요하게 증가하는 대표적인 패턴이 있습니다.

같은 파일을 레코드마다 다시 업로드

예를 들어 “표준 계약서 PDF”가 있다고 해보겠습니다.

  • A 거래처(Account)에 계약서 업로드
  • B 영업기회(Opportunity)에도 같은 계약서 업로드
  • C 케이스(Case)에도 같은 계약서 업로드

이렇게 하면, 사용자는 “그냥 여기에도 첨부하고, 저기에도 첨부한 것”처럼 느끼지만, 실제로는 동일한 PDF가 3번 업로드되면서 3개의 파일 데이터(ContentVersion)가 저장될 수 있습니다.

결과적으로 저장공간은 같은 파일이 중복되며 계속 쌓입니다.

업로드는 1번만, 나머지는 링크로 붙이기

이럴 때 필요한 개념이 ContentDocumentLink 입니다.

  • 계약서 PDF를 딱 1번만 업로드해서 ContentDocument(=대표 파일)을 만든다.

  • 그 다음 “이 파일을 Account에도 보이게, Opportunity에도 보이게, Case에도 보이게” 하는 건

    새로운 업로드가 아니라 ContentDocumentLink만 추가하는 방식으로 처리한다.


예시로 이해하기: 유튜브 영상과 플레이리스트

  • 유튜브 영상 1개 = ContentDocument(대표 파일)
  • 그 영상의 업로드된 실제 데이터 = ContentVersion(영상 데이터/버전)
  • 내 플레이리스트에 담기 = ContentDocumentLink(어떤 레코드에 붙였는지)

즉, 영상은 하나인데(=파일은 하나인데), 여러 사람이 플레이리스트에 담을 수 있듯이 Salesforce도 **파일 하나를 여러 레코드에 “공유”**할 수 있고, 그 기록이 ContentDocumentLink로 남는 구조입니다.


ContentDocumentLink가 필요한 이유

ContentDocumentLink가 필요한 이유는 딱 한 가지로 요약됩니다.

파일 “중복 업로드”를 없애고, 하나의 파일을 여러 레코드에서 재사용하기 위해서

그리고 이 한 가지 이유가 실제 현업에서는 아래처럼 큰 차이를 만듭니다.

  • 같은 제품 이미지/광고물/PDF를 레코드마다 다시 올리지 않게 됨
  • 저장공간이 “파일 개수”가 아니라 “진짜 파일 원본 개수”만큼만 증가
  • “어디에 첨부했는지”를 링크로 추적 가능
  • 파일 수정/버전 업로드를 한 번만 해도 여러 레코드에서 동일하게 최신 상태로 공유 가능

ContentDocumentLink 사용 방법(개념 → 실제 흐름)

ContentDocumentLink는 말 그대로 “링크”이기 때문에, 사용 흐름이 다음과 같이 구성됩니다.

1) 파일을 1번 업로드하여 ContentDocument를 만든다

사용자가 파일을 업로드하면 다음이 함께 생성됩니다.

  • ContentVersion 생성
  • ContentDocument 생성(또는 기존 Document에 새 버전 추가)
  • 특정 레코드에 붙였다면 ContentDocumentLink도 함께 생성

2) “다른 레코드에도 보이게 하고 싶다”면 업로드가 아니라 Link만 추가한다

즉, 같은 파일을 다른 레코드에 붙일 때는 아래 중 한 가지를 선택합니다.

  • (사용자 UI) “파일 공유/링크 추가” 기능을 사용
  • (개발) Apex/Flow에서 ContentDocumentLink 레코드를 생성

ContentDocumentLink에 들어가는 핵심 값은 아래와 같습니다.

  • ContentDocumentId: 어떤 파일을 링크할 것인지
  • LinkedEntityId: 어느 레코드(Account/Opportunity/Case 등)에 붙일 것인지
  • (옵션) ShareType / Visibility 등 접근 범위 설정

적용 후 개선되는 점

저장공간 절약

  • 같은 파일을 레코드마다 다시 올리지 않기 때문에, 중복 저장이 줄어듭니다.
  • 특히 제품 이미지/광고물/전개도/표준 계약서처럼 “여러 곳에서 반복 사용하는 파일”이 많을수록 절감 폭이 큽니다.

운영 품질 향상: 파일이 “일관된 단일 원본”이 된다

중복 업로드 구조에서는 이런 일이 자주 발생합니다.

  • A 레코드에 있는 계약서는 최신 버전
  • B 레코드에 있는 계약서는 예전 버전
  • 담당자마다 올리는 파일이 달라져서 뭐가 진짜인지 혼란

하지만 “원본 1개 + 링크 공유” 구조로 가면,

  • 파일 원본을 1번만 업데이트하면
  • 연결된 모든 레코드에서 동일한 최신 버전을 보게 됩니다.

즉, 단순히 저장공간 문제뿐 아니라 업무 혼선이 줄어드는 효과도 큽니다.

관리/감사/추적이 쉬워진다

  • “이 파일이 어디에 붙어있는지”는 ContentDocumentLink를 보면 바로 알 수 있습니다.
  • 삭제/정리 정책을 만들기도 쉬워집니다.
    • 예: “어느 레코드에도 링크가 없는 파일은 정리 대상”
    • 예: “특정 오브젝트에만 링크된 파일만 남기기”

마무리

Salesforce에서 저장공간이 빠르게 차는 이유는 “파일이 많아서”도 있지만, 실제로는 같은 파일을 여러 번 업로드하는 중복 저장이 큰 비중을 차지하는 경우가 많습니다.

ContentDocumentLink는 이 문제를 해결하기 위한 가장 기본적이면서도 강력한 구조입니다.

파일은 하나(ContentDocument)로 관리하고,

필요한 레코드마다 링크(ContentDocumentLink)로만 붙인다.

이 개념만 제대로 잡아도, 저장공간 최적화뿐 아니라 운영의 일관성/관리성까지 함께 개선됩니다.

hamburger icon

무링의 개발 블로그

Salesforce Developer


연관된 글