본문 바로가기
반응형

Spring56

[JPA] Hibernate 6.2.5.Final 공식 가이드 번역 (1) - Preface Hibernate ORM 6.2.5.Final User Guide 서문 (Preface) 객체지향 소프트웨어와 관계형 데이터베이스를 함께 사용하는 것은 불편하고 시간이 많이 소요될 수 있습니다. 데이터를 객체와 관계형 데이터베이스 간에 어떻게 표현하는지에 대한 패러다임 불일치로 인해 개발 비용이 상당히 증가합니다. Hibernate는 Java 환경에서 사용하는 객체/관계형 매핑 솔루션입니다. 객체/관계형 매핑이란 객체 모델 표현에서 관계형 데이터 모델 표현(그 반대도 포함)으로 데이터를 매핑하는 기술을 의미합니다. Hibernate는 Java 클래스를 데이터베이스 테이블에 매핑하는 것뿐만 아니라 Java 데이터 유형을 SQL 데이터 유형으로 변환하는 작업을 처리하며, 데이터 쿼리 및 검색 기능도 제공합니.. 2023. 6. 25.
[Spring] Spring Boot + Kotlin + Spring Data JPA 설정 주의 사항 이번 포스팅에선 Spring Boot + Kotlin + Spring Data JPA 사용할 때 설정해야 하는 것들에 대해 알아보겠다. Hibernate의 Entity 필수 조건 Hibernate 공식 사이트에 나와있는 Entity가 갖춰야 할 필수 조건에 대해 먼저 알아보자. Entity 클래스는 public, protected 또는 패키지 가시성을 가진 매개변수 없는 생성자를 가져야 합니다. 추가 생성자를 정의할 수도 있습니다. Entity 클래스는 최상위 클래스일 필요가 없습니다. Hibernate는 원칙적으로 final 클래스나 final 영속 상태 접근자(getter/setter) 메서드를 가진 클래스를 영속화할 수 있습니다. 그러나 이렇게 하는 것은 Hibernate가 엔티티를 lazy loa.. 2023. 6. 25.
[Spring] Spring Boot 테스트에 사용할 h2 DB 설정 방법 이번 포스팅에선 Spring Boot Test 돌릴 때 h2 DB를 사용하기 위한 설정 방법에 대해 알아보겠다. 사실 엄청 간단한데 매번 까먹어서 정리한다. 1. build.gradle.kts에 h2 DB 의존성 추가 testRuntimeOnly("com.h2database:h2") 2. application.yml에 h2 DB 접속 정보 추가 spring: datasource: url: jdbc:h2:mem:test username: sa password: driver-class-name: org.h2.Driver 2023. 6. 24.
[Spring] Bean Lazy Initialization 사용법 이번 포스팅에선 Spring의 Lazy initialization에 대해 알아보겠다. 먼저 Spring이 lazy initialization 설명한 글을 번역해보겠다. Lazy Initialization in Spring Boot 2.2 Lazy란 무엇을 의미하나요? Spring Framework는 11년 전 소스 코드가 Git으로 이동하기 전부터 lazy bean 초기화를 지원해왔습니다. 기본적으로 응용 프로그램 컨텍스트가 새로 고침될 때마다 컨텍스트의 모든 bean이 생성되고 해당 bean의 종속성이 주입됩니다. 그에 반해, lazy bean 정의가 구성된 경우 해당 bean은 필요할 때까지 생성되지 않고 종속성이 주입되지 않습니다. Lazy Initialization를 활성화하는 방법 Spring .. 2023. 6. 18.
[Spring] WebClient에서 204(no content), 빈 response body 다루기 이전 포스팅을 쓰다보니 WebClient에서 항상 http status를 204(no content)로 내려주는 api, 경우에 따라 response body를 빈 값으로 내려주는 api는 어떻게 다뤄야 하는지 궁금해졌다. 항상 http status를 204(no content)를 내려주는 api 다루기 (= 항상 빈 response body를 내려주는 api) http status 204는 기본으로 response body를 빈 값으로 리턴한다. 오 그럼 bodyToMono를 Unit으로 받으면 되는 거 아니야? 라고 생각했다. WebClient.create("ORDER_API") .delete() .uri("/order/$orderId") .retrieve() .bodyToMono(Unit::clas.. 2023. 4. 16.
[Spring] WebClient를 쓰기 전 반드시 알아야 하는 것 이번 포스팅에선 WebClient를 사용하다 황당한 일을 겪은 내용을 써보고자 합니다. 결론 결론부터 얘기하자면 WebClient로 호출한 api의 response body 값이 빈 값인 경우 Mono.empty()를 리턴한다. 문제 @Service class OrderDetailService { fun getOrderDetail(orderId: Long, userId: Long): Mono { return Mono.zip( getOrder(orderId), getUser(userId) ).map { OrderDetail.of(it.t1, it.t2) } } } fun getUser(userId: Long): Mono { return WebClient.create("USER_API") .get() .ur.. 2023. 4. 16.
[Spring] Spring Boot Gradle 프로젝트를 JAR 파일로 빌드하기 1. gradle bootJar 명령어를 실행하거나 오른쪽 Gradle에서 Tasks - bootJar 클릭 2. Project 탭에서 build - libs - xxx.jar 파일 찾기 끝! 2023. 2. 14.
[Spring] RestTemplate vs WebClient 어떤 걸 써야 할까? 문득 WebClient를 쓰다가 왜 RestTemplate을 안 쓰게 됐지? 라는 생각에 이유를 찾아봤다. spring 5 나올시기에 RestTemplate가 없어진다 뭐한다라는 루머가 많이 돌았는데 어떻게 된건지 알아보자. RestTemplate RestTemplate는 Spring 3.0 버전에 나온 Synchronous 클라이언트로 http 요청을 처리하기 위한 모듈이다. RestTemplate (Spring Framework 6.0.4 API) postForLocation Create a new resource by POSTing the given object to the URI template, and returns the value of the Location header. This heade.. 2023. 2. 14.
[Spring] Maintenance Mode란? spring docs를 보다가 maintenance mode라는 용어가 있길래 궁금해서 정리해본다. Maintenance Mode란? 한국어로는 유지 모드라고 번역이 된다. 스프링 버전이 올라가면서 더 이상 해당 모듈에 기능을 추가하지 않는 상태를 말한다. 버그나 보안 문제, 꼭 필요한 코드 리팩토링 작업은 발견되면 수정한다고 한다. maintenance mode로 바꾸는 기준은 해당 모듈보다 좋은 기능을 가진 모듈을 만들어서 지워야 하는데 하위 호환성 때문에 바로 지우지 못 하는 경우이지 않을까 생각해본다. 혹시라도 대체제가 있다면 그걸 사용하도록 하자. 버전 업그레이드 되면서 언제 사라질지 모른다. 2023. 2. 14.
반응형