본문 바로가기

IT/Spring boot28

[Spring boot] 암호화된 PK의 복호화 구현 PK 암호화저번 포스트에서 URI에서 PK가 노출되는 것을 막기 위해PK를 암호화하여 URI를 구성하도록 구현하였다. [Spring boot] PK Id 노출을 막는 Rest APIRest APIRest API 설계에서 자원을 식별하는 데 URI를 사용하는 방식은 매우 일반적이며, 자원이 명확히 식별될 수 있어야 한다는 REST의 개념에 부합한다. 따라서 URI에 리소스 식별자인 ID를 포함하는kyu-nahc.tistory.com따라서 Rest API를 요청할 때 URI 형식은 /test/aAPzwpKf+0mFtlfbU1wCWA== 다음과 같고,이런 식으로 암호화된 값을 통해 URI를 구성하여 API 요청을 하게 된다.그렇다면 API 요청을 받고 이를 복호화하는 로직도 반드시 존재해야 한다. 컨트롤러에서.. 2024. 10. 4.
[Spring boot] PK Id 노출을 막는 Rest API Rest APIRest API 설계에서 자원을 식별하는 데 URI를 사용하는 방식은 매우 일반적이며, 자원이 명확히 식별될 수 있어야 한다는 REST의 개념에 부합한다. 따라서 URI에 리소스 식별자인 ID를 포함하는 것은 흔한 접근 방식이다. 예를 들어, Http PUT 요청을 통해 /api/post/1이라는 엔드포인트는 1번 포스트를 수정하는 API라는 것을 직관적으로 알 수 있다. 리소스 식별자와 PK( Primary Key ) 사용리소스를 식별하기 위해 보통 고유한 값을 필요로 하는데, 중복되지 않는 고유 ID를 생성하는 방식 중 하나로 DB의 PK를 자주 활용한다. PK는 이미 DB에서 유일성을 보장하고 있기 때문에 이를 REST API에서 식별자로 사용하는 것이 자연스럽고 URI를 표현하는데 .. 2024. 10. 3.
[Spring boot] JPA fetch join 2개 이상의 Collection Join 해결법 JPA fetch Join이전 포스트에서는 JPA의 N+1 문제 및 해결방안에 대해 정리하였다. [Spring boot] JPA N+1 발생 케이스 및 해결 방법JPA FetchType저번 포스트에서 Jpa의 FetchType인 지연 로딩과 즉시 로딩에 대해 정리하였다. [Spring boot] JPA FetchTypeFetchTypeFetchType이란 JPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는kyu-nahc.tistory.com 지연로딩의 문제점을 해결하기 위해 fetch Join을 사용하였지만,fetch Join은 pagination이나 2개 이상의 Collection Join시 문제가 되었다.pagination은 fetch Join을 사용하지 않고 BatchSize를 사용.. 2024. 9. 23.
[Spring boot] JPA N+1 발생 케이스 및 해결 방법 JPA FetchType저번 포스트에서 Jpa의 FetchType인 지연 로딩과 즉시 로딩에 대해 정리하였다. [Spring boot] JPA FetchTypeFetchTypeFetchType이란 JPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는 전략’을 의미한다.javax.persistence.FetchType 패키지 내에 열거형(Eunm) 형태로 제공된다.// javax.persistence.FetchType.kyu-nahc.tistory.com 즉시 로딩은 예상 못하는 쿼리가 생기거나, JPQL에서 N+1 문제가 발생할 수 있다고 설명하였다.다시 한번 N+1문제를 정리하면 조회 시 1개의 쿼리를 생각하고 설계를 했으나나오지 않아도 되는 조회의 쿼리가 N개가 더 발생하는 문제이다.하.. 2024. 9. 22.
[Spring boot] JPA FetchType FetchTypeFetchType이란 JPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는 전략’을 의미한다.javax.persistence.FetchType 패키지 내에 열거형(Eunm) 형태로 제공된다.// javax.persistence.FetchType.classpublic enum FetchType { LAZY, EAGER; private FetchType() { }} FetchType에는 FetchType.EAGER 타입으로 ‘즉시 로딩(Eager Loading)’ 전략과FetchType.LAZY 타입으로 ‘지연 로딩(Lazy Loading)’ 전략이 존재한다.FetchType 타입은 언제 사용하는 것일까?A라는 엔티티와 B라는 엔티티가 존재한다는 가정 하였.. 2024. 9. 19.
[Spring boot] What is QueryDSL? QueryDSL QueryDSL은 정적 타입을 이용해서 SQL과 같은 쿼리를 생성해 주는 오픈소스 프레임워크이다.쿼리를 문자열로 작성하거나 작성하는 것이 아닌, QueryDSL이 제공하는 Fluent API를 이용해 코드 작성의 형식으로 쿼리를 생성할 수 있게 도와준다. 즉 QueryDSL은 SQL, JPQL 등을 코드로 작성할 수 있도록 해주는 빌더 오픈소스 프레임워크이다. 사실, QueryDSL 이 JPA에서만 사용하는 프레임워크로만 알 수도 있지만,위의 공식 사이트를 보면 JPA 뿐만 아니라 SQL, Mongodb, Lucenece 등 다양한 언어에 대해서 서비스를 제공한다. 이번엔 JPA를 사용할 때 함께 많이 사용하는 QueryDSL JPA에 대해서 알아볼 것이다.QueryDSL JPA는 SQL.. 2024. 9. 18.

loading