개요
이 실습에서는 Google Cloud의 AI 기반 앱 개발 파트너인 Gemini Code Assist를 사용하여 앱을 설명, 테스트, 문서화하고 개선합니다.
Cloud Workstations를 사용하여 Code OSS를 통합 개발 환경(IDE)으로 활용하는 개발 환경을 만듭니다.
이 실습은 앱을 빌드하는 모든 경험 수준의 개발자를 대상으로 합니다. 클라우드 앱 개발에 익숙하지 않아도 됩니다.
참고: Gemini는 아직 초기 단계의 기술로, 그럴듯해 보이지만 실제로는 잘못된 출력을 생성할 수 있습니다. Gemini의 모든 출력을 사용 전에 미리 검사하는 것이 좋습니다. 자세한 내용은 Google Cloud를 위한 Gemini와 책임감 있는 AI를 참조하세요.
목표
이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.
- Cloud Workstations를 사용하여 클라우드 기반 앱 개발 환경을 만듭니다.
- Gemini Code Assist를 사용하여 코드를 설명합니다.
- Gemini Code Assist로 단위 테스트를 생성합니다.
- Gemini에 프롬프트를 입력하여 앱의 디자인을 개선합니다.
- Gemini Code Assist를 사용하여 코드 가독성을 개선합니다.
- Gemini Code Assist를 사용하여 영어나 다른 언어로 코드에 주석을 추가합니다.
설정
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
시크릿 창을 사용하여 Qwiklabs에 로그인합니다.
-
실습 사용 가능 시간(예: 1:15:00
)을 참고하여 해당 시간 내에 완료합니다.
일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.
-
준비가 되면 실습 시작을 클릭합니다.
-
실습 사용자 인증 정보(사용자 이름 및 비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.
-
Google Console 열기를 클릭합니다.
-
다른 계정 사용을 클릭한 다음, 안내 메시지에 이 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.
-
약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
Cloud Shell 활성화
Cloud Shell은 여러 개발 도구가 포함된 가상 머신입니다. 5GB의 영구적인 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다. gcloud
는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 탭 자동 완성을 지원합니다.
-
Google Cloud Console의 탐색창에서 Cloud Shell 활성화(
)를 클릭합니다.
-
계속을 클릭합니다.
환경을 프로비저닝하고 연결하는 데는 몇 분 정도 소요됩니다. 연결되면 사용자 인증도 처리되어 프로젝트가 PROJECT_ID로 설정됩니다. 예를 들면 다음과 같습니다.

샘플 명령어
gcloud auth list
(출력)
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
(출력 예시)
Credentialed accounts:
- google1623327_student@qwiklabs.net
gcloud config list project
(출력)
[core]
project = <project_ID>
(출력 예시)
[core]
project = qwiklabs-gcp-44776a13dea667a6
작업 1. 환경 및 계정 구성
이 작업에서는 Gemini용 Cloud AI Companion API를 사용 설정하고 사용자 계정에 필요한 역할을 부여합니다.
API 및 역할 구성
-
실습 사용자 인증 정보로 Google Cloud 콘솔에 로그인하고 키보드에서 G 키를 누른 다음 S 키를 눌러 Cloud Shell 터미널을 엽니다.
-
다음 명령어를 실행하여 Cloud Shell에서 프로젝트 ID, 사용자, 리전 환경 변수를 설정합니다.
export PROJECT_ID=$(gcloud config list project --format="value(core.project)")
export USER=$(gcloud config list account --format "value(core.account)")
export REGION={{{project_0.startup_script.lab_region| Lab Region}}}
echo "PROJECT_ID=${PROJECT_ID}"
echo "USER=${USER}"
echo "REGION=${REGION}"
-
다음 명령어를 실행하여 Gemini용 Cloud AI Companion API를 사용 설정하고 사용자 계정에 필요한 역할을 부여합니다.
gcloud services enable cloudaicompanion.googleapis.com --project ${PROJECT_ID}
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member user:${USER} --role=roles/cloudaicompanion.user
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member user:${USER} --role=roles/serviceusage.serviceUsageViewer
목표를 확인하려면 내 진행 상황 확인하기를 클릭합니다.
관련 API 사용 설정 및 IAM 역할 설정
작업 2. 클라우드 워크스테이션 만들기
이 실습에서는 Gemini 지원과 Cloud Workstations IDE용 Cloud Code 플러그인을 사용하여 앱을 개발합니다. Cloud Workstations는 Gemini가 기본 통합된 완전 관리형 통합 개발 환경입니다.
이 작업에서는 Cloud Workstations 환경을 구성 및 프로비저닝하고 Gemini용 Cloud Code 플러그인을 사용 설정합니다.
워크스테이션 클러스터 보기
이 실습을 위해 my-cluster
라는 이름의 워크스테이션 클러스터가 이미 생성되어 있습니다. 이 클러스터는 워크스테이션을 구성하고 만드는 데 사용됩니다.
-
Workstations 페이지를 열려면 Google Cloud 콘솔 제목 표시줄의 검색창에 Cloud Workstations를 입력한 다음 Cloud Workstations를 클릭합니다.
-
Cloud Workstations가 고정(
)되어 있지 않다면, 탐색 메뉴(
)에서 고정(
)을 클릭합니다.
-
탐색창에서 클러스터 관리를 클릭합니다.
-
클러스터의 상태를 확인합니다. 클러스터의 상태가 Reconciling
또는 Updating
인 경우 주기적으로 새로고침하여 Ready
상태가 될 때까지 기다렸다가 다음 단계로 이동합니다.
구성 및 워크스테이션 만들기
-
Cloud Shell에서 다음 명령어를 실행하여 워크스테이션 구성과 워크스테이션을 만듭니다.
export CLUSTER_NAME=my-cluster
export CONFIG_NAME=my-config
export WS_NAME=my-workstation
export REGION={{{project_0.startup_script.lab_region| Lab Region}}}
gcloud workstations configs create ${CONFIG_NAME} --cluster=${CLUSTER_NAME} --region=${REGION} --machine-type="e2-standard-4" --pd-disk-size=200 --pd-disk-type="pd-standard" --pool-size=1
gcloud workstations create ${WS_NAME} --cluster=${CLUSTER_NAME} --config=${CONFIG_NAME} --region=${REGION}
명령어가 완료될 때까지 기다립니다.
-
탐색창에서 Workstations를 클릭합니다.
워크스테이션이 생성되면 내 워크스테이션 아래에 Stopped
상태로 나열됩니다.
-
워크스테이션을 시작하기 위해 시작을 클릭합니다.
워크스테이션이 시작되면 상태가 Starting
으로 변경됩니다. 사용할 준비가 되었음을 나타내는 Running
상태로 변경될 때까지 기다립니다.
IDE 실행
일부 확장 프로그램이 제대로 작동하려면 브라우저에서 서드 파티 쿠키를 사용 설정해야 합니다.
-
Chrome에서 서드 파티 쿠키를 사용 설정하려면 Chrome 메뉴에서 설정을 클릭합니다.
-
검색창에 서드 파티 쿠키를 입력합니다.
-
서드 파티 쿠키 설정을 클릭하고 서드 파티 쿠키 허용을 선택합니다.
참고: 실습 후 브라우저를 현재 설정으로 복원하려는 경우 서드 파티 쿠키의 원래 설정을 기록해 두세요.
-
워크스테이션에서 Code OSS IDE를 실행하기 위해 Google Cloud 콘솔의 Workstations 페이지에서 실행을 클릭합니다.
IDE가 다른 브라우저 탭에서 열립니다.

목표를 확인하려면 내 진행 상황 확인하기를 클릭합니다.
클라우드 워크스테이션 만들기 및 시작
작업 3. Cloud Code 확장 프로그램을 업데이트하여 Gemini 사용 설정
이 작업에서는 워크스테이션 IDE에 Cloud Code의 Gemini를 사용 설정합니다.
Google Cloud에 연결
워크스테이션에서 Google Cloud에 연결하기 위해 다음 단계를 수행합니다.
-
Cloud Code - 로그인 과정을 시작하려면 창 하단의 상태 표시줄에서 Cloud Code - 로그인을 클릭한 다음 터미널에 표시된 링크를 브라우저에서 엽니다.
-
외부 웹사이트를 열지 확인하라는 메시지가 표시되면 열기를 클릭합니다.
-
Gemini Code Assist
로 계속 진행할 계정을 선택한 후 로그인을 클릭합니다.
인증 코드가 브라우저 탭에 표시됩니다.
참고: gcloud auth login 명령어를 실행했다는 경고가 표시될 수 있습니다. 이는 정상적인 프로세스입니다. IDE에서 이 명령어를 대신 실행했습니다.
-
복사를 클릭합니다.
-
IDE로 돌아와서 터미널의 Enter authorization code
(승인 코드 입력)라고 표시된 곳에 코드를 붙여넣습니다.
-
클립보드에서 복사한 코드를 승인할지 묻는 메시지가 표시되면 허용을 클릭합니다.
-
Enter 키를 누른 다음 상태 표시줄에 Cloud Code - 프로젝트 없음이 표시될 때까지 기다립니다.
이제 Google Cloud에 연결되었습니다.
Cloud Code에서 Gemini 사용 설정
워크스테이션 IDE에서 Cloud Code의 Gemini를 사용 설정하려면 다음 단계를 수행합니다.
-
워크스테이션 IDE에서 메뉴(
)를 클릭한 다음 파일 > 환경설정 > 설정으로 이동합니다.
-
설정 검색에 Gemini
를 입력합니다.
-
설정 대화상자의 사용자 탭에서 확장 프로그램 > Gemini Code Assist를 선택합니다.
-
Cloud Code 설정 페이지에서 Geminicodeassist: 프로젝트에 Google Cloud 프로젝트 ID()를 입력합니다.

-
Cloud Code에 사용할 프로젝트를 선택하려면 창 하단의 상태 표시줄에서 Cloud Code - 프로젝트 없음을 클릭합니다. 그런 다음 Google Cloud 프로젝트 선택 옵션을 선택하고 을(를) 선택합니다.

이제 프로젝트 ID가 상태 표시줄에 표시됩니다. 이제 Gemini를 사용할 준비가 되었습니다.
작업 4. Python Flask 앱 다운로드, 검사, 실행
Python Flask 앱의 코드가 Cloud Storage 버킷에 저장되어 있습니다.
이 작업에서는 IDE에서 Python Flask 앱을 다운로드, 검사, 실행합니다. Gemini Code Assist가 코드를 설명합니다.
터미널에 로그인
-
IDE 메뉴(
)에서 터미널 > 새 터미널을 선택합니다.
-
터미널에서 다음 명령어를 실행합니다.
gcloud auth login
터미널에 표시된 링크를 브라우저에서 엽니다.
-
계정을 선택하여 Google Cloud SDK에 로그인
으로 진행한 다음 계속을 클릭합니다.
-
마지막으로 Google Cloud SDK wants to access your Google Account
(Google Cloud SDK에서 Google 계정에 액세스하려고 합니다)라는 메시지가 표시되는 창에서 허용을 클릭합니다.
인증 코드가 브라우저 탭에 표시됩니다.
참고: gcloud auth login 명령어를 실행했다는 경고가 표시될 수 있습니다. 이는 정상적인 프로세스입니다. IDE에서 이 명령어를 대신 실행했습니다.
-
복사를 클릭합니다.
-
IDE로 돌아와서 Enter the verification code provided in your browser
(브라우저에 표시된 인증 코드를 입력하세요)라고 표시된 터미널에 코드를 붙여넣은 다음 Enter를 누릅니다.
이제 터미널 세션이 Google Cloud에 로그인되었습니다.
Python 가상 환경 설치
-
다음 명령어를 실행하여 가상 환경에서 로컬로 Python을 설치합니다.
sudo apt update
sudo apt -y upgrade
sudo apt install -y python3-venv
python3 -m venv ~/env
source ~/env/bin/activate
-
다음 명령어를 실행하여 사용할 Python 위치를 확인합니다.
which python3
코드 복사
-
터미널에서 다음 명령어를 실행하여 앱 코드를 복사합니다.
export PROJECT_ID={{{project_0.project_id | Project ID}}}
export BUCKET_NAME=$PROJECT_ID-code
gcloud storage cp -r gs://$BUCKET_NAME/* .
코드가 codeassist-demo
라는 하위 디렉터리에 복사되었습니다.
-
IDE 작업 표시줄에서 탐색기(
)를 클릭한 다음 폴더 열기를 클릭합니다.
-
폴더 열기 대화상자에서 codeassist-demo를 클릭한 다음 확인을 클릭합니다.
디렉터리 구조가 표시됩니다.
코드 검사
-
main.py를 선택합니다.
편집기 창에 Python 파일이 열립니다.
-
IDE 작업 표시줄에서 Gemini Code Assist(
)를 클릭합니다.
Gemini Code Assist는 앱 개발 작업을 지원하는 AI 기반 파트너입니다.
-
Gemini Code Assist
채팅 창에서 다음 프롬프트를 입력한 다음 보내기(
)를 클릭합니다.
Explain this
프롬프트는 필요한 도움을 설명하는 질문이나 문장입니다. 프롬프트에는 Google Cloud에서 더 유용하고 완전한 대답을 제공하기 위해 분석하는 기존 코드의 컨텍스트를 포함할 수 있습니다. 만족스러운 대답을 생성하는 프롬프트를 작성하는 방법에 대한 자세한 내용은 Google Cloud를 위한 Gemini에 대해 더 나은 프롬프트 작성을 참조하세요.
Gemini가 main.py
의 코드를 설명합니다. 대답에는 다음 섹션에 관한 설명이 포함될 수 있습니다.
- 종속 항목
- 애플리케이션 설정
- 경로
- 애플리케이션 실행
코드를 선택하면 동일한 프롬프트를 입력해도 Gemini Code Assist가 선택한 코드에 대해서만 설명을 제공합니다.
참고: 채팅 기록 상태는 메모리에만 보관되며 다른 작업공간으로 전환하거나 IDE를 닫으면 유지되지 않습니다. Gemini는 사용자의 프롬프트나 프롬프트에 대한 대답을 모델을 학습시키기 위한 데이터로 사용하지 않습니다. 자세한 내용은 Google Cloud를 위한 Gemini에서 사용자 데이터를 사용하는 방법을 참조하세요.
-
편집기에서 POST /convert
경로의 app.route
및 함수 정의를 선택하고 전구 아이콘(
)을 클릭한 다음 Gemini: 이 항목에 대한 설명을 클릭합니다.

Gemini가 선택된 코드를 자세히 설명합니다.
앱 실행
-
터미널이 닫힌 경우 IDE 메뉴(
)에서 터미널 > 새 터미널을 선택합니다.
-
터미널에서 다음 명령어를 실행합니다.
cd ~/codeassist-demo
source ~/env/bin/activate
python3 main.py
이 명령어는 flask
라는 모듈이 없다는 오류를 반환합니다. Gemini Code Assist
를 사용하여 문제를 파악할 수 있습니다.
-
Gemini Code Assist
채팅 창에 다음 프롬프트를 입력합니다.
How do you install Python requirements?
Gemini Code Assist
는 pip 패키지 설치 프로그램과 requirements.txt
파일을 사용하여 Python 요건을 설치할 수 있다고 언급할 것입니다.
-
IDE 작업 표시줄에서 탐색기(
)를 클릭한 다음 requirements.txt를 클릭합니다.
Flask와 필요한 버전은 requirements.txt
파일에 나열되어 있습니다.
-
터미널에서 다음 명령어를 실행합니다.
pip install -r requirements.txt
이제 Flask가 설치되었습니다.
-
터미널에서 다음 명령어를 실행합니다.
python3 main.py
포트 8080에서 수신 대기 중인 서비스가 이제 웹 미리보기로 제공됨을 나타내는 대화상자가 표시됩니다.
-
미리보기 열기를 클릭한 다음 열기를 클릭합니다.
Roman Numerals 웹 앱이 새 탭에서 열립니다.
-
숫자 상자에 123
을 입력한 다음 Convert(변환)를 클릭합니다.
반환되는 숫자는 CXXIII
입니다. C
는 100, X
는 10, I
는 1입니다. 올바른 것으로 확인됩니다.
-
Return to home page(홈페이지로 돌아가기)를 클릭한 다음 45
를 입력하고 Convert(변환)를 클릭합니다.
반환된 숫자는 XXXXV
입니다. 엄밀히 따지면 수학적으로는 맞지만(10을 4번 곱하고 5를 더한 값) 40의 일반적인 표기는 XL
이므로(50보다 10이 적음) 더 전통적인 로마 숫자 표기는 XLV
가 됩니다.
나중에 자세히 설명하겠습니다.
-
IDE 작업 표시줄에서 탐색기(
)를 클릭한 다음 calendar.py를 클릭합니다.
number_to_roman
함수는 숫자를 로마 숫자로 변환합니다.
목표를 확인하려면 내 진행 상황 확인하기를 클릭합니다.
코드 복사 및 Python Flask 앱 실행
작업 5. 단위 테스트 추가
이 작업에서는 Gemini Code Assist를 사용하여 코드의 단위 테스트를 생성합니다.
-
IDE 작업 표시줄에서 Gemini Code Assist(
)를 클릭한 후 다음 프롬프트를 입력합니다.
Create unit tests for a fixed version of number_to_roman
Gemini Code Assist
는 열려 있는 탭의 calendar.py
코드를 인식합니다. 다음과 유사한 예시 코드를 제공할 것입니다.
import unittest
import calendar
class TestNumberToRoman(unittest.TestCase):
def test_basic_conversions(self):
self.assertEqual(calendar.number_to_roman(1), "I")
self.assertEqual(calendar.number_to_roman(5), "V")
self.assertEqual(calendar.number_to_roman(10), "X")
self.assertEqual(calendar.number_to_roman(50), "L")
self.assertEqual(calendar.number_to_roman(100), "C")
self.assertEqual(calendar.number_to_roman(500), "D")
self.assertEqual(calendar.number_to_roman(1000), "M")
def test_combinations(self):
self.assertEqual(calendar.number_to_roman(4), "IV")
self.assertEqual(calendar.number_to_roman(9), "IX")
self.assertEqual(calendar.number_to_roman(14), "XIV")
self.assertEqual(calendar.number_to_roman(40), "XL")
self.assertEqual(calendar.number_to_roman(90), "XC")
self.assertEqual(calendar.number_to_roman(400), "CD")
self.assertEqual(calendar.number_to_roman(900), "CM")
self.assertEqual(calendar.number_to_roman(1994), "MCMXCIV")
self.assertEqual(calendar.number_to_roman(3888), "MMMDCCCLXXXVIII")
def test_edge_cases(self):
self.assertEqual(calendar.number_to_roman(0), "") # Should handle zero
self.assertRaises(TypeError, calendar.number_to_roman, "abc") # Should handle invalid input
def test_large_numbers(self):
self.assertEqual(calendar.number_to_roman(3000), "MMM")
self.assertEqual(calendar.number_to_roman(3999), "MMMCMXCIX")
if __name__ == '__main__':
unittest.main()
참고: Gemini는 코드가 로마 숫자의 표준 구현을 제대로 따를 때 통과하는 테스트 대신에 현재 구현된 그대로 코드가 통과할 수 있는 단위 테스트를 생성할 수 있습니다. 이 실습에서는 올바른 버전의 단위 테스트를 사용합니다.
-
실행 중인 앱을 중지하려면 터미널에서 Ctrl + C를 누릅니다.
-
터미널에서 다음 명령어를 실행하여 convert 함수에 대한 단위 테스트를 만듭니다.
cat > ~/codeassist-demo/test_calendar.py <<EOF
import unittest
import calendar
class TestNumberToRoman(unittest.TestCase):
def test_basic_conversions(self):
self.assertEqual(calendar.number_to_roman(1), "I")
self.assertEqual(calendar.number_to_roman(5), "V")
self.assertEqual(calendar.number_to_roman(10), "X")
self.assertEqual(calendar.number_to_roman(50), "L")
self.assertEqual(calendar.number_to_roman(100), "C")
self.assertEqual(calendar.number_to_roman(500), "D")
self.assertEqual(calendar.number_to_roman(1000), "M")
def test_combinations(self):
self.assertEqual(calendar.number_to_roman(4), "IV")
self.assertEqual(calendar.number_to_roman(9), "IX")
self.assertEqual(calendar.number_to_roman(14), "XIV")
self.assertEqual(calendar.number_to_roman(40), "XL")
self.assertEqual(calendar.number_to_roman(90), "XC")
self.assertEqual(calendar.number_to_roman(400), "CD")
self.assertEqual(calendar.number_to_roman(900), "CM")
self.assertEqual(calendar.number_to_roman(1994), "MCMXCIV")
self.assertEqual(calendar.number_to_roman(3888), "MMMDCCCLXXXVIII")
def test_edge_cases(self):
self.assertEqual(calendar.number_to_roman(0), "") # Should handle zero
self.assertRaises(TypeError, calendar.number_to_roman, "abc") # Should handle invalid input
def test_large_numbers(self):
self.assertEqual(calendar.number_to_roman(3000), "MMM")
self.assertEqual(calendar.number_to_roman(3999), "MMMCMXCIX")
if __name__ == '__main__':
unittest.main()
EOF
-
터미널에서 다음 명령어를 실행하여 테스트를 실행합니다.
cd ~/codeassist-demo
python3 test_calendar.py
테스트가 실패하는 경우는 다음과 같습니다.
======================================================================
ERROR: test_edge_cases (__main__.TestNumberToRoman.test_edge_cases)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/codeassist-demo/test_calendar.py", line 28, in test_edge_cases
self.assertRaises(TypeError, calendar.number_to_roman, "abc") # Should handle invalid input
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/unittest/case.py", line 778, in assertRaises
return context.handle('assertRaises', args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/unittest/case.py", line 238, in handle
callable_obj(*args, **kwargs)
File "/home/user/codeassist-demo/calendar.py", line 16, in number_to_roman
number = int(number)
^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'abc'
======================================================================
FAIL: test_combinations (__main__.TestNumberToRoman.test_combinations)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/codeassist-demo/test_calendar.py", line 16, in test_combinations
self.assertEqual(calendar.number_to_roman(4), "IV")
AssertionError: 'IIII' != 'IV'
- IIII
+ IV
======================================================================
FAIL: test_large_numbers (__main__.TestNumberToRoman.test_large_numbers)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/codeassist-demo/test_calendar.py", line 33, in test_large_numbers
self.assertEqual(calendar.number_to_roman(3999), "MMMCMXCIX")
AssertionError: 'MMMDCCCCLXXXXVIIII' != 'MMMCMXCIX'
- MMMDCCCCLXXXXVIIII
+ MMMCMXCIX
----------------------------------------------------------------------
Ran 4 tests in 0.004s
FAILED (failures=2, errors=1)
실패 사례는 다음과 같습니다.
-
abc
가 올바르게 처리되지 않았습니다.
- 4가
IV
대신 IIII
로 반환되었습니다.
- 3999가
MMMCMXCIX
대신 MMMDCCCCLXXXXVIIII
로 반환되었습니다.
각 테스트 함수에서 처음 발견된 오류로 인해 함수가 종료됩니다.
참고: 테스트 코드가 다르면 결과가 다를 수 있습니다.
목표를 확인하려면 내 진행 상황 확인하기를 클릭합니다.
convert 함수에 대한 단위 테스트 만들기
작업 6. 코드를 수정하여 가독성 개선
이 작업에서는 Gemini Code Assist를 사용하여 코드를 수정하고 가독성을 높입니다.
-
IDE 작업 표시줄에서 탐색기(
)를 클릭한 다음 calendar.py를 클릭합니다.
-
IDE 작업 표시줄에서 Gemini Code Assist(
)를 클릭한 후 다음 프롬프트를 입력합니다.
Make my code more readable and fix any errors
Gemini Code Assist
는 가독성이 향상된 코드를 제공하며, 문제를 해결할 가능성이 높습니다. 예를 들면 다음과 같습니다.
def number_to_roman(number):
"""Converts an integer to its Roman numeral equivalent.
Args:
number: An integer between 0 and 3999.
Returns:
A string representing the Roman numeral equivalent of the number.
Returns an empty string if the input is 0.
Raises TypeError if the input is not an integer or is out of range.
"""
try:
number = int(number)
except ValueError:
raise TypeError("Input must be an integer.")
if not 0 <= number <= 3999:
raise TypeError("Input must be between 0 and 3999.")
if number == 0:
return ""
roman_map = { 1000: 'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC',
50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}
result = ""
for value, numeral in roman_map.items():
while number >= value:
result += numeral
number -= value
return result
Gemini Code Assist
는 변경사항에 대해서도 설명합니다.
Key improvements:
1. Error Handling: Added TypeError for non-integer input and values outside the range 0-3999. This makes the function more robust.
2. Docstring: A clear docstring explains the function's purpose, arguments, return value, and error handling. This significantly improves readability and maintainability.
3. Efficiency and Correctness: Uses a roman_map dictionary and a more efficient algorithm to construct the Roman numeral. This handles subtractive notation (like "IV" for 4, "IX" for 9, etc.) correctly. The previous version had issues with these cases and was less efficient.
4. Zero Handling: Explicitly handles the case where the input number is 0, returning an empty string as expected.
5. Clarity: The code is now more concise and easier to understand. The logic is clearer and the variable names are more descriptive.
This revised version addresses the limitations and errors of the original implementation and adheres to best practices for Python code. It's more robust, readable, and efficient.
이 예시에서 Gemini Code Assist는 코드의 가독성을 높이고 원본 코드의 문제도 해결하는 알고리즘을 제공했습니다.
-
Gemini Code Assist
내부의 코드 창에서 열려 있는 파일과 비교(
)를 클릭하여 새 파일의 코드와 비교합니다.
-
변경사항을 수락하려면 수락을 클릭합니다. 업데이트된 코드가 수락되었습니다.
-
터미널에서 다음 명령어를 실행합니다.
cd ~/codeassist-demo
python3 test_calendar.py
테스트가 통과되지 못한 경우 테스트가 캘린더 모듈의 캐시된 버전을 사용하고 있지는 않은지 확인하기 위해 몇 번 실행해 봅니다.
Gemini가 로마 숫자 문제를 해결하지 못한 경우 일부 테스트가 실패합니다. 이러한 경우 테스트가 통과할 때까지 직접 코드를 수정하거나 calendar.py
를 알려진 작동 버전으로 바꿀 수 있습니다.
-
일부 테스트가 실패하면 다음 명령어를 실행하여 코드를 수정하고 단위 테스트를 다시 실행합니다.
cat > ~/codeassist-demo/calendar.py <<EOF
def number_to_roman(number):
"""Converts an integer to its Roman numeral equivalent.
Args:
number: An integer between 0 and 3999.
Returns:
A string representing the Roman numeral equivalent of the number.
Returns an empty string if the input is 0.
Raises TypeError if the input is not an integer or is out of range.
"""
try:
number = int(number)
except ValueError:
raise TypeError("Input must be an integer.")
if not 0 <= number <= 3999:
raise TypeError("Input must be between 0 and 3999.")
if number == 0:
return ""
roman_map = { 1000: 'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC',
50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}
result = ""
for value, numeral in roman_map.items():
while number >= value:
result += numeral
number -= value
return result
EOF
cd ~/codeassist-demo
python3 test_calendar.py
이제 테스트가 통과됩니다.
목표를 확인하려면 내 진행 상황 확인하기를 클릭합니다.
calendar.py를 업데이트하여 원본 코드의 문제 해결
작업 7. 영어가 모국어가 아닌 화자의 코드 가독성 개선
영어가 모국어가 아니며 번역 앱을 사용하는 화자의 경우 Gemini Code Assist
를 사용해서 다른 언어로 주석을 생성할 수 있습니다.
이 작업에서는 Gemini Code Assist
를 사용하여 다른 언어로 된 주석을 포함해 코드에 주석을 추가합니다.
-
IDE 작업 표시줄에서 탐색기(
)를 클릭한 다음 main.py를 클릭합니다.
-
IDE 작업 표시줄에서 Gemini Code Assist(
)를 클릭한 후 다음 프롬프트를 입력합니다.
Add comments to main.py
Gemini Code Assist
가 코드를 설명하는 데 도움이 되는 주석을 추가합니다.
import os # Import the os module for environment variables
from flask import Flask, render_template, request # Import Flask framework components
import calendar # Import the calendar module for Roman numeral conversion
# Create a Flask app instance
app = Flask(__name__)
# Define a route for the home page
@app.route("/", methods=["GET"])
def home_page():
# Render the index.html template
return render_template("index.html")
# Define a route for the conversion endpoint
@app.route("/convert", methods=["POST"])
def convert():
# Get the number from the form data
number = request.form["number"]
# Convert the number to Roman numerals using the calendar module
roman = calendar.number_to_roman(number)
# Render the convert.html template with the number and its Roman numeral equivalent
return render_template("convert.html", number=number, roman=roman)
# Run the Flask app if this script is executed directly
if __name__ == "__main__":
# Run the app in debug mode, listening on all interfaces (0.0.0.0)
# and using the port specified in the environment variable PORT or defaulting to 8080
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
하지만 영어가 모국어가 아니라면 어떻게 해야 할까요?
-
Gemini Code Assist
창에 다음 프롬프트를 입력합니다.
Add Spanish comments to main.py
Gemini Code Assist
는 코드 가독성을 높이기 위해 다양한 언어로 주석을 제공할 수 있습니다.
-
Gemini Code Assist
내부의 코드 창에서 열려 있는 파일과 비교(
)를 클릭하여 주석만 추가되었는지 확인합니다.
업데이트된 내용이 기존 코드와 비교됩니다.

-
변경사항을 거부하려면 거부를 클릭합니다.
작업 8. 앱의 디자인 개선
Gemini Code Assist는 앱의 디자인을 개선하는 데도 도움이 됩니다.
이 작업에서는 Gemini Code Assist
를 사용하여 앱의 시각 디자인을 개선합니다.
-
터미널에서 다음 명령어를 실행합니다.
cd ~/codeassist-demo
python3 main.py
포트 8080에서 수신 대기 중인 서비스가 이제 웹 미리보기로 제공됨을 나타내는 대화상자가 표시됩니다.
-
미리보기 열기를 클릭한 다음 열기를 클릭합니다.
Roman Numerals 웹 앱이 새 탭에서 열립니다.

-
IDE 작업 표시줄에서 탐색기(
)를 클릭한 다음 templates/index.html을 선택합니다.
이 앱의 HTML 템플릿은 매우 간단합니다.
-
IDE 작업 표시줄에서 Gemini Code Assist(
)를 클릭한 후 다음 프롬프트를 입력합니다.
Make this HTML template look better
Gemini Code Assist
가 앱의 시작 페이지를 시각적으로 개선하도록 코드를 업데이트합니다.
-
변경사항을 수락하려면 Gemini Code Assist 내부의 코드 창에서 열린 파일과 비교(
)를 클릭한 다음 수락을 클릭합니다.
-
Roman Numerals 앱 브라우저 탭으로 돌아가서 Refresh(새로고침)를 클릭합니다.
앱의 디자인이 개선되었을 것입니다. 이 예시에서는 대화상자가 페이지 중앙에 배치되고 색상이 추가되었습니다.

참고: Gemini Code Assist가 변경한 내용은 사용자마다 다를 수 있습니다.
-
IDE 작업 표시줄에서 탐색기(
)를 클릭한 다음 templates/convert.html을 클릭합니다.
-
IDE 작업 표시줄에서 Gemini Code Assist(
)를 클릭한 후 다음 프롬프트를 입력합니다.
Make the convert.html template look similar to the index.html template
Gemini Code Assist에서 색인 템플릿과 일치하도록 결과 템플릿을 업데이트합니다.
-
변경사항을 수락하려면 Gemini Code Assist 내부의 코드 창에서 열린 파일과 비교(
)를 클릭한 다음 수락을 클릭합니다.
-
Roman Numerals 앱 브라우저 탭으로 돌아가 45
를 입력한 다음 Enter를 클릭합니다.
새로운 결과 페이지는 색인 페이지의 스타일과 일치합니다.

목표를 확인하려면 내 진행 상황 확인하기를 클릭합니다.
Gemini Code Assist를 사용하여 앱의 시각 디자인 개선
실습 종료
실습을 완료하면 실습 종료를 클릭합니다. Qwiklabs에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
- 별표 1개 = 매우 불만족
- 별표 2개 = 불만족
- 별표 3개 = 중간
- 별표 4개 = 만족
- 별표 5개 = 매우 만족
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
수고하셨습니다
이 실습에서는 다음을 수행하는 방법을 배웠습니다.
- Cloud Workstations를 사용하여 클라우드 기반 앱 개발 환경을 만듭니다.
- Gemini Code Assist를 사용하여 코드를 설명합니다.
- Gemini Code Assist로 단위 테스트를 생성합니다.
- Gemini에 프롬프트를 입력하여 앱의 디자인을 개선합니다.
- Gemini Code Assist를 사용하여 코드 가독성을 개선합니다.
- Gemini Code Assist를 사용하여 영어나 다른 언어로 코드에 주석을 추가합니다.
다음 단계/자세히 알아보기
Copyright 2024 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.