목차

  1. 준비물
  2. 개발 착수
  3. 마치며

준비물

첫번째 준비물, https://console.cloud.google.com/apis/dashboard 에서 어떤 API를 사용할지 세팅

  • 앱을 생성하지 않았다면 앱 이름부터 잘 지어서 생성하도록 합시다.
  • 저의 경우 YouTube Data API v3, Google Sheets API, Google Drive API 이 3개를 지정했습니다.
  • 참고로 구글스프레드시트를 사용할거면 Google Drive API도 꼭 사용 설정을 해야합니다.

두번째 준비물, https://console.cloud.google.com/iam-admin/serviceaccounts 에서 서비스 계정 생성하기

  • private 구글 시트의 경우는 서버 인증키 방식으로 데이터 엑세스를 못하므로 서비스 계정을 생성하여 접근해야 합니다.
  • 여기서 중요한것은, 설정한 이메일 주소를 구글 시트 공유 기능을 이용하여 권한 초대를 해줘야 한다는 점입니다. (말그대로 계정이니까)
  • 또 중요한 것은 인증 키 파일을 json으로 저장해둬야 합니다. (왜냐면 밑에서 개발을 그렇게 할거니까요..)

개발 착수

spring-boot 2 프로젝트(그냥 spring mvc도 가능)를 준비합시다.
우선 위에서 다운로드 받은 서비스 계정 관련 json 파일을 resources 디렉토리에 복사합니다.
그 다음, 아래처럼 pom.xml을 열고 필요한 api 라이브러리들의 의존성을 넣습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-sheets -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-sheets</artifactId>
<version>v4-rev1-1.21.0</version>
<exclusions>
<exclusion>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-youtube -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-youtube</artifactId>
<version>v3-rev206-1.25.0</version>
</dependency>

위에서 언급한것 처럼 구글시트와 youtube api를 사용할건데요. 그래서 그 두개를 추가했습니다.
여기서 중요한 것은 저 exclusions인데, 위 아래 두개의 라이브러리에서 버전이 다른 google-api-client를 참조해서그런지 충들이 발생하네요.
따라서 더 낮은 버전을 제외하기 위해 저런 구문을 추가하도록 합시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.util.Arrays;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.sheets.v4.Sheets;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.YouTubeScopes;

@Component
public class GoogleAPIClient {
private Sheets sheets;
private YouTube youTube;
public GoogleAPIClient(@Value("${api.google.appName") String appName,
@Value("${api.google.serviceAccountAuthFile}") String keyFileName) throws IOException, GeneralSecurityException {
InputStream keyFile = ResourceUtils.getURL("classpath:" + keyFileName).openStream();
GoogleCredential credential = GoogleCredential.fromStream(keyFile).createScoped(Arrays.asList(SheetsScopes.SPREADSHEETS, YouTubeScopes.YOUTUBE));
NetHttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
sheets = new Sheets.Builder(transport, JacksonFactory.getDefaultInstance(), credential).setApplicationName(appName).build();
youTube = new YouTube.Builder(transport, JacksonFactory.getDefaultInstance(), credential).setApplicationName(appName).build();
}
}

사실, 이게 다 입니다. 저 @Value 부분만 잘 설정해주세요.
저의경우 application.yml에 저런 형태로 넣었기때문에 저렇게 했지만 하드코딩을 하셔도 되고, 다르게 하셔도 됩니다.

위처럼 GoogleAPIClient 라는 bean 의 생성자에서 필요한 객체들을 생성해주고요.
그 다음부턴 아래를 참고하여 api를 사용하시면 되겠습니다.
https://developers.google.com/youtube/v3/docs/
https://developers.google.com/sheets/api/?hl=ko

마치며

구글 api 로그인하는건 저 코드가 다인데 저렇게 정리된 사이트가 없더군요.
(물론 구글 공식 레퍼런스도 있는데 뭔가 막 이것저것 써있어서 알아보기가 어렵네요.)
수동으로 인증 태워서 restful api를 사용하고 싶은 분도 계시겠지만 그걸 자동으로 해주는게 위 과정이라서
java에서 사용하실거라면 맘편히 위 방법을 추천드립니다.
저렇게 인증로직한 한번 잘 만들면 google api 여러개를 사용할 수 있으니까요.