JVM Garbage Collection Tuning
·
Kotlin & Java
JVM Garbage Collection TuningSpring boot + Kotlin GC 튜닝 Spring Boot + Kotlin을 기반으로 GC 튜닝을 실습하고 모니터링을 통해서 아웃풋이 어떻게 변화되는지 모니터링 해보자.우선 스프링부트 사용시 가장 일반적으로 많이 사용될 스택과 코드 구성을 구성했다.Backend: Spring Boot + KotlinDatabase: MySQL, RedisMonitoring: Micrometer + Prometheus + GrafanaContainerization: DockerService일반적으로 많이 사용되고 간단하게 구성을 했다.@Serviceclass OrderService( private val productRepository: ProductR..
JVM Garbage Collection Algorithm
·
Kotlin & Java
JVM Garbage Collection AlgorithmSerial GC가장 단순한 형태의 GC 알고리즘으로 단일 스레드로 동작.단일 스레드에서 동작을하여 쓰레드간 통신 오버헤드가 발생하지 않아 경우에 따라서 상대적으로 효율적일 수도 있다.싱글 코어에서 100MB 미만의 데이터를 다루는 경우 이점을 가질 수 있다.특정 하드웨어나 OS 등의 환경에서는 default로 사용된다. (조선시대 환경)java -XX:+UseSerialGC -jar Application.javaParallel GCJava8 Default GCThroughput Collector 로도 불리며 Serial GC와 유사하다. 다른 점은 멀티 쓰레드 환경에서 GC를 수행한다는 것이다.멀티 코어 환경에서 중간-큰 사이즈를 처리하는 어플리..
JVM Garbage Collection
·
Kotlin & Java
JVM Garbage CollectionGarbage Collection(GC) 은 JVM이 더 이상 사용되지 않는 객체(garbage) 를 자동으로 찾아 메모리에서 제거하는 기능이다.  Garbage Collection 실행 조건GC는 메모리 사용 상황에 따라 JVM이 판단하여 실행. 주로 아래 같은 상황에서 트리거 됨.Eden 공간 부족: JVM 메모리 구조에서 Young Generation 영역에 객체를 할당할 공간 부족한 경우Survivor 공간 부족: 객체를 Survivor로 옮기려고 할 때 공간 부족한 경우Old Generation 공간 부족: Old 영역이 임계치에 도달하는 경우 (FULL GC 발생)OOM 임박: OOM이 발생할 가능성이 있는 경우 Garbage Collection 메모리 ..
HTTP의 진화, HTTP/3
·
IT/Web
HTTP의 진화, HTTP/3HTTP/3는 전송 계층에서 TCP 대신 QUIC을 사용한다.QUICHTTP/3에서 QUIC 기능을 통해 지연 시간 단축, 네트워크 안정성, 빠른 성능을 가능하게 한다.훨씬 낮은 대기 시간 제공TCP는 핸드쉐이크 후 별도로 TLS 과정을 수행하지만 QUIC은 핸드쉐이크 단일 과정에서 처리UDP를 통해 개별 스트림이 독립적으로 실행연결 ID(Connection ID)로 세션 유지 가능Wifi에서 Lan으로 변경 등 네트워크 변경 상황에서도 연결 ID를 통해 연결 유지할 수 있다.네트워크 전환 중에도 연결을 유지할 수 있다.개별 스트림 기반 전송으로 손실된 스트림만 재전송 가능HTTP/2는 다중화 프로토콜로 여러개의 동시 HTTP 트랜잭션을 허용하지만, 단일 TCP 연결에서 다중..
Consistent hashing, 일관된 해싱
·
IT/알고리즘
Consistent hashing, 일관된 해싱  일관된 해싱(Consistent hashing)은 해싱 기법중 하나로 해싱 테이블 크기가 조정될 때 전체 키중에서 n/m 만 remmaping하면 되는 방법 이다. (n: 키의 개수, m: 슬롯 개수)* 일반 해시 테이블에서는 거의 모든 키를 다시 매핑 해야 한다.우선 Hash에 대한 부분부터 짚고 넘어가자.  Hash table(=Hash map)  해시(Hash)는 임의의 데이터를 고정된 크기의 값으로 변환하는 과정으로 변환된 값을 해시 값 또는 해시 코드라고 하다. 이렇게 변환된 해시 값을 배열의 인덱스에 사용하는 자료구조로 Dictionary 혹은 Map 이라고도 부르며 이를 해시 테이블이라 하며 이런 특징을 이용하여 빠른 접근, 빠른 삽입, 빠른..
[분산 시스템] Raft Consensus Algorithm, 뗏목 합의 알고리즘
·
Infrastructure
Distributed Consensus Algorithm(분산 합의 알고리즘)분산 합의 알고리즘은 여러 노드로 구성된 분산 시스템에서 모든 노드들이 특정 값에 대해서 동의(consensus) 하도록 만드는 알고리즘으로 분산 환경에서 데이터 일관성, 장애 허용성, 시스템 안정성을 보장하는데 사용 된다.주요한 3가지 특징을 가지고 있다.Consistency (일관성): 모든 노드가 동일한 데이터를 공유Fault Tolerance (장애 허용성): 일부 노드가 장애가 나더라도 시스템은 정상적으로 작동Eventual Agreement (최종 동의): 네트워크 상태가 안정적이면 모든 노드가 같은 결론으로 동작 Raft Consensus Algorithm, 뗏목 합의 알고리즘Raft 는 분산 합의 알고리즘 중 하나..
[분산 시스템] CAP Theorem: Consistency, Availability, Partition tolerance
·
Infrastructure
CAP Theorem : Consistency, Availability, Partition tolerance 이전에 소프트웨어 시스템의 성능을 향상시키는 방법은 하드웨어 성능을 올리거나(scale up) 구현 알고리즘을 수정하는 방향이였고 현재에 들어서는 수평적 확장의 방법(scale out)의 세번째 옵션을 선택할 수 있게 되었다. 2010년도에 들어서 글로벌 서비스와 클라우드화 복잡한 애플리케이션 요구사항에 따라 성능 요구가 증가함에 따라서 수평적 확장이 필요해졌고 현재에서 비지니스를 진행하게 위해서는 분산 환경이 필요로 하고 수평적 확장으로 가져온 성능 이점은 복잡성이라는 비용을 지불한다.  CAP Theorem은 분산 시스템에서 Consistency(일관성), Availability(가용성), P..
Ollama Model Update 모델 일괄 업데이트 방법
·
IT/AI
Ollama Model Update 모델 일괄 업데이트 방법#!/bin/bashollama list | tail -n +2 | awk '{print $1}' | while read -r model; do ollama pull $modeldone
HTTP의 진화, HTTP/2
·
IT/Web
HTTP의 진화, HTTP/2 Stream, Stream Multiplexing (다중 요청 처리)하나의 TCP 연결에서 여러 개의 요청과 응답을 동시에 처리할 수 있습니다. 이를 통해 지연 시간(latency)을 줄이고 더 빠른 웹 페이지 로딩을 가능하게 합니다.HTTP/2는 하나의 TCP Connection에서 요청을 처리할 수 있는 반면 HTTP/1.1은 여러개 Connection을 가지는 것을 확인서버 푸시(Server Push)HTTP/2는 서버 푸시(Server Push) 기능을 제공하여, 클라이언트가 요청하지 않은 리소스도 미리 보내는 방식으로 성능을 향상시킬 수 있습니다. 헤더 압축 (HPACK)HTTP/2는 헤더 압축을 통해 요청과 응답의 크기를 줄이고, 네트워크 효율성을 높입니다. 이를..
HTTP의 진화
·
IT/Web
HTTP의 진화HTTP/0.9 – 원-라인 프로토콜HTTP 초기 버전에는 버전 번호가 없었습니다. HTTP/0.9는 이후 버전과 구별하기 위해 0.9로 불리게 되었습니다. 리소스에 대한 경로는 GET이 유일 했으며 HTML 파일 전송만 가능했고 다른 유형의 파일들은 전송할 수 없었습니다. 문제가 발생했을 경우 문제에 대한 내용이 포함된 HTML 파일을 생성 했었습니다.GET /mypage.html A very simple HTML page HTTP/1.0 – 확장성 만들기HTTP 요구사항을 충족하고 표준화 하기 위한 HTTP WG 조직이 탄생했고 1996년 HTTP WG는 HTTP에 관련된 사양들을 종합해서 발표 했는데 이를 HTTP/1.0 으로 불렀습니다. 이 때 최초 HTML 버전을 HTTP/0.9..
의존성 주입에 대한 생각
·
IT
의존성 주입에 대한 생각오늘 회사에서 스프링 코어에 대한 얘기를 나누던 중 의존성 주입 얘기가 나왔고 그냥 생각나는 부분들에 대해서 끄적끄적해본다.웹 개발을 하다보면 스프링 프레임워크 사용 여부와 상관없이 최소 한번 정도는 그 단어 Dependency injection(DI, 의존성 주입)를 보거나 듣게 된 경험이 있다고 생각하고 없다면 간첩 신고 하면 되나? 사실, 객체지향과 객체지향 원칙을 제대로 이해하고 있다면 의존성 주입은 학습을 통해 배우는 것이 아니라, 자연스럽게 코드에 녹아서 이미 그렇게 코드를 작성하고 있을 것이다.의존성 주입이라는 개념만 단순히 학습하고 넘어가기보다는 객체지향의 본질과 원칙을 이해하는 데 학습의 초점을 맞추는 것이 훨씬 더 중요하다. 이 원칙들이 지켜지지 않으면 테스트 코..
[AI] 오디오 녹음 요약하기 (OpenAI Whisper, Langchain, Exaone)
·
IT/AI
[AI] 오디오 녹음 요약하기 (OpenAI Whisper, Langchain, Exaone)클로바 회의 요약 기능을 보고 이것도 어느정도 단계는 쉽게 구현할 수 있지 않나 해서 그냥 재미로 구현해봤다. 녹음은 내가 떠들수는 없으니 슈코 틀어서 녹음 시켰다.https://www.youtube.com/watch?v=95-2hZQGHyQ 실제로 구현해보니 만약 토이 프로젝트로 어느정도 구현을 한다고 한다면, 프론트에서 오디오 관련 라이브러리를 통해서 녹음을 한 뒤 백엔드로 업로드 하고 백엔드에서는 업로드 오디오 파일들을 이벤트 아키텍쳐 구성하여 Audio-to-Text 와 Summarize에 대해서 이벤트 처리 하도록 하면 쉽고 간단하게 토이 프로젝트를 구현할 수 있겠다. 오디오 녹음import osimpo..
ORM 사용에 관한 에이전트 토론 들어보기
·
IT/AI
ORM 사용에 관한 에이전트 토론 들어보기ORM 사용에 있어서 개발자들의 태도가 서로 다른 경우를 종종 겪는데요. 그래서 한번 해보았습니다.프롬트는 아래와 같이 설정 하였습니다.ORM 미사용 주장 에이전트:"당신은 'ORM 사용은 안티 패턴이며 예측하지 못한 버그나 동작들이 있어서 사용을 피해야 한다.' 의견을 주장하고 있습니다." ORM 사용 주장 에이전트:"당신은 'ORM 사용은 현재 개발시장에서 필연적이며 생산성을 위해 사용을 해야 한다.' 의견을 주장하고 있습니다."  에이전트 토론 내용왜 ORM을 사용해야 하나요?--------------------------------------------------------------------------------ORM(Object-Relational M..
[Langchain] Chatbot 챗봇 구현
·
IT/Langchain
[Langchain] Chatbot 챗봇 구현Codeimport enumfrom typing import Listimport streamlit as stfrom langchain.chains.combine_documents import create_stuff_documents_chainfrom langchain.chains.retrieval import create_retrieval_chainfrom langchain.embeddings import CacheBackedEmbeddingsfrom langchain.globals import set_debugfrom langchain.retrievers import EnsembleRetrieverfrom langchain.storage import Loc..
[Langchain] 이미지 분석
·
IT/Langchain
[Langchain] 이미지 분석Codeimport base64import os.pathfrom io import BytesIOfrom PIL import Image, ImageFilefrom langchain_ollama import OllamaLLMfrom langchain_demos.utils.dev import green, magentadef convert_to_base64(image: ImageFile.ImageFile) -> str: buffered = BytesIO() image.save(buffered, format="JPEG") return base64.b64encode(buffered.getvalue()).decode("utf-8")def summarize_image(b..
[Langchain] 계엄령 기념, 집밥 같은 랭체인 코드로 계엄령 뉴스 보기
·
IT/Langchain
[Langchain] 계엄령 기념, 집밥 같은 랭체인 코드로 계엄령 뉴스 보기계엄령 기념으로 계엄령 뉴스들을 몇개 선택한 후 마치 집밥을 먹는것 같은! 마치 기본적인 반찬들이 있는 것 같은! 랭체인 기본 코드를 작성했다.Codeimport osfrom typing import Listimport bs4from dotenv import load_dotenvfrom langchain.embeddings import CacheBackedEmbeddingsfrom langchain.retrievers import EnsembleRetrieverfrom langchain.storage import LocalFileStorefrom langchain_chroma import Chromafrom langchain_c..
[Langchain] AI vs AI 토론을 가장한 말싸움 하기
·
IT/Langchain
[Langchain] AI vs AI 토론을 가장한 말싸움 하기Codeimport uuidfrom typing import Callablefrom langchain_core.language_models import BaseChatModelfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.runnables.utils import Outputfrom langchain_ollama import ChatOllamafrom langchain_demos.utils.dev import cyan, green, yellowclass Disc..
[Stable Diffusion] Stable Diffusion 3.5 Text to Image 이미지 생성
·
IT/AI
[Stable Diffusion] Stable Diffusion 3.5 Text to Image 이미지 생성테스트 환경Mac m1 proCodeimport osimport uuidfrom datetime import datetimeimport torchfrom diffusers import StableDiffusion3Pipelinefrom dotenv import load_dotenvload_dotenv()HUGGING_FACE_ACCESS_TOKEN = os.getenv("HUGGING_FACE_ACCESS_TOKEN")"""https://prompthero.com/stable-diffusion-cartoon-prompts"""# torch.backends.mps.enable_fallback_impl..
[Langchain] 웹 요약 Agent
·
IT/Langchain
[Langchain] 웹 요약 AgentCodeimport osimport uuidfrom dotenv import load_dotenvfrom langchain.agents import create_react_agent, AgentExecutorfrom langchain_community.chat_message_histories import ChatMessageHistoryfrom langchain_community.document_loaders import WebBaseLoaderfrom langchain_community.tools import TavilySearchResultsfrom langchain_community.vectorstores import Chromafrom langchain_co..
[Langchain] PDF 요약 Agent
·
IT/Langchain
[Langchain] PDF 요약 AgentCodeimport osfrom langchain_community.document_loaders import PDFMinerLoaderfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_ollama import ChatOllamapdf_filepath = os.path.join("../../../data", "SK_ESG_2023.pdf")loader = PDFMinerLoader(pdf_filepath)docs = loader.load()template = """# Instruction이 ..