[VS Code] Create Project with Manifest에 관하여

molamola·2025년 4월 22일

VS Code

목록 보기
6/9

🧩 SFDX 프로젝트 생성 방식 비교

항목일반 프로젝트 생성
SFDX: Create Project
매니페스트 포함 생성
SFDX: Create Project with Manifest
📂 폴더 구조force-app/만 생성force-app/ + manifest/ 폴더 생성
🧾 package.xml 포함 여부❌ 없음포함됨 (모든 메타데이터 타입 포함한 템플릿 제공)
🔄 retrieve 방식수동 선택 (-m 옵션 or Org Browser)package.xml 기준으로 자동 가져오기 가능
Git 관리 편의성❌ 가져온 항목 추적 어려움✅ 가져올 대상 명확하게 추적 가능
협업 시 일관성❌ 가져온 항목이 사람마다 다를 수 있음✅ 동일한 package.xml 사용으로 공통 기반 확보 가능
반복 배포/백업❌ 명령 재사용 어려움package.xml 한 번 작성해두면 반복 활용 가능
추천 대상빠르게 새 기능을 개발하거나 실습할 때실무 개발, 팀 협업, Org 메타데이터 관리 목적일 때
기타 장점간단하고 빠름대규모 Org에 최적, 메타데이터 관리 유리

🔍 두 방식의 retrieve 예시 차이

⛔ 일반 프로젝트

sfdx force:source:retrieve -m ApexClass
  • → ApexClass 전체 또는 일부를 직접 명령어에 입력해야 함
  • → 어떤 항목이 들어오는지 추적 어려움

✅ 매니페스트 프로젝트

sfdx force:source:retrieve -x manifest/package.xml
  • → XML에 적힌 메타데이터만 가져옴
  • → 추적 가능, Git에 함께 보관 가능

🛠 실무 팁: 매니페스트 관리 전략

전략설명
package.xml을 목적별로 분리예: package_apex.xml, package_flows.xml, package_ui.xml
커밋 시 함께 보관Git에 manifest/ 폴더 그대로 커밋
팀원 간 공유→ 팀 전체가 동일한 retrieve/배포 대상 사용 가능
코드 리뷰에도 용이가져올 대상 명시되어 있어 변경사항 추적 쉬움

📌 추가로 알면 좋은 내용

개념설명
* 와일드카드members>*</members>는 해당 타입의 모든 항목을 의미
retrieve vs deployretrieve: Org → 로컬
deploy: 로컬 → Org
Org Browser매니페스트 없이도 특정 항목만 클릭으로 가져올 수 있는 도구 (GUI 방식)
.gitignore와의 관계package.xml가져올 대상 정의, .gitignore버전 관리 제외 대상 정의
package.xml 없이 retrieve가능하지만 반복 불가하고 추적 어려움 (임시적 활용에 적합)

✅ 결론 요약

목적추천 생성 방식
빠르게 코드 실습만 해보려는 경우SFDX: Create Project (간단하고 가볍게)
기존 Org에서 코드/구성요소를 체계적으로 가져와서 개발하려는 경우SFDX: Create Project with Manifest (강력 추천)
팀 협업, Git 연동, 배포 자동화까지 고려하는 실무 환경무조건 매니페스트 방식 추천

실제 실무에서 자주 사용하는 package.xml 예시를 보여드릴게요.


📦 package.xml 샘플 예시 (대표 메타데이터 포함)

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
  
  <!-- Apex 클래스 전체 -->
  <types>
    <members>*</members>
    <name>ApexClass</name>
  </types>

  <!-- Apex 트리거 전체 -->
  <types>
    <members>*</members>
    <name>ApexTrigger</name>
  </types>

  <!-- LWC (LightningComponentBundle) 전체 -->
  <types>
    <members>*</members>
    <name>LightningComponentBundle</name>
  </types>

  <!-- 사용자 정의 객체 일부만 가져오기 -->
  <types>
    <members>Account</members>
    <members>CustomObject__c</members>
    <name>CustomObject</name>
  </types>

  <!-- 사용자 정의 필드 일부만 가져오기 -->
  <types>
    <members>Account.My_Custom_Field__c</members>
    <name>CustomField</name>
  </types>

  <!-- 페이지 레이아웃 전체 -->
  <types>
    <members>*</members>
    <name>Layout</name>
  </types>

  <!-- 권한 세트 전체 -->
  <types>
    <members>*</members>
    <name>PermissionSet</name>
  </types>

  <!-- 정적 리소스 전체 -->
  <types>
    <members>*</members>
    <name>StaticResource</name>
  </types>

  <!-- API 버전 -->
  <version>59.0</version>

</Package>

✅ 이 예시의 특징

포함된 항목용도
ApexClass, ApexTrigger백엔드 코드 자동 가져오기
LightningComponentBundleLWC 전체
CustomObject, CustomField객체 및 필드 설정 관리
Layout, PermissionSet사용자 UI 및 권한 구성
StaticResource이미지, CSS, JS 등 정적 리소스 포함

🛠 사용하는 방법

프로젝트 루트에 manifest/package.xml 파일을 만든 뒤, 아래 명령어로 retrieve:

sfdx force:source:retrieve -x manifest/package.xml

또는 sf CLI에서는:

sf project retrieve start --manifest manifest/package.xml

✳️ 필요에 따라 커스터마이징 가능

  • 특정 클래스만 가져오려면:
<members>MyClass</members>
  • 특정 객체만 가져오고 싶다면:
<members>Contact</members>

0개의 댓글