스프링 프레임워크 21

Implementing Redis Cache in Spring Boot: From Basic Setup to Serialization

Implementing Redis Cache in Spring Boot: From Basic Setup to Serialization캐시무효화와 Cache Aside를 통해 캐시를 사례를 구성했습니다.환경mackotlinspringboot준비사항springboot projectredis cluster ( container )다루는 내용@Cacheable, @CacheEvictSpring Cache, Spring Data RedisJackson1. Spring Cache와 Redis 연동을 위한 기본 설정필요한 의존성 설명implementation("org.springframework.boot:spring-boot-starter-data-redis")implementation("com.fasterxml.j..

spring aop와 annotation 맛보기

"k8s 클러스터에 springboot application 배포후 모니터링" 연재를 다룰 예정인데, 그 과정에서 프로파일링 관련 기능이 필요할것 같아 이번에 포스팅하게 되었습니다. 이번 포스팅에서는 spring-aop와 애노테이션을 사용할것인데, 그전에 spring-aop와 annotation 관련 내용을 포스팅하게되었습니다.간단히 메서드에 실행시간 출력하는 애노테이션을 추가했고, spring-aop를 통해 출력해보도록 하겠습니다.이번 포스팅은 상황을 가정하고 그 상황에 필요한 기술을 맛보기로 다룹니다. 부하테스트로 timeout이 발생하는 이슈를 파악하고 로컬환경에서 api 요청에 따른 로직의 성능을 파악하기 위해 jaeger를 사용해서 프로파일링하는 것을 목표로 합니다.  다루는 내용spring-a..

Chaining Kafka and Database Transactions with SpringBoot

Chaining Kafka and Database Transactions with Spring Boot, Minikube, Debezium connector for MySQL 이번 포스트에서는 kafka produce와 database transaction을 원자적으로 처리하는 것을 kotlin + springboot + mysql + kafka 조합으로 구성해봤습니다.kafka message produce와 JPA 영속화 코드를 트랜잭션으로 묶는게 목표였으나, 리서치해보고 직접 여러 가지 방법을 POC해봤을때, 서로 다른 솔루션을 같은 트랜잭션으로 묶는건 그렇게 간단하지도, 운영에서 사용하는게 맞을지도 미지수이기 때문에 운영에 사용할 방법은 아니라는 결정을 내렸습니다.대안으로는 Kafka Connect..

kotlin-springboot spring-kafka로 produce, consume 시작하기

이번 포스트에서는 kotlin-springboot 프로젝트에서 spring kafka로 produce, consuming하는 샘플을 구성하고 kafka 사용시 기본으로 따라오는 세트들을 구성합니다 다루는 내용spring-kafka consumer, producer 설정kafka listener consumer groupbatch listener수동커밋중복 컨슘컨슘 누락EOS (Idempotent)Error HandlingDLQ   build.gradle.ktsimport org.jetbrains.kotlin.gradle.tasks.KotlinCompileplugins { id("org.springframework.boot") version "3.0.11" id("io.spring.depende..

Java/Spring -> Kotlin/Spring 변환 - 4

환경IDE: intellijSpringBootVersion: 2.7.18Gradle: 8.5Java: 17해당 포스팅은인프런 "코틀린 문법부터 실무까지 (자바 to 코틀린 실무)" 을 따라하면서 Java/Spring 프로젝트를 Kotlin/Spring 프로젝트로점진적인으로 변환하는 내용을 담고 있습니다 다루는 내용Controller 변환DummyEntity 클래스 생성DummyDto 클래스 생성letOptional, Stream 대체Repository 변환범위함수 적용Controller 변환Kotlin은 Typescript와 비슷하게 한 파일에 여러 클래스와 enum function 등을 한 파일에 모아 둘수 있습니다CRUD 컨트롤러를 C,R,U,D 각각을 쪼개려고 합니다AS-ISimport com.ma..

Springboot test - 3 - TestContainers

이전 포스트에서 WebMvcTest, Mock Test로 Controller와 Service만 슬라이스 테스트를 구성했습니다.운영환경의 DB와 동일한 DB로 테스트를 추가하여 더욱 견고한 웹 애플리케이션을 유지보수 하고싶습니다.TestContainers를 통해 docker container로 DB를 올려서 중간 범위 테스트^1 를 구성할 수 있습니다.docker compose 파일과 test container로 테스트 환경 구축하기개발환경 구축시 단일 컨테이너들을 각각 관리하는 것보다 docker compose 파일하나를 구성하여 로컬 개발환경에 필요한 스택을 모아서 구축하는 경우가 흔합니다TestContainers는 로컬환경의 docker comose 파일을 사용할 수 있어서 docker compose..

Springboot test - 2 - Service test with mockito

이번 포스트에서는 JUni5에서 Mockito로 Mock을 통한 서비스 애플리케이션 테스트를 다루겠습니다중간규모테스트(통합테스트)에 한동안 빠져있었으나, 기능을 견고하게 하기위해 현실적으로 가장 강력한 방법은 슬라이스 테스트입니다물론 배포전 실제 API를 호출해볼 수 있겠지만 시스템의 복잡도는 프로젝트마다 천차만별이고, 외부 시스템 연동 기능의 경우에는 완벽하게 테스트하기가 어려울수 있습니다. 슬라이스 테스트는 결국 모킹인데 그걸 믿을 수 있냐? 라고 볼수 있고, 모킹테스트를 해도 실제 API 동작하지 않는 경우도 있을 수 있습니다. 그 경우에는 특정 관심사 부분의 슬라이스 테스트가 없거나 실패했을겁니다. 우리가 만든 기능에 각 관심사마다 테스트를 작성했고 테스트 커버리지를 높였다면 충분히 믿을 수 있는..

Springboot test - 1 - controller test

Test Slicing^1 이란 테스트를 위해 ApplicationContext를 분리하는걸 말합니다MockMvc를 이용하여 Controller 테스트를 진행할 수 있습니다다음과 같이 특정 컨트롤러만 테스트할 수 있습니다@WebMvcTest(FeedControllerV2.class)public class FeedControllerV2Test {@WebMvcTest는 해당 컨트롤러만 Bean으로 등록되지않고, ControllerAdvice, Converter, WebMvcConfigurer, HandlerMethodArgumentResolver^2 등이 등록되며 애노테이션 주석으로 확인해볼 수 있습니다컨트롤러 테스트의 목적은 입력검증, 출력검증입니다.예시 테스트 코드를 보면서 어떤 것들이 가능한지 확인해보..

스프링배치 FlatFileItemReader 시작하기

환경IDE: intellijSpringBootVersion: 3.0.11Gradle: 8.8Java: 17 해당 포스트는한 번에 끝내는 Spring 완.전.판 초격차 패키지 Online. 의 강의를 코틀린으로 재구성한것입니다 다루는 내용FlatFileItemReaderFieldSetMapperJobParametersValidatorbuild.gradle.ktsimport org.jetbrains.kotlin.gradle.tasks.KotlinCompileplugins { id("org.springframework.boot") version "3.0.11" id("io.spring.dependency-management") version "1.1.0" kotlin("jvm") version..