본문 바로가기

Spring62

[Batch] 스프링 배치 개념, 특징과 용어 정리 ✏️ 배경 처음 고도화를 맡게 된 프로젝트에서는 배치 처리가 @Scheduled를 사용한 단순한 스케줄링이 전부였다. 이러한 단순한 스케줄링에는 여러 가지 문제점이 있었다. 1. 처리 도중 문제가 발생하면 모든 데이터가 롤백되어 처음부터 다시 처리해야 된다. 2. 언제 어디서 어떠한 이유로 에러가 발생했는지 알 수 없어서 로그를 추적하기가 어렵다. 3. 배치가 성공 및 실패 여부를 나중에 알게 되어 즉시 반응하기가 어렵다. 이러한 문제점을 해결하고자 스프링 배치를 도입했고 기존 배치 서비스를 개선할 수 있었다. 스프링 배치 활용하면서 스프링 배치의 유용한 점들을 직접 경험하게 되었고, 다음에 더 잘 활용하기 위해 스프링 배치 기술에 대한 정리 및 학습을 목적으로 Batch 카테고리를 만들게 되었다. 🔎 .. 2023. 4. 22.
[Spring] Redis 세션 로그아웃, 만료시 관련 처리 작업하기 ✏️ 배경 프로젝트 진행 중 Redis 세션 로그아웃과 만료시 로그를 저장해야 하는 작업이 있었다. Redis 세션 로그아웃과 만료 관련 처리 작업을 하면서 알게 된 ApplicationListener과 Event를 활용해 처리하는 방법에 대해 공유하고자 한다. 📌 필수 등록 Session 관련 작업을 수행하기 위해서 pom.xml에 해당 Session Dependency를 추가해주어야 한다. org.springframework.session spring-session-data-redis 🔎 로그아웃 로그아웃할 때 무언가 처리해야 된다고 생각하면 일반적으로 Security의 LogoutHandler 또는 LogoutSuccessHandler를 구현하고 Security 설정 파일에 등록해서 사용할 것으로 .. 2023. 4. 16.
Spring Boot 3.0 QueryDsl Maven 설정하기 ✏️ 배경 토이 프로젝트에서는 최신 환경으로 해보고 싶어서 Spring Boot 3.0 버전과 Spring Framework 6을 사용해서 개발을 진행하고 있었는데, 복잡한 동적 쿼리를 해결하기 위해 Querydsl 도입하기 위해 적용하는 시점에 설정 후 컴파일에 계속해서 실패하는 상황이 발생했다. 스프링 부트 3.0 Maven 환경에서 Querydsl을 적용하는 방법에 대해서 간단히 공유하고자 한다. Gradle 환경이라면 다른 포스트를 찾아보는 걸 권장한다. 🔎 AS-IS 보통 Querydsl 설정을 검색해서 보면 아래와 같은 설정을 하라는 글을 많이 접하게 된다. com.querydsl querydsl-apt 5.0.0 provided com.querydsl querydsl-jpa 5.0.0 com.. 2023. 4. 9.
Spring Redis Session 설정, 특징, 데이터 조회 ✏️ 배경 현재 진행 중인 프로젝트는 운영 중인 서버에서 세션을 별도 레디스를 설치해서 관리하고 있다. 업무 수행 중 Spring Redis Session에 접근해서 세션 별로 분류해서 어떤 작업을 할 필요가 생기게 되었다. 그래서 Spring Redis Session 데이터를 조회하는 방법을 찾게 되었고 해당 과정을 통해서 어떻게 접근하고 데이터를 가지고 오는지 알게 되어 해당 내용을 공유해 본다. 😀 🔎 Redis Session 설정 org.springframework.boot spring-boot-starter-data-redis org.springframework.session spring-session-data-redis 세션을 레디스로 관리하기 위해서는 spring-session-data-re.. 2023. 4. 8.
[Spring] 데이터와 연관된 파일 데이터(multipart)를 목록으로 받기 프로젝트 진행 중에 '하나의 데이터 정보'와 연관된 '여러 파일 데이터 정보'를 조합한 '묶음 데이터'를 리스트로 받아야 하는 경우가 있었다. 파일 데이터 전송을 위해 FormData 전송 형식을 선택하게 되었고, Spring 서버에서 어떻게 해당 데이터 형식을 받을 수 있을지 고민하고 여러 방식을 시도했다. 😾 그래서 해당 포스팅에는 데이터와 연관된 파일 데이터를 목록으로 받는 방법과 Postman으로 수동 테스트 하는 방법에 대해 공유한다. 👊 위의 이미지처럼 하나의 데이터 당 여러 개의 첨부 파일을 가질 수 있는 형태의 목록을 서버에서 받아야 하는 상황이다. 데이터와 파일들은 서로 연관이 있는 데이터들이므로 특정 파일들이 특정 데이터와 연관되어 있다는 걸 서버에서 확인할 수 있어야 하고, 이를 목록.. 2023. 4. 2.
Spring으로 네이버 비로그인 방식 오픈 API 사용해보기 네이버에서는 비로그인 방식 오픈 API를 제공하고 있다. 🐱 네이버에서는 비로그인 방식 오픈 API는 HTTP 헤더에 클라이언트 아이디와 클라이언트 시크릿 값만 전송해서 사용할 수 있는 간단한 API이다. 별도의 토큰 인증이 필요 없는 만큼 간단한 인증 방식을 갖추고 있다. 해당 포스팅에서는 로컬에서 스프링으로 네이버 비로그인 방식 오픈 API를 사용하는 방법에 대해 공유하고자 한다. 1. 애플리케이션 등록 1. 사용할 애플리케이션과 사용할 API를 선택한다. 2. 환경은 WEB 설정을 선택하고 주소는 http://localhost:port/** 형식으로 작성한다. (그냥 http://localhost:port 형식으로 등록해도 잘 된다.) 2. 애플리케이션 정보 확인하기 생성한 애플리케이션 정보를 확인.. 2023. 3. 26.
[Spring] Filter에서 ExceptionHandler 예외 메시지 전달하기 일반적인 개발 프로젝트에서는 클라이언트에게 전체 예외 메시지가 아닌 특정 형태를 갖춘 메시지를 반환한다. 현재 개발 중인 프로젝트에서도 @RestControllerAdvice와 @ExceptionHandler를 활용해서 애플리케이션 전역에서 발생하는 예외를 특정 형태로 맞춰서 클라이언트에게 반환하도록 설정되어 있었고 그동안 잘 사용하고 있었다. [GlobalExceptionHandler] @RestControllerAdvice @Slf4j public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(IllegalArgumentException.class) public ResponseEntity h.. 2023. 3. 26.
[Spring] ServiceLocatorFactoryBean을 활용하여 분기 처리하기 🤜 문제점 개발하다 보면 분기 처리를 통해 특정한 경우에 따라 다르게 처리해야 하는 경우가 굉장히 많다. 🤔 예를 들면, 서비스 기획자가 이러한 요청을 한다. " Color가 BLACK이라면 A 시바견을, Color가 WHITE 라면 B 시바견을, Color가 YELLOW 라면 C 시바견을, 그 외에는 D 시바견을 활용해서 처리해 주세요! " 이런 요청을 일반적인 조건문을 사용한 분기 처리를 통해 해결하면 다음과 같을 것이다. (실제로 프로젝트에 이런 코드가 많이 존재한다.) public class ShibaService { public void shibaTalk(Color color) { if(color == Color.BLACK) { new ShibaA().talk(); } else if(color .. 2023. 2. 19.