본문 바로가기

Spring29

[Spring] Rest service with Hexagonal architecture 개요Hexagonal Architecture의 아이디어는 입력과 출력을 시스템 아키텍처의 가장자리에 두는 것이다. 또한 비즈니스 로직은 어떤 형태의 API를(REST, GraphQL API,...) 제공하는지 여부에 따라 달라져서는 안 되며, 변경이 가능한 경우는 비즈니스 로직이 변경된 경우에만 변경이 가능하다. 또한 서비스에서 필요한 데이터를 Database, 마이크로 서비스 API 또는 CSV 파일 등 어디서 가져오는지에 따라 비즈니스 로직이 변경되지 않아야 한다.위 패턴을 사용하면 애플리케이션의 핵심 로직을 외부 환경으로부터 격리할 수 있고, 핵심 로직을 격리하면 코드 베이스에 큰 영향을 주거나 주요 코드를 다시 작성하지 않고도 Data Source를 쉽게 변경할 수 있다.경계를 명확히 구분하면 주.. 2024. 9. 22.
[Spring] @Async와 Virtual Thread 개요Java 21에 Virtual Thread와 Spring @Async 어노테이션을 조합하여 비동기 프로그래밍 방법을 알아본다. Spring @Async@Async 어노테이션을 Spring의 AOP를 사용하여 비동기 메서드 실행을 제공한다.@Async는 기본적으로 AOP로 실행되며 Proxy Parttern의 한계점을 가진다.public 메서드로만 사용가능self-invocation 불가메서드 리턴 타입은 void로 설정하거나, Future / ListenableFuture / CompletableFuture로 설정하여 비동기 처리를 할 수 있다.void 리턴 타압의 경우 Exception 처리를 위하여 AsyncUncaughtExceptionHandler를 사용하여 처리할 수 있다. 프로젝트 구조HT.. 2024. 9. 14.
[Spring Batch] On K8S with Jenkins 개요배치 작업이 필요한 서비스에 대하여 Spring Batch를 사용하여 배치 프로그램을 자주 개발하는데 배치 작업 특성상 실행 주기가 짧거나 오랜 시간 동안 실행되며 자원을(Network, CPU) 많이 사용하는 경우가 많다. VM 서버를 사용하여 배치 작업을 구성하는 경우 배치를 실행하지 않는 경우에는 사용하지 않는 리소스를 낭비하게 되고, 동시에 많은 배치를 실행해야 하는 경우에는 리소스가 부족하여 배치를 실행하지 못하는 경우가 발생할 수 있다.K8S를 사용하면 위에 단점들을 극복할 수 있는데 Spring Batch를 K8S에서 사용하는 방법에 대하여 알아본다.Spring BatchKubernates JobsSpring Batch on Kubernates Spring Batch간단한  Spring .. 2024. 9. 12.
[Spring Boot] Virtual Threads vs Reactive vs Kotlin Coroutines 성능 비교 개요Spring Boot의 Java 21의 Virtual Thread, Spring Reactive, Kotlin Coroutiones를 사용한 API 서버를 구현하고 각각의 프로젝트의 성능 테스트를 진행하여 성능을 비교한다. 테스트 방법Spring Reactive로 임의의 지연을(30ms) 추가한 API를 3번씩 호출하고, 3번의 호출결과를 모두 합하여 응답하는 API 서버를 Virtual Thread, Spring Reactive, Kotlin Coroutiones, Blocking 3개의 프로젝트로 만들어 성능 테스트한다. /delay/v1.0/api                 Virtual Thread(30ms 지연)                           Spring Reactive .. 2024. 9. 10.
Spring Boot + vue, react 환경 구성 개요Spring Boot와 Front-end를(vue, react) 하나의 프로젝트로 구성하여 배포하는 방법에 대하여 알아본다. PrerequisitesNode.js 설치사용할 Node.js 버전에 맞게 설치해 준다.Node.js : https://nodejs.org/en Spring Boot 3.x 프로젝트 생성Spring Web Starter를 사용하여 프로젝트를 생성한다.build.gradle 파일plugins { id 'java' id 'org.springframework.boot' version '3.3.3' id 'io.spring.dependency-management' version '1.1.6'}group = 'org.igooo'version = '0.0.1-SNAPSHOT'java { .. 2024. 9. 5.
[Spring] Data Commons Auditing MongoDB 개요Spring Data는 엔티티를 만든 사람이나 변경한 사람, 변경이 발생한 시점을 추적하기 위한 Auditing 기능을 제공한다. Spring Data의 Auditing 기능을 사용하면 Entity 변경 데이터에 대하여 별도의 코드를 작성하지 않아도 Spring Data에서 해당 데이터를 추가해 준다. Example게시글을 저장하는 간단한 web application을 작성하여 Auditing 기능을 살펴본다. EntitySpring Data에서는 @CreatedBy, @CreatedDate, @LastModifiedBy, @LastModifiedDate 어노테이션을 제공한다. 시간 Type은 사용하려는 타입에 맞춰서 변경 가능하다.@Document("artices")public class Artic.. 2024. 8. 26.