Skip to content

캠페인 라이프사이클 상세

크리에이터별 진행 단계 (ApplicationPhase)

Section titled “크리에이터별 진행 단계 (ApplicationPhase)”
구분SaaS (현재)레거시
핵심 엔티티CampaignApplicationProgressTable
상태 추적selectionStatus + phase + subStepmatchingStatus, deliveryStatus 단일 필드
계약ApplicationContract (전자계약, OTP, 서명, PDF)없음
단가 협상PriceNegotiation 이력 관리 (1:N)bidPrice 필드 하나
검수ContentReview + ContentSubmissionItem (1차/2차)aiCheck, personCheck 필드
배송ApplicationDelivery (별도 엔티티)trackingNumber 필드
최종 제출FinalSubmission (링크, 파일, 재요청)없음
구분 필드Collab.isLegacy = falseCollab.isLegacy = true

관리자 또는 기업이 새 캠페인을 생성합니다.

컨트롤러:

HTTP엔드포인트설명
PATCH/ai/admin/campaigns/{campaignNo}관리자 캠페인 생성
PUT/ai/admin/campaigns/{campaignNo}캠페인 수정 (기본정보, 제출물설정, 대시보드설정, 계약설정, 일정설정)

서비스: AdminCampaignService

필드타입설명
noPK캠페인 번호
idString작성자 ID (기업/관리자)
titleString캠페인 제목
campaignTypeEnumPRODUCT, MONEY, BOTH, DEFAULT
campaignSubStepEnum현재 진행 단계
snsContentFormatEnumSNS 콘텐츠 형식
modelTypeEnumSTANDARD (일반) / PERFORMANCE (성과형)
firstReviewTypesSet1차 검수 필수 제출 타입
secondReviewTypesSet2차 검수 필수 제출 타입
finalSubmissionTypesSet최종 제출 필수 타입
recruitmentStartDateDateTime모집 시작일
recruitmentEndDateDateTime모집 종료일
recruitmentNumberInteger모집 인원
isLegacyBoolean레거시 캠페인 여부 (기본 true)
guidelineVersionInteger가이드라인 버전 (1 or 2)
isDoubleReview()-firstReviewTypes가 비어있지 않으면 2회 검수

캠페인 비용을 크레딧 또는 CandyPay로 결제합니다.

HTTP엔드포인트설명컨트롤러
POST/ai/payments/collab/confirm캠페인 크레딧 결제PaymentController
GET/ai/campaign-payments캠페인 결제 내역 조회CampaignPaymentController

서비스: CandyPaymentService, CampaignPaymentService, CampaignBudgetService

엔티티테이블설명
CampaignPaymentTB_CAMPAIGN_PAYMENT캠페인-결제 연결
CampaignBudgetTB_CAMPAIGN_BUDGET예산 관리 (AVAILABLE → LOCKED → RELEASED)
CreditTransactionTB_CREDIT_TRANSACTION크레딧 거래 이력
CampaignBudgetService.lockBudget(application, amount, createdBy)
→ 예산 가용성 확인 (checkBudgetAvailability)
→ CampaignBudget 상태: AVAILABLE → LOCKED
→ PROPOSAL 시 예산 잠금, REJECT 시 unlockBudget

콘텐츠 가이드라인을 작성합니다. v1과 v2 두 버전이 존재합니다.

HTTP엔드포인트설명컨트롤러
GET/ai/guideline/{collabNo}가이드라인 조회ContentGuidelineController
PUT/ai/guideline/{collabNo}/images이미지 업로드ContentGuidelineController
POST/ai/guideline/{collabNo}/guideline/complete가이드라인 완료 & PDF 생성ContentGuidelineController
PUT/ai/guideline/v2/{collabNo}가이드라인 v2 저장GuidelineV2Controller
GET/ai/guideline/v2/{collabNo}가이드라인 v2 조회GuidelineV2Controller
PUT/ai/business/contents/guideline/{collabNo}가이드라인 UpsertBusinessContentController

서비스: ContentGuidelineService, GuidelineV2Service

REQUESTED → DRAFT → COMPLETED
(빈템플릿 요청) → (작성 중) → (완료)

5. 크리에이터 모집 (CREATOR_RECRUIT)

Section titled “5. 크리에이터 모집 (CREATOR_RECRUIT)”

컨트롤러:

HTTP엔드포인트설명
POST/ai/collab-applicants크리에이터 지원

서비스: CollabApplicantService, CampaignApplicationService

지원 프로세스:

  1. 크리에이터가 캠페인 상세에서 지원
  2. CampaignApplication 생성 (selectionStatus = WAITING)
  3. 중복 체크: 동일 SNS 계정, 동일 연락처
  4. SNS 계정 ID → 전체 URL 변환
  5. 배송지 정보 처리

CampaignApplication (TB_CAMPAIGN_APPLICATION)

Section titled “CampaignApplication (TB_CAMPAIGN_APPLICATION)”
필드타입설명
idPK신청 ID
collabFK캠페인
influenceFK인플루언서
selectionStatusEnumWAITING, SELECTED, RESERVED, REJECTED, ELIMINATED, PROPOSAL
phaseEnumAPPLICATION_CONTRACT, FIRST_REVIEW, SECOND_REVIEW, UPLOAD_SETTLEMENT
adminVisibleBoolean기업 대시보드 노출 여부
sourceTypeEnumSELF_APPLIED, ADMIN_ADDED, AI_RECOMMENDED
defaultUnitPriceLong기본 단가
snsAccountLinkStringSNS 계정 URL
appliedAtDateTime지원 시각
selectedAtDateTime선정 시각
rejectedAtDateTime미선정 시각

6. 관리자 리스트 관리 (CREATOR_MATCHING)

Section titled “6. 관리자 리스트 관리 (CREATOR_MATCHING)”

관리자가 지원자를 검토하고 기업 대시보드 노출 여부를 결정합니다.

HTTP엔드포인트설명컨트롤러
GET/ai/admin/dashboard/{campaignNo}/list리스트 관리 조회 (adminVisible 무관 전체)AdminDashboardController
PATCH/ai/admin/dashboard/{campaignNo}/list벌크 업데이트 (adminVisible, 노출가, 비고 등)AdminDashboardController
GET/ai/admin/dashboard/{campaignNo}/user-pool유저 풀 조회 (미지원자)AdminDashboardController
GET/ai/admin/dashboard/{campaignNo}/progress관리자용 진행 상황 조회AdminDashboardController

서비스: AdminListManagementService, AdminUserPoolService

대시보드 조회 시 적용되는 필터링 조건입니다. 기업 대시보드관리자 대시보드에서 다르게 동작합니다.

항목설명
필드CampaignApplication.adminVisible (Boolean)
기본값false
설정 주체관리자 (벌크 업데이트)
효과true인 지원자만 기업 대시보드에 노출
관리자 대시보드adminVisible 무관하게 전체 조회
항목설명
필드Collab.applicantHidden (Boolean)
기본값false
자동 트리거계약서 서명 완료 시 / CONTENT_CREATION 단계 진입 시 / 선정 크리에이터 전원 계약 서명 완료 시
효과true이면 SELECTED, PROPOSAL만 기업 대시보드에 표시
코드 위치ProgressTableService:1198-1203, ContractService.checkAndAutoHideApplicants()
항목설명
조건동시 활성 캠페인 3개 초과
활성 기준selectionStatus = SELECTED + phase = DRAFT_REVIEW + schedule.endDate > now
효과adminVisible = false 자동 처리 (기업 대시보드에서 제외)
코드 위치AdminListManagementService:425-440
항목설명
대상크리에이터 마이페이지 (본인 캠페인 목록)
조건selectionStatus = REJECTED이고 rejectedAt < now - 7일이면 숨김
효과크리에이터에게 오래된 탈락 건 미노출
코드 위치CampaignApplicationRepository.findByInfluenceExcludeOldRejected()
항목설명
조건계약서 2건 이상 서명 완료 시
효과PROPOSAL/SELECTED/ELIMINATED 아닌 나머지 지원자 일괄 REJECTED
코드 위치AdminListManagementService:587-598
기업 대시보드 조회
→ 1차 필터: adminVisible = true 만 조회
→ 2차 필터: applicantHidden = true 이면 SELECTED/PROPOSAL 만 표시

관리자가 크리에이터에게 단가를 제안합니다.

HTTP엔드포인트설명컨트롤러
POST/ai/admin/dashboard/{campaignNo}/price-negotiations단가 제안 전송 (벌크)AdminDashboardController

서비스: AdminPriceNegotiationService

필드타입설명
idPK협상 ID
applicationFK신청 건
proposedPriceLong제안 금액 (KRW)
typeEnumPENDING, ACCEPT, REJECT
proposedByString”ADMIN” 또는 “CREATOR”
respondedAtDateTime응답 시각

ApplicationMatching (TB_APPLICATION_MATCHING)

Section titled “ApplicationMatching (TB_APPLICATION_MATCHING)”

단가 관련 보조 엔티티:

필드설명
quotePrice기준가 (원래 단가)
currentPrice글로우비 특별가 (기업에 노출되는 가격)
matchScoreAI 매칭 점수 (코사인 유사도)
recommendReason추천 사유

기업이 크리에이터를 선정하면 예산이 잠금 처리됩니다.

기업이 크리에이터 선정
→ CampaignApplication.selectionStatus = SELECTED
→ CampaignApplication.selectedAt = now
→ CampaignBudgetService.lockBudget(application, amount)
→ CampaignBudget 상태: AVAILABLE → LOCKED
→ CampaignApplication.phase = APPLICATION_CONTRACT

예산 가용성 체크: 선정 전 checkBudgetAvailability(collabNo, amount) 호출하여 잔여 예산 확인.


HTTP엔드포인트설명
POST/ai/contract/send선정 크리에이터에게 계약서 발송
GET/ai/contract/campaign/{collabNo}캠페인 계약서 목록 조회
GET/ai/contract/{contractId}/audit감사 추적 로그 조회
HTTP엔드포인트설명
GET/ai/contract/{contractId}계약서 조회 (최초 열람 시 OPENED)
PUT/ai/contract/{contractId}/creator-info개인정보 입력
POST/ai/contract/{contractId}/otp/send본인인증 OTP 발송
POST/ai/contract/{contractId}/otp/verifyOTP 검증
POST/ai/contract/{contractId}/sign서명 제출
PUT/ai/contract/{contractId}/documents첨부서류 업로드 (신분증, 사업자등록증, 통장사본)

서비스: ContractService

컨트롤러: ContractController (/ai/contract)

ApplicationContract (TB_APPLICATION_CONTRACT)

Section titled “ApplicationContract (TB_APPLICATION_CONTRACT)”
필드타입설명
idPK계약서 ID
applicationFK신청 건
statusEnumDRAFT → SENT → OPENED → FILLED → OTP_VERIFIED → SIGNED
stageName, realNameString크리에이터 활동명, 실명
businessNameString사업자명 (사업자인 경우)
bankName, bankAccountNumber, accountHolderNameString계좌 정보
registrationNumberString주민등록번호/사업자등록번호
variableValuesJSON계약 템플릿 변수 (광고대금 등)
signatureImageUrlString서명 이미지 URL
signedPdfUrlString서명된 PDF URL
documents1:N첨부 서류 (ContractDocument)
  1. applicantHidden = true 전환 (전원 서명 완료 시)
  2. PROPOSAL/SELECTED/ELIMINATED 아닌 지원자 → 일괄 REJECTED
  3. CampaignApplication.phase → FIRST_REVIEW (2회 검수) 또는 SECOND_REVIEW (1회 검수)
  4. 개별 일정(ApplicationSchedule) 생성

10. 콘텐츠 제작 & 검수 (FIRST_REVIEW / SECOND_REVIEW)

Section titled “10. 콘텐츠 제작 & 검수 (FIRST_REVIEW / SECOND_REVIEW)”
HTTP엔드포인트설명컨트롤러
GET/ai/influence/contents/{itemId}제출물 조회 (피드백 이력 포함)ContentSubmissionController
GET/ai/influence/contents/review/{reviewId}검수 회차 전체 제출 타입 조회ContentSubmissionController
POST/ai/influence/contents제출물 생성ContentSubmissionController
PUT/ai/influence/contents/{itemId}제출물 수정 (저장/제출)ContentSubmissionController
PUT/ai/influence/contents/review/{reviewId}/submit검수 회차 전체 일괄 제출ContentSubmissionController
HTTP엔드포인트설명컨트롤러
GET/ai/business/contents/review/{reviewId}/detail검수 상세 조회BusinessContentController
POST/ai/business/contents/{itemId}/feedbacks피드백 추가 또는 승인 (현재 미사용)BusinessContentController
POST/ai/business/contents/review/{reviewId}/feedbacks/bulk벌크 피드백/승인BusinessContentController
POST/ai/business/contents/review-request추가 검수 요청BusinessContentController

서비스: ContentSubmissionService, ReviewStatusHelper, ApplicationPhaseService

필드타입설명
idPK검수 ID
applicationFK신청 건
reviewRoundInteger검수 회차 (1 또는 2)
statusEnumPENDING, REVIEWING, APPROVED, REJECTED
uploadApprovedBoolean2차 검수 통과 = 업로드 허용
feedbackDeadlineDateTime피드백 반영 마감일
maxFeedbackCountInteger최대 피드백 횟수 (기본 1)
currentFeedbackCountInteger현재 피드백 횟수

ContentSubmissionItem (TB_CONTENT_SUBMISSION_ITEM)

Section titled “ContentSubmissionItem (TB_CONTENT_SUBMISSION_ITEM)”
필드타입설명
idPK제출물 ID
reviewFK소속 검수
itemTypeEnum제출 타입
filePathTEXT파일 경로 (영상/사진)
editorStateLONGTEXTLexical 에디터 상태 (텍스트 콘텐츠)
statusEnumPENDING, REVIEWING, APPROVED, REJECTED
isSubmittedBoolean제출 여부 (false = 임시저장)
currentVersionInteger버전 번호
필드타입설명
feedbackTEXT피드백 내용
feedbackTypeEnumFREE, GUIDELINE_UNREFLECTED, GUIDELINE_EXTRA
resolvedBoolean해결 여부
isDraftBoolean임시 저장 (크리에이터에게 미노출)
checkedByCreatorBoolean크리에이터가 “반영완료” 체크
타입설명검수 단계
SCRIPT_VIDEO영상 스크립트1차 검수
SCRIPT_BLOG블로그 스크립트1차 & 2차
VIDEO영상2차 검수
PHOTO사진2차 검수
CAPTION캡션2차 검수
HASHTAG해시태그2차 검수
타입설명크레딧 차감
FEEDBACK_NOT_REFLECTED크리에이터가 피드백 미반영없음
OUTSIDE_GUIDELINE가이드라인 외 추가 요청50,000 크레딧

2차 검수 승인 후 크리에이터가 최종 결과물을 제출합니다.

HTTP엔드포인트설명컨트롤러
POST/ai/business/contents/upload-date업로드일 선택 (OPTIMAL/CANDIDATE)BusinessContentController
POST/ai/business/contents/final-submissions/bulk벌크 최종 제출물 조회BusinessContentController
POST/ai/business/contents/final-submission/{applicationId}/re-request재요청BusinessContentController

서비스: FinalSubmissionService

필드타입설명
idPKID
application1:1 FK신청 건
contentLinkString업로드된 콘텐츠 링크
partnershipCodeString파트너십 코드
cleanFilePathString클린본 파일
finalFilePathString최종본 파일
isSubmittedBoolean제출 여부
uploadDateTypeStringOPTIMAL 또는 CANDIDATE
uploadDateDateTime업로드 예정일 (OPTIMAL)
candidateDatesJSON후보 날짜 (CANDIDATE)
reRequestTypesJSON재요청 항목
타입설명
CONTENT_LINK업로드한 콘텐츠 링크
PARTNERSHIP_CODE파트너십 코드
CLEAN_FILE클린본 파일
FINAL_FILE최종본 파일
타입동작
OPTIMAL자동으로 3일 후 설정 + 개별 업로드 허용일 일정 생성
CANDIDATE후보 날짜를 관리자에게 이메일 발송
checkAndMarkSettlementReady(collab):
→ SELECTED 전원의 FinalSubmission.isSubmitted = true 확인
→ Collab.settlementReady = true
→ Collab.settlementMailScheduledDate = 20영업일 이내 마지막 목요일 계산
→ Collab.campaignSubStep → RESULT_SUMMARY (첫 제출 시)

  • 실행: 매주 목요일 오전 10시 (KST)
  • 클래스: SettlementMailScheduler
  • 조건: settlementReady = true AND settlementMailSent = false AND settlementMailScheduledDate = 오늘
기준일 = settlementReady가 true로 전환된 날
20영업일 후 = 기준일로부터 토/일 제외 20일 후
발송 예정일 = 20영업일 이내 마지막 목요일

예시: 4/2(수) 전원 제출 완료 → 20영업일 후 = 4/30(수) → 마지막 목요일 = 4/24(목) 발송

컬럼설명
크리에이터명활동명 또는 실명
연락처, 이메일인플루언서 정보
계약금액 (세전)광고대금
부가서비스추가 서비스 금액
총액계약금액 + 부가서비스
세금개인: 3.3% / 사업자: 없음
입금액 (세후)총액 - 세금
사업자 여부개인 / 사업자
계좌번호, 입금자명, 은행계좌 정보
신분증번호주민등록번호/사업자번호
계약서 PDF, 신분증/사업자등록증, 통장사본서류 URL
필드타입설명
settlementReadyBoolean전원 최종 제출 완료 여부
settlementMailSentBoolean정산 메일 발송 완료 여부
settlementMailSentAtDateTime발송 시각
settlementMailScheduledDateLocalDate발송 예정일

CampaignSchedule (TB_CAMPAIGN_SCHEDULE) — 캠페인 레벨

Section titled “CampaignSchedule (TB_CAMPAIGN_SCHEDULE) — 캠페인 레벨”

캠페인 전체 일정을 관리합니다.

필드설명
phaseCampaignPhase (아래 참조)
startDate, endDate단계 기간
isCompleted완료 여부
isDelayed지연 여부

CampaignPhase (단일 검수 10단계 / 이중 검수 12단계)

Section titled “CampaignPhase (단일 검수 10단계 / 이중 검수 12단계)”
순서Phase설명
1RECRUITMENT모집
2EXCLUSION_SELECTION협업 제안
3CONTRACT_CREATION계약서 작성
4DRAFT_SUBMISSION제품 배송
5*SCRIPT_SUBMISSION스크립트 제출 (이중 검수만)
6*SCRIPT_REVIEW스크립트 검수 (이중 검수만)
7DRAFT_REVIEW제작물 제출
8VIDEO_PRODUCTION제작물 검수 및 업로드 허용
9VIDEO_REVIEW재제출 or 업로드
10UPLOAD최종 업로드 허용
11UPLOAD_APPROVAL최종업로드
12SETTLEMENT정산

ApplicationSchedule (TB_APPLICATION_SCHEDULE) — 크리에이터 개별

Section titled “ApplicationSchedule (TB_APPLICATION_SCHEDULE) — 크리에이터 개별”

크리에이터별 마감일을 관리합니다.

Phase설명자동 설정 시점
SCRIPT_SUBMISSION_DEADLINE스크립트 제출 마감SELECTED 시 (2회 검수: +2일)
SCRIPT_REVIEW_DEADLINE스크립트 검수 마감스크립트 제출 시 (익영업일 +1일)
CONTENT_SUBMISSION_DEADLINE제작물 제출 마감SELECTED 시 (1회 검수: +4일) / 스크립트 승인 시 (+4일)
CONTENT_REVIEW_DEADLINE제작물 검수 마감제작물 제출 시 (익영업일 +1일)
FEEDBACK_DEADLINE피드백 반영 마감피드백 발생 시 (+4일)
UPLOAD_ALLOWED_DATE업로드 허용일업로드일 설정 시