Spring
Spring Boot에 MySQL Replication datasource 설정하기(관련 property 병합하기)
Spring Boot에 MySQL Replication datasource 설정하기(관련 property 병합하기)
2024.02.23프로젝트에 DB Replication을 적용할 일이 생겼는데요. 여러 블로그 글을 참고하여 Spring Boot에 적용해보았던 내용을 기록해보고자 합니다. 이미 Spring Boot에 DB Replication을 적용하는 방법에 대해 자세하게 알려주는 글들이 많아서 의미가 있을지는 모르겠습니다만 약간 다른 방식으로 적용한 부분도 있어서 '지나가다가 참고해봐야지'하는 생각으로 봐주시면 좋을 것 같습니다. 환경은 kotiln에 Spring Boot 3버전이고 DB는 MySQL을 사용하였습니다. 1. 필요한 gradle 설정 plugins { // noarg, allOpen kotlin("plugin.jpa").version("1.9.20") } noArg { annotation("jakarta.persist..
Spring Boot + kotlin 프로젝트에 ktlint 적용하기 (Multi module 통합 관리하기)
Spring Boot + kotlin 프로젝트에 ktlint 적용하기 (Multi module 통합 관리하기)
2024.01.18이번 게시글에서는 ktlint를 사용해보고 적용했던 내용들을 간단하게 정리해보고자 합니다. 📌 간단한 Overview 📌 spring boot, kotlin 프로젝트에서 ktlint 설정 📌 멀티모듈 환경에서 ktlint 설정 📌 git commit시 ktlint check 설정 위의 내용을 가지고 ktlint를 어떻게 적용했는지 한 번 알아보겠습니다. 1. 간단한 Overview KtLint is a linter tool for checking and enforcing code style conventions for Kotlin programming language. (https://medium.com/@naeem0313/configuring-and-running-ktlin-on-android-stud..
[JPA] UnexpectedRollbackException과 AOP에서 상황별 롤백(rollback)여부에 대해 알아보자
[JPA] UnexpectedRollbackException과 AOP에서 상황별 롤백(rollback)여부에 대해 알아보자
2023.06.30이번 게시글은 Spring에서 자주 사용하는 @Transactional이 예외를 마주하게 되었을 때 발생하는 롤백에 대해서 정리해보고자 합니다. @Transactional에서 여러 propagation 옵션이 있는데 이번 게시글에서는 REQUIRED, REQUIRES_NEW에 대해서만 다룰 예정입니다. 두 개의 propagation 상황에서 어떤 Exception이 언제 발생하는지에 따라 롤백이 일어나는지 아닌지에 대해서도 다루려고 합니다. 그리고 또한 Custom AOP를 적용했을 때 그 안에서 발생하는 예외는 어떻게 처리가 되는지 정리해보고자 합니다. 지금부터 여러 케이스를 통해 롤백 발생여부를 알아보려 하는데요. 기본적인 테스트를 위한 로직 틀은 다음과 같습니다. @Slf4j @Service @Re..
[Spring] HTTP Request, Response 내용을 logging 적용해보기
[Spring] HTTP Request, Response 내용을 logging 적용해보기
2023.05.17목표 - Spring Boot Application에서 HTTP Request, Response 내용에 대해서 logging을 적용해본다. 효과 - logging 적용을 통해 HTTP 요청마다 요청 전문과 응답 전문 내용 확인이 가능해진다. - logging을 통해 오류에 대한 디버깅과 원인 추적을 더욱 쉽고 빠르게 할 수 있다. 실무든 개인 프로젝트든 애플리케이션을 개발하거나 운용할 때 여러 에러를 마주하게 됩니다. 에러를 마주하게 되면 원인을 알아야 해결방법을 생각할 수 있기 때문에 에러 발생 원인을 찾는 것이 아주 중요합니다. 실제 업무하면서도 에러 발생 원인을 찾는데에 많은 시간을 할애하게 됩니다. 여러 단서들을 이곳 저곳에서 확인하고 원인을 추적해나가는데요. http request, respon..
[Spring] Filter 중복 호출되는 경우와 OncePerRequestFilter를 통한 처리
[Spring] Filter 중복 호출되는 경우와 OncePerRequestFilter를 통한 처리
2023.05.07목표 - 하나의 request에서 Filter의 중복 호출되는 사례들을 알아보자 - OncePerRequestFilter를 사용함으로써 Filter 중복 호출 방지 Spring Boot를 사용해 web application을 개발하다보면 Filter를 구현해서 적용하는 일이 반드시 생기게 됩니다. Filter를 사용하다보면 Filter가 중복 호출되는 경우가 발생하게 되는데요. 어떤 경우에 이런 Filter 중복 호출 현상이 발생하는지에 대해 알아보고 OncePerRequestFilter를 통해서 이러한 현상을 방지하는 것까지 정리해보려합니다. (참고로 예시 코드는 kotlin 입니다.) 📌 1. 기본적인 Filter 구성 class FirstFilter : Filter { companion object..
[JPA] Transactional과 쓰기지연 쿼리에 대한 간단한 이슈 정리(updatedAt 관련)
[JPA] Transactional과 쓰기지연 쿼리에 대한 간단한 이슈 정리(updatedAt 관련)
2022.12.23JPA를 사용하면서 마주했던 이슈에 대해서 기록하고자 블로그에 정리하게 되었습니다. A Entity가 있고 B Entity가 있는데 A Entity에 대한 내용을 수정하고 A Entity의 필드 값들을 B Entity에 담아서 DB에 insert 요청을 하기 위한 save 작업을 하는 내용이었습니다. 코드 상으로 보면 다음과 같습니다. @Transactional fun saveHistoryAfterCafeInfoUpdated(cafeId: Long, request: UpdateDto) { // 대상 cafe 조회 val cafe = cafeRepository.findByIdOrNull(cafeid) ?: throw RuntimeException("cafe not found") // cafe 내용 변경 c..