Java & Kotlin/Spring26 Kotlin SpringBoot 환경에서 jOOQ 설정 JPA가 주는 개발의 편리함은 많은 사람들에 의해 검증되었지만, dirty checking과 같이 under the hood에서 동작하는 기능들로 인해 배포 후 운영 시에 마주치는 문제도 생기게된다.(관련해서 읽어보면 좋은 글: Hibernate 의 ‘불편한’ 편의 기능들) 가끔은 MyBatis를 쓰던 시절이 품은 조금 더 들지만 동작하는 방식은 명확해서 좋았던 것 같다.하지만 MyBatis를 쓰면서 생기는 가장 큰 불편함은 문자열로써 SQL query를 다루기 때문에 쿼리 상의 오류를 런타임에서나 알 수 있다는 것이다.반면 jOOQ의 경우 DB를 직접 스캔하여 query 용 class를 생성하는데 이 class를 사용하여 type safe 하게 SQL query를 사용할 수 있다.(DB를 스캔 방.. 2024. 12. 3. [Spring] Swagger UI 대신 Scalar API Reference를 사용하여 API 문서 사용하기 Scalar API Reference는 Swagger UI를 대체할 수 있는 또다른 API 문서화 방법이다. Swagger UI와 비교하였을 때 화면 구성이 깔끔하기도 하며 API를 호출할 때 Postman과 같은 편리한 UI를 제공해줘서 개인적으로는 Swagger UI의 대체제로써 훌륭한 선택이라는 생각이다. 이번 포스팅에서는 Spring Web MVC 프로젝트에서 Scalar API Reference를 사용하는 방법에 대해 알아보도록 하겠다. (코드 예제는 여기에서 확인할 수 있다) 0. Scalar Quickstart 살펴보기먼저 어떻게 Scalar API Reference를 사용하면 좋을지를 알아보기 위해Scalar repository README에 있는 Quckstart를 살펴보자. .. 2024. 10. 29. [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. 이전 1 2 3 4 5 다음