목차
이번에는 지난번 OpenAI API와 Gemini API의 차이점에 이어서 실제로 API를 이용하여 Gemini AI 모델이 사용자의 꿈을 해석해 주는 웹앱을 직접 만들어보는 과정을 코드와 함께 소개해 볼게요.

Gemini API를 사용한 꿈 해석 프로젝트
이미 API에 대해 개략적인 부분은 이전 글에서 정리했어요. 그럼에도 다시 리마인드 개념으로 아래와 같이 간략하게 정리 볼게요.
Gemini API 개요: Google에서 제공하는 대규모 언어 모델(LLM) 기반의 생성형 AI API입니다. 텍스트 생성, 요약, 번역, 질의응답 등 다양한 자연어 처리(NLP) 작업에 활용할 수 있습니다. 텍스트뿐만 아니라 이미지, 오디오 등 다양한 형태의 데이터를 이해하고 생성하는 멀티모달 능력을 갖추고 있습니다.
무료 등급(Free Tier) 정책: Gemini API는 기간 제한이 없는 무료 등급을 제공합니다. 단, 하루 요청 수(RPD), 분당 요청 수(RPM), 분당 토큰 수(TPM) 등 사용량 제한이 있으니, 개발 및 테스트 단계에서는 이 제한을 인지하고 사용하는 것이 좋습니다.
프로젝트 구조
꿈 해석 서비스의 전체적인 아키텍처는 다음과 같아요.
- Frontend: 사용자가 꿈 내용을 입력하고 해석 결과를 볼 수 있는 웹 폼 (
input.html
,result.html
) - Backend: Flask 서버에서 사용자 요청을 받아 Gemini API로 해석을 요청하고, 그 결과를 웹으로 반환합니다.
- AI Engine: Gemini 모델
프로젝트 환경
- Python 3.x: (설치되어 있지 않다면 Python 공식 웹사이트에서 다운로드하여 설치해 주세요.)
- Flask, python-dotenv, markdown, google-genai 라이브러리: 아래 명령어로 설치합니다. (2025년 4월부터
google-generativeai
가google-genai
로 변경되었습니다.) - Google Gemini API Key: 환경 설정에 세팅
pip install flask python-dotenv markdown google-genai
python-dotenv 라이브러리를 사용하는 이유는 API_KEY가 하드 코딩하게 되면 보안에 취약하므로, 시스템 환경 설정 내에 API_KEY를 세팅하기 위해서예요.
YOUR_GOOGLE_GEMINI_API_KEY
부분에 환경 설정에서 읽어오는 키를 넣어주세요.
GEMINI_API_KEY="YOUR_GOOGLE_GEMINI_API_KEY"
핵심 코드 분석
이제 Flask 웹 애플리케이션의 핵심 로직을 살펴보겠습니다.
....
load_dotenv()
# Gemini 클라이언트 초기화
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY")) # 환경 변수에서 Gemini API 키 로드
# 임시 채팅 내용 저장소
chat_sessions = {}
# 루트 경로 (꿈 입력 페이지)
@app.route('/')
def analysis_input():
return render_template('input.html')
dotenv
라이브러리를 사용하여 GEMINI_API_KEY
를 안전하게 불러오고, 이 키로 Gemini 클라이언트(genai.Client
)를 초기화합니다.
세션 관리 (chat_sessions
): 현재는 간단한 파이썬 딕셔너리로 세션별 채팅 내용을 임시 저장합니다. 실제 서비스에서는 기억해야할 정보는 데이터베이스나 Redis 같은 영구 저장소를 사용하는 것이 좋습니다.
사용자 입력 처리 및 Gemini API 호출
@app.route('/dream', methods=['POST'])
def analyze():
.....
prompt = f"""당신은 숙련된 꿈 해석 전문가입니다.
사용자가 입력한 꿈 내용을 분석하여 다음 항목을 포함한 논리적이고 자세한 해석을 제공해 주세요.
▣ 꿈이 사용자에게 전달하려는 잠재적인 메시지
입력된 꿈 내용: {dream_text}
"""
# Gemini API 호출
response = client.models.generate_content(
model='gemini-2.0-flash',
contents=prompt,
config=types.GenerateContentConfig(
max_output_tokens=1200, # 최대 출력 토큰 수 제한
)
)
interpretation = response.text
# Gemini의 응답을 마크다운으로 변환하여 HTML에 표시
formatted_result = markdown(interpretation)
return render_template('result.html', dream_text=dream_text, interpretation=formatted_result)
- 프롬프트 엔지니어링: Gemini API의 응답 품질을 결정하는 가장 중요한 부분입니다.
prompt
변수에 “당신은 숙련된 꿈 해석 전문가입니다.”와 같이 명확한 역할을 부여하고, “꿈이 사용자에게 전달하려는 잠재적인 메시지”처럼 구체적인 답변 형식을 요청합니다. 이렇게 하면 AI가 우리의 의도에 맞게 훨씬 더 정확하고 유용한 해석을 제공합니다. - Gemini API 호출:
client.models.generate_content()
함수를 사용하여 Gemini API에 요청을 보냅니다.model
: 사용할 Gemini 모델을 지정합니다.gemini-1.5-flash
는 빠르고 효율적인 모델로, 비용 효율적입니다.contents
: AI에게 보낼 프롬프트입니다.config
:max_output_tokens
로 AI가 생성할 최대 토큰(단어) 수를 제한하고,temperature
로 AI의 창의성을 조절할 수 있습니다.
- 마크다운 처리: Gemini의 응답이 마크다운 형식일 수 있으므로,
markdown
라이브러리를 사용하여 HTML 형식으로 변환합니다. 이렇게 하면 웹 페이지에 깔끔하게 표시됩니다.
입력 템플릿(input.html)도 간단하게 구성해 볼게요.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>AI 꿈해석</title>
</head>
<body>
<form action="/input_text" method="post">
<label for="dream_text">당신의 꿈을 입력하세요:</label><br>
<textarea id="dream_text" name="dream_text" rows="10" cols="50"></textarea><br>
<input type="submit" value="꿈 해석하기">
</form>
</body>
</html>
실행은 터미널에서 다음 명령어를 입력합니다.
python [app이름].py
터미널에서 오류 없이 실행이 되면 “http://127.0.0.1:포트 번호”와 같은 서버 주소를 안내할 거예요. 이 주소를 복사하여 브라우저를 열고 주소창에 입력하여 접속하면 됩니다.
여기까지 기본적인 AI 꿈해석 프로그램을 작성해 봤어요. 생각보다 간단하네! 하고 생각될 거예요. 물론, 실제 서비스를 구축하려면 디자인이나 UX 구성도 고려해야 하므로 간단하지 않은 부분도 많지만, Gemini API를 직접 구현해 보는 연습 과정으로는 충분하다 생각합니다.
나중에 시간이 된다면 Gemini API에서 지원하는 멀티모달 기능을 추가해 볼게요. 위 코드는 텍스트 입력만을 고려했지만, 이미지나 음성까지 다양한 입력과 출력이 가능하도록 추가할 예정입니다.
마지막으로, 꿈해석 서비스 데모는 아래 URL을 참고해 보시면 됩니다.
- AI가 꿈을 해석해 준다면? Gemini API로 만드는 꿈해석 웹앱 #2
- 온디바이스 AI와 클라우드 컴퓨팅 한계 – 실시간 인공지능 트렌드 #1
- Llamafile vs. Ollama – LLM 실행과 모델 배포를 위한 최적의 선택 #1
- Google AI Gemini API 무료 사용 방법과 OpenAI와 차이점 #1
- 머신러닝과 딥러닝 차이, 파이썬 인공지능 기초 개념 #1