프로그래밍/Kotlin 14

Kotlin + JPA 의 val id 이슈

kotlin을 이용해 아주 잘 쓰고 있었다. 그런데, jpa를 만나기 전까지는 그랬다.Entity를 어떻게 구성 할까 하다 늘 고민이 있었다. Data class로 쓰다가, Class로 쓰다가~ 이것 저것 하다가 id만 불변으로 설정 하자. @Entity@Table(name = "target")class Target( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column val id: Long = 0,) { // 기타 코드}id를 불변으로 처리 하니, 바뀔 일은 없겠지! 하는 순간, 문제가 발생 한다. Jpa 관련 된 ItemReader의 경우에는 id를 정상적으로 잘 가져오지만,  @Bean @StepScop..

Rest API와 Grpc API 서버를 하나로 서비스 할 수 있다고?!

Rest API와 Grpc API 서버를 하나로 서비스 할 수 있다고?! - 부제 (armeria + kotlin + spring boot integration)결론적으로 내가 하는 게 아니라, armeria가 다 해줍니다. (킹왕짱 armeria의 아버지 이희승님 찬양 합니다.) 요즘은 armeria를 붙여서 써 보고 있는 중인데, armeria의 장점은 크게 보면, 아래와 같다.비동기 웹 프레임워크grpc, graphql, thrift 동시 지원 가능 (한 서버로 프로토콜 다르게 서빙이 가능한 최고의 장점)spring 과도 통합이 가능하다.spring은 크게 보면, 2가지가 있다.spring frameworkspring webfluxarmeria는 spring webflux와도 연동이 가능하고, sp..

kotlin - jackson 관련 이슈 (토비의 스프링 6 강의)

토비님의 스프링 6 강의를 듣다가, 아래와 같은 코드를 입력 했었다. (자바로 안하고, 코틀린으로 작성 했을때의 문제이다)data class Payment( val orderId: Long, val currency: String, val foreignCurrencyAmount: BigDecimal, val exchangeRate: BigDecimal, val convertedAmount: BigDecimal, val validUntil: LocalDateTime,)import com.fasterxml.jackson.annotation.JsonIgnorePropertiesimport java.math.BigDecimal@JsonIgnoreProperties(ignoreUnknown = true)..

ktlint lint 적용

ktlint 정상혁님이 써주신, kotlin lint를 위한 가이드 문서가 잘 소개되어 있습니다. https://blog.benelog.net/ktlint 해당 방식에서는 크게 보면 총 2가지의 방식을 설명하고 있습니다. gradle 빌드 설정 IntelliJ 설정 위와 같은 방식 중에서 review repo, point repo에 도입한 방식은 첫번째 방식인 gradle build 설정을 통한 kotlin lint를 도입하였습니다. https://kotlinlang.org/docs/coding-conventions.html kotlin 언어의 coding convention은 kotlin official로 정의를 하고 있는 특정한 규약들이 있습니다. (java의 경우, Google style guide..

kotest 관련 @Transactional rollback 안되는 이슈

test 코드의 상위 패키지 레벨에 아래 설정을 넣어준다. object KotestConfig : AbstractProjectConfig() { // rollback 관련 동작 안해서 아래 설정 추가 override fun extensions() = listOf(SpringTestExtension(SpringTestLifecycleMode.Root)) } https://kotest.io/docs/framework/project-config.html Project Level Config | Kotest Kotest is flexible and has many ways to configure tests, such as configuring the order of tests inside a spec, or h..

Kapt 관련 오류시 참조 (superclass access check failed)

superclass access check failed: class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler (in unnamed module @0x37be58b7) cannot access class cohttp://m.sun.tools.javac.main.JavaCompiler (in module jdk.compiler) because module jdk.compiler does not export cohttp://m.sun.tools.javac.main to unnamed module @0x37be58b7 위와 같은 오류가 발생하길래 뭔가 했더니, Java9 이후부터 모듈 시스템이 등장 했는데, 이때문에 이런 오류가 발생하는 것 같다. JDK..

kotlin + junit의 생성자 주입시 오류

kotlin의 경우 생성자 주입을 그냥 하게 되면, 오류가 발생하게 되는데, 아래처럼 해결 하는 방법이 있다. 1. @Autowired constuctor를 사용하는 방법 class SimpleServiceTest @Autowired constructor ( val simpleService: SimpleService ) { @Test fun `이렇게 하면 결과가 나온다`() { } } 2. @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) 를 활용하는 방법 @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) class SimpleServiceTest ( val simple..

kotest 생성자 bean 주입 오류 - Specs must have a public zero-arg constructor

kotest에서 빈을 생성자 주입으로 쓰려고 하면, Specs must have a public zero-arg constructor 오류가 발생 할 수 있다. 이 때에는 kotest-extension-spring 모듈이 필요로 하다. kotest extension spring 라이브러리가 두개가 검색 되곤 하는데, 헷갈리면 안된다. https://kotest.io/docs/extensions/spring.html Spring | Kotest Kotest offers a Spring extension that allows you to test code that uses the Spring framework for dependency injection. kotest.io 실제 docs를 보면, 1.1.3 ..

반응형