빠른 시작에서는 Google Workspace API를 호출하는 앱을 설정하고 실행하는 방법을 설명합니다.
Google Workspace 빠른 시작에서는 API 클라이언트 라이브러리를 사용하여 인증 및 승인 흐름의 일부 세부정보를 처리합니다. 자체 앱에는 클라이언트 라이브러리를 사용하는 것이 좋습니다. 이 빠른 시작에서는 테스트 환경에 적합한 간소화된 인증 접근 방식을 사용합니다. 프로덕션 환경의 경우 앱에 적합한 액세스 사용자 인증 정보를 선택하기 전에 인증 및 승인에 관해 알아보는 것이 좋습니다.
Google Keep API를 요청하는 Java 명령줄 애플리케이션을 만듭니다.
목표
- 환경을 설정합니다.
- 샘플을 설정합니다.
- 샘플을 실행합니다.
기본 요건
- Java 1.8 이상
- Gradle 7.0 이상
- Google Cloud 프로젝트.
- Google Keep이 사용 설정된 Google 계정
환경 설정
이 빠른 시작을 완료하려면 환경을 설정하세요.
API 사용 설정
Google API를 사용하려면 먼저 Google Cloud 프로젝트에서 사용 설정해야 합니다. 단일 Google Cloud 프로젝트에서 하나 이상의 API를 사용 설정할 수 있습니다.Google Cloud 콘솔에서 Google Keep API를 사용 설정합니다.
서비스 계정 만들기
서비스 계정은 사용자가 아닌 애플리케이션에서 사용하는 특별한 유형의 계정입니다. 서비스 계정을 사용하여 로봇 계정으로 데이터에 액세스하거나 작업을 실행하거나 Google Workspace 또는 Cloud ID 사용자를 대신하여 데이터에 액세스할 수 있습니다. 자세한 내용은 서비스 계정 이해를 참조하세요.Google Cloud 콘솔
- Google Cloud 콘솔에서 메뉴 > IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 서비스 계정 만들기를 클릭합니다.
- 서비스 계정 세부정보를 입력한 다음 만들고 계속하기를 클릭합니다.
- 선택사항: 서비스 계정에 역할을 할당하여 Google Cloud 프로젝트의 리소스에 대한 액세스 권한을 부여합니다. 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참고하세요.
- 계속을 클릭합니다.
- 선택사항: 이 서비스 계정으로 작업을 관리하고 실행할 수 있는 사용자 또는 그룹을 입력합니다. 자세한 내용은 서비스 계정 명의 도용 관리를 참고하세요.
- 완료를 클릭합니다. 서비스 계정의 이메일 주소를 기록해 둡니다.
gcloud CLI
- 서비스 계정을 만듭니다.
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - 선택사항: 서비스 계정에 역할을 할당하여 Google Cloud 프로젝트의 리소스에 대한 액세스 권한을 부여합니다. 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참고하세요.
서비스 계정의 사용자 인증 정보 만들기
공개 키/비공개 키 쌍 형식의 사용자 인증 정보를 가져와야 합니다. 이 사용자 인증 정보는 코드에서 앱 내 서비스 계정 작업을 승인하는 데 사용됩니다.- Google Cloud 콘솔에서 메뉴 > IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 서비스 계정을 선택합니다.
- 키 > 키 추가 > 새 키 만들기를 클릭합니다.
- JSON을 선택한 다음 만들기를 클릭합니다.
새 공개 키/비공개 키 쌍이 생성되어 새 파일로 머신에 다운로드됩니다. 다운로드한 JSON 파일을 작업 디렉터리에
credentials.json
로 저장합니다. 이 파일은 이 키의 유일한 사본입니다. 키를 안전하게 저장하는 방법에 관한 자세한 내용은 서비스 계정 키 관리를 참고하세요. - 닫기를 클릭합니다.
서비스 계정에 도메인 전체 위임 설정하기
Google Workspace 조직의 사용자를 대신하여 API를 호출하려면 최고 관리자 계정이 Google Workspace 관리 콘솔에서 서비스 계정에 도메인 전체 권한 위임을 부여해야 합니다. 자세한 내용은 서비스 계정에 도메인 전체 권한 위임을 참고하세요.- Google Cloud 콘솔에서 메뉴 > IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 서비스 계정을 선택합니다.
- 고급 설정 표시를 클릭합니다.
- '도메인 전체 위임'에서 서비스 계정의 '클라이언트 ID'를 찾습니다. 복사 를 클릭하여 클라이언트 ID 값을 클립보드에 복사합니다.
관련 Google Workspace 계정에 대한 최고 관리자 액세스 권한이 있는 경우 Google Workspace 관리 콘솔 보기를 클릭한 다음 최고 관리자 사용자 계정으로 로그인하고 계속해서 다음 단계를 따르세요.
관련 Google Workspace 계정에 대한 최고 관리자 액세스 권한이 없는 경우 해당 계정의 최고 관리자에게 문의하여 서비스 계정의 고객 ID와 OAuth 범위 목록을 전송하세요. 그러면 최고 관리자가 관리 콘솔에서 다음 단계를 완료할 수 있습니다.
- Google 관리 콘솔에서 메뉴 > 보안 > 액세스 및 데이터 관리 > API 관리로 이동합니다.
- 도메인 전체 위임 관리를 클릭합니다.
- 새로 추가를 클릭합니다.
- '클라이언트 ID' 입력란에 이전에 복사한 클라이언트 ID를 붙여넣습니다.
- 'OAuth 범위' 필드에 애플리케이션에 필요한 범위를 쉼표로 구분하여 입력합니다. 이는 OAuth 동의 화면을 구성할 때 정의한 범위와 동일합니다.
- 승인을 클릭합니다.
작업공간 준비
작업 디렉터리에서 새 프로젝트 구조를 만듭니다.
gradle init --type basic mkdir -p src/main/java src/main/resources
src/main/resources/
디렉터리에서 이전에 다운로드한credentials.json
파일을 복사합니다.기본
build.gradle
파일을 열고 콘텐츠를 다음 코드로 바꿉니다.apply plugin: 'java' apply plugin: 'application' mainClassName = 'KeepQuickstart' sourceCompatibility = 1.8 targetCompatibility = 1.8 version = '1.0' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { implementation 'com.google.api-client:google-api-client:1.23.0' implementation 'com.google.oauth-client:google-oauth-client-jetty:1.23.0' implementation 'com.google.apis:google-api-services-keep:v1-rev20210528-1.31.0' }
샘플 설정
src/main/java/
디렉터리에서build.gradle
파일의mainClassName
값과 일치하는 이름으로 새 Java 파일을 만듭니다.새 Java 파일에 다음 코드를 포함합니다.
import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.keep.v1.Keep; import com.google.api.services.keep.v1.model.Note; import com.google.api.services.keep.v1.model.Section; import com.google.api.services.keep.v1.model.TextContent; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.security.GeneralSecurityException; import java.util.Collections; import java.util.List; public class KeepQuickstart { private static final String APPLICATION_NAME = "Google Keep API Java Quickstart"; private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); /** * Global instance of the scopes required by this quickstart. If modifying these scopes, delete * your previously saved tokens/ folder. */ private static final List<String> KEEP_SCOPES = Collections.singletonList("https://www.googleapis.com/auth/keep"); private static final String CREDENTIALS_FILE_PATH = "/credentials.json"; /** * Creates an authorized Credential object. * * @param HTTP_TRANSPORT The network HTTP Transport. * @return An authorized Credential object. * @throws IOException */ private static Credential getOAuthCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException { // Load client secrets. InputStream in = KeepQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH); if (in == null) { throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH); } GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); // Build flow and trigger user authorization request. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, KEEP_SCOPES) .setDataStoreFactory(new FileDataStoreFactory(new java.io.File("tokens"))) .setAccessType("offline") .build(); LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build(); return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user"); } public static void main(String... args) throws IOException, GeneralSecurityException { // Build a new authorized API client service. final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Keep service = new Keep.Builder(HTTP_TRANSPORT, JSON_FACTORY, getOAuthCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); Section noteBody = new Section().setText(new TextContent().setText("Finish preparations by tomorrow!")); Note newNote = new Note().setTitle("Customer call next week").setBody(noteBody); // Creates a new text note. service.notes().create(newNote).execute(); } }
샘플 실행
샘플을 실행합니다.
gradle run
-
샘플을 처음 실행하면 액세스를 승인하라는 메시지가 표시됩니다.
- 아직 Google 계정에 로그인하지 않았다면 메시지가 표시될 때 로그인합니다. 여러 계정에 로그인되어 있는 경우 승인에 사용할 계정 하나를 선택합니다.
- 수락을 클릭합니다.
Java 애플리케이션이 실행되고 Google Keep API를 호출합니다.
승인 정보는 파일 시스템에 저장되므로 다음에 샘플 코드를 실행할 때 승인 메시지가 표시되지 않습니다.