목록개발Article (143)
밤빵's 개발일지

▶MYVM 디자인 패턴이란?MYVM은 'Model-View-ViewModel'의 약자로, 원래는 주로 프론트엔드 개발에서 UI와 비즈니스 로직을 분리하기 위해 사용하는 디자인 패턴이다. 이 패턴은 각 구성 요소가 자신의 역할을 명확히 가지며 서로의 결합도를 낮춰 코드의 유지보수성과 확장성을 높이는 것을 목표로 한다. 하지만 이 개념은 백엔드에서도 활용될 수 있다. 특히, 로직과 데이터의 분리를 강조하여 복잡한 백엔드 시스템에서 각 요소가 독립적으로 작동할 수 있도록 도움을 준다. 이 패턴은 Model, View, ViewModel로 나뉜다. Model: 시스템의 핵심 데이터와 비즈니스 로직을 담고 있는 부분이다. 데이터베이스와의 상호작용, 도메인 로직을 처리하는 것이 이 영역의 역할이다. 예를 들어, 엔..

오늘은 코드에서 자주 언급되는 'Depth'에 대해 개발일지를 작성해보려고 한다. Depth라는 개념을 잘 알지 못했지만, 이번 기회를 통해 학습하면서 더 나은 코드를 작성하기 위한 방법을 고민해보려고 한다. ▶DepthDepth는 흔히 '깊이'라는 의미로 사용되며, 코드에서는 호출 계층의 깊이를 의미한다. 예를 들어, 메서드 A가 메서드 B를 호출하고, 메서드 B가 메서드 C를 호출한다면 이 코드의 Depth는 3이 된다. 이렇게 여러 메서드가 연쇄적으로 호출되는 구조가 복잡해질수록 코드의 Depth는 깊어진다. Depth가 깊어지면 코드가 복잡하게 느껴지고 이해하기 어려워지기 때문에, Depth는 코드의 복잡도를 나타내는 중요한 요소 중 하나로 간주된다.▶Depth가 깊어질 때의 문제점Depth가 깊..

스파게티 코드는 주로 코드가 구조적이지 않고 뒤얽혀 있어 이해가기 어렵고 유지보수가 복잡해지는 경우를 말한다. 이전에 클린 코드와 코드 리팩토링의 중요성에 대해 다룬 적은 있지만, 실제로 이를 적용해 본 경험은 없었고, 스파게티 코드가 무엇인지도 본 적이 없었다🫨 ▶스파게티 코드란?스파게티 코드는 코드의 흐름이 엉망으로 뒤섞여 있어 이해하기 어렵고 유지보수가 힘든 코드를 말한다. 이러한 코드는 반복된 로직, 무분별한 의존성, 가독성이 떨어지는 구조 등으로 인해 복잡해진다. 일반적으로 스파게티 코드는 특정 기능을 추가하거나 변경할 때 예상치 못한 버그를 발생시키기 쉽고, 개발자 간의 협업을 어렵게 만든다.▶ 코드 분석내가 작성한 GamingSetupService 클래스의 코드로, 이 코드는 기본적으로 잘..

대용량 데이터를 한 번에 처리하지 않고, 작은 단위로 나누어 작업하는 청크 기반 처리(Chunk-Based Processing)라는 개념을 알게 되고, 이 방식이 성능과 효율성에 어떤 장점이 있는지, 그리고 어떻게 구현할 수 있는지 궁금해졌다. ▶ 청크 기반 처리란?청크(Chunk)란 데이터의 큰 덩어리를 작은 단위로 나눈 것을 의미한다. 청크 기반 처리는 데이터를 한꺼번에 읽고 처리하는 대신, 일정 크기의 청크로 나누어 처리함으로써 메모리 사용을 절약하고 시스템 자원을 보다 효율적으로 활용할 수 있는 방법이다. 예를 들어, 수십만 건의 데이터가 있을 때 한 번에 모든 데이터를 메모리에 적재하여 처리하면 시스템에 무리가 가기 쉽다. 이 경우 데이터를 청크 단위로 읽고, 처리하고, 저장하여 효율적으로 작업..

해커톤이 끝나고 유튜브로 LangChain에 대해서 여러 영상들을 보게됐다. LangChain은 AI와 언어 모델을 기반으로 한 애플리케이션 개발을 지원하는 프레임워크로, 복잡한 AI 애플리케이션을 구조화하고, 확장성 있는 방식으로 빌드할 수 있도록 돕는다. LangChain은 특히, 다양한 AI 기능을 연계하고 데이터를 효율적으로 처리하는 데 탁월한 기능을 제공하기 때문에, 이 프레임워크의 주요 구성 요소와 심화된 활용 방안에 대해 학습하기로 했다! ▶ LangChain이란?LangChain은 대형 언어 모델(LLM)을 중심으로 동작하는 애플리케이션을 구축하기 위한 프레임워크이다. LangChain은 AI를 활용한 애플리케이션이 대규모 데이터를 효율적으로 처리하고, 복잡한 작업을 분할하여 수행할 수 있..

LangChain은 LLM(대형 언어 모델, Large Language Model)을 활용한 다양한 작업을 손쉽게 구성하고 실행할 수 있도록 돕는 파이썬 라이브러리로, 특히 데이터를 검색하고 필터링하거나 LLM의 성능을 최적화하는 데 유용하다. 각 구성 요소의 기능과 역할을 학습하면서, 이를 통해 다양한 작업을 어떻게 수행할 수 있는지 이해하기 위한 정리! ▶ LangChain의 역할과 구성 요소LangChain은 모듈화된 구조를 통해 각 단계를 분리하여 작업을 체계적으로 수행할 수 있다. LangChain의 주요 구성 요소들은 다음과 같다. ▶ Prompt Engineering - 질문 최적화Prompt Engineering은 LLM을 이용해 올바른 답변을 얻기 위해 질문을 최적화하는 기술이다. 적절..

RAG는 자연어 처리(NLP) 분야에서 최근 많이 주목받고 있는 기술로, 이번 해커톤을 준비하면서, 이 기술에 대해 조금은 알아 둘 필요가 있다고 느꼈다....! RAG는 챗봇, 질의응답 시스템, 문서 생성 등 다양한 프로젝트에 적용될 수 있는 도구로, 자연어 생성을 위한 AI 모델을 만들어 준다. ▶ RAG란 ?RAG(Retrieval-Augmented Generation)는 자연어 처리에서 대형 언어 모델(Large Language Models, LLM)과 검색 기술을 결합한 방식이다. 일반적인 생성형 모델은 주어진 입력에 따라 텍스트를 생성하지만, RAG는 검색 시스템을 통해 외부에서 정보를 가져와서 그 정보를 바탕으로 정확하고 더풍부한 답변을 생성하는 방식이다.이 방식은 기존의 생성형 모델보다 ..

비동기 처리와 멀티쓰레드. 이 두 개념은 자주 사용되며, 동시에 여러 작업을 처리하는 방식에서 중요한 역할을 한다. 하지만 나같은 초입자는 두 개념이 어떻게 다른지, 언제 사용하는 것이 적합한지 혼란스러울 때가 많다. 이번 기회를 통해 비동기 처리와 멀티쓰레드의 차이점과 각각의 장단점을 학습하고자 정리하기로 했다! ▶비동기 처리란?비동기 처리는 작업을 요청한 후, 그 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있는 방식이다. 작업이 완료된 후에 콜백이나 특정 이벤트가 발생하여 결과를 처리한다. 비동기 처리는 주로 I/O 작업에서 사용되며, 외부 시스템과 통신하는 작업에서 유용하다. 예를 들어, 서버가 데이터베이스에서 데이터를 가져오는 동안 다른 요청을 처리할 수 있는 비동기 방식을 사용하..

분산시스템에 대해서 관심이 많아지고, 데이터베이스의 확장성이나 성능에 대해 공부하면서 데이터 복제(Replication)와 샤딩(Sharding)이라는 용어를 알게 되었는데, 두 개념이 무엇인지, 왜 중요한지 알아보기 위해 학습을 시작했다. 데이터베이스에서의 성능 최적화와 안정성은 서비스 규모가 커질수록 중요한 요소가 되고, 이를 위한 방법인 데이터 복제와 샤딩에 대해 이해가 필요하다고 생각했다. ▶ 데이터 복제(Replication)란?데이터 복제는 하나의 데이터베이스를 여러 개의 복제본(Replica)으로 복사하여 유지하는 기술이다. 여러 개의 복제본을 통해 데이터를 분산시켜 여러 서버에서 읽기 요청을 처리할 수 있고, 이를 통해 시스템의 가용성과 읽기 성능을 향상시킬 수 있다. ▷동작 방식:→ 마스..

SSR과 CSR은 웹 애플리케이션을 만들 때 중요한 선택지인데, 각각 장단점이 있어 상황에 따라 적절히 사용하는 것이 중요하다. ▶서버 사이드 렌더링(SSR)이란?서버 사이드 렌더링(SSR)은 서버에서 HTML을 렌더링하고, 클라이언트로 전송하는 방식이다. 클라이언트는 단순히 서버로부터 받은 완성된 HTML을 브라우저에 보여준다. 클라이언트는 서버에서 생성한 결과물을 그대로 화면에 렌더링하기만 하면 된다. ▷동작 과정:클라이언트가 서버에 HTTP 요청을 보낸다.서버는 필요한 데이터를 DB에서 조회한 후, HTML 페이지를 완성하여 클라이언트에 전송한다.클라이언트는 서버로부터 받은 HTML을 렌더링하여 화면에 보여준다. ▷장점→ SEO(검색 엔진 최적화)에 유리하다. 서버에서 완성된 HTML이 전송되므로,..