본인은 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
https://javaboiii.tistory.com/151
https://javaboiii.tistory.com/152
'프로젝트_리뷰' 카테고리의 다른 글
Python Project - 북극한파 예상하기 (AOI) (0) | 2024.12.04 |
---|---|
프로젝트 - 바인딩 왜 안됨 ? (커맨드 객체) (0) | 2024.11.09 |
프로젝트 - 결제 API 흐름 (0) | 2024.10.28 |
WEB - 중간 프로젝트 발표 팀 피드백 (1) | 2024.09.30 |
Web - 웹 프로젝트 1차 피드백 (1) | 2024.09.01 |