목록분류 전체보기 (204)
hmk run dev
프로그래밍에서의 BufferBuffer(버퍼)는 데이터를 임시로 저장하는 메모리 공간을 의미합니다. 일반적으로 다음과 같은 목적으로 사용됩니다:속도 차이 해결CPU, 메모리, 디스크, 네트워크 등의 장치는 서로 다른 속도로 데이터를 처리합니다. 버퍼를 사용하면 빠른 장치가 느린 장치를 기다리지 않고 계속 작업을 수행할 수 있습니다.예: 키보드 입력 버퍼, 그래픽 렌더링 버퍼, 스트리밍 버퍼데이터 변환 및 가공데이터를 일정한 크기로 나누거나, 변환할 때 중간 저장소 역할을 합니다.예: 동영상 인코딩, 오디오 프로세싱I/O 성능 최적화디스크나 네트워크와 같은 느린 장치에서 데이터 입출력을 할 때, 여러 번의 작은 작업을 모아 한 번에 처리하면 성능이 향상됩니다.예: 파일 시스템의 디스크 캐시(Buffer C..

LangChain과 Pinecone으로 구현하는 RAG 패턴 LangChain과 Pinecone을 사용하여 RAG 패턴을 구현하는 방법에 대해 알아보겠습니다. RAG는 대규모 언어 모델(LLM)의 응답을 더욱 정확하고 신뢰성 있게 만들어주는 핵심 패턴입니다.1. 데이터 준비 및 임베딩 단계 먼저 데이터를 벡터 형태로 변환하여 저장하는 과정이 필요합니다.이 단계에서는: OpenAI의 임베딩 모델을 초기화하여 텍스트를 벡터로 변환할 준비를 합니다 Pinecone 벡터 스토어를 설정하여 벡터화된 데이터를 저장할 공간을 마련합니다 # OpenAI의 임베딩 모델 초기화embeddings = OpenAIEmbeddings(openai_api_key=os.getenv("OPENAI_API_KEY"))# Pine..

Pod: 쿠버네티스에서 가장 작은 실행 단위쿠버네티스에서 Pod는 애플리케이션을 실행하는 가장 작은 단위입니다. 하지만 여기서 중요한 점은 Pod 하나에는 하나 이상의 컨테이너가 있을 수 있다는 것입니다. 마치 하나의 집 안에 여러 사람이 살 수 있는 것처럼, Pod 안에 여러 개의 컨테이너가 함께 살 수 있습니다.일상적인 예시로 이해하기생각해보세요, 집을 하나 짓는다고 했을 때, 이 집 안에 여러 명의 사람들이 함께 살 수 있습니다. 집을 짓는 것이 Pod이고, 그 안에서 함께 사는 사람들이 바로 컨테이너라고 할 수 있습니다. 집을 하나 짓는 데 있어 Pod는 여러 개의 컨테이너가 함께 묶여서 동작하는 공간인 셈이죠.Pod의 구조Pod는 컨테이너들의 집합입니다. 일반적으로 Pod에는 하나의 컨테이너만 ..

쿠버네티스 아키텍처: 마스터 노드와 워커 노드 관리 방식쿠버네티스(Kubernetes)는 애플리케이션을 자동으로 관리하고 조정하는 시스템입니다. 큰 기업에서 수백, 수천 대의 서버를 관리할 때, 사람 손으로 하나하나 모든 것을 조정하는 것은 매우 어려운 일이죠. 그래서 쿠버네티스가 등장하여, 여러 서버를 효율적으로 관리하고 애플리케이션을 원활하게 실행할 수 있도록 도와줍니다.여기서 중요한 역할을 하는 두 가지가 마스터 노드(Master Node)와 워커 노드(Worker Node)입니다. 이를 쉽게 이해할 수 있도록, 마치 회사의 부서와 비슷한 구조로 설명해 보겠습니다.마스터 노드(Master Node): 회사의 관리자마스터 노드는 쿠버네티스의 중앙 관리 시스템입니다. 마치 회사에서 모든 일을 결정하는 ..

컨테이너와 오케스트레이션: 쉽게 이해하기1. 컨테이너란 무엇인가?컨테이너를 도시락에 비유하면?컨테이너는 애플리케이션을 실행하는 가벼운 가상화 기술이다. 쉽게 말해 "애플리케이션을 실행할 수 있는 도시락" 같은 개념이다.도시락(컨테이너) 안에는 음식(애플리케이션)과 필수 도구(라이브러리, 종속성 등)가 함께 들어 있다.도시락을 어디서든 꺼내면 똑같은 환경에서 바로 먹을 수 있다.컨테이너도 마찬가지로, 어떤 서버에서 실행하든 동일한 환경을 유지한다.기존 방식과의 차이점구분전통적인 VM(가상 머신)컨테이너실행 속도무겁고 느림가볍고 빠름리소스 사용OS별로 많은 리소스 필요최소한의 리소스 사용이식성환경마다 설정이 다름어디서든 같은 환경 유지대표적인 컨테이너 기술Docker: 가장 많이 사용되는 컨테이너 플랫폼Po..

최근 대형 언어 모델(LLM, Large Language Model)의 발전으로 AI를 활용한 애플리케이션 개발이 활발해지고 있습니다. 하지만 단순히 OpenAI API를 호출하는 것만으로는 복잡한 애플리케이션을 만들기 어렵죠.LangChain은 이런 문제를 해결하기 위해 만들어진 프레임워크로, 언어 모델을 다양한 데이터와 연결하고, 에이전트를 통해 복잡한 작업을 수행할 수 있도록 도와줍니다. 이번 글에서는 LangChain의 주요 개념과 아키텍처, 그리고 Python 코드 예제를 소개하겠습니다. 1️⃣ LangChain이란?LangChain은 대형 언어 모델을 활용한 AI 애플리케이션을 쉽게 개발할 수 있도록 지원하는 프레임워크입니다.단순한 텍스트 생성뿐만 아니라 문서 검색, API 호출, 데이터 분..
"비즈니스는 속도가 생명이다." 초기 단계에서는 빠른 제품 출시와 시장 적응을 위해 효율성보다 결과를 우선시하기 쉽다. 이는 자연스럽게 기술 부채를 남기고, '레거시 코드'라 불리는 코드 뭉치나 비효율적인 아키텍처로 이어진다. 하지만, 레거시는 단순히 부정적인 요소가 아니다. 오히려 현재의 비즈니스를 지탱하는 '기반'이자 과거의 성과를 보여주는 흔적이기도 하다."우리는 이 레거시 덕분에 지금까지 성장할 수 있었다." 라는 생각도 가능하다. 레거시란 무엇인가?레거시는 단순히 "오래된 코드"를 의미하지 않는다. 본질적으로 유지보수가 어렵고, 팀의 생산성을 저하시키는 시스템을 뜻한다. 이는 코드의 나이가 아니라 구조적 문제, 복잡성, 문서화 부족, 또는 기술 부채로 인해 발생하는 결과이다.또 다른 관점에서, ..

프론트엔드 개발자가 C++를 알면 여러 측면에서 이점을 가질 수 있습니다. C++는 성능과 시스템 수준의 프로그래밍에 강점을 가지고 있어, 프론트엔드 개발에 직접적으로 사용되지는 않지만 다음과 같은 간접적인 이점이 있습니다:C++를 자바스크립트와 비교하여 기초부터 배우고 싶다면, 두 언어의 주요 차이점과 개념을 중심으로 설명해 보겠습니다. C++는 컴파일러 언어이고, 자바스크립트는 인터프리터 언어라는 근본적인 차이가 있으며, 이에 따라 메모리 관리, 데이터 타입, 흐름 제어 등 다양한 측면에서 차이가 있습니다. 성능 최적화에 대한 깊은 이해: C++는 메모리 관리와 성능 최적화에 매우 민감한 언어입니다. 이를 통해 자바스크립트 엔진의 동작 원리나 브라우저 내부의 성능 최적화 과정에 대한 더 깊은 이해를 ..

로그는 에러 뿐만아니라 비즈니스 결정을 위한 중요한 요소가 된다. 이처럼 많은 로그를 자동화하기 위해서 많은 중복 코드가 발생할 수 밖에 없다. 토스는 자체 디자인 시스템인 TDS를 이용해 로깅을 자동화했다. 첫번째 시도 - 디자인시스템에 로그 기능을 추가하자개발 비용도 적고 기존에 사용하던 곳에도 적용하기 쉬웠음 그러나, 계열사 별로 로그 코드가 많고 형태가 달라 통합하기 쉽지않음그리고 로깅관련 코드가 함께 배포되는 이슈가 있었음 TDS가 로깅관련 코드를 포함해 로깅관련 수정사항을 반영하면 모든 컴포넌트의 디자인 사양도 변경해야하는 문제도 발생했다. 두번째 시도 - HOC 형태로 로그 감싸기 TDS 컴포넌트를 감싸 제공하는 형태로 제공,서로 독집적으로 수정하고 배포가 가능해졌다. ..

프론트엔드 개발의 중요성프론트엔드프런트엔드 개발은 웹 애플리케이션이나 웹사이트의 ‘얼굴’입니다. 사용자가 처음 만나는 부분이기 때문에, 프런트엔드 개발의 품질은 사용자의 첫인상에 직접적인 영향을 미치죠. 하지만 왜 그렇게 중요한 걸까요? 몇 가지 예시를 통해 살펴보겠습니다. 1. 사용자 경험(UX)사용자가 웹사이트를 방문했을 때, 그들이 어떻게 느끼는지가 중요합니다. 예를 들어, 여러분이 좋아하는 온라인 쇼핑몰에서 상품을 검색할 때, 결과가 빠르게 나타나고, 디자인이 깔끔하며, 직관적으로 탐색할 수 있다면, 그 경험이 얼마나 긍정적일까요? 반면, 느린 로딩 속도와 복잡한 내비게이션으로 인해 불편함을 느낀다면, 아마도 다시 방문하고 싶지 않을 겁니다. 이처럼 프런트엔드 개발은 사용자 경험을 극대화하는..