본문 바로가기

Java & Kotlin/Spring24

[Spring Data JPA] @OneToMany Entity 연관 관계에 대하여 JPA는 RDBMS의 table 연관 관계를 Java object로 표현되는 DB model로 표현하기 위해 @OneToMany, @ManyToOne, @Embedded 와 같이 entity 간의 연관 관계를 설정하는 여러 기능을 제공한다. 이는 JPA를 사용하면서 POJO로 이뤄진 Entity와 DB model인 JPA Entity를 굳이 분리하지 않아도 표현력 있는 Entity 코드를 작성할 수 있게 해준다. 이번 포스팅에서는 JPA를 사용했을 때 상위 객체가 하위 객체를 포함하고 있음을 표현하기 위해 @OneToMany로 일대다 관계를 만드는 방식에 대한 얘기를 해보겠다. 여기서는 다대일 관계(many-to-one)에 대해서는 다루지 않겠다. 다대일 관계는 query 효율을 위해 사용할 수 있지만,.. 2023. 1. 20.
[Spring Data JPA] entity update 후 JpaRepository.save 호출에 관하여 통상적으로 Spring Data Jpa를 사용하면 Hibernate를 사용하게 되고, 그로인해 dirty checking도 사용하게 된다. 그렇기 때문에 아래와 같이 코드에 따로 update를 명시하지 않아도, entity의 변경을 감지하여 update 문이 실행된다. import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class UpdatePostService { private final Po.. 2023. 1. 9.
[springdoc-openapi] 고정 header 설정하기 서버 API 문서화 시 주로 간편한 설정과 직접 요청을 보낼 수 있는 UI를 제공하는 Swagger UI를 주로 사용한다. 하지만 실서비스 용 서버는 주로 인증 기능이 붙어있기 때문에 API 요청 시 인증 용 토큰 등이 필요한 경우가 대다수이다. 이번 포스팅에서는 springdoc-openapi를 사용하여 Swagger UI를 구성할 때, header 기반 인증을 처리하는 방법 중 하나로 고정 header를 설정하는 방법에 대해 알아보겠다. (org.springdoc:springdoc-openapi-ui:1.6.14 기준) (코드 예제는 여기에서 확인할 수 있다) ※ 참고 Springfox는 현재 maintain이 되고있지 않기 때문에, 되도록 springdoc-openapi를 사용하는 것을 추천한다. .. 2022. 12. 31.
Request Rate Limiting with Spring Cloud Gateway - 부록. custom Filter 만들기 기본으로 제공되는 RequestRateLimiter 필터를 사용하게 되면 사용률 제한에 걸리지 않은 요청에 대해서는 문제없지만, 제한이 걸린 요청에 대해 우리 서비스 내부적으로 사용하는 응답 포맷을 사용할 수 없다. 그렇기 때문에 응답 포맷을 항상 지정된 형태로 주어야한다면 RequestRateLimiter를 그대로 사용하기는 힘들고, custom filter를 만들어서 이를 RequestRateLimiter 대신 사용해야할 것이다. 아래는 RedisRateLimiter를 사용하는 custom 사용률 제한 필터의 예제 코드다. (링크) 여기서 Spring Cloud Gateway의 RateLimiter를 사용하기위해 Config 클래스는 HasRouteId 를 상속받아 Router의 ID를 받을 수 있도.. 2022. 2. 8.
Request Rate Limiting with Spring Cloud Gateway - 3. RateLimiterFilter 파헤치기 이전 포스팅에서 Spring Cloud Gateway에서 제공하는 RateLimiterFilter를 사용하여 Request Rate Limiting 기능을 적용하는 방법에 대해 알아보았다. 이번 포스팅에서는 내부적으로 어떤 식으로 RateLimiterFilter가 Request Rate Limiting 기능을 하는지에 대해 파헤쳐보도록하자. 전체 코드는 여기에서 확인 가능하다. RateLimiterFilter application.yml 에서 설정한 RateLimiterFilter는 RequestRateLimiterGatewayFilterFactory 를 살펴보면 된다. 이 필터의 apply 메서드가 리턴하는 GatewayFilter 코드를 보면 전체적인 틀을 파악할 수 있다. RequestRateLim.. 2022. 2. 8.
Request Rate Limiting with Spring Cloud Gateway - 2. RequestRateLimiter 필터 적용 앞서 개요에서 Spring Cloud Gateway에서 기본적으로 Request Rate Limiting 기능을 제공한다고 하였다. 이번 포스팅에서는 Spring Cloud Gateway에서 기본적으로 제공하는 Request Rate Limiting 기능과 이를 사용하는 방법에 대해 알아보도록 하겠다. 전체 코드는 여기에서 확인 가능하다. RequestRateLimiterFatewayFilterFactory in Spring Cloud Gateway Spring Cloud Gateway에서 기본적으로 제공하는 Request Rate Limiting에 대한 필터는 org.springframework.cloud.gateway.filter.factory.RequestRateLimiterGatewayFilter.. 2022. 2. 3.