Spring Boot
[Spring Boot] Assert 가 동작하지 않는다?(feat. Kotlin)
발단assert 를 통한 로직 검증에서 조건이 틀렸음에도 검증되지 않고 Pass-Through 한 경우가 있어 정리합니다. Assert 란 무엇인가?var a = 1var b = 2assert(1 영단어로써 의미는 `주장하다` 라는 뜻을 가지고 있습니다.코드에서는 assert 로 묶은 조건이 옳음을 주장하다 정도로 볼 수 있을 거 같습니다. _Assertions object @file:kotlin.jvm.JvmMultifileClass@file:kotlin.jvm.JvmName("PreconditionsKt")package kotlin@PublishedApiinternal object _Assertions { @JvmField @PublishedApi internal val ENABLED..
[Spring] Spring Security + MockMvc 로 테스트시 주의할 점(feat. kotlin)
발단Spring Security 와 MockMvc 를 Kotlin 환경에서 검증을 하던 도중 설정(config)이 옳음에도 테스트의 결과가 일관된 반응을 하는 현상을 발견하여 그 이유를 알아보고 왜 그러하였는지 과정을 작성합니다. Kotlin 고차함수 & 함수형 인터페이스 Unit) { action() }고차 함수는 함수를 인자로 받거나 함수를 반환하는 함수 입니다. Kotlin 에서는 함수 매개변수를 사용할 수 있습니다. 람다 표현식val sum: (Int, Int) -> Int " data-og-host="atsky.tistory.com" data-og-source-url="https://atsky.tistory.com/77" data-og-url="https://atsky.tistory.com..
[JPA] 테이블간의 연관관계 연결 실패(feat. cannot be cast to java.io.Serializable)
발단두 테이블 간의 연결관계 설정 후 해당 테이블에 대한 조회시 발생한 오류로써 이를 해결하는 과정을 작성하였습니다. 환경Spring Boot 2.7.15Hibernate Core 5.6.15.Final 문제 환경 코드(예시) [HHH-7668] - Hibernate JIRA hibernate.atlassian.net// 링크에서 참조한 예제 테이블 코드 입니다.@Entity@Table(name = "USERS")public class User { @Id @GeneratedValue protected Long id; @NotNull @Column(unique = true) protected String customerNr;}@Entitypublic class Item { ..
[JPA] hibernate bytecode enhancement 적용시 발생하는 오류 해결 (Failed to apply plugin 'org.hibernate.orm', gradle, kotlin)
발단OneToOne 관계를 맺은 테이블에서 Lazy Initialization 을 의도하였으나 의도한 바대로 동작하지 않고 FetchType.Eager 처럼 동작하여 이를 해결하기 위해 적용한 bytecode enhancement plugin 이 찾을 수 없다는 이유로 적용되지 않는 이슈를 해결하는 과정입니다. 환경Spring Boot 3.2.5data-jpa-starterhibernate-core 6.4.4.Final OneToOne 사용시 FetchType.Lazy 가 의도대로 동작하지 않는 이유 [JPA] bytecode instrumentation 을 이용한 lazy loading 활성화-10. @OneToOne 의 양방향 연관 관계 다대일, 일대다, 다대다 와는 다르게 @OneToOne 매핑은 ..
[Spring Boot] Spring Security 설정 과정에서 `please use permitAll via HttpSecurity#authorizeHttpRequests instead` 문구 발생(feat. ignoring)
발단spring security 를 적용하여 web 의 static resource 에 대한 접근시 권한과 무관하게끔 처리 하기 위한 설정으로 ignoring 을 사용하였는데 제목과 같은 문구가 발생하여 이를 제거하며 최적화한 과정을 정리합니다. 환경Spring Boot 3.1 Spring Security 6.1 # Spring Boot 3.1 버전 이상의 환경에서의 적용을 설명합니다. 문제 내용@Beanfun webSecurityCustomizer(): WebSecurityCustomizer { return WebSecurityCustomizer { web: WebSecurity -> web.ignoring().requestMatchers("/api/v1/test1") }}위 ..
[Spring] Custom Enum Value 를 Swagger 문서에 노출시키고 싶으면 어떻게 해야할까?
발단swagger 를 통해 서버의 문서를 작성하던 중 Enum 타입으로 정의한 값을 제공하려 할 때 의도한 값이 문서에 노출되지 않고 Enum 으로 정의했던 변수의 이름이 노출되고 있어 이를 수정하기 위해 시도하였습니다. 라이브러리 문서문서를 통해 enum 에 대한 값을 변화하는 기능은 현재 제공하고 있지 않은듯 합니다. OpenAPI 3 Library for spring-bootLibrary for OpenAPI 3 with spring boot projects. Is based on swagger-ui, to display the OpenAPI description.Generates automatically the OpenAPI file.springdoc.org 코드enum class TestEnu..
[Spring Boot] Access denied for user 'root'@'localhost'(using password: yes)
발단테스트를 위해 생성한 프로젝트에서 DB 연결이 정상적으로 이루어지지 않았다. Client(HeidSQL, DataGrip)으로는 연결이 되었지만 Spring 에서 연결이 되지 않았기에 환경Spring Boot 3.2.5Mysql 8.0.36 설명다른 블로그를 찾아보니 `Access denied for user ...` 오류에 대한 해결방법은 3가지로 나뉜다. 하지만 본인은 아래 3가지 방법중 어떤 걸로도 해결되지 않았다. 1. Bitnami WAMP 로 인해 Listening 중인 서버가 동시에 떠있는 경우가 있는 듯 하다. - 보통 강의에서 사용되는 오픈소스 솔루션으로 PHP, Mysql 등의 프로그램을 쉽게 설치하는 방법인듯 하다. 2. 비밀번호 오류 - M..
[JPA] 연관관계를 맺은 객체에 대해 지연 로딩이 동작하지 않는다면(feat. kotlin, hibernate, lazy-loading)
발단 스케줄러 작업을 통해 주기적으로 DB 요청을 하는 상황에서 로그를 살펴보니 원하지 않았던 정보까지 요청하고 있어 어떻게 해결하게 되었는지 공유하고자 합니다. 환경 Spring Boot > 3.0 Kotlin Kotlin 의 final 정책 이해를 돕기 위해 간단히 Kotlin 의 정책에 대해 얘기해보고자 합니다. Effective Java, "Item 17: Design and document for inheritance or else prohibit it" `Effective Java` 2001 연도에 출판한 책으로 Java 의 효율적인 사용과 좋지만 흔히 사용되지 않은 개발패턴에 대해 언급한 저명한 서적입니다. 해당 책에서 `상속을 위해 디자인과 문서화 하지 않을거면 지양해라` 라는 챕터를 다룬..
[Gradle] Spring Boot + Gradle 환경에서 bootBuildImage 의 createdDate(생성 일자)의 표기가 1980년도로 되어있다면?(feat. kotlin, intellij)
발단 intellij 환경에서 gradle 플러그인을 통해 bootBuildImage 로 docker 의 image 를 관리할 때 생성일자가 과거로 설정되어있는 것을 확인하였다. 환경 Spring Boot 3.1.3(kotlin) build.gradle.kts 해결 tasks.withType{ ... createdDate = "now" // 또는 ISO 8601 규격에 맞는 값을 입력 } 참고 stack overflow 를 통한 원인 Spring Boot 2.3.0 buildpack builds image with creation date 40 years ago I've tried to use buildpack in a maven project with Spring Boot 2.3.0 running: m..
[Spring Boot] @ModelAttribute 로 맵핑하려는 대상의 depth 가 2 이상일 때 요청하였는데 오류가 난다면?(feat. kotlin)
발단EndPoint 에서 RequestBody 가 아닌 ModelAttribute 를 통해 핸들링할 때 DTO 가 2-depth 가 되며 생긴 문제를 공유하고자 합니다. 예시 코드@RestController@RequestMapping("")class TestController { @PostMapping("") fun hiPost( @ModelAttribute body: TestDto, ){ ... }}data class TestDto( var name: String = "", var testInnerDto: TestInnerDto)data class TestInnerDto( var age: Int) 오류 발생 1차 시도java.lang.NullPointer..