분류 전체보기 43

RAG란 무엇인가? — 검색 증강 생성(RAG)의 자세한 설명

검색 증강 생성(RAG) 이란 ?Retrieval-Augmented Generation (RAG)는 외부 권위 있는 지식 소스를 생성 과정에 통합하여 대형 언어 모델(LLM)의 잠재력을 혁신적으로 증대시킵니다. LLM은 질문에 답하거나 언어를 번역하는 등의 작업에서 뛰어나지만, RAG는 이 능력을 더욱 향상시켜 도메인별 또는 내부 조직 지식을 매끄럽게 통합합니다. 이를 통해 생성된 콘텐츠가 다양한 맥락에서 적절하고 정확하며 가치 있게 유지될 수 있으며, 비용이 많이 들고 시간이 많이 소요되는 대규모 재교육 없이도 가능합니다.검색 증강 생성(RAG) 이 중요한 이유는 무엇인가요?대형 언어 모델(LLM)은 인공지능(AI) 기술, 예를 들어 챗봇 및 자연어 처리(NLP) 응용 프로그램을 구동하는 핵심 역할을 ..

Spring Boot: 스프링 부트 공통 라이브러리 구축하기 (공통 모듈)

소프트웨어 개발 세계에서 DRY(Do not Repeat Yourself) 원칙은 효율적인 코딩의 핵심입니다. 앤디 헌트와 데이브 토마스가 그들의 기념비적인 책 "The Pragmatic Programmer"에서 만들어낸 DRY 원칙은 코드베이스 내의 반복을 줄이는 것의 중요성을 강조합니다. 이 원칙을 준수함으로써 개발자는 중복을 최소화하고 오류 발생 가능성을 줄이며 코드를 더 유지 보수하기 쉽게 만들 수 있습니다. DRY 원칙이 빛을 발하는 일반적인 시나리오는 마이크로서비스 아키텍처의 개발입니다. 마이크로서비스는 여러 서비스가 유사한 기능을 공유하는 경우가 많습니다. 이러한 기능은 유틸리티 함수, 보안 구성, 예외 처리, 공통 비즈니스 로직 등 다양합니다. 이러한 코드를 여러 서비스에 중복시키는 대신,..

Development/Code 2024.07.02

Spring Boot: 사용 가능한 메모리보다 더 많은 데이터 쿼리하기

개발자로서 아직 이런 문제를 겪지 않았다면, 이 글이 도움이 될 수 있을 것 같습니다. 경력 중 어느 시점에서든, 메모리에 맞지 않는 결과를 반환하는 데이터베이스 쿼리를 수행하는 Spring Boot REST 엔드포인트를 만들어야 할 가능성이 큽니다. 이 글에서는 메모리 한계로 인해 전통적인 방식으로 구현할 수 없는 REST 엔드포인트의 예를 살펴보겠습니다.시나리오이 연습에서는 Customer, Order, OrderItem, Product를 포함한 간단한 시나리오를 사용합니다: 우리의 목표는 다음을 쿼리하고 반환하는 보고서를 생성하는 엔드포인트를 만드는 것입니다:백만 개의 Orders500만 개 이상의 OrderItems전통적인 구현다음과 같은 필드가 있는 DTO를 정의해 봅시다:@Datapublic ..

Development/Code 2024.07.01

Java 21의 레코드 패턴으로 클린 코드 작성하기

Java는 Java 14에서 레코드 타입(Record Type)을 도입했습니다. Java 21 버전에서는 레코드 클래스의 인스턴스를 분해하고 더 정교한 데이터 쿼리를 가능하게 하는 레코드 패턴(Record Patterns)이 도입되었습니다.레코드 타입이란 무엇인가?Java는 Java 14에서 레코드라는 특별한 타입을 도입했습니다. 레코드는 제한된 형태의 클래스 타입으로, 주로 데이터를 저장하는 목적으로 사용됩니다. 레코드는 클래스보다 간결합니다. 레코드 타입 정의의 예시입니다:// 레코드 타입 정의record Point(int x, int y) 위 코드는 아래와 같은 기능을 수행합니다:Point라는 레코드 타입을 선언합니다.변수 x와 y에 대한 private final 필드를 포함합니다.x()와 y()라..

Development/Code 2024.07.01

자바 개발자를 위한: 개발 시간을 단축시킬 6가지 Lombok 기능

자바 개발자는 종종 반복적인 보일러플레이트 코드를 작성하는 데 많은 시간을 소비하게 됩니다.Project Lombok은 이러한 문제를 해결하기 위해 다양한 어노테이션을 제공하여 많은 보일러플레이트 코드를 자동화해 줍니다.많은 개발자가 @Data와 @Getter 같은 Lombok의 인기 있는 어노테이션을 알고 있지만, 덜 알려진 기능들도 생산성을 크게 향상시킬 수 있습니다. 이 글에서는 여섯 가지의 유용한 기능에 대해 설명하겠습니다.1. @Delegate@Delegate를 사용하면 다른 클래스의 메서드를 자신의 클래스에서 직접 쓸 수 있습니다. 예를 들어, A라는 클래스에 sayHello()라는 메서드가 있고, B라는 클래스에서도 이 메서드를 사용하고 싶다면, B 클래스에 A 타입의 필드를 추가하고 @De..

Development/Code 2024.06.29

자바 개발자를 위한: 생산성을 향상시킬 10가지 Guava 기능

자바 개발자들은 항상 코드를 더 깔끔하고 효율적이며 유지보수가 용이하게 만들어주는 라이브러리를 찾고 있습니다. 구글 구아바(Google Guava)는 일반적인 프로그래밍 작업을 간소화해주는 풍부한 유틸리티 세트를 제공하여 그 중에서도 돋보이는 라이브러리입니다. 구아바(Guava) 는 많은 기능을 제공하지만, 그 중 일부는 특히 놀라운 기능으로 자바 프로그래밍 경험을 크게 향상시킬 수 있습니다. 모든 자바 개발자가 알아야 할 10가지 구아바 기능을 소개합니다.1. BiMap: 양방향 맵BiMap은 키뿐만 아니라 값의 고유성도 보장하는 양방향 맵입니다. 이 양방향 맵을 사용하면 키를 값에, 값을 키에 쉽게 매핑할 수 있으며, 고유한 역 매핑을 보장합니다. 예제:BiMap userId = HashBiMap.c..

Development/Code 2024.06.28

알아두면 좋은 Spring Boot 기능 10가지

Spring Boot는 자바 기반 웹 애플리케이션 및 마이크로서비스를 구축하기 위한 강력한 프레임워크로, 설정보다 관례를 중시하는 접근 방식으로 개발 작업을 간소화하여 널리 인정받고 있습니다. 그러나 잘 알려진 기능 외에도 개발 경험을 크게 향상시킬 수 있는 숨겨진 보석 같은 기능들이 있습니다. 이번 글에서는 잘 알려지지 않은 Spring Boot의 10가지 기능을 깊이 있게 살펴보고, 이들을 프로젝트에 통합하여 개발 워크플로를 어떻게 향상시킬 수 있는지 보여드리겠습니다.1. Custom Banner (사용자 정의 배너)목적: 애플리케이션 시작 경험을 개인화하여 사용자 정의 배너를 만듭니다.이점: 브랜드 정체성을 강화하고, 필수 정보를 표시하거나, 창의성을 더해 시작 프로세스를 더욱 기억에 남고 유익하게..

Development/Code 2024.06.28

Spring Boot의 성능을 향상시키는 10가지 방법

Spring Framework는 자바 생태계에서 가장 인기 있고 성숙한 애플리케이션 개발 프레임워크 중 하나입니다. Spring Boot는 사전 구성된 모듈, 자동 설정, 스타터 종속성을 제공하여 Spring 기반 애플리케이션 개발을 간소화합니다. 이러한 간편함과 인기, 성숙도로 인해 많은 시스템이 Spring Boot로 구현되었으며, 이 중 일부는 최적화되지 않았을 가능성이 큽니다. 이 글에서는 먼저 성능이란 무엇인지 논의한 후, Spring Boot를 빠르고 자원 효율적으로 만드는 10가지 성능 최적화 방법을 다루겠습니다.아래는 목차입니다.성능이란 무엇을 의미하나요?Spring Boot 성능을 향상시키는 방법?최신 버전의 Spring Boot 사용JVM 버전 및 튜닝JDK 21에서 웹 MVC 스택에 ..

Development/Code 2024.06.28

Spring Boot에서 자신만의 Rule Engine (룰 엔진) 구현하기

룰 엔진 (Rule Engine) 은 입력 데이터에 대해 규칙을 실행하고 조건이 맞으면 해당 작업을 실행하는 전문 시스템 프로그램입니다.소프트웨어 개발에서 데이터를 필터링하고 처리하기 위해 여러 규칙이나 조건을 적용해야 하는 상황이 자주 발생합니다. 전통적인 if와 else 조건문을 사용하여 이러한 규칙을 관리하면 복잡하고 유지 보수가 어려워질 수 있습니다. 룰 엔진 (Rule Engine)을 사용하면 이러한 규칙을 보다 유연하고 체계적으로 정의하고 실행할 수 있습니다. 이 글에서는 Java 함수형 프로그래밍 원칙을 사용하여 Spring Boot 프로젝트에서 간단한 룰 엔진 (Rule Engine)을 구축하는 방법을 살펴보겠습니다.룰 엔진 (Rule Engine) 이란?룰 엔진 (Rule Engine)은..

Development/Code 2024.06.27

Spring Boot 3.3의 고급 기능 : 종합 가이드

Java 생태계에서 중요한 역할을 하는 Spring Boot는 정기적인 업데이트를 통해 개발자가 견고한 애플리케이션을 쉽게 구축할 수 있도록 도와줍니다. 2024년 5월에 발표된 최신 버전인 Spring Boot 3.3은 성능 개선, 신기술 지원, 개발자 워크플로우 간소화를 위한 다양한 향상된 기능을 제공합니다. 이 글에서는 Spring Boot 3.3의 주요 기능을 자세히 설명하고, 실용적인 예제와 실제 애플리케이션에서 이러한 기능을 어떻게 활용할 수 있는지에 대한 통찰을 제공하겠습니다.1.  클래스 데이터 공유 (CDS) 지원Spring Boot 3.3에 도입된 가장 중요한 기능 중 하나는 클래스 데이터 공유(CDS)입니다. CDS는 Spring Boot 애플리케이션의 시작 시간을 단축하고 메모리 소..

Development/Code 2024.06.26