개요 2022-11-28 Spring Boot가 2.7에서 3.0으로 오랜만의 메이저 버전 업그레이드되었다. Java 17를 최소 버전으로 요구하는 등의 큰 변경점이 있었고, 업그레이드해보니 Break Changes가 있어 소스 코드에도 자잘한 수정이 요구된다. 최근 국내 대부분의 현업 프로젝트에서 Kotlin, Gradle, Spring Data JPA, Querydsl을 사용하고 있는 만큼 도움이 될까 해서 새로운 설정 방법을 정리했다. build.gradle.kts 수정 프로젝트 루트의 build.gradle.kts에 아래 내용을 추가하거나 변경한다. (Spring Boot 2.X.X와 Spring Boot 3.0.0 주석을 확인하여 Spring Boot 3.0.0 부분만 적용하면 된다.) buil..
개요 RDBMS는 엄격한 스키마 정합성을 기반으로 오랫동안 업계에서 사랑 받아 왔다. 하지만 리얼 월드에서는 불가피하게 가변적인 구조의 데이터를 다뤄야 하는 상황을 항상 경험하게 된다. (내 최근 경험으로는 브라우저에 렌더링된 가변적인 HTML5 Canvas 태그 정보를 저장해야 하는 상황을 겪었다.) 일반적으로 RDBMS에서 가변 데이터를 다뤄야할 때 EAV 패턴을 사용하거나, VARCHAR 컬럼에 JSON 문자열을 그대로 저장하는 방법을 사용하는데 2가지 방법 모두 최선책은 아니다. 최근의 RDBMS는 NoSQL에 대응하여 네이티브 JSON 데이터 타입과 연관된 쿼리 함수를 제공하고 있고, 이 방법은 RDBMS에서 가변 구조의 데이터를 저장하는데 있어 최선책이라고 말할 수 있다. 이번 글에서는 Spr..
개요 이번 글에서는 Spring Boot 기본 프로젝트에 AssertJ 만을 추가하여 프로젝트에 구현된 REST API에 대한 유닛 테스트를 작성하는 방법을 간단히 정리하였다. build.gradle.kts 프로젝트 루트의 build.gradle.kts에 아래 라이브러리를 추가한다. dependencies { testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.assertj:assertj-core:3.23.1") } @SpringBootTest 클래스 작성 유닛 테스트의 본체가 되는 클래스를 작성할 차례이다. 실제 컨트롤러에 대응되는 유닛 테스트는 개별 클래스로 작성하고 본체 클래스에서..
개요 RFC 7386에 해당하는 JSON Merge Patch 스펙에 따르면 HTTP PATCH 요청시 Partial Update의 대상이 되는 필드들을 가변적으로 전달할 수 있어야 한다. 문제는 Spring Boot 기반의 기본 프로젝트 구성으로는 특정 필드를 null로 교체하라는 것인지, 교체 대상이 아니라는 것인지 식별할 수 있는 방법이 없다는 것이다. 이번 글에서는 이를 해결하기 위해 등장한 Jackson 기반의 JsonNullableModule 모듈을 소개하고 사용법을 소개하고자 한다. build.gradle.kts 아래와 같이 jackson-databind-nullable 라이브러리를 프로젝트에 추가한다. dependencies { implementation("org.openapitools:j..
- Total
- Today
- Yesterday
- spring
- Kendo UI Web Grid
- Eclipse
- Spring MVC 3
- jsp
- bootstrap
- Tomcat
- Docker
- maven
- 자전거
- JavaScript
- CentOS
- 평속
- JHipster
- 태그를 입력해 주세요.
- 구동계
- kotlin
- node.js
- graylog
- MySQL
- Kendo UI
- 로드 바이크
- Spring Boot
- chrome
- 로드바이크
- jpa
- jstl
- DynamoDB
- java
- 알뜰폰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |