요즘 제가 하고 있는 것이 바로 Google에서 진행하는 Google Study Jam인데요,
구글에서 교육 콘텐츠를 제공해주는 프로그램입니다.
GSJ는 기본적으로 2개의 코스로 진행합니다.
1. Coursera - Machine Learning labs 2. Qiwklabs - Cloud Labs
|
간단히 설명해서,
구글에서 제공하는 google console을 이용해서 머신러닝 강의를 듣고 실습할 수 있게 제공해주는 프로그램입니다.
이미 구글 스터디 잼은 2019년도 상반기부터 쭉 진행을 해왔었고,
저는 3,4월에 머신러닝 중급, 클라우든 중급을 수료했습니다.
이번 5,6월은 머신러닝 심화, 클라우드 심화반 진행 중이고, 저는 스터디잼 심화반을 수료하는 중입니다.
오늘 포스팅할 것은 2개 코스 중 Qiwklabs 심화 파트인 Machine Learning APIs입니다.
스터디 잼 심화반 과정을 전부 따라 하진 않을 겁니다. 그저 제가 공부했던 것을 다시 정리하는 느낌으로 api가 무엇인지,
구글 스터디 잼은 어떤 식으로 진행이 되는지 살짝 엮어서 쓸 예정입니다.
스터디 잼이 지급했던 가이드라인과 같을 수도, 다를 수도 있을 것 같네요.
API란?
- API (Application Programming Interface)
- 개발자가 컴퓨팅 리소스 및 data access 할 수 있게 해주는 Software Program
- 특정 규칙 및 방법을 준수해서 요청 및 응답을 명확하게 전달해 줌
- API의 기능은 개발자의 효율성을 크게 높여줌
- 모든 단일 프로그램, Method, Data Set 등을 처음부터 빌드하는 것보다 api를 활용하는 것이 훨씬 쉬움
- API를 사용하기 위해서 api의 내부 동작이나 복잡성을 이해할 필요가 없음(추상화 원칙)
- 개발자를 위해 만들어짐
- GUI 제공하지 않음
-google에서는 APIs Explorer라는 새로운 tool을 출시함
(이 tool을 사용 시 다양한 Google API를 대화 식으로 탐색할 수 있음)
Google의 API는?
- GCP(Google Cloud Platform)에서는 다양한 분야와 그 분야에 적용할 수 있는 다양한 API를 제공
- API는 Web development, Machine Learning, Data sceince, systems management work flow 등에서 사용
- QiwkLabs의 실습 환경에서 GCP project 및 API 사용 가능
API의 Architecture?
-API는 프로그램이 서로 통신할 수 있게 해주는 일련의 method
- 효과적으로 의사소통하기 위해서는 프로그램이 데이터 전송 및 해석을 제어하는 명확할 규약(protocol)을 준수해야 함
<Client - Server model> - 웹 기반의 API가 정보를 교환하기 위해 사용하는 기본 구조
Client: 일부 컴퓨팅 자원 또는 데이터에 요청하는 컴퓨팅 장치 client의 요청은 합의된 프로토콜로 형식화해야 함
Server: 서버에는 데이터 및 컴퓨팅 리소스가 저장 client의 요청을 해석하고 이해
|
RESTFul APIs란?
- REST (Representational State Transfer)
- HTTP 프로토콜, Request method, End Point를 사용하는 API
- 웹 기반 통신의 표준을 규정하는 architecture style
- REST는 API에서 가장 많이 사용되는 framework
RESTFul System
- resource: 데이터 저장소에 저장
- client: 서버가 특정 작업을 수행한다는 요청을 보냄
- server: 작업을 수행하고 지정된 리소스의 표현 방식으로 응답을 보냄
RESTFul API's model
- 개별 주소 지정 가능한 자원의 모음
- 자원 및 방법은 api의 명사 및 동상
- http 프로토콜 사용 시 리소스 이름이 자연스럽게 url에 매핑
- 메서드가 자연스럽게 http 메서드에 매핑
- Header: HTTP request자체를 자세히 설명하는 매개 변수
- Body: client가 server에게 보내려고 하는 데이터
(Body는 Json or XML 형식 언어로 작성)
API의 데이터 형식(JSON)
- RESTFul API는 HTTP Request method 본무에 보관된 데이터 파일 형식으로 xml, json을 사용
JSON?
- JavaScript Object Notation
- 가볍고, 읽기 쉽고, 구문 분석이 빠름
- xml보다 많이 사용
- key - values 쌍으로 구성
- key는 string 유형
{
"Name": "Judy",
"Hometown": "Los Angeles, CA",
"Age": 26
}
Authentication & Authorization
- Authentication(인증): client의 신원을 결정하는 프로세스를 나타냄
: 본인을 식별
- Authorization(권한 부여): 인증된 client가 자원에 대한 사용 권한을 결정하는 프로세스를 나타냄
: 사용자가 수행할 수 있는 작업을 결정
Google API에서 사용하는 인증, 권한 부여 서비스
API key | Service Accounts | OAuth |
-암호화된 문자열 형태로 제공하는 보안 토큰 - 생성 및 사용이 빠름 - 공용 데이터, 매소드 사용 시 신속한 실행 가능 - in GCP = api호출을 호출하는 프로젝트를 식별 = 사용정보를 해당 프로젝트와 연관 = api에 의해 액세스 허용 = api에 의해 미허가 프로젝트 호출 거부 |
- application 계정에 개인키 제공 - 개별 최종 사용자의 가상 머신에 속함 - 구글 계정의 특별한 유형 - google cloud 기능 제공 - Goggle App Engine, Google Compute Engine, Google Kubernetes Engine 에서 기본 서비스 계정 사용 |
- 해당 형식의 API key와 유사 - 더 강력한 보안 - 사용자 계정, ID에 연결 가능 - 사용자 데이터에 액세스 하는 수단 제공 - API key: 모든 API 기능에 액세스 - OAuth Client ID: 모든 범위 허용 |
<실습> cloud Storage JSON/ REST API를 사용해서 파일 업로드하기
step 1. 퀵랩에서 start lab을 눌러줍니다.
step 2. google console을 로그인을 해줍니다.
step 3. 메인 메뉴 -> API & SERVICE -> library에서 Fitness API 선택
step 4. 같은 방법으로 Google Cloud Storage JSON API 활성화
step 5. 메인메뉴 -> Storage에서 Create new bucket
step 6. google cloud shell을 사용
step 7. console에서 bucket을 만들기 위해 필요한 값 정해주기
step 7-1. 다음 명령어 실행해서 호출된 파일 작성
nano values.json
step 7-2. nano 텍스트 편집기를 이용해 다음 명령어를 입력
{ "name": "YOUR_BUCKET_NAME", // 미리 설정해준 bucket 이름을 붙여 넣기
"location": "us",
"storageClass": "multi_regional"
}
step 8. 인증 토큰 사용하기
step 8-1. OAuth 토큰 생성
https://developers.google.com/oauthplayground
step 8-2. 인증 로그인
step 8-3. 새 인증 토큰 받기
step 8-4. access_token 확인
step 9. 컴퓨터에 원하는 사진 저장하기
step 10. Google cloud shell로 돌아와서 명령어 입력
step 10-1. 이미지 파일의 경로 가져오기
realpath demo-image.png
step 10-2. 파일 경로를 환경 변수로 설정
export OBJECT= DEMO_IMAGE_PATH // 이미지 파일의 실제 주소를 입력함
step 10-3. 버킷 이름을 환경 변수로 설정
export BUCKET_NAME= YOUR_BUCKET // project ID 입력
step 10-4. OAuth2 토큰을 환경 변수로 설정
export OAUTH2_TOKEN= YOUR_TOKEN // 생성한 access token을 입력
step 10-5. Cloud Storage bucket을 생성
curl -X POST --data-binary @$OBJECT \
-H "Authorization: Bearer $OAUTH2_TOKEN" \
-H "Content-Type: image/png" \
"https://www.googleapis.com/upload/storage/v1/b/$BUCKET_NAME/o?uploadType=media&name=demo-image"
step 11. 메인 메뉴-> storage ->browser -> bucket name 선택하여 bucket에 추가된 이미지 확인