목록프로젝트/리팩터링 (6)
yongsa0221의 고물상

Springboot에서 ThreadPoolExecutor는 java.util.concurrent.ThreadPoolExecutor 에 기반한다. java.util.concurrent.ThreadPoolExecutor 요녀석은 어떻게 동작 하는 것일까?java doc에 따르면 ,,,요런 식으로 동작한다고 한다재미있는 사실은 corePoolSize만큼 항상 먼저 스레드풀을 할당하지 않는 다는 것.https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/concurrent/ThreadPoolExecutor.html ThreadPoolExecutor (Java SE 23 & JDK 23)An ExecutorService that execute..

생성형 ai를 호출하는 과정은 비동기적으로 이루어 진다. 시간이 많이 걸리기 때문. 스프링부트를 통해 async메서드를 만드려면 threadpool설정을 해주어야 한다.프로젝트 내에서 사용자의 한번의 요청에 비동기적으로 두가지 메서드를 한번에 실행시킨다.이 작업이 꽤나 반복되니 threadpool을 적절하게 설정하고 관리 하는 것이 굉장히 중요한 부분.한번의 요청이 들어오면 generateImage와 generateContextQuestion에 해당하는 두가지 요청을 동시에 gpt에게 보낸다. 비동기적으로 실행할 녀석들의 특징은...네트워크 작업임( open-ai api호출)대기시간이 엄청 길어질수 있다(생성속도가 보통 10초 ~)이자식들을 어떻게 하면 좋을가,,,, 먼저 프로그램이 실행될 서버의 사양을..

리팩터링 하며 패키지 구조와 역할분리를 조금 더 확실하게 하려고 하였다.중점사항은.. 도메인은 그 누구에게도 의존적이지 않아야 한다 메인의 다른 계층에 의존적이지 않게 하기 위해 infrastructure 계층을 인터페이스를 통해 사용하는 **의존성 역전(Dependency Inversion)**을 구현하였다. 이를 통해 도메인 계층은 구체적인 구현(infrastructure)에 의존하지 않고 추상화된 인터페이스에 의존하게 되어 저수준 모듈(ai관련 호출 로직)이 고수준 모듈의 구현(contextAndQuestionGenerator)에 의존하게 된다. 추가로 Adapter패턴을 사용하여 adpater에서 도메인 로직에서 사용되는 BookToProgress라는 녀석과 aiApi 호출을 위한 dto녀석간의..

프로젝트내의 패키징을 고민하면서 프로젝트 시작부터 괴롭혔던 질문이 다시 떠오른다.'생성형 ai는 도메인인가?' 여태껏 당연히 그렇다고 생각했다. 프롬프트라는 것이 생성형 ai에게 특정한 역할을 부여해주고, 이를 통해 도메인 내에서 특정 역할을 수행한다고 생각하고 접근하였다.그런데 이제와서 생각해보니 생성형 ai에 너무 집착한 나머지 도메인 계층에서의 추상화를 제대로 못했다고 생각이 든다. 각 기능을 추상화해놓고 이녀석을 다시 생성형 Ai라는 범주에 넣어버린 것이다. 도메인 계층에서 존재해야 될 녀석은 생성형 Ai가 아닌 이미지 생성기, 동화 생성기 등의 생성기 였던 것.생성형 Ai에 너무 매몰되어 이녀석을 '수단'으로서 생각하지 못햇던 것이다.결국 설계 단계에서 제대로 추상화해내지 못해 끈적끈적하게 얽..

기존의 Ai 관련 도메인을 전략패턴을 사용하여 수정하였다.AiModelBehavior라는 인터페이스를 통해 생성형 Ai를 통해 어떤 것을 생성할지 동작을 구현하는 부분을 분리하였다.외부 생성형 Ai api를 직접적으로 호출하는 부분을 오롯이 AiModelBehavior의 구현체를 통해서 구현하도록 수정하였다.이를 통해서 생성형 Ai를 사용하는 부분을 최대한 다른 도메인과 구분하여 관리하고자 한다. 왜 전략패턴인가?생성형 Ai가 프로그램 내에서 특정한 클래스로써 존재 할 수 있게 하는 속성은 “어떤 입력을 통해 어떤 출력을 생성하는가” 라고 생각한다.삽화 생성기는 사용자 텍스트와 사전설정된 프롬프트를 통해 특정 화풍의 이미지를 생성한다.전략 패턴을 사용함으로서 이러한 Ai에게 사전 설정값과 출력 타입을 설..
졸업 프로젝트를 리팩터링 해야한다.시작에 앞서 목표를 정하고 가보자. controller 코드 줄이기불필요한 의존성 줄이기유닛 테스트spring security더 공부하기패키징 신경쓰기theokanning 뚝배기 깨기( openAiservice구현하기)api key 입력해야 사용할수 있게 하기(돈 감당 안됨)과금요소 다 삭제하기(돈 감당 안됨)6번은 프로젝트 내에서 사용하던 openAi 써드파티 라이브러리가 24.6월로 지원 종료되어서 안타깝게 되었다. Azure openai를 통해 사용할 수 있다고 한다. (현재 공식적으로 java지원 되는 라이브러리)그냥 직접 구현하는 방식도 고려해보아야 할듯.. 7, 8 번을 수행하려면 사실상 도메인이 변경이 불가피하다.그래서 더이상 리팩터링이 아니라 다른 프로젝트..