이 둘러보기 시리즈에서는 작동하는 클래스룸 부가기능의 모든 구성요소를 보여줍니다. 각 연습 단계에서는 특정 개념을 다루고 단일 웹 애플리케이션에서 이를 구현합니다. 목표는 기능 부가기능을 설정, 구성, 실행하는 데 도움을 주는 것입니다.
부가기능이 Google Cloud 프로젝트와 상호작용해야 합니다. Google Cloud에 익숙하지 않다면 시작 가이드를 읽어보는 것이 좋습니다. Google Cloud 콘솔에서 사용자 인증 정보, API 액세스, Google Workspace Marketplace SDK를 관리합니다. Marketplace SDK에 대한 자세한 내용은 Google Workspace Marketplace 등록정보 가이드 페이지를 참고하세요.
이 가이드에는 다음 주제가 포함되어 있습니다.
- Google Cloud를 사용하여 Classroom의 iframe에 표시할 페이지를 만듭니다.
- Google 싱글 사인온 (SSO)을 추가하고 사용자가 로그인할 수 있도록 허용합니다.
- API를 호출하여 부가기능을 과제에 첨부합니다.
- 주요 부가기능 제출 요구사항 및 필수 기능을 해결합니다.
이 가이드는 프로그래밍 및 기본적인 웹 개발 개념에 익숙한 사용자를 대상으로 합니다. 둘러보기를 시작하기 전에 프로젝트 구성 가이드를 읽어보는 것이 좋습니다. 이 페이지에는 둘러보기에서 완전히 다루지 않는 중요한 구성 세부정보가 포함되어 있습니다.
구현 예
전체 참조 예는 Python에서 확인할 수 있습니다. Java 및 Node.js에서도 부분 구현을 사용할 수 있습니다. 이러한 구현은 후속 페이지에 나오는 예시 코드의 소스입니다.
다운로드 위치
Python 및 Java 예시는 GitHub 저장소에서 확인할 수 있습니다.
Node.js 샘플은 zip 파일로 다운로드할 수 있습니다.
기본 요건
다음 섹션을 검토하여 새 부가기능 프로젝트를 준비하세요.
HTTPS 인증서
개발 환경에서 앱을 호스팅할 수 있지만 클래스룸 부가기능은 https://
를 통해서만 사용할 수 있습니다. 따라서 앱을 배포하거나 부가기능 iframe 내에서 테스트하려면 SSL 암호화가 적용된 서버가 필요합니다.
SSL 인증서와 함께 localhost
를 사용할 수 있습니다. 로컬 개발용 인증서를 만들어야 하는 경우 mkcert를 고려하세요.
Google Cloud 프로젝트
이 예제와 함께 사용할 Google Cloud 프로젝트를 구성해야 합니다. 시작하는 데 필요한 단계를 개략적으로 알아보려면 Google Cloud 프로젝트 생성 가이드를 참고하세요. 첫 번째 둘러보기의 Google Cloud 프로젝트 설정 섹션에서는 수행해야 하는 구체적인 구성 작업도 안내합니다.
완료되면 OAuth 2.0 클라이언트 ID를 JSON 파일로 다운로드합니다. 이 사용자 인증 정보 파일을 압축 해제된 예시 디렉터리에 추가해야 합니다. 특정 위치는 파일 이해하기를 참고하세요.
OAuth 사용자 인증 정보
새 OAuth 사용자 인증 정보를 만들려면 다음 단계를 따르세요.
- Google Cloud 사용자 인증 정보 페이지로 이동합니다. 화면 상단에서 올바른 프로젝트를 선택했는지 확인합니다.
- 사용자 인증 정보 만들기를 클릭하고 드롭다운에서 OAuth 클라이언트 ID를 선택합니다.
- 다음 페이지에서 다음 단계를 따르세요.
- 애플리케이션 유형을 웹 애플리케이션으로 설정합니다.
- 승인된 리디렉션 URI에서 URI 추가를 클릭합니다. 애플리케이션의 콜백 경로에 전체 경로를 추가합니다. 예를 들면
https://my.domain.com/auth-callback
또는https://localhost:5000/callback
입니다. 이 둘러보기의 뒷부분에서 이 경로를 만들고 처리합니다. 이러한 경로를 언제든지 수정하거나 추가할 수 있습니다. - 만들기를 클릭합니다.
- 그러면 새로 만든 사용자 인증 정보가 포함된 대화상자가 표시됩니다. JSON 다운로드 옵션을 선택합니다. 다운로드한 JSON 파일을 서버 디렉터리에 복사합니다.
언어별 필수 요건
최신 필수 구성요소 목록은 각 저장소의 리드미 파일을 참고하세요.
Python
Python 예에서는 Flask 프레임워크를 사용합니다. 제공된 링크에서 전체 소스 코드를 다운로드할 수 있습니다.
필요한 경우 Python 3.7 이상을 설치하고 pip
을 사용할 수 있는지 확인합니다.
python3 -m ensurepip --upgrade
새 Python 가상 환경을 설정하고 활성화하는 것도 좋습니다.
python3 -m venv .classroom-addon-env
source .classroom-addon-env/bin/activate
다운로드한 예의 각 둘러보기 하위 디렉터리에는 requirements.txt
가 있습니다. pip
를 사용하여 필요한 라이브러리를 빠르게 설치할 수 있습니다. 다음 명령어를 사용하여 첫 번째 둘러보기에 필요한 라이브러리를 설치합니다.
cd flask/01-basic-app
pip install -r requirements.txt
Node.js
Node.js 예시에서는 Express 프레임워크를 사용합니다. 제공된 링크에서 전체 소스 코드를 다운로드할 수 있습니다.
이 예시에는 Node.js v16.13 이상이 필요합니다.
npm
를 사용하여 필수 노드 모듈을 설치합니다.
npm install
자바
Java 예시에서는 Spring Boot 프레임워크를 사용합니다. 제공된 링크에서 전체 소스 코드를 다운로드할 수 있습니다.
머신에 아직 설치되어 있지 않다면 Java 11 이상을 설치합니다.
Spring Boot 애플리케이션은 Gradle 또는 Maven을 사용하여 빌드를 처리하고 종속 항목을 관리할 수 있습니다. 이 예시에는 Maven 자체를 설치하지 않아도 빌드가 성공하도록 하는 Maven 래퍼가 포함되어 있습니다.
프로젝트를 다운로드하거나 클론한 디렉터리에서 다음 명령어를 실행하여 프로젝트를 실행하기 위한 필수 요건이 있는지 확인합니다.
java --version
./mvnw --version
또는 Windows에서는 다음을 실행합니다.
java -version
mvnw.cmd --version
파일 이해하기
다음 섹션에서는 예시 디렉터리의 레이아웃을 설명합니다.
디렉터리 이름
각 저장소에는 /01-basic-app/
와 같이 숫자로 시작하는 이름의 디렉터리가 여러 개 포함되어 있습니다. 숫자는 특정 안내 단계에 해당합니다.
각 디렉터리에는 특정 둘러보기에서 설명하는 기능을 구현하는 모든 기능을 갖춘 웹 앱이 포함되어 있습니다. 예를 들어 /01-basic-app/
디렉터리에는 부록 만들기 둘러보기의 최종 구현이 포함되어 있습니다.
디렉터리 콘텐츠
디렉터리 콘텐츠는 구현 언어에 따라 다릅니다.
Python
디렉터리 루트에는 다음 파일이 포함됩니다.
main.py
- Python 애플리케이션 진입점입니다. 이 파일에서 사용할 서버 구성을 지정한 다음 실행하여 서버를 시작합니다.requirements.txt
- 웹 앱을 실행하는 데 필요한 Python 모듈입니다.pip install -r requirements.txt
를 사용하여 자동으로 설치할 수 있습니다.client_secret.json
- Google Cloud에서 다운로드한 클라이언트 보안 비밀번호 파일입니다. 이 파일은 예시 보관 파일에 포함되어 있지 않습니다. 다운로드한 사용자 인증 정보 파일을 각 디렉터리 루트로 이름을 바꾸고 복사해야 합니다.
config.py
- Flask 서버의 구성 옵션입니다.webapp
디렉터리에는 웹 애플리케이션의 콘텐츠가 포함되어 있습니다. 파일에는 다음이 포함되어 있습니다.다양한 페이지의 Jinja 템플릿이 있는
/templates/
디렉터리이미지, CSS, 보조 JavaScript 파일이 있는
/static/
디렉터리routes.py
- 웹 애플리케이션 경로의 핸들러 메서드입니다.__init__.py
-webapp
모듈의 이니셜라이저입니다. 이 이니셜라이저는 Flask 서버를 시작하고config.py
에 설정된 구성 옵션을 로드합니다.특정 둘러보기 단계에 필요한 추가 파일입니다.
Node.js
연습의 각 단계는 자체 <step>
하위 폴더에 있습니다. 각 단계에는 다음이 포함됩니다.
- JavaScript, CSS, 이미지와 같은 정적 파일은
./<step>/public
폴더에 있습니다. - Express 라우터는
./<step>/routes
폴더에 있습니다. - HTML 템플릿은
./<step>/views
폴더에 있습니다. - 서버 애플리케이션은
./<step>/app.js
입니다.
자바
프로젝트 디렉터리에는 다음이 포함됩니다.
src.main
디렉터리에는 애플리케이션을 성공적으로 실행하기 위한 소스 코드와 구성이 포함되어 있습니다. 이 디렉터리에는 다음이 포함됩니다. +java.com.addons.spring
디렉터리에는Application.java
및Controller.java
파일이 포함됩니다.Application.java
파일은 애플리케이션 서버를 실행하고Controller.java
파일은 엔드포인트 로직을 처리합니다. +resources
디렉터리에는 HTML 및 JavaScript 파일이 포함된templates
디렉터리가 있습니다. 또한 서버를 실행할 포트, 키 저장소 파일의 경로,templates
디렉터리의 경로를 지정하는application.properties
파일도 포함되어 있습니다. 이 예시에는resources
디렉터리의 키 저장소 파일이 포함되어 있습니다. 원하는 곳에 저장해도 되지만 그에 따라application.properties
파일을 경로로 업데이트해야 합니다.pom.xml
에는 프로젝트를 빌드하고 필요한 종속 항목을 정의하는 데 필요한 정보가 포함되어 있습니다..gitignore
에 git에 업로드하면 안 되는 파일 이름이 포함되어 있습니다. 이.gitignore
에 키 저장소 경로를 추가해야 합니다. 제공된 예시에서는secrets/*.p12
입니다 (키 저장소의 목적은 아래 섹션에서 설명함). 연습 2 이상에서는 원격 저장소에 비밀이 포함되지 않도록client_secret.json
파일의 경로도 포함해야 합니다. 연습 3 이상에서는 H2 데이터베이스 파일과 파일 데이터 저장소 팩토리의 경로를 추가해야 합니다. 이러한 데이터 저장소 설정에 관한 자세한 내용은 재방문 처리에 관한 세 번째 연습에서 확인할 수 있습니다.mvnw
및mvnw.cmd
은 각각 Unix 및 Windows용 Maven 래퍼 실행 파일입니다. 예를 들어 Unix에서./mvnw --version
를 실행하면 Apache Maven 버전이 출력됩니다..mvn
디렉터리에는 Maven 래퍼 구성이 포함됩니다.
샘플 서버 실행
서버를 테스트하려면 서버를 실행해야 합니다. 다음 안내에 따라 원하는 언어로 예시 서버를 실행하세요.
Python
OAuth 사용자 인증 정보
앞서 설명한 대로 OAuth 사용자 인증 정보를 만들고 다운로드합니다. 애플리케이션의 서버 실행 파일과 함께 루트 디렉터리에 JSON 파일을 배치합니다.
서버 구성
웹 서버를 실행하는 방법에는 여러 가지가 있습니다. Python 파일 끝에 다음 중 하나를 추가합니다.
보안되지 않은
localhost
입니다. 이 방법은 브라우저 창에서 직접 테스트하는 데만 적합합니다. 보안되지 않은 도메인은 클래스룸 부가기능 iframe에서 로드할 수 없습니다.if __name__ == "__main__": # Disable OAuthlib's HTTPs verification. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" # Run the web app at http://localhost:5000. app.run(debug=True)
localhost
보호ssl_context
인수에 SSL 키 파일의 튜플을 지정해야 합니다.if __name__ == "__main__": # Run the web app at https://localhost:5000. app.run(host="localhost", ssl_context=("localhost.pem", "localhost-key.pem"), debug=True)
Gunicorn 서버 프로덕션 준비 서버 또는 클라우드 배포에 적합합니다. 이 실행 옵션과 함께 사용할
PORT
환경 변수를 설정하는 것이 좋습니다.if __name__ == "__main__": # Run the web app at https://<your domain>:<server_port>. # Defaults to https://<your domain>:8080. server_port = os.environ.get("PORT", "8080") app.run(debug=True, port=server_port, host="0.0.0.0")
서버 실행
Python 애플리케이션을 실행하여 이전 단계에서 구성한 대로 서버를 실행합니다.
python main.py
표시되는 URL을 클릭하여 브라우저에서 웹 앱을 확인하고 제대로 실행되는지 확인합니다.
Node.js
서버 구성
HTTPS를 통해 서버를 실행하려면 HTTPS를 통해 애플리케이션을 실행하는 데 사용되는 자체 인증서를 만들어야 합니다. 이 사용자 인증 정보는 저장소 루트 폴더에 sslcert/cert.pem
및 sslcert/key.pem
로 저장해야 합니다. 브라우저에서 이러한 키를 수락하려면 OS 키체인에 키를 추가해야 할 수 있습니다.
*.pem
가 .gitignore
파일에 있는지 확인하세요. 파일을 Git에 커밋하면 안 되기 때문입니다.
서버 실행
step01
를 서버로 실행하려는 올바른 단계로 대체하여 다음 명령어로 애플리케이션을 실행할 수 있습니다 (예: 01-basic-app의 경우 step01
, 02-sign-in의 경우 step02
).
npm run step01
또는
npm run step02
그러면 https://localhost:5000
에서 웹 서버가 실행됩니다.
터미널에서 Control + C
를 사용하여 서버를 종료할 수 있습니다.
자바
서버 구성
HTTPS를 통해 서버를 실행하려면 HTTPS를 통해 애플리케이션을 실행하는 데 사용되는 자체 인증서를 만들어야 합니다.
로컬 개발에는 mkcert를 사용하는 것이 좋습니다. mkcert
를 설치하면 다음 명령어가 HTTPS를 통해 실행할 로컬에 저장된 인증서를 생성합니다.
mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
이 예시에는 리소스 디렉터리의 키 저장소 파일이 포함됩니다. 원하는 위치에 저장해도 되지만 그에 따라 application.properties
파일을 경로로 업데이트해야 합니다. 도메인 이름은 프로젝트를 실행하는 도메인입니다 (예: localhost
).
*.p12
가 .gitignore
파일에 있는지 확인하세요. 파일을 Git에 커밋하면 안 되기 때문입니다.
서버 실행
Application.java
파일에서 main
메서드를 실행하여 서버를 실행합니다. 예를 들어 IntelliJ에서는 src/main/java/com/addons/spring
디렉터리에서 Application.java
> Run 'Application'
을 마우스 오른쪽 버튼으로 클릭하거나 Application.java
파일을 열어 main(String[] args)
메서드 서명 왼쪽에 있는 녹색 화살표를 클릭하면 됩니다. 또는 터미널 창에서 프로젝트를 실행할 수 있습니다.
./mvnw spring-boot:run
또는 Windows:
mvnw.cmd spring-boot:run
이렇게 하면 https://localhost:5000
또는 application.properties
에 지정한 포트에서 서버가 실행됩니다.