자바 빠른 시작

빠른 시작에서는 Google Workspace API를 호출하는 앱을 설정하고 실행하는 방법을 설명합니다.

Google Workspace 빠른 시작은 API 클라이언트 라이브러리를 사용하여 인증 및 승인 흐름의 일부 세부정보를 처리합니다. 자체 앱에는 클라이언트 라이브러리를 사용하는 것이 좋습니다. 이 빠른 시작에서는 테스트 환경에 적합한 간소화된 인증 방식을 사용합니다. 프로덕션 환경의 경우 앱에 적합한 액세스 사용자 인증 정보를 선택하기 전에 인증 및 승인에 대해 알아보는 것이 좋습니다.

Google Keep API에 요청하는 Java 명령줄 애플리케이션을 만듭니다.

목표

  • 환경을 설정합니다.
  • 샘플을 설정합니다.
  • 샘플을 실행합니다.

기본 요건

  • Google Keep이 사용 설정된 Google 계정

환경 설정하기

이 빠른 시작을 완료하려면 환경을 설정하세요.

API 사용 설정

Google API를 사용하려면 먼저 Google Cloud 프로젝트에서 사용 설정해야 합니다. 단일 Google Cloud 프로젝트에서 하나 이상의 API를 사용 설정할 수 있습니다.
  • Google Cloud 콘솔에서 Google Keep API를 사용 설정합니다.

    API 사용 설정

서비스 계정 만들기

서비스 계정은 사람이 아닌 애플리케이션에서 사용하는 특별한 종류의 계정입니다. 서비스 계정을 사용하여 로봇 계정으로 데이터에 액세스하거나 작업을 수행하거나 Google Workspace 또는 Cloud ID 사용자를 대신하여 데이터에 액세스할 수 있습니다. 자세한 내용은 서비스 계정 이해를 참조하세요.

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 메뉴 > IAM 및 관리자 > 서비스 계정으로 이동합니다.

    서비스 계정으로 이동

  2. 서비스 계정 만들기를 클릭합니다.
  3. 서비스 계정 세부정보를 입력한 다음 만들고 계속하기를 클릭합니다.
  4. 선택사항: 서비스 계정에 역할을 할당하여 Google Cloud 프로젝트의 리소스에 대한 액세스 권한을 부여합니다. 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참고하세요.
  5. 계속을 클릭합니다.
  6. 선택사항: 이 서비스 계정으로 작업을 관리하고 수행할 수 있는 사용자 또는 그룹을 입력합니다. 자세한 내용은 서비스 계정 명의 도용 관리를 참고하세요.
  7. 완료를 클릭합니다. 서비스 계정의 이메일 주소를 기록해 둡니다.

gcloud CLI

  1. 서비스 계정을 만듭니다.
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. 선택사항: 서비스 계정에 역할을 할당하여 Google Cloud 프로젝트의 리소스에 대한 액세스 권한을 부여합니다. 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참고하세요.

서비스 계정의 사용자 인증 정보 만들기

공개 키/비공개 키 쌍 형식으로 사용자 인증 정보를 가져와야 합니다. 코드에서 이러한 사용자 인증 정보를 사용하여 앱 내 서비스 계정 작업을 승인합니다.
  1. Google Cloud 콘솔에서 메뉴 > IAM 및 관리자 > 서비스 계정으로 이동합니다.

    서비스 계정으로 이동

  2. 서비스 계정을 선택합니다.
  3. > 키 추가 > 새 키 만들기를 클릭합니다.
  4. JSON을 선택한 다음 만들기를 클릭합니다.

    새 공개 키/비공개 키 쌍이 생성되어 새 파일로 머신에 다운로드됩니다. 다운로드한 JSON 파일을 작업 디렉터리에 credentials.json로 저장합니다. 이 파일은 이 키의 유일한 사본입니다. 키를 안전하게 저장하는 방법에 대한 자세한 내용은 서비스 계정 키 관리를 참조하세요.

  5. 닫기를 클릭합니다.

서비스 계정에 도메인 전체 위임 설정하기

Google Workspace 조직의 사용자를 대신하여 API를 호출하려면 최고 관리자 계정을 통해 Google Workspace 관리 콘솔에서 서비스 계정에 도메인 전체 권한 위임을 부여해야 합니다. 자세한 내용은 서비스 계정에 도메인 전체 권한 위임을 참조하세요.
  1. Google Cloud 콘솔에서 메뉴 > IAM 및 관리자 > 서비스 계정으로 이동합니다.

    서비스 계정으로 이동

  2. 서비스 계정을 선택합니다.
  3. 고급 설정 표시를 클릭합니다.
  4. '도메인 전체 위임'에서 서비스 계정의 '클라이언트 ID'를 찾습니다. 복사 를 클릭하여 클라이언트 ID 값을 클립보드에 복사합니다.
  5. 관련 Google Workspace 계정에 대한 최고 관리자 액세스 권한이 있으면 Google Workspace 관리 콘솔 보기를 클릭한 다음 최고 관리자 사용자 계정을 사용하여 로그인하고 다음 단계를 계속 진행합니다.

    관련 Google Workspace 계정에 대한 최고 관리자 액세스 권한이 없는 경우 해당 계정의 최고 관리자에게 문의하여 서비스 계정의 클라이언트 ID와 OAuth 범위 목록을 보내 관리 콘솔에서 다음 단계를 완료할 수 있도록 합니다.

    1. Google 관리 콘솔에서 메뉴 > 보안 > 액세스 및 데이터 관리 > API 관리로 이동합니다.

      API 관리로 이동

    2. 도메인 전체 위임 관리를 클릭합니다.
    3. 새로 추가를 클릭합니다.
    4. '클라이언트 ID' 입력란에 이전에 복사한 클라이언트 ID를 붙여넣습니다.
    5. 'OAuth 범위' 입력란에 애플리케이션에 필요한 범위를 쉼표로 구분한 목록을 입력합니다. OAuth 동의 화면을 구성할 때 정의한 범위와 동일한 범위입니다.
    6. 승인을 클릭합니다.

작업공간 준비하기

  1. 작업 디렉터리에서 새 프로젝트 구조를 만듭니다.

    gradle init --type basic
    mkdir -p src/main/java src/main/resources 
    
  2. src/main/resources/ 디렉터리에서 이전에 다운로드한 credentials.json 파일을 복사합니다.

  3. 기본 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'
    }
    

샘플 설정

  1. src/main/java/ 디렉터리에서 build.gradle 파일의 mainClassName 값과 일치하는 이름으로 새 자바 파일을 만듭니다.

  2. 새 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();
      }
    }
    
    

샘플 실행

  1. 샘플을 실행합니다.

    gradle run
    
  1. 샘플을 처음 실행하면 액세스를 승인하라는 메시지가 표시됩니다.
    1. 아직 Google 계정에 로그인하지 않은 경우 메시지가 표시될 때 로그인합니다. 여러 계정에 로그인되어 있는 경우 승인에 사용할 계정을 하나 선택하세요.
    2. 동의를 클릭합니다.

    Java 애플리케이션이 실행되고 Google Keep API를 호출합니다.

    승인 정보는 파일 시스템에 저장되므로 다음에 샘플 코드를 실행할 때는 승인하라는 메시지가 표시되지 않습니다.

다음 단계