목차 준비물 개발 착수 마치며
준비물 첫번째 준비물, 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 <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 > <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 여러개를 사용할 수 있으니까요.