채용정보 기본사항(v3)

채용정보 리소스는 채용 공고를 나타냅니다. 채용 공고를 '구인 공고' 또는 '구인 요청'이라고도 합니다. 채용정보는 채용을 진행하는 고용 주체인 회사의 자산입니다.

생성, 업데이트, 삭제 메소드를 사용하여 채용정보를 조정하고 목록 및 가져오기 메소드를 사용하여 채용정보에 액세스할 수 있습니다. Cloud Talent Solution 색인에 변경사항이 반영되기까지 최대 5분 정도 걸릴 수 있습니다.

채용정보는 서비스 계정 범위에 포함됩니다. 특정 서비스 계정의 사용자 인증 정보를 사용하여 인증된 검색 요청을 통해서만 이러한 채용정보 콘텐츠에 액세스할 수 있습니다.

손쉬운 문제해결 및 분류를 위해 Cloud Talent Solution 채용정보 색인을 자신의 채용정보 색인과 동기화하고 Cloud Talent Solution에 의해 생성된 name과 시스템의 고유한 채용정보 ID 간의 관계를 유지하십시오. 채용정보가 변경되거나 시스템에 등록될 때 이러한 변경사항이 즉시 반영되도록 실시간으로 적절한 CRUD 호출을 Cloud Talent Solution에 전송해야 합니다. 기존의 채용정보 데이터 수집 파이프라인에 Cloud Talent Solution 색인을 추가해야 합니다.

채용정보 만들기

채용정보를 만드는 방법에 대한 자세한 내용은 빠른 시작: 회사 및 채용정보 만들기 가이드를 참조하세요.

Java

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.


/** Create a job. */
public static Job createJob(Job jobToBeCreated) throws IOException {
  try {
    CreateJobRequest createJobRequest = new CreateJobRequest().setJob(jobToBeCreated);

    Job jobCreated =
        talentSolutionClient
            .projects()
            .jobs()
            .create(DEFAULT_PROJECT_ID, createJobRequest)
            .execute();
    System.out.println("Job created: " + jobCreated);
    return jobCreated;
  } catch (IOException e) {
    System.out.println("Got exception while creating job");
    throw e;
  }
}

Python

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.

def create_job(client_service, job_to_be_created):
    try:
        request = {"job": job_to_be_created}
        job_created = (
            client_service.projects()
            .jobs()
            .create(parent=parent, body=request)
            .execute()
        )
        print("Job created: %s" % job_created)
        return job_created
    except Error as e:
        print("Got exception while creating job")
        raise e

Go

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.


// createJob create a job as given.
func createJob(w io.Writer, projectID string, jobToCreate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	parent := "projects/" + projectID
	req := &talent.CreateJobRequest{
		Job: jobToCreate,
	}
	job, err := service.Projects.Jobs.Create(parent, req).Do()
	if err != nil {
		return nil, fmt.Errorf("Failed to create job %q, Err: %w", jobToCreate.RequisitionId, err)
	}
	return job, err
}

필수 입력란

채용정보를 만들고 업데이트할 때의 필수 필드는 다음과 같습니다.

  • companyName: 채용정보를 나열하는 회사의 리소스 이름(예: projects/[PROJECT_ID]/companies/[COMPANY_ID])

  • requisitionId: 클라이언트에서 채용정보를 식별하기 위해 할당하는 요청 ID로, 공고 ID라고도 합니다. 클라이언트는 클라이언트 식별 및 요청 추적에 이 필드를 사용합니다. 허용되는 최대 문자 수는 225자(영문 기준)입니다.

    채용 공고의 고유성은 채용정보의 requisitionID, companyName, 언어를 결합하여 결정됩니다. 이러한 속성의 특정 키를 사용하여 채용정보를 만든 경우, 이 키는 Cloud Talent Solution 색인에 저장되며 채용정보가 삭제되기 전까지는 동일한 필드가 있는 다른 채용정보를 만들 수 없습니다.

  • title: 직책입니다(예: 'Software Engineer'). 허용되는 최대 문자 수는 500자(영문 기준)입니다.

    Cloud Talent Solution은 일반적이지 않은 직책으로 인해 검색결과가 누락되는 문제를 해결하기 위해 채용정보에 제공된 모든 필드를 활용하여 채용정보의 컨텍스트를 파악하고 채용정보의 '정리된' 직책을 내부적으로 저장합니다. 검색 요청이 서비스로 전송될 때 검색어도 정리되며, 정리된 쿼리를 정리된 관련 채용정보에 매핑하는 데 온톨로지가 사용됩니다.

  • description: 채용정보에 대한 설명으로, 여기에는 일반적으로 여러 단락으로 구성된 회사 및 관련 정보가 포함됩니다. 직무, 자격 요건, 기타 업무 특성을 취급하는 별도의 필드가 채용정보 객체에 제공됩니다. 이러한 별도의 채용정보 필드를 사용하는 것이 좋습니다.

    이 필드는 HTML 입력을 허용 및 정리하며 굵게, 기울임꼴, 순서가 지정된 목록, 순서가 지정되지 않은 목록의 마크업 태그를 허용합니다. 허용되는 최대 문자 수는 100,000자(영문 기준)입니다.

다음 필드 중 하나는 사용해야 합니다.

  • applicationInfo.uris[]: 지원 페이지의 URL입니다.

  • applicationInfo.emails[]: 이력서 또는 지원서를 보낼 이메일 주소입니다.

  • applicationInfo.instruction: '지원서 접수 주소' 등의 지원 안내입니다. 이 필드는 HTML 입력을 허용 및 정리하며 굵게, 기울임꼴, 순서가 지정된 목록, 순서가 지정되지 않은 목록의 마크업 태그를 허용합니다. 허용되는 최대 문자 수는 3,000자(영문 기준)입니다.

흔히 사용되는 필드

  • postingExpireTime: 타임스탬프 기준으로 채용 공고가 만료되는 시점입니다. 이 시간이 지나면 채용정보는 만료 상태로 표시되고 검색결과에 나타나지 않습니다. UTC 시간대로 2100년 12월 31일 이전으로만 설정할 수 있습니다. 잘못된 날짜(예: 지나간 날짜)는 무시됩니다. 채용정보가 만료되는 기본 날짜는 UTC 시간대 기준으로 채용정보 생성 시간으로부터 30일 후입니다.

    채용정보가 만료된 후 60일까지는 GET 연산자를 사용하여 만료된 채용정보 콘텐츠를 검색할 수 있습니다. 60일이 지나면 만료된 채용정보는 GET 연산자를 통해 반환되지 않습니다.

  • addresses[]: 채용을 진행하는 위치입니다. 통근 시간별 채용정보 검색을 포함하여 API 결과를 개선하려면 채용 위치의 상세 주소를 제공하는 것이 좋습니다. 허용되는 최대 문자 수는 500자(영문 기준)입니다. addresses[]에 대한 자세한 내용은 아래 권장사항 섹션을 참조하세요.

  • promotionValue: 값이 0보다 크면 채용정보가 '추천 채용정보'로 정의되어 FEATURED_JOBS 유형의 채용정보 검색에서만 반환됩니다. 값이 클수록 추천 검색결과에서 우선적으로 반환됩니다. 자세한 내용은 추천 채용정보를 참조하세요.

커스텀 필드

  • customAttributes: 이 필드는 채용정보의 커스텀 데이터를 저장할 수 있는 커스텀 속성을 최대 100개까지 저장합니다. 채용정보 검색 요청에서 jobQuery 필드를 지정하면 이 필드를 검색 요청 기준으로 필터링할 수 있습니다. 또한 회사의 keywordSearchableJobCustomAttributes 속성에 이 필드를 설정하면 keywordSearchableJobCustomAttributes의 필드 중에서 검색어와 정확하게 일치하는 필드가 하나라도 있는 채용정보가 모두 반환됩니다.

채용정보 업데이트

fieldMask가 없는 채용정보 업데이트

Java

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.


/** Update a job. */
public static Job updateJob(String jobName, Job jobToBeUpdated) throws IOException {
  try {
    UpdateJobRequest updateJobRequest = new UpdateJobRequest().setJob(jobToBeUpdated);
    Job jobUpdated =
        talentSolutionClient.projects().jobs().patch(jobName, updateJobRequest).execute();
    System.out.println("Job updated: " + jobUpdated);
    return jobUpdated;
  } catch (IOException e) {
    System.out.println("Got exception while updating job");
    throw e;
  }
}

Python

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.

def update_job(client_service, job_name, job_to_be_updated):
    try:
        request = {"job": job_to_be_updated}
        job_updated = (
            client_service.projects()
            .jobs()
            .patch(name=job_name, body=request)
            .execute()
        )
        print("Job updated: %s" % job_updated)
        return job_updated
    except Error as e:
        print("Got exception while updating job")
        raise e

Go

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.


// updateJob update a job with all fields except name.
func updateJob(w io.Writer, jobName string, jobToUpdate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	req := &talent.UpdateJobRequest{
		Job: jobToUpdate,
	}
	job, err := service.Projects.Jobs.Patch(jobName, req).Do()
	if err != nil {
		return nil, fmt.Errorf("Failed to update job %s: %w", jobName, err)
	}

	return job, err
}

fieldMask로 채용정보 업데이트

Java

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.


/** Update a job. */
public static Job updateJobWithFieldMask(String jobName, String fieldMask, Job jobToBeUpdated)
    throws IOException {
  try {
    UpdateJobRequest updateJobRequest =
        new UpdateJobRequest().setUpdateMask(fieldMask).setJob(jobToBeUpdated);
    Job jobUpdated =
        talentSolutionClient.projects().jobs().patch(jobName, updateJobRequest).execute();
    System.out.println("Job updated: " + jobUpdated);
    return jobUpdated;
  } catch (IOException e) {
    System.out.println("Got exception while updating job");
    throw e;
  }
}

Python

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.

def update_job_with_field_mask(client_service, job_name, job_to_be_updated, field_mask):
    try:
        request = {"job": job_to_be_updated, "update_mask": field_mask}
        job_updated = (
            client_service.projects()
            .jobs()
            .patch(name=job_name, body=request)
            .execute()
        )
        print("Job updated: %s" % job_updated)
        return job_updated
    except Error as e:
        print("Got exception while updating job with field mask")
        raise e

Go

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.


// updateJobWithMask updates a job by name with specific fields.
// mask is a comma separated list top-level fields of talent.Job.
func updateJobWithMask(w io.Writer, jobName string, mask string, jobToUpdate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	req := &talent.UpdateJobRequest{
		Job:        jobToUpdate,
		UpdateMask: mask,
	}
	job, err := service.Projects.Jobs.Patch(jobName, req).Do()
	if err != nil {
		log.Fatalf("Failed to update job %s with field mask %s, Err: %v", jobName, mask, err)
	}

	return job, err
}

권장사항

위치 필드

가능한 한 addresses[] 필드에 채용정보의 상세 주소를 제공하는 것이 좋습니다. 이렇게 하면 위치 감지 및 관련성이 향상됩니다. 상세 주소를 제공할 수 없는 경우에는 가능한 많은 정보를 입력합니다. 주소는 국가 수준까지 지원됩니다. 지역 지정(예: '태평양 연안 북서부')은 지원되지 않습니다.

Cloud Talent Solution은 addresses[] 필드의 데이터를 사용하여(출력 전용) derivedInfo.locations[] 필드를 채웁니다. 전체 주소가 제공되지 않으면 서비스는 회사 이름 등의 기타 정보를 사용하여 채용 공고의 주소를 더 자세히 유추할 수 있는지 판단합니다.

예를 들어 소프트웨어 채용정보의 위치가 Mountain View로 지정되고 채용정보에 연관된 회사가 Google인 경우, 서비스는 회사 객체를 찾아 headquartersAddress 필드에 더 정확한 주소가 제공되는지, 그리고 해당 주소가 채용 공고 도시와 동일한지 확인합니다. 만약 그렇다면 서비스는 채용정보가 상세 주소와 관련되었을 가능성이 '있다'고 판단하고 derivedInfo.locations[] 필드를 적절히 채웁니다.

회사 주소 데이터를 사용할 수 없는 경우 서비스는 독점 지식과 채용정보/회사 정보를 조합하여 derivedInfo.locations[] 필드에 입력합니다.

derivedInfo.locations[] 값이 최선의 추측이므로 채용정보 주소를 표시할 때 derivedInfo.locations[] 데이터 또는 addresses 필드를 사용할 수 있습니다.

각 채용 공고마다 위치가 최대 50개까지 연결될 수 있습니다. 여러 채용정보의 requisitionId, companyName, languageCode가 동일한 경우는 허용되지 않기 때문에 채용정보에 더 많은 위치가 있는 경우 채용정보를 고유한 requisitionId(예: 'ReqA', 'ReqA-1', 'ReqA-2' 등)를 가진 여러 채용정보로 분할할 수 있습니다. requisitionId를 그대로 유지해야 한다면 CustomAttribute를 스토리지로 사용해야 합니다. 검색 환경을 개선하려면 동일한 채용정보에서 서로 가장 가까운 위치를 그룹화하는 것이 좋습니다.

지원되는 주소

Cloud Talent Solution은 Google Maps Geocoding API(formattedAddress 필드)가 인식하는 모든 주소를 허용합니다. 이 서비스는 인식되지 않는 주소를 사용하여 채용정보를 만들거나 검색을 실행하려 하면 400 오류를 반환합니다.

회사 주소가 Google Maps Geocoding API에 잘못 등록된 경우 버그를 신고하여 정정합니다. 수정사항이 적용되는 데 최대 5일이 걸릴 수 있습니다.

주소 자동 완성

Cloud Talent Solution은 위치 자동 완성을 제안하지 않습니다. 자동 완성 채우기를 제안하려면 Google Maps Places API 또는 기타 유사한 위치 서비스를 사용합니다.

시/도 단위, 전국 단위, 재택 근무 채용정보

채용정보 리소스의 postingRegion 필드를 사용하면 채용정보를 주/도 단위, 전국 단위 또는 재택 근무로 지정할 수 있습니다.

  • ADMINISTRATIVE_AREANATION 채용정보는 채용 공고의 시/도 또는 국가에 속하는 위치를 사용한 모든 검색에서 반환됩니다. 예를 들어 ADMINISTRATIVE_AREA 채용정보의 위치가 "WA, USA"인 경우 '시애틀'로 지정된 검색에 대해 LocationFilter가 반환됩니다.

  • TELECOMMUTE 채용정보는 모든 위치 관련 검색에서 반환되지만 관련성이 낮은 것으로 취급됩니다. 검색에서 이러한 채용정보를 대상으로 지정하려면 검색의 LocationFilter에서 telecommutePreference 플래그를 TELECOMMUTE_ALLOWED로 설정합니다.