IT&컴퓨터/IT 인터넷

Free Python, Web, 생성형 AI 서버 구축 (free API 서버 구축, github 연동)

누한 2024. 1. 23. 02:40
반응형

안녕하세요

 

언제부터인가 급격하게 생성형 AI에 대한 관심은 크게 증가했습니다.

그리고 쉽게 테스트하기 위한 다양한 서비스들이 많이 제공되고 있습니다.

 

하지만, 학생 또는 다양한 비즈니스 참여자(개발자 및 기획자) 들은 간단한 서비스 구현의 테스트를 위해 많은 고민과 함께 비용에 대해 고민하게 됩니다.

현재는 이런 부분을 지원하는 다양한 무료 서비스들이 존재합니다.

 

오늘 소개할 내용은 이런 무료 서비스를 통한 서비스 테스트 방법에 대한 소개 입니다.

 



오늘은 OpenAI의 ChatGPT 서비스를 API 형태로 제공하는 어플리케이션을 작성합니다.

 

API 형태로 제공하기 위해서 Python FastAPI를 이용하여 API 서버를 구축하게 됩니다.

작성된 프로그램은 Github와 연동되며, "무료 서버" 에서 구동됩니다.

 

필요한 지식은 다음과 같습니다.

  • Python FastAPI 이해
  • Github 이해
  • OpenAI 서비스 이해

 

 

전체 과정은 다음의 단계를 통해서 진행됩니다.

 

1. OpenAI ChatGPT 호출 서비스 작성

2. FastAPI 를 이용한 API 서비스 작성(ChatGPT 서비스 API 제공)

3. Github 등록

4. Server 생성 (Python free server) 

5. 테스트

 

 


1. OpenAI ChatGPT 호출 서비스 작성

OpenAI 의 서비스를 호출하기 위해서는 사전에 OpenAI 에 계정 등록과 함께 API 호출을위한 Key를 발급받아야 합니다.

이 부분은 여기서 다루지는 않겠습니다. 

 

Python 개발 환경을 구성합니다. viturlenv 환경을 구성하여 로컬에서 작성하는 것을 추천합니다.

일반적인 Pycharm, VS code 등의 다양한 툴에서 개발 환경을 제공하므로, 개발 환경 구성을 잘 모르시는 분은 먼저 Python 개발 환경 구성을 찾아 보시기 바랍니다.

 

 

python 개발 환경 구성이 됐다면 OpenAI 서비스 호출을 위한 라이브러리를 설치합니다.

pip install openai

 

.env 파일을 생성하여 발급받은 OpenAI 서비스 키를 등록합니다.

이 파일은 외부에 유출되는 경우 문제가 생길수 있습니다. 관리에 주의를 기울여야 합니다.

 

예를 들어 github 에 개발 내용을 관리할때도 Key 가 들어 있는 .env 파일은 배포시 문제가 발생합니다.

(저는 배포를 잘못했더니, 키가 만료됐다는 안내를 받아서 다시 키를 발급해야 했습니다. 번거롭습니다. 주의하세요)

 

 

[ .env ]

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxx

 

 

[ getChatGPT.py ]

간단하게 chatgpt 서비스 호출을 위한 샘플 코드입니다. 자신의 요구사항에 맞도록 수정하세요

import openai 
from dotenv import load_dotenv 

load_dotenv()
client = openai.OpenAI()

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content" : prompt}]
    response = openai.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0,
    )
    return response.choices[0].message.content.strip()

 

 

 

2. FastAPI 를 이용한 API 서비스 작성(ChatGPT 서비스 API 제공)

이전 단계에서 작성한 get_completion 을 외부 API로 제공하기 위한 코드를 작성합니다.

API 제공을 위한 방법은 다양하게 있습니다. 

 

  1. Flask를 사용한 API: Flask는 Python에서 가장 인기 있는 경량 웹 프레임워크 중 하나입니다. 간단한 RESTful API부터 복잡한 웹 애플리케이션까지 다양한 용도로 사용됩니다.
  2. Django REST Framework를 사용한 API: Django는 Python에서 가장 유명한 웹 프레임워크 중 하나이며, Django REST Framework는 Django 위에 구축된 강력한 도구로, 복잡한 API를 쉽게 구축할 수 있게 해줍니다.
  3. FastAPI를 사용한 API: FastAPI는 최근 인기를 얻고 있는 현대적인, 고성능의, Python 3.6+ 기반의 웹 프레임워크입니다. 비동기 프로그래밍을 지원하며, 특히 API 개발에 최적화되어 있습니다.
  4. Tornado를 사용한 API: Tornado는 넌블로킹 네트워크 I/O를 지원하여 수천 명의 동시 사용자를 처리할 수 있는 웹 프레임워크 및 비동기 네트워킹 라이브러리입니다.
  5. Bottle을 사용한 API: Bottle은 Flask와 유사한 경량 웹 프레임워크입니다. 작은 웹 애플리케이션을 빠르게 개발하기에 적합합니다.
  6. Falcon을 사용한 API: Falcon은 고성능 API 개발을 위해 설계된 또 다른 Python 프레임워크입니다. 대규모 애플리케이션과 마이크로서비스에 적합합니다.

 

오늘 이곳에서 사용할 예제는 FastAPI를 이용합니다.

 

python 라이브러리 설치

pip install fastapi uvicorn

 

 

[app.py]

FastAPI 를 이용한 API 서비스 구현, 테스트를 위한 post API와 get API 를 추가했습니다.

from fastapi import FastAPI 
from getChatGPT import chat_completion 

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}


@app.post("/getchatgpt")
def process_text(text: str):
    result = chat_completion(text)
    return {"result": result}

 

 

[app.py 실행]

uvicorn app:app - reload

 

 

위의 명령어를 실행하면 API를 위한 서버가 구동되며 로그에 접속 URL이 표시됩니다.

일반적인 기본설정이라면 아래와 같은 URL이 표시됩니다.
http://127.0.0.1:8000

 

테스트를 위한 UI도 함께 제공됩니다. 

당신이 별다른 코드를 작성하지 않아도 FastAPI를 이용해서 정의한 내용이 /docs 화면에 표시됩니다.

http://127.0.0.1:8000/docs 

 

 

이제 당신은 /getchatgpt  API를 이용한 chatgpt 를 호출하는 API 를 작성했습니다.

 

너무나도 간단히 작성이 됐고, 당신의 상상력과 필요에 따라 자유롭게 확장할 수 있습니다.

 

 

3. Github 등록

당신이 작성한 모든 코드를 github에 등록하세요.

Pycharm 또는 VS Code를 사용중이라면 개발환경에서 Github와 연계하는 방식을 참조하세요. 

여기서는 이에 대해서 자세히 다루지 않겠습니다.

 

만약 당신이 Github와 개발툴의 연동이 어렵다면 개발 툴에서 작성한 모든 코드를 Github에 접속해서 직접 업로드 하는 방법도 있습니다. (.env 제외) 

하지만 이런 방법은 굳이 추천하지는 않습니다.

 

처음이 어렵지 어렵더라도 github 연동 설정을 진행하세요.

 

 

 

4. Server 생성 (Python free server) 

외부에서 제공되는 무료 서버는 다양하게 있습니다. 

아래 목록 외에도 다양한 서비스가 있습니다. 예를 들어 Azure, GCP 등과 같은 서비스들도 부분적 무료 티어를 제공하고 있습니다.

 

저는 이곳에서 Render 를 이용합니다.

  • PythonAnywhere: Python 전용 호스팅 서비스로, 웹 앱, 스크립트, Jupyter 노트북 등을 호스트할 수 있습니다. 초보자에게 친숙하며 무료 계정 옵션도 제공합니다.
  • Glitch: 웹 애플리케이션을 만들고 호스팅할 수 있는 플랫폼입니다. Python을 비롯한 여러 언어를 지원하며, 특히 초보자와 학생에게 친숙한 환경을 제공합니다.
  • Vercel: 주로 정적 사이트와 Jamstack 애플리케이션을 위한 플랫폼이지만, Python을 포함한 서버리스 함수를 지원합니다. GitHub와의 강력한 통합 기능을 제공합니다.
  • Netlify: 정적 사이트 및 서버리스 백엔드를 지원하며, GitHub와 연동하여 자동 배포를 설정할 수 있습니다. Python을 사용한 서버리스 함수를 구동할 수 있습니다.
  • Repl.it: 온라인 IDE로, 여러 프로그래밍 언어를 지원합니다. Python을 사용하여 웹 애플리케이션을 개발하고 바로 호스팅할 수 있습니다.
  • Render: Render는 다양한 개발 스택을 지원하는 클라우드 호스팅 서비스입니다. Python 애플리케이션을 포함하여 웹 애플리케이션, 백엔드 서비스 등을 지원합니다.

 

 

우선  render.com 에 회원 가입하세요. 이 부분은 별도의 설명을 하지 않겠습니다.

( 이 사이트는 저와 아무런 상관이 없는 사이트 입니다. 개발 코드의 배포의 예시로 임의로 선택했습니다.)

 

https://render.com/

 

Cloud Application Hosting for Developers | Render

Render is a unified cloud to build and run all your apps and websites with free TLS certificates, global CDN, private networks and auto deploys from Git.

render.com

 

 

회원 가입을 했다면 이제 서버를 배포하는 작업을 하면 됩니다.

서버 배포는 github 를 연동해서 진행하게 됩니다.

 

* 우선 배포 이전에 당신이 개발한 코드에 requirements.txt 파일이 정상적으로 정의 됐는지 확인하세요.

Python 프로그램 실행시 필요한 라이브러리가 잘 정의되어 있어야 합니다.

 

[ requirements.txt ]

openai
python-dotenv
fastapi
uvicorn

 

 

 

 

이제 본격적으로 서버 등록 과정을 진행합니다.

 

1. render.com 사이트 로그인 후 상단의 New 버튼을 선택합니다.

2. Web Service 를 선택합니다.

 

 

3. 서버 구성을 위해 "Build and deploy from a Git repository: 를 선택 합니다.

 

 

 

4. 연동되는 Git repository 를 선택합니다.

 

 

5. Name 을 입력합니다. 당신이 표시되기 원하는 이름을 입력하세요

6. Region 을 선택합니다. 서버의 위치 입니다.

7. Branch 는 master를 선택합니다 필요시 변경할 수 있습니다.

 

 

 

 

8. Runtime 을 python3 로 선택합니다.

 

 

 

9 Instance Type을 Free로 선택합니다.

 

 

 

10. Create Web Service 를 선택하여 완료 합니다.

 

이제 모든 배포 과정이 완료 됐습니다.

서버는 당신이 등록한 정보를 토대로 필요 라이브러리를 설치하고 소스를 배포하고 구동시키게 됩니다.

 

 

 

5. 테스트

배포된 서비스의 주소는 일정한 규칙으로 제공됩니다.  당신이 입력한 이름으로 서비스가 제공됩니다.

 

https://api-name.onrender.com/

 

 

모든 준비는 끝났습니다.

이제 당신이 로컬에서 테스트한 방식과 동일하게 테스트를 진행해 보세요.

 

실제 과정은 길게 설명이 됐지만 막상하게되면 작성하는 코드의 양도 얼마 되지 않으며, 기본적인 python / openai 에 대한 지식이 있다면 더욱 쉽게 이해하실 수 있을거라 생각됩니다.

 

 

제가 필요해서 찾은 방식이지만 누군가에는 도움이 되었으면 합니다.

 

 

반응형