본문 바로가기

API6

SQLAlchemy에서 automap_base 기능을 이용하여 데이터베이스 테이블을 간편히 불러오기 sqlalchemy를 이용하다보면, 데이터베이스의 테이블 구조를 python의 class 객체 형태로 매핑해준 후, 데이터에 접근하여 각종 작업을 수행해야 하는 경우가 많습니다. 예를 들면, 'User'라는 이름의 테이블을 불러오는 경우 다음과 같이 정의하곤 합니다.  class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) password = Column(String)  하지만, 여러 테이블을 다루다보면 이러한 작업이 다소 복잡하게 느껴집니다. sqlalchemy에서는 이러한 작업 없이도 테이블을 .. 2024. 9. 20.
Amazon EC2에서 PM2와 Nginx로 JS 풀스택(백엔드/프론트엔드) 앱 배포하기 - 02 이전 포스트에서 EC2 인스턴스를 생성하고, 프로젝트 파일을 가져온 뒤 필요 모듈을 설치하고 환경 변수 설정까지 마쳤습니다.이제, pm2를 이용하여 백엔드를 먼저 실행해봅시다. pm2는 process manager 2로 node.js 앱의 프로세스를 관리하고 성능을 최적화하는 데 널리 사용되는 모듈입니다. 자동 재시작, 로드 밸런싱, 로그 관리 등 다양한 기능을 제공하여 백엔드 배포에 적합합니다.  pm2 공식 웹사이트 4. 백엔드 실행  먼저 pm2를 설치합니다. sudo npm install -g pm2  그 다음, 백엔드 파일 server.js가 포함된 api 경로로 진입하여 server.js를 pm2로 실행합니다. # cd project-folder/apipm2 start server.js  추가.. 2024. 9. 20.
Amazon EC2에서 PM2와 Nginx로 JS 풀스택(백엔드&프론트엔드) 앱 배포하기 - 01 앱을 배포하는 방법은 다양하지만, 백엔드를 함께 운영하는 앱의 경우 배포 과정에서 생각할 것이 많기 때문에 앱의 특성을 고려하여 배포 방법이나 플랫폼을 선택해야 합니다.본 포스트에서 예제로 사용할 앱의 특징은 다음과 같습니다. 백엔드와 프론트엔드 앱은 모두 JS 기반이다.앱의 용량은 크지 않다.데모 웹사이트 제작 목적이기 때문에, 높은 트래픽을 고려하지 않아도 된다.약간의 과금은 허용할 수 있다. 이와 유사한 상황이라면, Amazon EC2를 이용한 배포가 좋은 선택이 될 수 있습니다. 처음에는 데모 웹사이트 제작이 목적이기 때문에 무료로 이용할 수 있는 Vercel을 사용하려 했습니다. 이전에 개인 웹사이트 배포 시 편리하게 이용했던 기억이 있었기 때문입니다.  하지만, Vercel은 백엔드를 포함한 .. 2024. 9. 19.
Stability AI API의 Inpaint 기능으로 그림의 일부 파트만 생성하기 뛰어난 이미지 생성 성능으로 잘 알려진 diffusion 기반 이미지 생성 모델 stable diffusion은 오픈 소스로 공개되어 있기도 하지만, 모델을 운용할 인프라가 부족하다면 Stability AI 사의 API 서비스로 이용할 수 있기도 합니다. Stability AI API 서비스 페이지 API 서비스는 비용이 부과되지만, 간편하게 앱을 구축할 수 있다는 장점이 있습니다. 비용은 크레딧(credit)을 충전하는 형태이며, 10$에 1,000 크레딧을 구매할 수 있습니다. Pricing 메뉴에서 task 별 소모되는 크레딧을 볼 수 있는데, 업스케일이나 영상 생성 같은 무거운 작업이 아니라면 한 번에 4-8 크레딧 정도가 소모되는 것 같습니다. 1,000 크레딧 정도면 개인 프로젝트용으로는 충분.. 2024. 9. 9.
LangServe를 이용해 LangChain 앱을 API로 이용하기 LangChain 으로 LLM 기반 Chain 객체를 만들면, 이를 API로 구성하여 앱에서 이용하거나 원격으로 접근하여 공용으로 사용하게 할 수 있습니다. Python 기반 백엔드를 API로 구성하려면 Flask, FastAPI로 직접 구성할 수 있겠지만 LangChain에서는 이미 LangServe라고 하여 간편히 배포할 수 있는 도구를 제공합니다. LangServe 문서 LangServe는 이미 FastAPI 및 uvicorn을 기반으로 만들어져 있으므로, FastAPI에 익숙하다면 유사한 인터페이스로 이용할 수 있습니다. 본 예제에서는 OpenAI 언어 모델을 LangChain 객체로 변환한 간단한 구조의 API를 구성해볼 것입니다. 다음과 같이 langserve_server.py 라는 이름의 파.. 2024. 9. 7.
FastAPI로 복수 파일 업로드 API 구현하기 FastAPI에서는 File, UploadFile 객체를 이용해 간편히 프론트엔드에서 업로드한 파일을 처리할 수 있습니다.다음 예제 코드는 사용자가 업로드한 파일을 특정 경로에 저장합니다. 전송받는 파일 타입을 List 형식으로 설정하여, 여러 파일을 업로드할 수 있도록 합니다.   from fastapi import FastAPI, File, UploadFile, HTTPExceptionfrom typing import Listfrom fastapi.responses import JSONResponseimport osapp = FastAPI()UPLOAD_DIR = "uploads"os.makedirs(UPLOAD_DIR, exist_ok=True)@app.post("/api/upload/")async.. 2024. 9. 6.