
1. Flowise에 대하여 & LLM 연동 준비하기[ Flowise에 대하여 ]Flowise란 시각적인 인터페이스를 제공하는 오픈 소스 LLM(대형 언어 모델) 워크플로 빌더로, 코드를 작성하지 않고도 다양한 LLM 기반 애플리케이션을 쉽게 구성하고 배포할 수 있도록 설계되어 있다. 예를 들어 우리가 애플리케이션에 LLM을 연동하여 계산기를 만드는 상황이라고 하자. 대부분의 애플리케이션은 연동을 위해 HTTP 프로토콜과 JSON 형태의 자료구조를 사용할 것인데, LLM의 응답은 다음과 같이 대화형인 경우가 많다. 서비스에 JSON 형태로 응답하려면, 위와 같은 응답 형식이 아닌, Key-Value 형태로의 응답 전환 등이 필요한데, Flowise는 이렇듯 서비스에 LLM을 연동하기 위해 필요한 컴포..

1. Logback AsyncAppender의 동작 방식과 neverBlock 설정의 필요성[ Logback AsyncAppender의 동작 방식과 neverBlock 설정 ]AsyncAppender은 Logback에서 지원하는 Appender 중 하나로, 로그 출력이 애플리케이션의 주요 흐름을 지연시키지 않도록 비동기 형태로 로그 처리를 진행한다. AsyncAppender은 내부적으로 생산자-소비자(Producer-Consumer) 기반으로 동작하며, 이를 위해 내부에 큐(BlockingQueue)가 존재한다. 로그를 찍는 코드를 실행하면 생산자는 로그 이벤트를 큐에 쌓고, 별도의 작업 스레드인 소비자는 큐에서 로그 이벤트를 꺼내서 이를 처리한다. AsyncAppender는 큐에 로그를 먼저 적재하..

1. HashMap의 내부 동작 깊게 들여다보기(HashMap Internals with Separate Chaining & Treeify, Capacity & LoadFactor 등)[ HashMap의 해시 버킷 Separate Chaining과 Treeify ]HahsMap은 내부적으로 노드 배열로 저장되는데, 이때 각 노드 배열의 요소를 해시 버킷이라고 한다. HashMap을 생성할 때 별도의 해시 버킷 배열의 capacity를 지정하지 않는다면 기본값 16으로 할당된다. 이러한 부분을 그림으로 표현하면 다음과 같다. HashMap은 데이터를 저장할 키에 대한 해시코드(hashcode)를 계산하고 해당 값을 배열의 크기로 나누어, 데이터를 저장할 해시 버킷의 인덱스를 구하고, 해당 해시 버킷에 ..
1. 린 스타트업 핵심 내용 정리 및 요약[ 1. 시작 ]창업가적 경영스타트업을 만드는 것은 조직을 만드는 것이다. 따라서 필수적으로 관리가 관련된다. 린 스타트업의 뿌리린 스타트업은 빠른 실행, 고객 통찰, 거대한 비전, 큰 야망을 강조하는 혁신적인 제품과 서비스를 개발하는 새로운 방법에 대한 이야기다. [ 2. 정의 ]도대체 누가 창업가인가?“스타트업이란 극심한 불확실성 속에서 신규 제품이나 서비스를 만들려고 나온 조직이다.”이 정의는 회사 규모, 사업 분야, 산업 종류 등에 대해서는 말하지 않는다. 즉, 극심한 불확실성 속에서 신제품이나 새로운 서비스를 만들고 있기만 하다면 그 조직이 정부 조직이든, 대기업 신규 사업 부서이든, 비영리 조직이든, 벤처 기업이든 모두 스타트업이라고 볼 수 있다는 말..

1. 요청량이 급증하여 톰캣의 초과 스레드가 활용될 때, TIMED_WAITING 상태의 스레드가 급증하는 이유[ TIMED_WAITING 스레드가 급증하는 상황 ]기본 스레드 만을 활용하는 상황이전 포스팅에서 살펴보았듯, 톰캣은 내부적으로 자바와 거의 유사한 ThreadPoolExecutor를 활용하는데, 해당 과정의 동작 방식은 다음과 같다. (참고로 이러한 부분은 톰캣에 종속적이니, 보다 자세한 내용을 위해서는 반드시 이전 포스팅을 참고하도록 하자.)작업 요청이 들어오면, core 사이즈 만큼 스레드를 생성함core 사이즈를 초과하면 max 사이즈 만큼 스레드(초과 스레드)를 만들어 실행시키는데, 이는 설정된 시간을 넘어서도 활용되지 않으면 소멸됨스레드의 수가 max 사이즈를 초과하면, 더 이상 초..