개요개인 프로젝트에서 Redis를 사용하고 있다. 여태까지 개발 및 테스트를 로컬 Redis를 실행시킨 상태로 진행했는데, 최근에 개발 환경을 바꾸면서 새로운 환경에서 프로젝트를 실행하기 위해 Redis를 설치해야 하는 과정에 불편함을 느끼게 되었다. 이 부분에서 개선이 필요하다 생각했고, Redis가 프로젝트에 의존하는 환경을 구성하여 어떤 개발 환경이든 Github에서 프로젝트를 clone한 이후 바로 실행할 수 있도록 만들었다. 이 글에서는 해당 부분의 개선 과정을 적어본다. 참고로, 이 글에서는 Spring 프로젝트에 Redis를 도입하는 과정은 설명하지 않는다. 해당 과정이 궁금하다면 이전에 적어둔 글을 참고하길 바란다. [Spring] Spring에 Redis를 사용하는 방법개요 개인 프로젝..
전체 글
이 글에서는 JPA의 데이터 타입 중 하나인 값 타입, 그 중에서도 임베디드 타입(embedded type)에 대해서 알아볼 것이다. JPA의 데이터 타입임베디드 타입을 알아보기에 앞서, JPA의 데이터 타입에 대해 알아보자. JPA의 데이터 타입은 크게 두 종류로 분류할 수 있다.엔티티 타입값 타입 엔티티 타입엔티티 타입의 데이터는 기본적으로 @Entity 어노테이션으로 정의한 엔티티 객체를 말하며, 데이터의 변화가 생겨도 식별자를 통해 지속적으로 변경에 대한 추적이 가능하다. 값 타입값 타입은 int, String처럼 단순하게 값을 나타내는 Java의 기본 타입이나 객체를 의미한다. 식별자를 가질 수 없으며, 엔티티 타입의 데이터와 함께 존재하기 때문에 생명 주기도 엔티티 타입의 객체에 의존하게 된..
이 글에서는 Spring에서 제공하는 HTTP client 중에 하나인 RestClient에 대해서 알아볼 것이다. RestClient란?RestClient는 Spring Boot 3.2 부터 새롭게 추가된 HTTP client이다. RestClient가 추가되기 이전부터, Spring에서는 RestTemplate과 WebClient와 같은 HTTP client를 제공하고 있었다. 하지만 이들은 각각 문제점을 갖고 있었다. RestTemplate의 문제점:직관적이지 않은 사용법Template 클래스에 너무 많은 HTTP 기능이 노출WebClient의 문제점:WebFlux에 대한 의존성 필요RestTemplate이 갖고 있던 문제점 중 하나로 Template 클래스에 너무 많은 HTTP 기능이 노출되어..
개요기존에 진행하고 있던 프로젝트에서 일정 주기마다 반복적으로 작업을 수행해야 하는 기능이 필요하게 되었다. 해당 방법을 어떻게 구현할지 고민하던 중, Spring에서 스케줄링 기능을 제공한다는 것을 알게 되었고, 이를 활용하여 해당 기능을 쉽게 구현할 수 있었다.이 글에서는 Spring Boot가 제공하는 스케줄링 기능에 대해 알아보고, 해당 기능을 프로젝트에 어떻게 적용했는지 설명한다. 스케줄링 설정@EnableScheduling 설정Spring에서 스케줄링 기능을 사용하려면 먼저 @EnableScheduling이라는 어노테이션을 추가해야 한다. 해당 어노테이션은 Application 클래스 혹은 아래와 같이 @Configuration이 붙은 configuation 클래스에 붙여 추가해야 한다.@C..
개요Spring Security는 기본적으로 Servlet Filter를 활용해 요청 권한을 확인하는 기능을 제공한다. 하지만, 이 방식 외에도 실행되는 메서드 단위로 권한을 확인할 수 있는 기능을 제공하는 것을 알게 되었고, 이 글을 통해 해당 기능을 설명하고자 한다. Method Security 란?Spring Security는 요청 레벨에서의 권한 확인 뿐만 아니라, 메서드 레벨에서도 권한을 확인할 수 있는 기능을 지원한다. 해당 기능을 특정 메서드에 적용하면 Spring Security에서 설정한 권한에 맞는 사용자만 해당 메서드에 접근할 수 있게 된다. 설정메서드 레벨에서 권한을 확인하기 위해서는 먼저 아무 @Configuration이 붙은 클래스에 @EnableMethodSecurity 어노..
개요개인 프로젝트에서 데이터 삭제 시 hard delete를 통해 실제로 해당 데이터를 DB에서 지우는 방식을 선택했지만, 해당 방식은 추후 삭제된 데이터를 복구해야 하는 하는 경우에 문제가 될 수 있다 판단했다. 그래서 실제 데이터를 삭제하는 대신, soft delete를 통해 deleted와 같은 필드를 따로 만들어 삭제 여부를 확인할 수 있도록 변경하기로 했다. 이 글에서는 현재 프로젝트에서 해당 기능을 JPA에서 어떻게 적용하였는지 설명한다. Soft Delete 적용하기삭제 여부 필드 추가Soft delete를 적용하기 위해서는 제일 먼저 삭제 여부 필드를 entity에 생성해야 한다. 하지만, 모든 entity에 일일이 해당 필드를 생성하는 것은 매우 불편하다고 생각했기 때문에, 아래와 같이..