Java & Kotlin42 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. reified를 통해 generic type 정보 가져오기 generic을 사용하여 코드를 작성할 때, generic type의 정보를 사용하고 싶은 경우가 있을 것이다. 아래 코드는 generic을 사용하여 파라미터의 타입을 확인하는 함수이다. fun isInstanceOf(obj: Any): Boolean { println("check object(${obj::class}) is instance of ${T::class}") return obj is T } 하지만 generic은 compile 후 제거되기 때문에 위 코드와 같이 generic type을 직접적으로 사용하는 코드는 compile error를 낸다. 그래서 주로 아래와 같이 추가로 generic type과 같은 Class 타입의 파라미터를 받는 식으로 우회한다. fun isInstanceOf(o.. 2023. 1. 16. [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. [Java] List, Set, Map 구현체들 Java로 개발을 할 때 가장 많이 쓰이는 자료구조는 List, Set과 Map이며 이들은 모두 interface로 여러 구현체들을 제공한다. 하지만 대부분 관성적으로 ArrayList, HashSet, HashMap을 주로 사용한다. 각 자료 구조의 대표적인 기능은 구현체마다 모두 동일하기 단순히 자료를 담는 역할로써 단순히 위 구현체들을 쓰는건 크게 문제가 되지 않지만, 각 구현체는 엄연히 다른 기능을 한다. 이번 포스팅에서는 java.util 에서 기본적으로 제공해주는 List, Set, Map의 구현체들을 몇가지를 살펴보도록 하겠다. List List는 중복을 허용하는 데이터를 담는 역할을 한다. ArrayList ArrayList는 클래스 명에서도 나타내듯 List 내부에 Array를 두고, 이.. 2023. 1. 6. 이전 1 2 3 4 ··· 7 다음