잊고있던 블로그. 그나마 개발 관련 글은 딱 한 건인데 이게 5년간 조회수가 4천회가 넘었습니다. 개발자들이 많이 찾는 내용인것 같은데 4년전 내용이다보니 업데이트 할 필요가 있다는것을 느끼고 다시 써 봅니다.
준비물
첫번째 준비물, 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> | cs |
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(); } } | cs |
사실, 이게 다 입니다. 저 @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 여러개를 사용할 수 있으니까요.
'테크 노트 > 소소한 개발 팁' 카테고리의 다른 글
github, 여러 repository에 대해 ssh 설정 하기 (0) | 2019.03.14 |
---|---|
예쁘게 코드 공유하기 (2) | 2019.03.12 |
angular, 같은 패스로 또 route할때 강제 새로고침 시키기 (0) | 2019.03.12 |
java, checked excepton을 아름답게 unchecked exception으로 바꾸기 (0) | 2019.03.12 |
java, google sheet api 이용하기 (2) | 2015.02.21 |