요즘 가장 핫한 구글 제미나이 AI 모델, Dart 언어와 함께라면 더 이상 어렵지 않습니다. 내 프로젝트에 인공지능을 더하는 가장 빠른 방법을 알려드릴게요.
안녕하세요, 똑똑한 개발자 여러분! 요즘 어딜 가나 AI 이야기뿐이죠. 저도 처음에는 '저건 나와는 먼 세상 이야기'라고 생각했어요. 복잡한 파이썬 코드, 어려운 머신러닝 이론들을 떠올리니 머리가 지끈거렸거든요. 하지만 구글이 Dart 개발자들을 위해 내놓은 google_generative_ai 패키지를 만나고 나서 생각이 180도 바뀌었습니다. "어? 이렇게 쉽다고?" 소리가 절로 나왔다니까요.
오늘은 저처럼 AI는 멀게만 느껴졌던 분들을 위해, 우리가 사랑하는 Dart 언어로 구글의 강력한 제미나이(Gemini) 모델을 활용하는 방법을 아주 쉽고 친절하게 알려드리려고 합니다. Flutter 앱이든, 순수 Dart 서버 프로젝트든 상관없어요. 이 글을 끝까지 따라오시면 여러분의 프로젝트에 똑똑한 AI 비서 하나를 뚝딱하고 더할 수 있게 될 겁니다. 커피 한 잔 준비하시고, 저와 함께 새로운 세계로 떠나볼까요?
첫걸음: 프로젝트 설정과 API 키 발급
모든 위대한 여정은 첫걸음부터 시작되죠. 우리의 첫걸음은 바로 개발 환경을 설정하는 것입니다. 다행히도 이 과정은 정말 간단해요. 먼저, 여러분의 pubspec.yaml 파일에 제미나이 패키지를 추가해주세요. 의존성(dependencies) 부분에 아래 한 줄을 추가하고, 터미널에서 flutter pub get 또는 dart pub get 명령어를 실행하면 끝입니다.
dependencies:
google_generative_ai: ^0.4.0 # 최신 버전은 pub.dev에서 확인하세요!
다음으로 가장 중요한 준비물, 바로 'API 키'입니다. 제미나이 모델과 우리 프로젝트가 서로 대화하려면 이 API 키가 반드시 필요해요. 구글 AI 스튜디오(Google AI Studio) 웹사이트에 방문해서 간단한 절차를 거치면 무료로 발급받을 수 있습니다. 마치 우리 집 현관문 비밀번호처럼, 이 API 키는 절대로 외부에 노출되면 안 돼요. 코드에 직접 넣거나, GitHub 같은 곳에 올리는 건 정말 위험한 행동입니다!
그럼 어떻게 안전하게 사용하냐고요? 바로 '환경 변수'를 이용하는 겁니다. 프로젝트를 실행할 때 flutter run --dart-define=API_KEY=여러분이_발급받은_API_키 와 같은 형태로 키를 전달하는 거죠. 이렇게 하면 키가 코드에 남지 않아 훨씬 안전하게 관리할 수 있습니다. 이 방법, 꼭 기억해두세요!
AI와 나누는 첫 대화: 텍스트 생성하기
자, 이제 모든 준비가 끝났습니다. 드디어 제미나이와 첫 대화를 나눌 시간이에요! 가장 기본적인 기능은 역시 텍스트를 기반으로 질문하고 답변을 받는 것이겠죠. google_generative_ai 패키지는 이 과정을 놀랍도록 간단하게 만들어줍니다.
먼저, 우리가 발급받고 안전하게 설정한 API 키와 사용하고 싶은 모델(예: gemini-1.5-flash)을 지정해서 GenerativeModel 객체를 만들어야 합니다. 이 객체가 바로 제미나이와 소통하는 창구 역할을 할 거예요. 그리고 generateContent 라는 메서드를 사용해서 우리가 궁금한 것을 물어보면 됩니다. 정말 간단하죠?
아래 코드는 "Dart 언어가 왜 좋은지 세 가지만 알려줘" 라고 제미나이에게 물어보는 간단한 예제입니다.
import 'dart:io';
import 'package:google_generative_ai/google_generative_ai.dart';
Future\<void> main() async {
// 1. 안전하게 환경 변수에서 API 키 가져오기
final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('API_KEY 환경 변수를 설정해주세요.');
exit(1);
}
// 2. 사용할 제미나이 모델 초기화
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
// 3. 제미나이에게 보낼 질문(프롬프트) 준비
final prompt = 'Dart 언어가 왜 좋은지 세 가지만 알려줘.';
final content = [Content.text(prompt)];
// 4. 질문을 보내고 답변 기다리기
final response = await model.generateContent(content);
// 5. 답변 출력하기
print(response.text);
}
이 코드를 실행하면, 잠시 후 제미나이가 Dart의 장점들을 멋지게 정리해서 보여줄 겁니다. 마치 정말 똑똑한 개발 동료에게 물어본 것 같지 않나요? response.text 부분에 바로 AI가 생성한 답변이 담겨있습니다. 이 답변을 여러분의 앱 화면에 보여주거나, 다른 로직에 활용하면 되는 거죠. 첫 대화, 성공입니다!

한 단계 더: 연속적인 대화(채팅) 구현하기
단순히 한 번 묻고 답하는 것을 넘어, 이전 대화 내용을 기억하면서 계속 이야기를 이어나가고 싶을 때도 있겠죠? 마치 우리가 친구와 카톡을 하듯이 말이에요. google_generative_ai 패키지는 이런 '채팅' 기능도 아주 쉽게 구현할 수 있도록 도와줍니다.
startChat() 메서드를 사용하면, 이전 대화 기록(history)을 관리해주는 ChatSession 객체를 얻을 수 있습니다. 이 객체의 sendMessage() 메서드를 사용해서 메시지를 보내면, 제미나이는 이전 대화의 맥락을 모두 기억하고 그에 맞는 답변을 해줍니다. 예를 들어, 첫 질문에서 "제주도 여행 계획을 짜줘" 라고 한 뒤, 다음 질문에서 "거기 맛집도 몇 군데 추천해줄래?" 라고만 해도 제미나이가 '거기'가 '제주도'라는 것을 알아서 파악하는 거죠.
// ... (이전 코드와 동일)
// 채팅 세션 시작
final chat = model.startChat();
// 첫 번째 메시지 보내기
var response = await chat.sendMessage(Content.text('안녕! 간단한 자기소개 부탁해.'));
print('제미나이: ${response.text}');
// 두 번째 메시지 보내기 (이전 대화 기억)
response = await chat.sendMessage(Content.text('너는 어떤 일을 할 수 있니?'));
print('제미나이: ${response.text}');
// 대화 기록 확인
for (var content in chat.history) {
// role: 'user' 또는 'model'
print('${content.role}: ${content.parts.whereType\<TextPart>().map((e) => e.text).join('')}');
}
이처럼 startChat을 활용하면, 사용자와 계속해서 상호작용하는 AI 챗봇이나 상담 어시스턴트 같은 기능을 정말 손쉽게 만들 수 있습니다. 사용자가 이전에 했던 말을 기억하고 더 개인화된 경험을 제공할 수 있으니, 앱의 만족도가 훨씬 높아지겠죠?
마치며: AI와 함께, 개발의 새로운 즐거움
오늘 우리는 Dart와 google_generative_ai 패키지를 이용해 구글 제미나이라는 강력한 AI를 우리 프로젝트에 통합하는 방법을 알아봤습니다. 생각보다 훨씬 간단하고 직관적이지 않았나요? 이제 AI는 더 이상 소수의 전문가들만 다루는 어려운 기술이 아닙니다. 우리 같은 일반 개발자들이 자신의 아이디어를 실현하는 데 사용할 수 있는 멋진 '도구'가 된 셈이죠.
이 글에서 다룬 내용은 정말 기본적인 부분에 불과합니다. 제미나이는 텍스트뿐만 아니라 이미지를 이해하고 분석하는 '멀티모달' 기능도 가지고 있어요. 사용자가 올린 사진을 설명해주거나, 사진 속 음식의 레시피를 알려주는 기능도 만들 수 있다는 뜻이죠. 가능성은 정말 무궁무진합니다. 오늘 배운 내용을 바탕으로 여러분만의 창의적인 아이디어를 더해, 세상에 없던 멋진 기능을 만들어보시길 진심으로 응원하겠습니다. AI와 함께하는 개발의 여정, 그 새로운 즐거움을 마음껏 누려보세요









