중요: 2024년 11월 초부터 데이터 전송을 위한 Ad Manager 저장소 버킷에 대한 액세스 권한이 Google 그룹스에서 새로운 Ad Manager 사용자 역할 권한으로 이전되기 시작합니다.
이전 타임라인 및 다음 단계에 관한 자세한 내용은 데이터 전송 액세스 권한을 Google 그룹스에서 Ad Manager 권한으로 이전을 참고하세요.
Google Cloud Storage는 Ad Manager에서 데이터 전송 보고서 및 일괄 업로드한 잠재고객 쿠키 ID의 데이터 저장소로 사용하는 별도의 Google 제품입니다.
메서드
Ad Manager 클라우드 저장소 버킷에 액세스할 수 있는 세 가지 방법이 있습니다. 방법을 복잡한 순으로 나열하면 다음과 같습니다.
- 웹:
https://console.developers.google.com/storage/gdfp-[Ad Manager 네트워크 코드]
를 방문합니다. - gsutil은 저장소 버킷과의 상호작용을 위해 Unix와 유사한 명령어를 제공하는 Python 기반 명령줄 도구입니다. 버킷 인증이 자동으로 추출되어 처리됩니다.
- Google Cloud Storage API는 저장소 버킷 조작을 위한 모든 기능을 갖춘 API로, JSON 또는 XML RESTful 웹 인터페이스를 통해 사용할 수 있습니다. API 클라이언트 라이브러리는 다양한 프로그래밍 환경(예: 자바, 자바스크립트, Python, Objective-C)에서 사용할 수 있습니다. 이러한 방식은 사용자가 Google App Engine 앱이나 자바 웹 앱과 프로그래밍 방식으로 통합하는 저장소 버킷을 조작해야 하는 경우 유용합니다.
이 도움말은 Google Cloud Storage API의 세부정보를 제공합니다. 웹 및 gsutil 액세스는 관리하기가 더 쉬우므로 이 방법을 먼저 탐색해보는 것이 좋습니다. 이러한 방법은 Google Cloud Storage 개발자 사이트에 전부 설명되어 있습니다.
Ad Manager 저장소 버킷에 대한 액세스 관리
새로운 절차(2024년 11월부터 사용 가능)
2024년 11월부터 데이터 전송 저장소 버킷에 액세스해야 하는 사용자를 Google 그룹스에서 새 Ad Manager 사용자 역할 권한으로 이전할 수 있습니다. 관리자 역할의 사용자는 기본적으로 저장소 버킷에 액세스할 수 있습니다. 다른 사용자의 경우 새로운 '데이터 전송 버킷 보기' 권한이 있는 사용자 역할에 추가할 수 있습니다. 이전에 관해 자세히 알아보세요.
현재 절차(2025년 1월까지 사용 가능)
참고: 이전 단계를 검토하고 2025년 1월 이전에 조치를 취하시기 바랍니다.
Ad Manager에서 사용하는 저장소 버킷은 Google 자체의 클라우드 저장소 프로젝트입니다. Google Developers Console에 있는 자신의 프로젝트 목록에는 Ad Manager 저장소 버킷이 표시되지 않습니다.
Ad Manager 저장소 버킷을 사용하는 기능을 설정하려면 Google 담당자와 협업해야 합니다. Google 담당자는 저장소 버킷을 관리하는 데 사용할 수 있도록 Google 그룹을 제공해 줍니다.
기존 G Suite 그룹의 관리자는 기능을 활성화하는 과정 중에 G Suite Google 그룹의 이름을 담당자에게 제공할 수 있습니다. 그러면 담당자의 도움을 받아 기존 그룹을 사용하여 Ad Manager 저장소 버킷을 사용하는 모든 기능을 활성화할 수 있습니다.
데이터 전송에 대한 액세스 권한을 보유한 Ad Manager 네트워크를 두 개 이상 관리하고 있다면 네트워크 관리를 통합할 수 있도록 이러한 상황을 Google 담당자에게 전달해야 합니다. 네트워크 전체의 모든 데이터 전송 버킷을 관리하는 데는 하나의 그룹이 사용됩니다.
Google Cloud Storage API 사용
API 액세스가 가장 적합하다고 판단된 경우 Google Cloud Storage 서비스 계정을 구성하시기 바랍니다.
Google Cloud Storage 서비스 계정 구성
API를 통해 저장소 버킷에 액세스할 때 사용자의 컨텍스트에서 실행하기보다 서비스 계정을 구성하는 것이 효율적입니다. 서비스 계정은 동적으로 생성된 OAuth 토큰 대신 비공개 키를 인증에 사용하여 애플리케이션 개발을 단순화합니다. 서비스 계정 구성 방법은 다음과 같습니다.
-
Google Developer Console로 이동합니다.
-
애플리케이션의 상위 카테고리가 되는 새 프로젝트를 만들거나 기존 프로젝트를 선택한 다음 프로젝트를 클릭합니다.
-
(선택사항) Ad Manager 저장소 버킷에서 본인의 Google Cloud Storage 계정으로 파일을 복사할 예정이면 결제 및 설정을 클릭하여 프로젝트에 청구 기준을 추가합니다.
-
새 클라이언트 ID를 생성합니다.
-
API 및 서비스 > 사용자 인증 정보를 클릭합니다.
-
새 클라이언트 ID 만들기를 클릭합니다.
-
애플리케이션 유형으로 서비스 계정을 선택하고 클라이언트 ID 만들기를 클릭합니다.
-
이메일 주소는
[unique-id]@developer.gserviceagccount.com
형식으로 생성됩니다. 이 이메일 주소를 복사하고 저장하여 Google 그룹에 추가합니다. -
새 P12 키 생성을 클릭합니다. 파일은 컴퓨터에 저장됩니다. 아래 예시 코드에서와 같이 개발한 애플리케이션에서 이 키를 사용하여 API에 액세스합니다.
-
- Ad Manager 저장소 버킷 액세스 권한을 관리하기 위해 생성한 Google 그룹에 이메일 주소를 추가합니다. '초대'가 아니라 회원 직접 추가를 클릭하여 서비스 계정을 추가합니다. 액세스 권한이 없는 경우 Google 그룹 관리자에게 나를 대신하여 주소를 추가하도록 요청합니다.
Google에서는 Google Cloud Storage에 대한 코드 예제와 라이브러리를 제공합니다. Ad Manager 클라우드 저장소 버킷의 파일을 읽기 위한 다음 Java 예제에는 서비스 계정을 설정할 때 사용자가 설정한 구성요소가 코드에 반영되는 방식을 보여줍니다.
-
프로젝트 이름: Google Cloud Storage 프로젝트의 이름입니다.
-
서비스 계정 이메일 주소: 생성한 이메일 주소입니다.
-
.p12 키 파일: 다운로드한 파일입니다.
-
버킷 이름 : Ad Manager 클라우드 저장소 버킷을 사용하는 기능을 활성화할 때 Google에서 제공하는 이름입니다.
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.security.GeneralSecurityException; import java.util.Collections; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.storage.Storage; import com.google.api.services.storage.model.StorageObject; public class GcsApiTest { /** * The name of the project under which the service account was created. * * Google Developers Console에 표시되는 정보 */ private static final String PROJECT_NAME = "project name"; /** * 서비스 계정의 개발자 이메일 주소 * * 이 이메일은 Google Developers Console에서 서비스 계정 클라이언트 ID를 * 만들 때 생성되며 사용자 인증 정보 페이지에서 * 검색할 수 있습니다. 또한 이 이메일은 저장소 버킷에 대한 액세스를 제어하는 데 * 사용되는 Google 그룹에 추가되어야 합니다. */ private static final String SERVICE_ACCOUNT_EMAIL = "service account email address"; /** * 저장소 운영에 사용하는 버킷 * * 이 버킷의 이름은 계정 관리자에 의해 * 제공되었습니다. 사용 중인 Ad Manager 부가기능에 따라 'gdfp-12345678' 또는 * 'gdfp_cookieupload_12345678'과 이름이 유사할 수 있습니다. */ private static final String BUCKET_NAME = "bucket name"; /** * 읽기 및 쓰기에 사용되는 Google Cloud Storage OAuth 이는 * 버킷에 대해 Google 그룹이 가진 액세스 권한에 해당해야 하며, * 그룹에 부여되지 않는 액세스 권한을 요청할 수 * 없습니다(읽기 전용일 수 있음). */ private static final String STORAGE_SCOPE = "https://www.googleapis.com/auth/devstorage.read_write"; /** * 버킷에 대한 액세스 제공하는 key.p12 파일의 경로 * * 이 파일은 서비스 클라이언트 ID가 만들어질 때 생성됩니다. 이 파일이 * 없는 경우 Google Developers Console에서 새 클라이언트 p12 키를 * 생성해야 합니다. */ private static final String KEY_P12 = "path to .p12 key file"; /** HTTP transport. */ private HttpTransport httpTransport; private Storage storage; // constructor, sets up credentials and storage objects public GcsApiTest() { File p12File = new File(KEY_P12); try { httpTransport = GoogleNetHttpTransport.newTrustedTransport(); GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(JacksonFactory.getDefaultInstance()) .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) .setServiceAccountScopes( Collections.singleton(STORAGE_SCOPE)) .setServiceAccountPrivateKeyFromP12File(p12File).build(); storage = new Storage.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential) .setApplicationName(PROJECT_NAME).build(); } catch (GeneralSecurityException | IOException e1) { e1.printStackTrace(); System.exit(1); } } /** * 버킷에 있는 첫 번째 파일의 이름을 반환하는 메서드 * * @파일의 이름을 반환하거나 버킷이 비어 있는 경우 null로 표시 * @IOException을 발생 */ public String GetFirstFile() throws IOException { Storage.Objects.List listObjects = storage.objects().list(BUCKET_NAME); listObjects.setMaxResults(5L); com.google.api.services.storage.model.Objects objects = listObjects .execute(); // empty bucket? if (null == objects.getItems() || objects.getItems().isEmpty()) { System.out.println("Bucket \"" + BUCKET_NAME + "\" empty or invalid."); return null; } StorageObject object = objects.getItems().get(0); System.out.println("First object in bucket: \"" + object.getName() + "\"."); return object.getName(); } /** * 저장소 버킷에서 지정된 파일을 다운로드하는 메서드 * * @매개변수 파일 이름 * 다운로드해야 하는 파일의 이름입니다. * @IOException을 발생 */ public void DownloadFile(String filename) throws IOException { Storage.Objects.Get getObject = storage.objects().get(BUCKET_NAME, filename); OutputStream os = new FileOutputStream(filename, true); getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); getObject.executeMediaAndDownloadTo(os); System.out.println("File \"" + filename + "\" downloaded."); } /** * 다른 테스트를 실행하는 주요 메서드 * * @매개변수 인수 */ public static void main(String[] args) { GcsApiTest gcsApiTest = new GcsApiTest(); try { String filename = gcsApiTest.GetFirstFile(); gcsApiTest.DownloadFile(filename); } catch (IOException e) { System.out.println(e.getMessage()); } } }
조절 및 동시 연결
동시 연결에는 미리 정의된 한도가 없지만 Google은 악용사례를 방지하기 위해 데이터 전송 가져오기 요청을 제한합니다.