Flutter AI Chat Example Step 1: HTTP REST API, JSON, Gemini API, Isar DB

구글의 제미나이를 이용한 AI 채팅 앱을 만들어 보자.

주요 기능으로는 HTTP REST API, Gemini API, Isar Database, JSON 을 주로 사용한다.

Flutter Plugin

  • isar
  • isar_flutter_libs
  • path_provider
  • google_generative_ai
  • get_it
  • build_runner
  • isar_generator

HTTP API의 종류

  • REST API : HTTP의 GET, POST, PUT, DELETE 등의 메서드를 사용해서 통신하는 가장 대중적인 API입니다.
  • GraphQL : Graph 구조를 띄고 있으며 클라이언트에서 직접 필요한 데이터를 명시할 수 있는 형태이 통신 방식입니다.
  • gRPC : HTTP2를 사용하는 통신 방식입니다. Protocol Buffers라는 방식을 사용하며 레이턴시를 최소화할 목적으로 설계되었습니다.

HTTP 요청 메서드

  • GET 메서드는 서버로부터 데이터를 가져옵니다. 필요시 쿼리 매개변수를 사용합니다.
  • POST 메서드는 데이터를 서버에 저장합니다. 생성할 데이터에 대한 내용을 HTML 바디에 입력합니다.
  • PUT 메서드는 데이터를 업데이트합니다. 필요시 쿼리 매개변수와 HTML 바디를 사용할 수 있습니다.
  • DELETE 메서드는 데이터를 삭제합니다. 필요시 쿼리 매개변수와 HTML 바디를 사용할 수 있습니다.

REST API

REST(Representational State Transfer) API는 REST 기준을 따르는 HTTP API입니다. HTTP API이므로 GET, POST, PUT, DELETE 메서드를 제공합니다. HTTP와 다른 점은 REST는 균일한 인터페이스, 무상태, 계층화, 캐시 원칙을 준수하는 HTTP API입니다. 이를 RESTful API라고 합니다.

플러터 프레임워크에서 HTTP 요청을 하는 데 일반적으로 http 또는 dio 플러그인을 사용합니다.

dio 플러그인을 사용한 HTTP 요청

import 'package:dio/dio.dart';

void main() async {
    // GET 요청
    final getResp = Dio().get('http://test.codefactory.ai');
    // POST 요청
    final postResp = Dio().post('http://test.codefactory.ai');
    // PUT 요청
    final putResp = Dio().put('http://test.codefactory.ai');
    // DELETE 요청
    final deleteResp = Dio().delete('http://test.codefactory.ai');
}

JSON

HTTP 요청에서 body 사용 구조는 XML 또는 JSON을 사용하는데 요즘은 일반적으로 JSON을 사용합니다. JSON은 인간이 읽을 수 있는 텍스트를 사용해 키-값 쌍으로 이루어진 데이터 객체를 전달하는 개방형 표준 포맷입니다.

JSON 데이터 예시

{
    'name'': 'My Name',
    'languages': ['javascript', 'Dart'],
    'age': 3
}

Gemini API

대규모 언어 모델을 활용해 문맥을 이해하고 더 자연스럽고 유연한 대화를 생성할 수 있는 Gemini API를 사용합니다.

제미나이(Gemini)는 알파고를 개발한 딥마인드가 개발한 AI입니다. 멀티모달 이해 능력, 높은 추론 능력과 정확성, 최적화된 언어 모델, 안전성과 윤리적 사용, 사용자 친화적 인터페이스 및 확장성이 특징입니다.

제미나이는 아주 단순한 REST API 형식으로 AI 모델에 응답 생성을 요청할 수 있는 기능을 제공해 줍니다. 제미나이 API 스펙은 일반적인 구조라 다른 AI 모델의 API와 크게 다르지 않습니다.

  • 요청 URL : https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
  • Query : key=$API_KEY
  • Method : POST
  • Data : { “contents”: [ { “parts”: [{ “text” : “뭐먹지?” }], “role”: “user” }, ], }

Isar Database

Isar 데이터베이스는 플러터에서 사용할 수 있는 고성능 NoSQL 데이터베이스입니다.

SQL 데이터베이스는 항상 테이블의 구조가 무결성을 유지해야 하는 반면 NoSQL은 구조가 강제되지 않습니다. 보통 서버 데이터베이스는 무결성이 매우 중요해 SQL 데이터베이스를 많이 사용하는 반면 프론트엔드 데이터베이스는 퍼포먼스와 사용성이 중요하고 구조가 단순하기 때문에 NoSQL 데이터베이스를 사용하는 경우가 많습니다.

컬렉션

Isar 데이터베이스는 데이터를 컬렉션(collection) 단위로 나눕니다. 컬렉션을 정의하는 방법은 간단합니다. 클래스를 선언하고 클래스에 @coleection 어노테이트(Anotate) 해주면 됩니다.

import 'package:isar/isar.dart'

part 'message.model.g.dart'

@coleection
class MessageModel {
    Id id = Isar.autoIncrement;
    bool isMine;
    String message;

    MessageModel({
        required isMine;
        required message;
    )};
}

위와 같이 컬렉션을 정의하고 나면 꼭 빌드 러너 (build_runner)를 실행 해줘야 합니다. Build Runner를 실행하면 @collection 어노테이트된 모든 클래스들의 Isar 보조 파일을 생성합니다. 보조 파일들은 클래스가 존재하는 파일 이름에 .g.dart 가 추가된 형태로 생성되며 컬레션에 실행할 수 있는 기능을 정의하고 있습니다. 빌드 러너는 컬렉션에 변경이 있을 때마다 실행해줘야 합니다.

dart run build_runner build

여기까지 필요한 개념 및 내용들에 대하여 기록해 보았습니다. 다음(Step 2)에는 AI Chat Flutter APP 예쩨 코드를 기록해 보도록 합니다.


Referrence

https://heavenly.tistory.com/entry/플러터Flutter-Android-Gradle-8-버전의-요구사항인-namespace를-자동으로-추가하는-방법

“Flutter AI Chat Example Step 1: HTTP REST API, JSON, Gemini API, Isar DB”에 대한 1개의 생각

댓글 남기기