서버 투 서버 어플리케이션에 OAuth 2.0사용하기 Google API


Using OAuth 2.0 for Server to Server Applications


중요: 구글 클라우드 플랫폼으로 작업하면 자체적인 클라이언트 라이브러리를 작성할게 아니면, 서비스 계정과 클라우드 클라이언트 라이브러리를 사용한다. 더 자세한 사항은 구글 클라우드 플랫폼 문서의 인증 오버뷰를 살펴본다.

구글 OAuth 2.0 시스템은 웹 어플리케이션과 구글 서비스와 같은 사이에 서버 투 서버 상호작용을 지원한다. 이런 시니라오에서는 각 엔드 유져 대신에 어플리케이션을 가진 계정인 서비스 계정이 필요하다. 서비스 계정에 일부로 구글 API를 호출하고 사용자는 직접적으로 연계되지 않는다. 이 시나리오는 간혹 "투 레그드 OAuth" 또는 2LO라고 불린다. (The related term "three-legged OAuth" refers to scenarios in which your application calls Google APIs on behalf of end users, and in which user consent is sometimes required.)

전형적으로 어플리케이션은 사용자 데이터 대신에 자체적인 데이터와 구글 API를 사용하는 어플리케이션에서 사용한다. 예를 들어, 어플리케이션이 구글 클라우드 데이터스토어를 데이터 유지를 위해 사용하면 구글 클라우드 데이터스토어 API를 호출하기 위해 서비스 계정을 사용한다.

G수트 도메인 관리자는 또한 도메인 범위 인증을 받아 도메인내의 사용자에게 사용자 데이터를 접근하기도 한다.

This document describes how an application can complete the server-to-server OAuth 2.0 flow by using either a Google APIs client library (recommended) or HTTP.

With some Google APIs, you can make authorized API calls using a signed JWT instead of using OAuth 2.0, which can save you a network request. See Addendum: Service account authorization without OAuth.

오버뷰

서버 투 서버 인터렉션을 지원하려면 먼저 API콘솔에서 프로젝트에 대한 서비스 계정을 생성한다. G수트 도메인 내의 사용자에 대한 사용자 데이터를 얻으려면 서비스 계정에 도메인 범위 접근을 델리게이트한다

어플리케이션은 서비스 계정의 크레덴셜을 사용해 인증된 API 호출을 수행하며 OAuth 2.0 인증 서버에서 접근 토큰을 요청한다.

결국, 어플리케이션은 구글 API를 호출하기 위한 접근 토큰을 사용한다.

Recommendation: Your application can complete these tasks either by using the Google APIs client library for your language, or by directly interacting with the OAuth 2.0 system using HTTP. However, the mechanics of server-to-server authentication interactions require applications to create and cryptographically sign JSON Web Tokens (JWTs), and it's easy to make serious errors that can have a severe impact on the security of your application.

For this reason, we strongly encourage you to use libraries, such as the Google APIs client libraries, that abstract the cryptography away from your application code.

서비스 계정 생성하기

서비스 계정의 크레덴셜은 생성된 이메일 주소를 포함하는데 유일하며 최소한 하나의 공개/개인 키 짝이 있어야 한다. 만약 도메인 범위 델리게이션이 활성화되면 클라이언트 아이디는 서비스 계정의 크레덴셜의 일부이다.

만약 어플리케이션이 구글 앱 엔진을 실행하면 서비스 계정은 프로젝트를 생성할 때 자동적으로 서비스 계정이 설정된다.

만약 어플리케이션이 구글 컴퓨트 엔진을 실행하면 서비스 계정은 프로젝트를 생성하면 자동적으로 설정되지만, 어플리케이션이 필요한 범위를 반드시 지정해야 한다. 더 자세한 사항은 서비스 계정을 사용하기 위해 인스턴스 준비하기 부분을 살펴본다.

만약 어플리케이션이 구글 앱 엔진이나 구글 컴퓨터 엔진을 실행하지 않으면 구글 API콘설에서 이들 크레덴셜을 얻어야 한다. 서비스 계정 크레덴셜을 생성하려면 다음을 수행한다.

1. 서비스 계정 페이지를 열고 프로젝트를 선택한다.
2. 서비스 계정 생성을 클릭한다.
3. 서비스 계정 생성 윈도우 에서 서비스 계정의 이름을 입력하고 새로운 개인키 퍼니쉬를 선택한다. 만약 G수트 도메인 범위 인증을 원하면 G 수트 도메인 범위 델리게이션을 선택한다. 그리고 저장한다.

새로운 공개/개인키 짝이 생성되었고 다운로드 되었다. 이 것은 이키의 유일한 복사본이다. 안전하게 저장한다.

API콘솔로 돌아가 이메일주소, 공개 키 지문, 그리고 다른 정보를 확인하거나 추가적인 공개/개인 키 짝을 생성할 수 있다. API콘솔에서의 서비스 계정 크레덴셜에 대한 세부사항은 API콘솔 도움말 파일내의 서비스 계정을 살펴본다.

서비스 계정의 이메일 주소와 서비스 계정의 P12 개인키 파일을 어플리케이션이 접근가능한 곳에 저장한다. 어플리케이션은 인증된 API호출을 위해 이들을 사용한다.

Note: You must store and manage private keys securely in both development and production environments. Google does not keep a copy of your private keys, only your public keys.

서비스 계정에 도메인 범위 인증 델리게이트하기

만약 G수트 도메인을 가진다면 G수트 도메인의 관리자는 G수트 도메잉ㄴ의 사용자의 일부로서 사용자 데이터에 접근하기 위해 인증할 수 있다. 예를 들어, 어플리케이션이 구글 캘린더 API를 사용하며 G수트 도메인의 모든 사용자의 캘린더에 이벤트를 추가한다면 서비스 계정을 사용해 사용자의 일부상의 구글 캘린더 API에 접근한다. 도메인 내의 사용자의 일부에서 데이터에 접근할 서비스 계정을 인증하는 것은 서비스 계정에 도메인 범위 인증 위임이라 불린다.

Note: When you use G Suite Marketplace to install an application for your domain, the required permissions are automatically granted to the application during installation. You do not need to manually authorize the service accounts that the application uses. The account must have domain-wide delegation before the application is installed.

Note: Although you can use service accounts in applications that run from a G Suite domain, service accounts are not members of your G Suite account and aren’t subject to domain policies set by G Suite administrators. For example, a policy set in the G Suite admin console to restrict the ability of G Suite end users to share documents outside of the domain would not apply to service accounts.

To delegate domain-wide authority to a service account, first enable domain-wide delegation for an existing service account in the Service accounts page or create a new service account with domain-wide delegation enabled.

Then, an administrator of the G Suite domain must complete the following steps:

Go to your G Suite domain’s Admin console.
Select Security from the list of controls. If you don't see Security listed, select More controls from the gray bar at the bottom of the page, then select Security from the list of controls. If you can't see the controls, make sure you're signed in as an administrator for the domain.
Select Show more and then Advanced settings from the list of options.
Select Manage API client access in the Authentication section.
In the Client Name field enter the service account's Client ID. You can find your service account's client ID in the Service accounts page.
In the One or More API Scopes field enter the list of scopes that your application should be granted access to. For example, if your application needs domain-wide access to the Google Drive API and the Google Calendar API, enter: https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar.
Click Authorize.
Your application now has the authority to make API calls as users in your domain (to "impersonate" users). When you prepare to make authorized API calls, you specify the user to impersonate.

인증된 API호출 생성 준비하기


Google APIs에 접근하기 위해 OAuth 2.0사용하기 Google API


Google APIs에 접근하기 위해 OAuth 2.0사용하기


구글 API는 인증과 확인을 위해 OAuth 2.0 프로토콜을 사용한다. 구글은 웹서버, 설치된, 클라이언트 사이드 어플리케이션을 위해 공통 OAuth 2.0시나리오를 지원한다.

시작하기 위해, 구글 API콘솔로부터 OAuth 2.0 클라이언트 크레덴셜을 얻는다. 그러면 클라이언트 어플리케이션은 구글 인증서버로 부터 접근 토큰을 요청하고 반응에서 토큰을 추출하고 해당 토큰을 구글 API로 보낸다. 구글과의 OAuth 2.0을 사용하기 위한 상호적 데모는 OAuth 2.0 Playground 로 실험한다.

이 페이지는 구글이 지원하는 OAuth 2.0 인증 시나리오 오버뷰를 제공하고 더 자세한 콘텐트에 대한 링크를 제공한다. 인증을 위한 OAuth 2.0을 사용에는 OpenID Connect를 살펴본다.

일러두기: 알맞은 구현을위해 구글의 OAuth 2.0 엔드포인트와 상호작용할 때 OAuth 2.0을 사용하기를 권장한다. 많은 사람들을 통해 잘 디버그된 코드 일 뿐만아니라 자신과 사용자를 보호하는데 도움이 될 것이다. 더 자세한 사항은 클라이언트 라이브러리를 살펴본다.

기본 단계들

OAuth 2.0을 사용하는 구글 API에 접근할 때 기본 패턴을 따라야 한다. 높은 레벨에서 다음 4단계를 따르도록 한다.

1. 구글 API콘솔에서 OAuth 2.0 크레덴셜을 얻는다.
구글 API콘솔에 방문해 클라이언트 아이디와 클라이언트 시크릿 같은 OAuth 2.0 크레덴셜을 얻는다. 값의 설정은 작성중인 어플리케이션 형식에 따라 달라진다. 예를 들어, 자바스크립트 어플리케이션은 시크릿이 필요치 않지만 웹서버 어플리케이션은 필요로 한다.

2. 구글 인증 서버로부터 접근 토큰 획득하기
구글 API를 사용해 개인적 데이터를 얻기 전에 접근 토큰을 얻어야 한다. 단일 접근 토큰은 다중 API의 접근의 다양한 정도로 얻을 수 있다. scope 변수라 불리는 변수 파라미터는 리소스와 연산의 집합을 제어하는 것이다. 접근 토큰 요청동안 어플리케이션은 scope 파라미터에 하나 이상의 값을 보낸다.

이 요청을 만드는 몇가지 방법이 있고, 어플리케이션의 형식에 기반해 다양하다. 예를 들어, 자바스크립트 어플리케이션은 웹 브라우져 리다이렉트를 구글로함으로서 얻어지며, 장치에 설치된 어플리케이션은 브라우져 없이 웹 서비스 요청을 사용한다.

몇몇 요청은 구글 계정에 사용자가 로그인할 때 인증 단계가 요구된다. 로그인 한 후 사용자는 어플리케이션이 요청하는 퍼미션을 허용할지 물어봐지게 된다. 이 단계는 사용자 콘센트라고 한다. 

만약 사용자게 퍼미션을 허용하면 구글 인증 서버는 어플리케이션에게 접근 토큰을 보내준다. (또는 인증코드를 보내주는데 접근 토큰을 얻기 위해 어플리케이션에서 사용할 수 있다) 만약 사용자가 퍼미션을 허용하지 않으면 서버는 에러를 반환한다.

이는 일반적으로 가중된 범위 요청에 적절하며 시간 접근이 요구된다. 예를 들어, 앱이 구글 웹렛 접근은 사용자가 buy버튼을 누르기 전까지는 요청되지 않아야 한다.

3. API에 접근 토큰 보내기
어플리케이션이 접근 토큰을 받은 후 HTTP 인증 헤더에 구글 API 로 토큰을 보낸다. URI쿼리 스트링으로 보낼 수도 있지만, 추천하지 않는다. URI파라미터는 로그파일에 쓰일 수 있고 완전히 안전하지 않기 때문이다. 또한 REST 처리를 통해 불필요한 URI파라미터를 피할 수 있다.

접근 토큰은 토큰 요청의 scope에 지정된 연산과 리소스에만 접근할 수 있다. 예를들어, 만약 접근 토큰이 Google+API를 위해 이슈되면 구글 콘택트 API로 접근하는데 허용되지 않는다. 하지만 Google+ API로는 같은 연산으로 여러번 보낼 수 있다.

4. 필요한 경우 접근 토큰을 새로고침한다.
접근 토큰은 제한된 라이프타임이 있다. 만약 어플리케이션이 단일 접근 토큰의 라이프타임을 넘어서 Google API에 접근해야 한다면 새로고침 토큰을 얻을 수 있다. 새로고침 토큰은 어플리케이션이 새로운 접근 토큰을 얻을 수 있게 한다.

일러두기: 새로고침 토큰을 안전하게 저장하고 이들이 유효하다면 사용을 지속한다. 클라이언트-사용자 콤비네이션, 모든 클라이언트에 대한 사용자당 새로고침 토큰이 제한된다. 만약 어플리케이션이 제한 중의 한번에 새로고침 토큰을 요청하면 이전 새로고침 토큰은 작동을 멈춘다.

시나리오

웹서버 어플리케이션

구글 OAuth 2.0 엔드포인트는 PHP, Java, Python, Ruby, and ASP.NET 과 같은 프레임워크를 사용하는 웹서버 어플리케이션을 지원한다.

인증 순서는 어플리케이션이 브라우져를 구글 URL로 리디렉션할 때 시작된다. URL은 쿼리 파라미터를 포함해 요청하는 접근의 종류를 가리킨다. 구글은 사용자 인증, 세션 선택, 사용자 콘센트를 관리한다. 결과는 인증 코드로서 어플리케이션이 접근 토큰과 새로고침 토큰으로 교환할 수 있다.

어플리케이션은 새로고침 토큰을 저장하고 접근 토큰으로 구글 API에 접근한다. 접근 토큰이 만료되면 어플리케이션은 새로고침 토큰을 사용해 새로운 것을얻는다.

Your application sends a token request to the Google Authorization Server, receives an authorization code,exchanges the code for a token, and uses the token to call a Google API endpoint.



세부사항은 Using OAuth 2.0 for Web Server Applications 를 살펴본다.

설치된 어플리케이션

구글 OAuth 2.0 엔드포인트는 컴퓨터나, 모바일 장치, 태블릿과 같은 장치에서 설치된 어플리케이션을 지원한다. 구글 API 콘솔을 통해 클라이언트 ID를 생성하면 설치된 어플리케이션으로 지정하고 안드로이드, 크롬, iOS 또는 Other로 어플리케이션 형식을 지정한다.

클라이언트 ID내의 처리결과와 클라이언트 시크릿을 어플리케이션 소스코드에 임베드한다. (이 상황에서는 클라이언트 시크릿은 확실히 시크릿이 아니다)

인증 시퀀스는 어플리케이션이 브라우져를 구글 URL로 리디렉션하면 시작한다. URL은 요청하는 접근의 종류를 가리키는 쿼리 파라미터를 포함한다. 구글은 사용자 인증, 세션 선택, 사용자 콘센트를 다룬다. 결과는 인증 코드로서 어플리케이션이 접근 토큰과 새로고침 토큰으로 교환할 수 있다.

어플리케이션은 새로고침 토큰을 저장하고 구글 API로의 접근에 접근 토큰을 사용한다. 접근 토큰이 만료되면 어플리케이션은 새로운 것을 얻기 위해 새로고침 토큰을 사용한다.

Your application sends a token request to the Google Authorization Server, receives an authorization code,exchanges the code for a token, and uses the token to call a Google API endpoint.

세부사항은, 설치된 어플리케이션에 Using OAuth 2.0 을 사용한다.

클라이언트 사이드 (자바스크립트) 어플리케이션

구글 OAuth 2.0 엔드포인트는 브라우져에서 실행할 자바스크립트 어플리케이션을 지원한다.

The authorization sequence begins when your application redirects a browser to a Google URL; the URL includes query parameters that indicate the type of access being requested. Google handles the user authentication, session selection, and user consent.

The result is an access token, which the client should validate before including it in a Google API request. When the token expires, the application repeats the process.

Your JS application sends a token request to the Google Authorization Server, receives a token,validates the token, and uses the token to call a Google API endpoint.

세부사항은 Using OAuth 2.0 for Client-side Applications 를 살펴본다.

제한된 입력 장치상의 어플리케이션

The Google OAuth 2.0 endpoint supports applications that run on limited-input devices such as game consoles, video cameras, and printers.

The authorization sequence begins with the application making a web service request to a Google URL for an authorization code. The response contains several parameters, including a URL and a code that the application shows to the user.

The user obtains the URL and code from the device, then switches to a separate device or computer with richer input capabilities. The user launches a browser, navigates to the specified URL, logs in, and enters the code.

Meanwhile, the application polls a Google URL at a specified interval. After the user approves access, the response from the Google server contains an access token and refresh token. The application should store the refresh token for future use and use the access token to access a Google API. Once the access token expires, the application uses the refresh token to obtain a new one.

The user logs in on a separate device that has a browser.

For details, see Using OAuth 2.0 for Devices.


서비스 어카운트

프레딕션 API와 구글 클라우드 스토리지와 같은 구글 API는 사용자 정보에 접근하지 않고 어플리케이션의 일부로 작동할 수 있다. 이런상황에서 어플리케이션은 API로 자체적인 인증을 수행하지만 사용자 콘센트는 불필요하다. 비슷하게, 기업 시나리오에서 어플리케이션은 델리게이트된 접근으로 몇몇 리소스를 요청할 수 있따.

이런 서버 투 서버 상호작용에서는 서비스 계정이 필요하다. 이는 구별된 엔드유져대신 어플리케이션을 소유하는 계정이다. 어플리케이션은 서비스 계정상에서 구글 API를 호출하며 사용자 콘센트는 불필요하다. (비서비스 계정 시나리오라면 어플리케이션은 엔드유저에 일부인 구글 API를 호출하고 사용자 콘센트가 간혹 필요할 수 있다.)

일러두기: 이런 서비스 계정 시나리오는 어플리케이션이 JSON Web Tokens (JWTs)  를 생성하고 암호로 사인해야 한다. 이런 작업에는 라이브러리를 사용하기를 강력히 추천한다. 토큰 생성 추상화와 서명을 수행하는 라이브러리를 사용하지 않고 코드를 작성하면 어플리케이션 보안에 심각한 문제를 발생시킬 수 있다. 이 시나리오에 대해 라이브러리 전체리스트는 서비스 계정 문서를 살펴본다.

서비스 계정의 크레덴셜은 Google API 콘솔에서 얻을 수 있으며 생성된 이메일 주소를 포함하며 고유의 , 클라이언트 ID, 그리고 적어도 하나의 공개/개인 키 페어가 필요하다. 클라이언트 ID와 개인 키를 사용해 서명된 JWT를 생성하고 적절한 포맷으로 접근 토큰 요청을 생성한다. 어플리케이션은 구글 OAuth 2.0 인증 서버로 요청을 보내고 이 것은 접근 토큰을 반환한다. 어플리케이션은 구글 API로 접근할 토큰을 사용한다. 토큰이 만료되면, 어플리케이션은 처리를 반복한다.

Your server application uses a JWT to request a token from the Google Authorization Server,then uses the token to call a Google API endpoint. No end-user is involved.

For details, see the service-account documentation.

Note: Although you can use service accounts in applications that run from a G Suite domain, service accounts are not members of your G Suite account and aren’t subject to domain policies set by G Suite administrators. For example, a policy set in the G Suite admin console to restrict the ability of G Suite end users to share documents outside of the domain would not apply to service accounts.

토큰 만료

반드시 새로고침 토큰이 작동하지 않는 상황을 감안해야 한다. 새로고침 토큰은 다음 이유에서 작동되지 않을 수 있다.

- 사용자가 앱의 접근을 폐기했다.
- 새로고침 토큰이 6개월 동안 사용되지 않았다.
- 사용자가 비밀번호를 변경했고 새로고침 토큰이 Gmail 범위를 가지고 있다.
- 사용자 계정이 최대 허용가능 새로고침 토큰에 근접했다.

사용자당 50개의 새로고침 토큰으로 제한된다. 만약 제한에 근접하면 경고없이 이전 새로고침 토큰이 무효화되고 새로운 새로고침 토큰이 생성된다. 이 제한은 서비스 어카운트에는 적용되지 않는다.

There is also a larger limit on the total number of refresh tokens a user account or service account can have across all clients. Most normal users won't exceed this limit but a developer's test account might.

If you need to authorize multiple programs, machines, or devices, one workaround is to limit the number of clients that you authorize per user account to 15 or 20. If you are a G Suite admin, you can create additional admin users and use them to authorize some of the clients.

Client libraries

The following client libraries integrate with popular frameworks, which makes implementing OAuth 2.0 simpler. More features will be added to the libraries over time.

Google API Client Library for Java
Google API Client Library for Python
Google API Client Library for Go
Google API Client Library for .NET
Google API Client Library for Ruby
Google API Client Library for PHP
Google API Client Library for JavaScript
GTMAppAuth - OAuth Client Library for Mac and iOS

OAuth 2.0 인증 구현하기 Google API


OAuth 2.0 인증 구현하기

Overview


유튜브 데이터 API는 OAuth 2.0 프로토콜을 지원해 개인 사용자 데이터에 접근할 때 인증으로 사용한다. 다음 리스트는 핵심 OAuth 2.0개념을 나열한다.
- 사용자가 먼저 어플리케이션의 기능을 사용하려고 시도 할 때 사용자가 구글 계정 또는 유튜브 계정에 로그인 되어야 하고 어플리케이션은 OAuth 2.0 인증 단계를 초기화한다.
- 어플리케이션은 사용자를 구글의 인증 서버로 전달하낟. 페이지에 대한 링크는 사용자 어카운트를 요청하는데 접근 범위를 지정한다. scope 는 어플리케이션이 얻고, 입력하고, 업데이트하고 또는 삭제할 범위를 지정한다.
- 만약 사용자가 어플리케이션에 접근을 허용하면 구글은 어플리케이션으로 토큰을 반환한다. 어플리케이션 형식에 기반해 토큰을 확인하거나 토큰을 다른 형식으로 교환한다.
예를 들어, 서버 사이드 웹 어플리케이션은 접근 토큰과 새로고침 토큰을 위한 반환된 토큰으로 교환한다. 접근 토큰은 어플리케이션이 사용자의 작용에 대한 요청을 인증하도록 하고 새로고침 토큰은 어플리케이션이 원본 접근 토큰이 만료괼 때 새로운 접근 토큰을 얻을 수 있게 한다.

중요: OAuth 2.0 인증을 사용하려면 Google Developers Console 에서 인증 크레덴셜을 얻어야 한다.

OAuth 2.0 흐름

구글 API는 몇몇 OAuth 2.0 사용자 케이스를 지원한다.
- 서버 사이드 플로우는 웹 어플리케이션을 지원해 유지 정보를 안전하게 저장하도록 한다.
- 클라이언트 사이드 플로우는 브라우져 내에서 실행중인 자바스크립트 어플리케이션을 지원한다.
- 설치된 어플리케이션 플로우는 폰이나 컴퓨터에 설치된 어플리케이션을 지원한다.
- 장치 플로우는 게임콘솔이나 비디오 카메라와 같은 한정된 입력 장치를 지원한다.
- 서비스 어카운트 플로우는 서버 투 서버 인터렉션을 지원하는데 사용자 정보에는 접근하지 않는 것이다. 그러나, 유튜브 데이터 API는 이 플로우를 지원하지 않는다. 서비스 어카운트를 유튜브 계정으로 연결할 방법이 없기 때문인데 이 플로우로 인증을 요청하면 NoLinkedYouTubeAccount 에러를 발생시킨다.

인증 크레덴셜 얻기

어플리케이션은 반드시 인증 크레덴셜을 확보해야 유튜브 데이터 API를 사용할 수 있다. 이 문서는 구글 개발자 콘솔이 지원하는 인증 크레덴셜의 다른 형식을 설명한다. 프로젝트를 위한 인증 크레덴셜을 찾거나 생성하는 방법을 설명한다.

프로젝트 생성하고 API서비스 선택하기

1. 크레덴셜 페이지 열기
2. API는 API키와 OAuth 2.0 크레덴셜을 지원한다. 프로젝트에 적절한 크레덴셜을 생성한다.
OAuth 2.0: 어플리케이션은 반드시 OAuth 2.0 토큰을 모든 리퀘스트에 보내며 사용자 데이터에 접근한다. 어플리케이션은 클라이언트 아이디와 클라이언트 시크릿을 보낸다. 웹어플리에케이션, 서비스 계정, 설치된 어플리케이션을 위한 OAuth 2.0을 생성할 수 있다.
API keys: OAuth 2.0 토큰을 제공하지 않는 요청은 반드시 API키를 보내야 한다. 키는 프로젝트를 확인하고 API 접근, 쿼트, 보고서를 제공한다.

OAuth 2.0 크레덴셜 생성하기

웹어플리케이션, 서비스 어카운트, 설치된 어플리케이션을 위해 OAuth 2.0 크레덴셜을 생성할 수 있다.

웹 어플리케이션
웹 어플리케이션은 네트워크 넘어 웹브라우져로 접근한다.
- 자바스크립트를 사용하는 어플리케이션이 유튜브 데이터 API에 접근하려면 반드시 인증된 자바 스크립트 오리진을 지정해야 한다. 오리진은 어플리케이션이 보내는 API요청으로 부터 도메인을 확인한다.
- PHP, 자바, 파이썬, 루비, 그리고 닷넷과 같은 프레임웍이나 언어를 사용하는 어플리케이션은 반드시 인증된 리다이렉트 URI 를 지정해야 한다. 재전달된 URI는 OAuth 2.0 서버가 반응을 보낼 수 있는 엔드포인트이다.

서비스 어카운트
서비스 어카운트는 어플리케이션의 부분에서 API를 호출하는 어플리케이션에서 사용되는 것으로서 사용자 정보에는 접근하지 않는다. 이런 형식의 어플리케이션은 자체적인 아이덴티티를 증명해야 하지만 사용자에게 인증 요청은 필요칭 않다. 구글 어카운트 문서에 서비스 어카운트에 대한 더 자세한 사항이 포함된다.

설치된 어플리케이션
설치된 어플리케이션은 데스크탑, 핸드헬드 장치에서 실행된다. 안드로이드, 크롬, iOS, 그리고 다른 설치된 어플리케이션을 위해 OAuth 2.0크레덴셜을 생성할 수 있다.

안드로이드
안드로이드 앱의 패키지 이름과 SHA1 핑거프린트 를 지정해야 한다.
1. 패키지 이름 필드에 안드로이드 앱의 패키지 이름을 입력한다.
2. 터미널에서 keytool 유틸리티를 사용해 .apk 파일의 공개인증서로부터 SHA1 핑거프린트를 얻는다.

keytool -exportcert -alias androiddebugkey -keystore path-to-debug-or-production-keystore -list -v

일러두기: debug.keystore 에 대해 암호는 android 이다. 이클립스에서 디버그 키스토어는 보통 ~/.android/debug.keystore 에 있다.

keytool 은 쉘에 핑거프린트를 프린트한다. 예를 들어:

$ keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -vEnter keystore password: Type "android" if using debug.keystoreAlias name: androiddebugkeyCreation date: Aug 27, 2012Entry type: PrivateKeyEntryCertificate chain length: 1Certificate[1]:Owner: CN=Android Debug, O=Android, C=USIssuer: CN=Android Debug, O=Android, C=USSerial number: 503bd581Valid from: Mon Aug 27 13:16:01 PDT 2012 until: Wed Aug 20 13:16:01 PDT 2042Certificate fingerprints:   MD5:  1B:2B:2D:37:E1:CE:06:8B:A0:F0:73:05:3C:A3:63:DD   SHA1: D8:AA:43:97:59:EE:C5:95:26:6A:07:EE:1C:37:8E:F4:F0:C8:05:C8   SHA256: F3:6F:98:51:9A:DF:C3:15:4E:48:4B:0F:91:E3:3C:6A:A0:97:DC:0A:3F:B2:D2:E1:FE:23:57:F5:EB:AC:13:30   Signature algorithm name: SHA1withRSA   Version: 3

위에 표시된 SHA1 지문을 복사한다.
3. 해당 SHA1 지문을 요청하는 폼에 붙여 넣는다.
4. 생성을 클릭한다.

크롬 어플리케이션
크롬 앱이나 확장을 위해선 어플리케이션 아이디를 지정해야 한다. Google Chrome Identity API를 사용해 해당 아이디를 생성한다.

iOS
앱 번들 아이디와 앱 스토어 아이디를 지정한다.
- 어플리케이션 번들 아이디는 앱의 .plist 에 나열된 번들 아이디이다. 예를 들면: com.example.myapp
- 어플리케이션의 앱 스토어 아이디는 앱의 iTunes URL내부에 있는 것이다. For example, in the app URL http://itunes.apple.com/us/app/google+/id447119634, the App Store ID is 447119634.

다른것
디벨로퍼 콘솔은 다른 설치된 어플리케이션에 대해서 OAuth 2.0 크레덴셜을 생성하는데 추가정보를 요구하지 않는다.

API키 생성하기

API는 API키의 몇몇 형식을 지원한다. 만약 키 형식이 이미 존재하지 않는다면 Add credentials > API key를 클릭해 API키를 생성한다. 키 형식에 대한 추가정보를 입력한다.

서버 키
어플리케이션이 서버에서 실행된다면 서버 키를 생성하고 사용한다. 이 키는 서버 코드 외부에서는 사용하지 않는다. 웹페이지에서 임베드하지 않는다. 쿼트 도둑을 방지하려면 키를 제한하며 서버의 소스 아이피에서만 접근 가능하도록 한다.

브라우져 키
웹 브라우져와 같은 클라이언트에서 어플리케이션을 실행한다면 브라우져 키를 생성하고 사용한다. 비인증 사이트에서 사용되는 것을 방지하려면 관리하는 도메인을 리퍼럴로 허용한다.

iOS키
만약 어플리케이션이 iOS 장치에서 실행되면 iOS키를 생성하고 사용한다. 구글은 지정된 번들 지정자중에 하나임을 확인한다. 

안드로이드 키
어플리케이션이 안드로이드 장치에서만 실행되면 안드로이드 키를 생성하고 사용한다. 이를위해 SHA1 지문을 지정하고 키를 사용할 어플리케이션의 패키지 이름들을 사용한다.

1. 패키지 이름 필드에서는 안드로이드 앱의 패키지 이름을 입력한다.
2. 터미널에서 keytool 유틸리티를 실행해 .apk 파일의 공개 인증서에 대한 SHA1 지문을 얻는다.
keytool -exportcert -alias androiddebugkey -keystore path-to-debug-or-production-keystore -list -v

Note: For the debug.keystore, the password is android. For Eclipse, the debug keystore is typically located at ~/.android/debug.keystore.
The Keytool prints the fingerprint to the shell. For example:

$ keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
Enter keystore password: Type "android" if using debug.keystore
Alias name: androiddebugkey
Creation date: Aug 27, 2012
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 503bd581
Valid from: Mon Aug 27 13:16:01 PDT 2012 until: Wed Aug 20 13:16:01 PDT 2042
Certificate fingerprints:
   MD5:  1B:2B:2D:37:E1:CE:06:8B:A0:F0:73:05:3C:A3:63:DD
   SHA1: D8:AA:43:97:59:EE:C5:95:26:6A:07:EE:1C:37:8E:F4:F0:C8:05:C8
   SHA256: F3:6F:98:51:9A:DF:C3:15:4E:48:4B:0F:91:E3:3C:6A:A0:97:DC:0A:3F:B2:D2:E1:FE:23:57:F5:EB:AC:13:30
   Signature algorithm name: SHA1withRSA
   Version: 3
Copy the SHA1 fingerprint, which is highlighted in the example above.

Important: When you prepare to release your app to your users, follow these steps again and create a new OAuth 2.0 client ID for your production app. For production apps, use your own private key to sign the production app's .apk file. For more information, see Signing your applications.
Paste the SHA1 fingerprint into the form where requested.
Click Create.

웹 서버 어플리케이션에 OAuth 2.0 사용하기

이 문서는 웹 서버 어플리케이션이 어떻게 구글 API클라이언트 라이브러리나 구글 OAuth 2.0 엔드포인트를 사용하여 유튜브 데이터 API에 접근하기 위해 OAuth 2.0 인증을 구현하는지 살펴본다. OAuth 2.0은 사용자가 사용자 이름, 암호, 그리고 다른 개인 정보를 보호하는 상태에서 사용자가 특정 데이터를 공유할 수 있게 한다. 예를 들어 OAuth 2.0을 사용해 사용자의 유튜브 채널에 비디오를 업로드할 허락을 얻는다.

이 OAuth 2.0플로우는 사용자 인증에 대한 것이다. 이는 어플리케이션이 컨피덴셜 정보와 상태를 유지하기 위한 어플리케이션을위해 설계되었다. 적절하게 인증된 웹 서버 어플리케이션은 사용자가 어플리케이션과 상호작용하거나 어플리케이션에서 벗어난 동안 API 에 접근하게 한다.

엡 서버 어플리케이션은 종종 service 계정을 사용해 API요청을 인증하는데, 사용자 지정 데이터보다 프로젝트 기반데이터에 접근하는 클라우드 API를 호출할 떄 주로 사용한다. 웹 서버 어플리케이션은 서비스 어플리케이션을 사용자 인증과 서비스 어카운트 결합한다. 유튜브 데이터 API는 유튜브 채널을 관리하는 컨텐트 오너를 위해 서비스 어카운트를 지원한다. 특히, 컨텐트 오너는 서비스 어카운트를 사용해 API메소드를 호출할 때 사용하며 onBehalfOfContentOwner 요청 파라미터를 지원한다.

Note: Given the security implications of getting the implementation correct, we strongly encourage you to use OAuth 2.0 libraries when interacting with Google's OAuth 2.0 endpoints. It is a best practice to use well-debugged code provided by others, and it will help you protect yourself and your users. For more information, see Client libraries.

클라이언트 라이브러리

이 패이지에서 언어 지정 예시는 Google API Client 라이브러리를 OAuth 2.0 인증 구현을 위해 사용한다. 코드 샘플을 실행하려면 언어에 맞는 클라이언트 라이브러리를 설치해야 한다.

구글 API클라이언트 라이브러리를 사용하여 OAuth 2.0플로우를 다룰 때 클라이언트 라이브러리는 어플리케이션이 자체적으로 다룰 다양한 액션을 처리한다. 예를 들어 어플리케이션이 언제 사용되고 새로고침된 접근 토큰을 사용할지를 처리한다. 클라이언트 라이브러리는 또한 알맞은 리디렉션 URL을 생성하고 리디렉트 핸들러 구현을 도와서 접근 코큰을 위한 인증 코드 교환을 가능하게 한다.

클라이언트 라이브러리는 다음 언어에 대해 가용하다.
- Go
- Java
- .NET
- Node.js
- PHP
- Python
- Ruby

선행요건

프로젝트에 API 가능하게 하기
구글API를 호출하는 모든 어플리케이션은 해당 API를 API콘솔에서 활성해야 한다. 적절한 API를 활성화하려면 다음을 수행한다.
1. API콘솔에서 라이브러리 페이지를 연다
2. 어플리케이션에 연계된 프로젝트를 선택한다. 만약 가지고 있지 않다면 프로젝트를 생성한다.
3. 라이브러리 페이지를 사용해 유튜브 데이터 API를 활성화 한다. 어플리케이션이 사용할 다른 API를 찾아 그 것도 활성화한다.

인증 크레덴셜 생성하기

OAuth 2.0을 사용하여 구글 API에 접근하는 모든 어플리케이션은 구글의 OAuth 2.0 서버에 어플리케이션을 확인하는 인증 크레덴셜을 반드시 가져야한다. 다음 단계는 어떻게 프로젝트에 크레덴셜을 생성하는지 설명한다. 어플리케이션 프로젝트에 활성화한 API에 접근하기 위해 크레덴셜을 사용할 수 있다.

1. API콘솔에 크레덴셜 페이지를 연다
2. Create credentials > OAuth client ID
3. 폼을 완성. 어플리케이션 형식을 웹 어플리케이션으로 설정. 언어와 PHP, Java, Python, Ruby, and .NET과 같은 프레임워크를 사용하는 어플리케이션은 반드시 인증된 리디렉트 URI를 지정한다. 리디렉트 URI는 OAuth 2.0서버가 응답을 보낼 끝점이다.

테스팅을 위해 로컬 머신을 리퍼하는 URI를 지정할 수 있다. http://localhost:8080 . 이 문서의 모든 예시는 http://localhost:8080을 리다이렉트 UI로 사용한다.

앱의 인증 엔드포인트를 설계하여 페이지상의 다른 리소스로의 인증을 표시하지 않도록 한다.

크레덴셜을 생성한 후 client_secret.json 을 API Console 에서 다운로드한다. 안전하게 파일을 저장하며 오직 어플리케이션만 접근할 수 있게 한다.

Important: Do not store the client_secret.json file in a publicly-accessible location. In addition, if you share the source code to your application—for example, on GitHub—store the client_secret.json file outside of your source tree to avoid inadvertently sharing your client credentials.

접근 범위 지정

범위는 어플리케이션이 리소스에 대한 요청에서 접근량을 조절할 수 있게 한다. 그러므로, 요청된 범위의 숫자 사이의 반대 관계가 있을 수 있고 사용자 합의를 얻는 것이 있을 수 있다.

OAuth 2.0 인증을 구현하기 전에 앱이 접근할 허락에 필요한 범위를 지정하기를 추천한다.

가중 인증을 통해 인증 범위에 접근 요청하기를 추천한다. 이는 사용자가 더욱 쉽게 어플리케이션이 요청하는 것을 이해할 수 있게 한다.

유튜브 데이터 API는 다음 범위에서 사용된다.

copes
https://www.googleapis.com/auth/youtubeManage your YouTube account
https://www.googleapis.com/auth/youtube.force-sslSee, edit, and permanently delete your YouTube videos, ratings, comments and captions
https://www.googleapis.com/auth/youtube.readonlyView your YouTube account
https://www.googleapis.com/auth/youtube.uploadManage your YouTube videos
https://www.googleapis.com/auth/youtubepartnerView and manage your assets and associated content on YouTube
https://www.googleapis.com/auth/youtubepartner-channel-auditView private information of your YouTube channel relevant during the audit process with a YouTube partner

OAuth 2.0 API 스포프 문서는 구글 API에 접근할때 사용될 범위의 전체리스트가 포함되어 있다.

언어 지정 요구사항

이 문서내의 코드샘플을 실행하려면 구글 계정, 인터넷 접근, 그리고 웹 브라우져가 필요하다. 만약 API클라이언트 라이브러리를 사용한다면 언어 특정 요구사항을 살펴본다.

PHPPYTHONRUBYHTTP/REST
To run the PHP code samples in this document, you'll need:

PHP 5.4 or greater with the command-line interface (CLI) and JSON extension installed.
The Composer dependency management tool.
The Google APIs Client Library for PHP:

php composer.phar require google/apiclient:^2.0

OAuth 2.0 접근 토큰 얻기

다음 단계는 어떻게 어플리케이션이 구글 OAuth 2.0 서버와 상호작용하여 사용자의 허락을 얻어 사용자가 원하는 API요청을 수행하는지 보여준다. 어플리케이션은 이런 허락을 가져야 사용자 인증이 요구되는 구글 API요청을 실행할 수 있다.

아래 리스트는 이런 단계를 간단히 갈무리한다.

1. 어플리케이션은 필요한 퍼미션을 확인한다.
2. 어플리케이션은 사용자가 요구되는 퍼미션의 리스트를 구글에 리다이렉트한다.
3. 사용자는 어플리케이션에 퍼미션을 허용할지 결정한다.
4. 어플리케이션은 사용자 결정을 확인한다.
5. 요구되는 퍼미션을 허용했다면 어플리케이션은 사용자 작용에 대한 API요청을 만들기 위해 필요한 토큰을 얻는다.

단계1: 인증 파라미터 설정하기

첫 단계는 인증 요청 생성이다. 이 요청은 어플리케이션 확인에 파라미터를 설정하고 어플리케이션을 허용하기 위해 묻게되는 퍼미션을 정의한다.
- 만약 OAuth 2.0 인증과 증명에 구글 칼라이언트 라이브러리를 사용한다면 이들 파라미터를 지정하는 객체를 생성하고 설정한다.
- 만약 구글 OAuth 엔드포인트를 직접 호출한다면 URL을 생성하고 해당 URL에 파라미터를 설정한다.

The tabs below define the supported authorization parameters for web server applications. The language-specific examples also show how to use a client library or authorization library to configure an object that sets those parameters.

PHP








Anki 2.1 사용자 메뉴얼


Anki 2.1 사용자 메뉴얼

https://apps.ankiweb.net/docs/manual.html

소개

안키는 기억하기 쉽게 하는 프로그램이다. 이 것은 전통적인 학습방법보다 더 효율적이라서 공부하는데 필요한 시간을 줄이고 배울 수 있는 양을 늘릴 수 있다.

생활에서 기억해야 할 것이 있는 누구든 안키를 유용하게 사용할 수 있다. 이미지, 오디오, 비디오, 그리고 과학적 마크업인 라텍스를 지원하여 가능성은 무궁무진하다. 예를 들어:
- 언어 학습
- 의학 그리고 법학 시험 대비
- 사람의 이름과 얼굴 외우기
- 지리 파악
- 긴 시 외우기
- 기타 코드 연습까지

안키에는 두가지의 단순한 개념이 있다.: 액티브 리콜 테스팅과 간격 반복이다. 대부분의 학습자에게는 알려지지 않은 것이지만, 수년간 과학 잡지에서 소개된 것이다. 이들이 어떻게 작동하는지 이해하면 더 효과적인 학습자가 될 것이다.

액티브 리콜 테스팅

액티브 리콜 테스팅은 들어온 질문에 대해 답을 기억하려 시도하는 것이다. 이는 패시브 스터디랑 비교하면 읽고, 보고, 들을 때 답변을 아는지를 확인하기 위해 일시적으로 멈추는 것이 없는 것이다. 연구는 액티브 리콜 테스팅이 패시브 스터디 보다 강한 기억을 생성하며 더욱 효과적임을 보여준다. 이에 대한 두가지의 이유가 있다.

- 리콜을 하는 활동은 기억을 강하게 하여 다시 기억하는 가능성을 높여준다.
- 질문에 대한 답변을 하지 못할 때, 이 재료를 다시 확인하고 다시 공부해야 함을 알려준다.

알고 있었을지 모르지만 학교에서 액티브 리콜 테스팅을 접했다. 좋은 선생님은 내용을 읽은 후 질문과 답변을 제시하거나 주간 진행정도 확인용 시험을 본다. 만약 재료를 이해하거나 그렇지 않는지에 따라 쉽게할 수 없다. 시험을 봄으로서 미래에도 내용을 기억할 수 있는 가능성을 준다.

액티브 리콜 테스팅을 결합하는 좋은 방법은 플래쉬카드를 사용하는 것이다. 전통적 종이 플래쉬카드를 통해 카드의 한 부분에는 질문을 다른 부분에는 답변을 쓴다. 질문에 대한 생각나기 전까지 카드를 뒤집지 않는다. 패시브를 통해 발견할 수 있는 것보다 더욱 효율적으로 배울 수 있다.

쓰거나 잃거나

뇌는 효과적인 기계로서 중요치 않는 것은 재빠르게 지운다. 가능성은 2주전 월요일에 저녁으로 뭘 먹었는지는 기억나지 않는데 이 정보는 유용한게 아니기 때문이다. 만약 환상적인 레스토랑에 갔으며 이를 사람들에게 말했다면 아마도 기억하고 있을 것이다.

뇌의 "쓰거나 잃거나" 정책은 우리가 배우는 모든 것에 적용된다. 만약 어떤 과학 용어를 외우고 2주간 잊고 지냈다면 기억하지 못할 것이다. 실제로, 연구를 보면 48시간내에 배운 내용의 75%를 잊는다. 이는 어떤 것을 배울 때 실망스러운 결과일지도 모른다.

그러나 해결책은 간단하다. 리뷰하는 것이다. 새롭게 배운 정보를 리뷰함으로서 잊을 확률을 줄일 수 있다.

한가지 문제는 전통적인 리뷰는 그렇게 실제적이지 않다는 점이다. 만약 종이 플래쉬카드를 사용한다면 30개 정도는 가능하지만 300개 3000개는 무리이다.

간격 반복

간격 효과는 독일의 심리학자에 의해 1885년에 보고 되었다. 그는 우리가 시간 간격을 두고 배우기를 만복한다면 기억을 더욱 효율적으로 할 수있다는 것이다. 1930년대 간격 효과를 학습 증진을 위해 사용하는 여러재안이 있었고 이 것이 간격 반복이 된 것이다.

1972년 에 한 예시가 있다. 세바스챤 레이트너라는 독일 과학자가 종이 플래쉬카드로 간격 반복 방법을 공개한다. 구별된 종이 카드를 박스의 연속에 구별짓고 카드를 다른 박스에 설공했는지 성공하지 못했는지에 따라 움직인다. 이 것은 얼마나 잘 카드를 알고있는지를 먼저 가늠하는 것을 보여준다. 이 개념은 다양한 플래쉬카드 소프트웨어에서 적용되었다. 대략적인 접근이 있었지만, 언제 다시 배워야 하는지에 대한 정확한 날짜를 제공하지 못하고 다양한 난이도에 따라 구별짓지 못한다.

지난 30년간 가장 큰 개발은 슈퍼메모 작성자로 부터 나온다. 간격 반복을 구현하는 상업적 플래쉬카드 프로그램이다. 슈퍼메모는 사용자의 퍼포먼스에 기반해 재료를 리뷰할 시간을 가늠한다는 개념을 가져온 것이다.

슈퍼메모의 간격 반복 시스템에서 매먼 질문에 대한 답변을 하고 프로그램에게 자신이 얼마나 잘 기억하는지를 알린다. 프로그램은 이 피드백을 사용해 이 질문을 다시 할 때를 결정한다. 

이 것은 학습에서 혁명적이었다. 슈퍼메모의 슬로건은 이들을 모두 합친다.: 간격 반복으로 잊음을 잊을 수 있다.

어째서 안키인가

슈퍼메모의 큰 영향을 부정하는 것은 아니지만 문제가 없던것은 아니다. 프로그램이 비판받던 이유는 버그가 있고 탐색하기 어렵다는 점이다. 그리고 윈도우 컴퓨터에서만 작성한다. 이 것은 사유소프트웨어로서 사용자는 확장하거나 원본데이터에 접근할 수 없다. 아주 오래전 버전이 무료지만 최근 것은 제한이 있다.

Anki addresses these issues. There are free clients for Anki available on many platforms, so struggling students and teachers with budgetary constraints are not left out. It’s open source, with an already flourishing library of add-ons contributed by end-users. It’s multi-platform, running on Windows, Mac OSX, Linux/FreeBSD, and some mobile devices. And it’s considerably easier to use than SuperMemo.

Anki’s spaced repetition system is based on an older version of the SuperMemo algorithm called SM-2.

기본적 사항들

카드

질문과 답변 짝은 카드라고 한다. 이 것은 종이 플래쉬카드에 기반하는데 한 쪽에는 질문이 한쪽에는 답이 적혀있다. 맞게 답변 이후에 얼마나 잘 기억하고 있는지를 안키에게 알려주면 안키는 다음번에 언제 보여줄지를 결정한다.


덱은 카드의 그룹을 의미한다. 카드를 다른 덱에 둠으로서 한번에 모든 것을 학습하는대신 카드 컬렉션을 학습의 한 부분으로 한다. 각 덱이 다른 설정을 가질 수 있는데, 얼마나 많은 카드를 하루에 보여줄 지, 카드가 다시 보여질 때 얼마나 오래 기다려야 하는지에 대한 것이다.

덱은 다른 덱을 포함할 수 있는데, 트리에 덱을 조직화하도록 허용한다. 안키는 :: 를 사용해 다른 레벨을 표시한다. 만약 덱이 Chinese::Hanzi 라면 한지덱이며 중국어의 한부분임을 나타낸다. 만약 한지만 선택한다면 한지만, 중국어를 선택하면 한지를 포함한 모든 중국어가 보여진다.

덱을 트리에 두려면 각 레벨에 이름을 ::으로하거나 덱 리스트에서 드래그앤 드롭하면 된다. 다른 덱 하부에 파생된 즉 한개 이상의 ::을가진 덱, 은 서브덱이라 불리고 상위 것은 슈퍼덱 또는 부모 덱이라 한다.

Anki starts with a deck called “default”; any cards which have somehow become separated from other decks will go here. Anki will hide the default deck if it contains no cards and you have added other decks. Alternatively, you may rename this deck and use it for other cards.

Decks are best used to hold broad categories of cards, rather than specific topics such as “food verbs” or “lesson 1”. For more info on this, please see the using decks appropriately section.

For information on how decks affect the order cards are displayed in, please see the display order section.

노트와 필드

플래쉬 카드를 만들 때, 한개 이상의 카드를 몇몇 정보에 연계싶을 때가 있다. 예를 들어 만약 프랑스어를 배운다면 봉주르가 안녕임을 안다. 한 카드를 생성해 봉주르를 보여주고 안녕으로 기억하게 하고 다른 카드는 헬로우를 보여주고 봉주르로 기억하게 한다. 한 카드는 외국어를 알아채게하고 다른 것은 이를 생성하는 능력을 테스트한다.

종이 플래쉬카드를 사용할 때 이에 대한 옵션은 정보를 두 번쓰는것으로 각 카드에 한번씩이다. 몇몇 컴퓨터 플래쉬카드는 이를 더욱 쉽게 처리해준다. 종이 보다는 큰 발전이지만 주요한 문제점이 있다.
- 이런 프로그램은 인식과 제조를 구별해서 추적하지 않아 카드는 카드가 적절한 때에 보여지지 않을 수 있다. 필요보다 너무 자주 나오거나 너무 적게 나올 수 있다.
- 질문과 답변을 반대로 하는 것은 각 사이드에 정확히 같은 내용일 때만 가능하다. 이 뜻은 예롣들어 각 카드의 반대에 추가적인 정보를 표시하면 안되기 때문이다.

안키는 이런 문제들을 카드를 정보의 분리된 부분으로 나눔으로서 이런 문제를 해결한다. 안키에게 정보의 어떤 부분을 원하는지를 알리고 안키는 추가적인 서정을 했다든지하면 업데이트하고 카드를 생성하는 것을 담당한다.

프랑스어 어휘를 공부한다 생각해보면 각 카드의 뒤에는 페이지 숫자를 포함하고 싶다. 이런 정보를 노트라고 한다. 각 정보는 필드라고 하고 이 경우 영어, 불어, 페이지이다. 필드를 추가하거나 수정하려면 필드 버튼을 클릭한다. 필드상에 더 많은 정보는 필드 커스터마이징을 살펴본다.

카드 형식

안키가 노트에 기반한 카드를 생성할 수 있게 하려면 필드가 앞에 보여질지 뒤에 보여질지를 지정해야 한다. 이런 청사진을 카드 형식이라고 한다. 노트의 각형식은 하나이상의 카드 혀식을 갖는데 노트를 추가하면 안키는 각 카드 형식에 하나의 카드를 생성해 준다.

각 카드형식은 두가지 템플릿을 가지는데 하나는 질문이고 하나는 답변이다. In the above French example, we wanted the recognition card to look like this:

Q: Bonjour
A: Hello
   Page #12
To do this, we can set the question and answer templates to:

Q: {{French}}
A: {{English}}<br>
   Page #{{Page}}
By surrounding a field name in double curly brackets, we tell Anki to replace that section with the actual information in the field. Anything not surrounded by curly brackets remains the same on each card. (For instance, we don’t have to type “Page #” into the Page field when adding material – it’s added automatically to every card.) <br> is a special code that tells Anki to move to the next line; more details are available in the templates section.

The production card templates work in a similar way:

Q: {{English}}
A: {{French}}<br>
   Page #{{Page}}
Once a card type has been created, every time you add a new note, a card will be created based on that card type. Card types make it easy to keep the formatting of your cards consistent and can greatly reduce the amount of effort involved in adding information. They also mean Anki can ensure related cards don’t appear too close to each other, and they allow you to fix a typing mistake or factual error once and have all the related cards updated at once.

To add and edit card types, click the “Cards…” button while adding or editing notes. For more information on card types, please see the Cards and Templates section.

노트 형식

안키는 다른 재료에 대해 노트의 다른 형식을 생성할 수 있게 한다. 노트의 각 형식은 필드의 자체 집합과 카드 형식을 갖는다. 공부할 다양한 주제에 대한 구별된 노트형식을 생성하는 것도 좋다.In the above French example, we might create a note type called “French” for that. If we wanted to learn capital cities, we could create a separate note type for that as well, with fields such as “Country” and “Capital City”.

When Anki checks for duplicates, it only compares other notes of the same type. Thus if you add a capital city called “Orange” using the capital city note type, you won’t see a duplicate message when it comes time to learn how to say “orange” in French.

When you create a new collection, Anki automatically adds some standard note types to it. These note types are provided to make Anki easier for new users, but in the long run it’s recommended you define your own note types for the content you are learning. The standard note types are as follows:

기본
앞과 뒤 필드가 있고 하나의 카드를 생성.Text you enter in Front will appear on the front of the card, and text you enter in Back will appear on the back of the card.

기본 (그리고 반대로된 카드)
Like Basic, but creates two cards for the text you enter: one from front→back and one from back→front.

기본 (선택적으로 반대로된 카드)
This is a front→back card, and optionally a back→front card. To do this, it has a third field called “Add Reverse.” If you enter any text into that field, a reverse card will be created. More information about this is available in the Cards and Templates section.

클로즈 - 빈칸 메우기
A note type which makes it easy to select text and turn it into a cloze deletion (e.g., “Man landed on the moon in […]” → “Man landed on the moon in 1969”). More information is available in the cloze deletion section.

To add your own note types and modify existing ones, you can use Tools → Manage Note Types from the main Anki window.

Note
Notes and note types are common to your whole collection rather than limited to an individual deck. This means you can use many different types of notes in a particular deck, or have different cards generated from a particular note in different decks. When you add notes using the Add window, you can select what note type to use and what deck to use, and these choices are completely independent of each other. You can also change the note type of some notes after you’ve already created them.

콜렉션

콜렉션은 안키에 저장된 모든 재로를 의미하는 것으로 카드, 노트, 덱, 노트형식, 덱 옵션과 같은 것이 있다.

재료 추가하기

공유된 덱 다운로드

You can watch a video about Shared Decks and Review Basics on YouTube.

The easiest way to get started with Anki is to download a deck of cards someone has shared:

Click the “Get Shared” button at the bottom of the deck list.

When you’ve found a deck you’re interested in, click the “Download” button to download a deck package.

Double-click on the downloaded package to load it into Anki, or File→Import it.

Please note that it’s not currently possible to add shared decks directly to your AnkiWeb account. You need to import them with the desktop program, then synchronize to upload them to AnkiWeb.

Please see sharing decks for info on sharing your own decks with others.

Self-made versus pre-made
Creating your own deck is the most effective way to learn a complex subject. Subjects like languages and the sciences can’t be understood simply by memorizing facts — they require explanation and context to learn effectively. Furthermore, inputting the information yourself forces you to decide what the key points are, leading to a better understanding.

If you are a language learner, you may be tempted to download a long list of words and their translations, but this won’t teach you a language any more than memorizing scientific equations will teach you astrophysics. To learn properly, you need textbooks, teachers, or exposure to real-world sentences.

Do not learn if you do not understand.
--SuperMemo
Most shared decks are created by people who are learning material outside of Anki – from textbooks, classes, TV, etc. They select the interesting points from what they learn and put them into Anki. They make no effort to add background information or explanations to the cards, because they already understand the material. So when someone else downloads their deck and tries to use it, they’ll find it very difficult as the background information and explanations are missing.

That is not to say shared decks are useless – simply that for complex subjects, they should be used as a supplement to external material, not as a replacement for it. If you’re studying textbook ABC and someone has shared a deck of ideas from ABC, that’s a great way to save some time. And for simple subjects that are basically a list of facts, such as capital city names or pub quiz trivia, you probably don’t need external material. But if you attempt to study complex subjects without external material, you will probably meet with disappointing results.

카드와 노트 추가하기

Recall from the basics that in Anki we add notes rather than cards, and Anki creates cards for us. Click Add in the main window, and the Add Notes window will appear.

The top left of the window shows us the current note type. If it does not say “Basic,” then you may have added some note types when you downloaded a shared deck. The text below assumes that “Basic” is selected.

The top right of the window shows us the deck cards will be added to. If you’d like to add cards to a new deck, you can click on the deck name button and then click “Add”.

Below the note type, you’ll see some buttons, and an area labeled “Front” and “Back”. Front and Back are called fields, and you can add, remove and rename them by clicking the “Fields…” button above.

Below the fields is another area labelled “Tags”. Tags are labels that you can attach to your notes, to make organizing and finding notes easier. You can leave the tags blank if you wish, or add one or more of them. Tags are separated by a space. If the tags area says


vocab check_with_tutor
…then the note you add would have two tags.

When you’ve entered text into the front and back, you can click the “Add” button or press Ctrl+Enter (Command+Enter on a Mac) to add the note to your collection. When you do so, a card will be created as well, and placed into the deck you chose. If you’d like to edit a card you added, you can click the history button to search for a recently added card in the browser.

Anki checks the first field for uniqueness, so it will warn you if you enter two cards with a Front field of “apple” (for example). The uniqueness check is limited to the current note type, so if you’re studying multiple languages, two cards with the same Front would not be listed as duplicates as long as you had a different note type for each language.

Anki doesn’t check for duplicates in other fields automatically for efficiency reasons, but the browser has a “Find Duplicates” function which you can run periodically.

For more information on the buttons between the note type and the fields, please see the editor section.

Best Practices
Different people like to review in different ways, but there are some general concepts to keep in mind. An excellent introduction is this article on the SuperMemo site. In particular:

Keep it simple: The shorter your cards, the easier they are to review. You may be tempted to include lots of information “just in case,” but reviews will quickly become painful.

Don’t memorize without understanding: If you’re studying a language, try to avoid large lists of words. The best way to learn languages is in context, which means seeing those words used in a sentence. Likewise, imagine you’re studying a computer course. If you attempt to memorize the mountain of acronyms, you’ll find it very difficult to make progress. But if you take the time to understand the concepts behind the acronyms, learning the acronyms will become a lot easier.

노트형식 추가하기

기본 노트형식은 단순한 카드인 단어와 문장일 경우에는 충분하지만 추가적인 정보를 담고 싶다면 정보를 더 많은 필드로 쪼개야한다.

You may find yourself thinking "but I only want one card, so why can’t I just include the audio, a picture, a hint and the translation in the Front field?" If you’d prefer to do that, that’s fine. But the disadvantage of that approach is that all the information is stuck together. If you wanted to sort your cards by the hint, you wouldn’t be able to do that as it’s mixed in with the other content. You also wouldn’t be able to do things like move the audio from the front to the back, except by laboriously copying and pasting it for every note. By keeping content in separate fields, you make it much easier to adjust the layout of your cards in the future.

To create a new type of note, choose Tools → Manage Note Types from the main Anki window. Then click “Add” to add a new type of note. You’ll now see another screen that gives you a choice of note types to base the new type on. “Add” means to base the newly created type on one that comes with Anki. “Clone” means to base the newly created type on one that is already in your collection. For instance, if you’d created a French vocab type already, you might want to clone that when creating a German vocab type.

After choosing OK, you’ll be asked to name the new type. The subject material you’re studying is a good choice here – things like “Japanese”, ”Trivia”, and so on. Once you’ve chosen a name, close the Note Types window, and you’ll return to the adding window.

필드 커스터마이징

To customize fields, click the “Fields…” button when adding or editing a note, or while the note type is selected in the Manage Note Types window.

You can add, remove, or rename fields by clicking the appropriate buttons. To change the order in which the fields appear in this dialog and the add notes dialog, you can use the reposition button, which asks for the numerical position you want the field to have. So if you want to change a field to be the new first field, enter “1”.

Note
Do not use Tags, Type, Deck, Card, or FrontSide as field names, as they are special fields and will not work properly.
The options at the bottom of the screen allow you to edit various properties of the fields to be used when adding and editing the cards. This is not where you customize what appears on your cards when reviewing; for that, please see templates.

Editing Font allows you to customize the font and size used when editing notes. This is useful if you want to make unimportant information smaller, or increase the size of foreign characters which are hard to read. The changes you make here do not affect how cards appear when reviewing: to do that, please see the templates section. If you have enabled the “type in the answer” function, however, the text you type will use the font size defined here. (For information about how to change the actual font face when typing the answer, please see the checking your answer section.)

Sort by this field… tells Anki to show this field in the Sort Field column of the browser. You can use this to sort cards by that field. Only one field can be the sort field at once.

When Remember last input… is checked, Anki will not clear out this field’s content after a note is added. If you find yourself entering the same content into multiple notes, you may find this useful.

Reverse text direction is useful if you are studying languages that display text from right to left (RTL), such as Arabic or Hebrew. This setting currently only controls editing; to make sure the text displays correctly during review, you’ll need to adjust your template.

After you’ve added fields, you’ll probably want to add them to the front or back of your cards. For more information on that, please see the templates section.

덱 / 노트 형식 변경하기

While adding, you can click on the top left button to change note type, and the top right button to change deck. The window that opens up will not only allow you to select a deck or note type, but also to add new decks or manage your note types.

덱을 적절히 사용하기

Decks are designed to divide your content up into broad categories that you wish to study separately, such as English, Geography, and so on. You may be tempted to create lots of little decks to keep your content organized, such as “my geography book chapter 1”, or “food verbs”, but this is not recommended, for the following reasons:

Lots of little decks mean you end up reviewing cards in a recognizable order. Whether it’s because you’re clicking on each deck in turn (which is slow) or you’ve added a number of decks under a single parent deck, you’ll end up seeing all the “chapter 1” or “food verb” cards together. This makes it easier to answer the cards, as you can guess them from the context, which leads to weaker memories. When you need to recall the word or phrase outside Anki, you won’t have the luxury of being shown related content first!

Anki was not designed to handle many decks (more than several dozen), and it will slow down as you add more – especially if you’re studying on a mobile client. A few extra decks is not going to make a noticeable difference, but if you have many decks the delays will start to add up.

Instead of creating lots of little decks, it’s a better idea to use tags and/or fields to classify your content. Instead of creating a “food verbs” decks for example, you could add those cards to your main language study deck, and tag the cards with “food” and “verb”. Each card can have multiple tags, which means you can do things like search for all verbs, or all food-related vocabulary, or all verbs that are related to food.

For those who like to stay very organized, you can add fields to your notes to classify your content, such as “book”, “page”, and so on. Anki supports searching in specific fields, which means you can do a search for “book:'my book' page:63” and immediately find what you’re looking for.

Anki’s custom study and filtered deck features make this especially powerful, as you can create temporary decks out of search terms. This allows you to review your content mixed together in a single deck most of the time (for optimum memory), but also create temporary decks when you need to focus on particular material, such as before a test. The general rule is that if you always want to be able to study some content separately, it should be in a normal deck, and if you only occasionally need to be able to study it separately (for a test, when under a backlog, etc), tags/fields and filtered decks are better.

공부하기

원하는 덱을 발견하거나 노트를 입력했다면 이제 공부할 때이다.


안키에서의 공부는 현재 선택된 덱과 포함하는 서브덱에 한정된다.

덱 화면에서 덱은 리스트로 표시될 것이다. 2개의 열이 있는데, 듀와 뉴이다. 듀는 확인을 기다리는 갯수이고 배우고 있는 카드들이다. 뉴는 새로운 카드로서 그 날에 배워야할 것들이다.

덱을 선택할 때 현재 덱이되고 안키는 공부 화면으로 바뀐다. 메인 윈도우의 상단의 덱 버튼을 통해 언제든 현재 선택된 덱을 바꿀 수 있는 덱 리스트로 갈 수 있다.  (You can also use the Study Deck feature to select a new deck from the keyboard, or you can press the ‘s’ key to study the currently selected deck.)

You can click the gears button to the right of a deck to rename or delete a deck, change its options, or export it.

When a deck has subdecks, the cards will appear from each deck in turn.

공부 오버뷰

공부할 덱을 클릭한 후 오늘 얼마나 많은 카드를 공부해야하는지 보여주는 스크린이 보여진다. 이를 덱 오버뷰 화면이라고 한다. 카드는 세가지 형식으로 분할된다.

- 뉴: 다운로드하거나 

슈퍼메모 방법에서 얻어진 결과로 향상시키기 위한 컴퓨터 어플리케이션 기억할만한 것들


SM-2

슈퍼메모 방법에서 얻어진 결과로 향상시키기 위한 컴퓨터 어플리케이션

https://www.supermemo.com/en/archives1990-2015/english/ol/sm2

이 텍스트는 P.A.워즈니악의 포즈난의 기술대학 석사학위 논문인 학습의 향상에서 가져온 것이다.

1987년 12월 슈퍼메모 프로그램을 처음 작성했다. (터보 파스칼 3.0, IBM PC) 이 것은 두 가지 방법에서 슈퍼메모 메소드를 향상시킨다.
1. 개선 프로시져를 가장 낮은 확률 아이템에 적용한다. (종이 기반의 슈퍼메모 아이템은 페이지로 그룹되어 있음)
2. 이들 다른 어려움 수준에 기반해 아이템 사이를 다르게 한다.

사잇 반복 인터벌을 관찰을 통해 임의적 상수 팩터에의해 증가하도록 했다. (영어 어휘에 대한 SM-0알고리즘에서는 두가지가 있었음) 그래서 사잇 반복 인터벌을 계산하기 위해 다음 공식을 적용하기로 했다.

I(1):=1
I(2):=6
for n > 2
  I(n):=I(n-1)*EF

I(n) 은 n번째 반복 (하루단위) 후에 사잇 반복 인터벌
EF - 쉬움 팩터, 기억하기 쉬운 정도 (이전에는 E-Factor라고 했음)

E-Factor 는 가장 어려운 것은 1.1 가장 쉬운것은 2.5를 가진다. 슈퍼메모에서 처음 아이템이 들어가면 E-Factor 는 2.5이다. 반복을 통해 그 값이 점진적으로 작아진다. 그래서 아이템이 리콜하기 쉽다면 더 큰 값으로 E-Factor 를  줄여준다 ?

짧게, 첫 슈퍼메모를 구현한 후 E-Factor 는 1.3아랫값으로는 안된다고 했다. 1.3보자 작은 값이면 불평스러울 정도로 반복되며 그 연산결과가 잘못되기 때문이었다. 

새로운 E-Factor 값을 계산하기 위해 프로그램에서는 0~5 사이 스케일을 가진다. 기본 계산식은 다음과 같다.

EF' := f(EF, q)
EF' : 새로운 E-Factor
EF : E-Factor 의 이전 값
q : 반응의 품질
f : EF'를 계산하기 위해 사용된 함수

EF' := EF-0.8+0.28*q-0.02*q*q

reduced form of
EF' := EF+(0.1-(5-q)*(0.08+(5-q)*0.02))

만약 4이면 변화되지 않음을 확인하자

알고리즘 SM-2는 컴퓨터 기반 슈퍼메모에서 사용되며 각 아이템에 대해 쉬움 팩터의 계산을 통해 이뤄진다

1. 지식을 가능한 최소의 아이템으로 분리
2. 모든 아이템의 E-Factor 를 2.5로 설정
3. 다음 인터벌을 사용해 아이템을 반복
  I(1):=1
  I(2):=6
  for n > 2: I(n):=I(n-1)*EF
  여기서:
  I(n) 은 n번째 반복 (하루 단위)후에 사잇 반복 인터벌
  EF - 주어진 아이템의 E-Factor 
  만약 인터벌이 프랙션이면 가장 가까운 정수로 반올림
4. 각 반복에서 반복의 품질은 0-5 단계 스케일이다
  5 - 완벽히 기억
  4 - 맞는 답이지만 주저함
  3 - 맞는 답이지면 꽤 어렵게 답변
  2 - 틀린 답, 맞는 답을 떠올릴 수 있을 것 같음
  1 - 틀린 답; 결과가 기억남
  0 - 완전히 모름
5. 각 반복 후에 다음 계산식을 통해 최근에 반복된 아이템의 E-Factor 를 수정
  EF' := EF+(0.1-(5-q)*(0.08+(5-q)*0.02))
  여기서:
  EF' 는 새로운 E-Factor
  EF 는 이전 E-Factor
  q 는 0-5 사이의 정도 스케일, 답변의 품질
  만약 EF가 1.3보다 작으면 1.3
6. 만약 반응 품질이 3보다 작으면 E-Factor 를 변경하지 않고 시작부분의 반복을 시작한다. (새롭게 아이템을 기억하는 것으로 간주하고 I(1), I(2)만 사용)
7. 4보다 작은 값에 대해 주어진 날짜에서 계속 반복한다. 모든 아이템이 최소한 4이상이 되도록 계속 반복한다.

E-Factor 찾기에 사용된 프로시져는 아주 효과적이다. 슈퍼메모 프로그램에서 E-Factor분포를 표시하기 위한 옵션을 살펴볼 수 있다. E분포는 반복을 통해 몇달 사이에 대략적으로 생성된 주어진 데이터베이스로 보여진다. 이 의미는 E-Factor는 충분한 기간에도 변하지 않으며 이후 반복에서 사잇 반복 인터벌은 증가해야 함에 따라 실제 팩터로 연관된다.

SM-2 알고리즘 (영어 어휘 습득)을 처음 사용하는 동안 나는 10,255 개의 항목을 암기했습니다. 데이터베이스를 만들고 반복하는 데 필요한 시간은 하루에 41 분입니다. 이것은 270 항목 / 년 / 분의 취득 비율에 해당합니다. 전체 보존 기간은 89.3 % 였지만, 적절하게 결정된 E 요인을 나타내지 않는 최근에 기억 된 항목 (3 주 미만의 간격)을 제외하면 보존 기간은 92 %에 달합니다. SM-0과 SM-2 알고리즘을 비교할 때, 전자의 경우, 주어진 페이지의 항목을 반복하면서 힌트가 주어지기 때문에 인위적으로 유지율이 높다는 사실을 고려해야합니다. 문제의 것보다 앞선 항목은 정답을 쉽게 제안 할 수 있습니다.
따라서 SM-2 알고리즘은 양적 비교에서 놀랄만한 것은 아니지만 1985 년 최적 간격 개념 도입 이후 SuperMemo 방법의 두 번째 큰 개선을 나타냈다. 이전에 페이지 그룹으로 분류하고 E-Factor를 도입하는 것은 향상된 알고리즘의 두 가지 주요 구성 요소. 시행 착오 접근법에 의해 구축 된 SM-2 알고리즘은 실제로 그 개념을 유도 한 거의 모든 기본 가정의 정확성을 입증했습니다.

1 2 3 4 5 6 7 8 9 10 다음