본문 바로가기

Backend/Spring

(39)
Spring Boot Reactive Redis Transaction Spring Boot Reactive Redis를 사용할 때 Transaction 동작시키는 코드에요. RedisConfiguration.java @Configuration @RequiredArgsConstructor public class CouponRedisConfiguration { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Bean public RedisClient redisClient() { return RedisClient.create(RedisURI.builder() .withHost(this.host) .withPort(this.port) .build(..
Spring Boot Gradle Multi Modules 초간단 Spring Initializr에서 프로젝트를 생성합니다. 그리고 저는 주로 사용하지 않을 src 폴더를 삭제합니다. build.gradle을 먼저 작성해볼게요. build.gradle buildscript { ext { springBootVersion = '2.6.3' dependencyManagementVersion = '1.0.11.RELEASE' } repositories { mavenCentral() } dependencies { dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}" classpath "io.spring.gradle:dependency-management-p..
Spring Webflux ExceptionHandler Functional Endpoints Webflux에서 Annotated Controllers 패턴에서는 주로 MVC와 비슷하게 @ControllerAdvice 어노테이션과 @ExceptionHandler 어노테이션을 이용하는데요. Functional Endpoints 패턴에서는 주로 ErrorWebExceptionHandler을 활용합니다. 해당 인터페이스를 구현한 AbstractErrorWebExceptionHandler를 사용해볼거에요. AbstractErrorWebExceptionHandler 해당 생성자가 Deprecated 되었습니다. (Deprecated since 2.4.0 for removal in 2.6.0 in favor) @Deprecated public AbstractErrorWebExceptionHandler(Err..
Spring Boot ReactiveRedisTemplate<String, Integer> ReactiveRedisTemplate에서 value의 타입을 정하는 설정 코드에요. Java @Configuration public class RedisConfiguration { @Bean public ReactiveRedisTemplate numberRedisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { StringRedisSerializer keySerializer = new StringRedisSerializer(); GenericToStringSerializer valueSerializer = new GenericToStringSerializer(Integer.class); RedisSerializationContext.Redis..
Spring Boot MongoDB multi-document transactions 몽고 DB 4버전부터 Multi-Document 트랜잭션을 지원한다고 합니다. 자세한 설명은 아래 몽고디비 홈페이지에서 한 번 확인해보세요. 영어가 잘 안읽히신다면 저처럼 번역 돌리고 보시면 됩니다! 특히, IMPORTANT!로 강조되어 있는 박스는 꼭 확인해보셔야 해요. https://docs.mongodb.com/manual/core/transactions/ Transactions — MongoDB Manual In most cases, multi-document transaction incurs a greater performance cost over single document writes, and the availability of multi-document transactions should ..
Spring Webflux Annotated Controller @ClientIp 먼저 Spring Webflux Annotated Controller 방식에서 client ip를 가져와볼게요. 그 다음 MVC 방식에서는 어떻게 설정하면 되는지도 다뤄볼게요. @ClientIp 어노테이션을 만들어서 비즈니스 로직 단에서는 매우 간단하게 처리하고 IP를 받아오는 로직은 Resolver에 존재하도록 하겠습니다. 일단 목표는 Controller에서 아래와 같이 사용하는 거에요. Controller @RestController @RequiredArgsConstructor @Slf4j public class BookController { private final BookService bookService; @GetMapping("/books/{bookId}") public Mono getBook..
Spring Boot Reactive Mongo Data QueryDSL Spring Data MongoDB에서도 QueryDSL을 사용할 수 있어요. build.gradle에 아래 설정만 잘 추가해주시면 됩니다. 예제에서는 Reactive Mongodb를 사용하고 있습니다. build.gradle plugins { id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive' implementation 'com.querydsl:querydsl-mongodb' implementation 'com.querydsl:querydsl-apt' } def querydsl..
Spring Boot logback.xml 설정 logback.xml 파일을 사용해서 로깅 설정을 해볼게요. 스프링부트에서는 application.yml으로 로깅 설정이 가능하지만 할 수 있는 기능이 많지는 않아요. 그래서 실제 어느 정도 규모 있는 서비스를 운영하기 위해선 xml 파일로 설정해두는 것이 좋아요. src/main/resources 경로 밑에 logback-spring.xml 파일을 만들어주세요. 그러면 자동으로 애플리케이션을 실행할 때 파일을 읽어 설정값을 적용합니다. logback-spring.xml %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ${filePath}/app.log ${filePath}/app.%d{yyyy-MM-dd}.%i.gz 1GB 10 %d{HH:mm:ss..