전체 글105 Using JSpecify Annotations 개요Spring Framework 7.0.0-M2 버전이 2025년 2월 13일에 공개 되었고(https://spring.io/blog/2025/02/13/spring-framework-7-0-0-M2-available-now) M2버전에서는 null safety(null 안정성 : null로부터 안전한 코드를 작성하는 것) 지원을 위해 JSpecify을 사용하도록 적용이 되었다. Spring Framework GIT에 소스 코드를 보면 JSpecity를 사용하여 null처리를 하도록 적용되어 있다.@NullMarkedpackage org.springframework.context;import org.jspecify.annotations.NullMarked;참고 : https://github.com/sp.. 2025. 2. 25. JSpecify Nullness User Guide 개요Java의 타입 시스템은 null 안정성을 표현할 수 없다. 하지만 Spring Framework 코드 베이스는 API, 필드 및 타입 사용 시 nullness를 선언하기 위해 JSpecify 어노테이션을 사용하고 있다. 이러한 어노테이션과 의미에 익숙해지려면 JSpecify 사용자 가이드를 읽어 보는 것이 좋다.이러한 명시적 null 안정성의 주요 목표는 NullPointerException을 빌드 타입에 검사하여 런타임에 throw 되는 것을 방지하고 명시적 nullness를 사용하여 null의 가능성을 표현하는 방법으로 전환하는 것이다. Spring Framework에서 사용하는 JSpecify에 대하여 알아본다. JSpecify는 Java 타입에 null 값이 포함되어 있는지 여부를 설명하는 .. 2025. 2. 19. Elasticsearch stemming (어간 추출) 개요영문으로 작성된 문서의 경우 go, went처럼 철자는 다른 단어지만, 특수한 과거형 같이 같은 의미를 가지는 단어에 대해 검색 결과는 같은 검색 결과를 보여줘야 한다. 이를 위해 다양한 기법이 있지만 stemming을(어간 추출) 통해 처리하는 방법에 대하여 알아본다. Stemming(어간 추출)어간을(stem) 추출하는 작업ㅇ을 어간 추출(stemming)이라고 한다. 어간 추출은 형태학적 분석을 단순화한 버전이라고 볼 수도 있고, 정해진 규칙만 보고 단어의 어미를 자르는 어림짐작의 작업이라고 볼 수 있다. 이 작업은 섬세한 작업이 아니기 때문에 어간 추출 후에 나오는 단어는 사전에 존재하지 않은 단어이거나 의미가 다른 단어 일 수 있다. 아래 예제들을 살펴보면서 자세히 알아보자. Stemmer .. 2025. 2. 19. Spring AI를 사용하여 당근 상품 등록 기능 개발하기 개요당근 앱을 사용하다 보면 많은 부분에서 AI를 사용하여 상품 정보를 쉽게 등록하게 해 주거나 사용자가 입력한 정보를 사용하여 관련 있는 광고를 노출해주고 있는 것을 볼 수 있다. 이전 포스팅에서 Spring AI를(https://blog.igooo.org/162) 사용하여 간단하게 AI를 연동하는 방법을 알아봤는데 이번 포스팅에서는 기능을 더 추가하여 당근 앱에서 사용하는 기능을 구현해 본다. Getting startedSpring InitializrAI 연동을 위해서 OpenAI를 추가하고, Frontend를 위해서 간단한 Vaandi 의존성을 추가하여 프로젝트를 생성한다. Config application.properties예제에서는 OpenAI를 사용하고 gpt-4o 모델을 사용한다.vaadin.. 2025. 2. 16. Spring boot devtools 개요Spring Boot에는 개발 경험을 조금 더 즐겁게 만들어 줄 수 있는 spring-boot-devtools 모듈을 제공한다. Devtools는 모든 개발 프로젝트에 추가할 수 있으며, 개발 시점에 추가적인 기능을 제공한다. 사용방법Maven org.springframework.boot spring-boot-devtools true Gradledependencies { developmentOnly("org.springframework.boot:spring-boot-devtools")} 주의사항spring-boot-devtools는 다중 모듈 프로젝트에서 클래스 로드 등 문제가 발생할 수 있다. spring-boot-devtools는 패키징 된 애플리케이션을 실행할 때는 자동으로 비활성화한다.. 2025. 2. 7. Spring AI 영수증 이미지 처리하기 개요Spring AI를 사용하여 영수증 이미지 파일에 총액과 상품 정보를 조회하여 화면에 출력하는 기능을 개발한다.Spring AI와 OpenAI를 사용하면 매우 적은 코드로 간단하게 AI기능을 구현할 수 있다. Getting startedSpring InitializrAI 연동을 위해서 OpenAI를 추가하고, Frontend를 위해서 간단한 Vaandi 의존성을 추가하여 프로젝트를 생성한다. Config application.properties이미지 파일 업로드를 위해서 multipart 업로드 사이즈를 설정한다.OpenAI와 연동을 위해서 사용하는 모델과 API Key를 입력한다.(참고 https://blog.igooo.org/150)spring.application.name=ai-receiptva.. 2025. 1. 21. Spring Boot + Testcontainers 테스트 빠르게 실행하기 개요Spring Boot 3.1.0에서는 로컬 개발, 테스트를 간소화하기 위해 Docker container를 사용한 테스트인 Testcontainers에(https://docs.spring.io/spring-boot/reference/testing/testcontainers.html) 대한 지원이 추가되었다. Testcontainers는 Mock객체를 활용한 테스트를 작성하는 대신 실제 종속성을 사용하여 테스트를 작성하는데 도움이 되지만 실제 Docker container를 사용하는 테스트를 실행하므로 Mock을 사용한 테스트보다는 테스트 시간이 증가할 수 있다. 아래 내용 등을 통해 Testcontainers를 사용하면서 테스트 실행 시간을 줄이는 방법과 장단점에 대하여 알아본다. Pre-requis.. 2025. 1. 16. Win10 SDKMAN으로 JAVA 설치하기 개요JDK 설치는 IDE에서도 해주지만 graalvm을 사용한 Native build나 특별한 JDK가 필요한 경우는 별도 설치가 필요한데 SDKMAN을(https://sdkman.io/) 사용하면 원하는 JDK 버전을 쉽게 찾고 설치할 수 있다. Mac에서는 명령하나로 설치할 수 있지만 윈도우에서는 몇가지 설정이 필요하여 간단히 정리해본다. Getting started7-Zip 설치https://www.7-zip.org/ 에서 다운받아 설치해준다. 7-Zip 설치 위치에서 7z.exe 파일을 복사하여 zip.exe 파일로 이름을 변경한다. 시스템 속성에서 환경 변수에 Path항목에 7-Zip 위치를 추가한다. Git 설치https://git-scm.com/downloads/win에서 다운받아 설치한다... 2025. 1. 14. Spring gRPC 개요아직 experimental 한 프로젝트지만 Spring Initializr에서 선택 가능한 Spring gRPC를 사용하여 빠르게 gRPC 서비스를 생성할 수 있다.'org.springframework.grpc:spring-grpc-spring-boot-starter'를 사용하여 빠르게 gRPC 서비스를 생성해 본다. Getting startedProject 생성Spring Initializr를 사용하여 Spring gRPC를 선택하고 프로젝트를 생성한다.Spring gRPC는 Spring Boot 3.3.x 이상만 지원한다.(https://docs.spring.io/spring-grpc/reference/getting-started.html) build.gradle생성된 build.gradle을 .. 2025. 1. 11. 이전 1 2 3 4 5 ··· 12 다음