프로젝트_리뷰

프로젝트 - 비동기처리와 멀티스레드(OpenAI Assistant API)

javaboiii 2024. 11. 11. 14:24

본인은 OpenAI Assistant API를 이용한 챗봇 구현에

비동기 처리를 이용함

 

동기처리를 사용했을 때 문제점은

서버가 하나의 작업을 처리하는 동안
다른작업을 처리하지 못하는 상황(서버 블로킹)이

발생할 수 있음

ex) 사용자가 질문을 하면 응답이 올 때 까지 아무것도 못하고 기다려야됨

 

또한

 

본인이 구현한 로직에서는

챗봇과의 대화는 따로 저장하지 않기 때문에

대화 내용이 사라지거나 누락될 수 있는 위험이 있음

 

따라서 비동기 방식을 이용함

 

챗봇과의 대화 요청이 오면 서버로 비동기 요청을 함

서버에선 API요청 -> openAI 서버 내에서 생성된 스레드 id를 응답 받음

-> 해당 스레드에 메세지를 삽입

-> 해당 스레드를 실행

-> 실행된 스레드 내의 assistant 응답을 가져옴

 

위 로직이 하나의 비동기 요청에서 이루지며

응답 대기 중에도 다른 요청을 할 수 있음

 

때문에 멀티스레딩처럼 보이는 것  이 아니라

진짜 멀티 스레드방식이였던 것임

 

 

비동기 처리 요청 시

Spring의 역할

  • Spring은 스레드 풀을 생성하고 관리함
    @Async 어노테이션을 사용하거나 비동기 요청을 처리하는 서비스에서
    Spring은 기본 스레드 풀을 사용함
  • 해당 풀은 여러 요청을 동시에 처리할 수 있도록 스레드를 관리하며
    비동기 작업을 수행하는 데 필요한 스레드를 제공함
  • Spring은 스레드 풀을 관리하고 비동기 요청이 들어오면 해당 풀에서
    스레드를 할당해 요청을 처리함

JVM의 역할

  • JVM은 스레드의 생성과 관리를 담당함
    Spring이 관리하는 스레드 풀 내에서 JVM이 스레드를 실행함

멀티스레드 방식

  • 멀티스레드 방식은 여러 스레드가 동시에 작업을 처리하는 방식을 의미
    Spring에서는 비동기 작업을 여러 스레드로 나누어 처리하고
    이를 통해 여러 요청을 동시에 처리할 수 있음

 

요약

웹에서의 비동기 요청 처리 방식
스프링 프로젝트가 실행되면 스프링이 제공하는

기본 스레드풀이 생성되고

비동기 요청이 들어오면

스프링이 스레드 풀에서

비동기 요청에 대해 스레드를 할당하고 JVM이 해당 스레드를 실행 시킴

 

 

멀티스레드 처리 장점

사용자가 여러 명 있을 때 각 사용자마다 별도의 스레드에서 독립적으로

작업을 처리함으로써 각 요청은 다른 요청과 간섭 없이 처리됨

각 사용자의 요청을 병렬로 처리할 수있어 전체적인 속도가 빨라짐

 

 

JVM(Java Virtual Machine)

JVM은 자바 가상 머신으로 자바 프로그램을 실행하는 환경을 제공함

자바 프로그램이 어떤 운영체제에서도 동일하게 실행될 수 있도록 도와줌

 

스레드 풀(Thread Pool)

스레드 풀은 미리 일정 개수의 스레드를 생성해 관리하는 기법

 

미리 정해진 개수의 스레드를 생성/관리하기 때문에
효율적인 자원 관리가 가능

 

 

 

 

https://javaboiii.tistory.com/36

 

JAVA - 스레드(Thread)

JAVA스레드(Thread)프로그램에서 스레드는 실질적으로 일을 수행하는 주체 스레드는 프로세스 내에서 실행되는 하나의 흐름스레드가 여러 개 있으면 동시에 여러 작업을 수행 할 수 있음각 스레

javaboiii.tistory.com

https://javaboiii.tistory.com/151

 

API - OpenAi Assistant API (feat.JAVA) - 사전 준비

WEBAssistant API란OpenAI의 Assistant API는 애플리케이션 내에 AI기반 어시스턴트를 만들 수 있는 API 도구로사용자가 질문을 던지거나, 특정 작업을 요청할 때, 자연어 처리 기술을 기반으로답변을 제공

javaboiii.tistory.com

https://javaboiii.tistory.com/152

 

API - OpenAi Assistant API (feat.JAVA) - 사용하기

WEB생성한 Assistant 사용하기현재 Assistant API는 베타버전이기 때문에요청 시 헤더에 "OpenAI-Beta : assistant=v2" 를 붙여줘야됨 1. Assistant 생성2. Thread 생성  // 스레드 생성 요청public static SimSimeDTO getThrea

javaboiii.tistory.com