본문 바로가기

스프링

(20)
[코틀린]Sort객체를 QueryDsl의 OrderSpecifier로 바꿔서 정렬하기(pageable도?) import com.querydsl.core.types.Order import com.querydsl.core.types.OrderSpecifier import com.querydsl.core.types.dsl.EntityPathBase import com.querydsl.core.types.dsl.PathBuilder import org.springframework.data.domain.Sort class QueryDslUtil { companion object { fun sortToOrderSpecifier( sort: Sort, type: T, ): Array { val resList = mutableListOf() val pathBuilder = PathBuilder(type.type, type...
스프링 테스트시 application.yaml을 작성했는데 읽지못할때 평범하게 테스트작성중이었는데 application.yaml을 읽지못하고 테스트가 메인의 설정파일을 읽었다 이유는 application.yaml이 아닌 application.yml이라고 적어야 읽는다 끝
과제 질문했던거 답변 저장 1.페이크레포지토리가 로직이 복잡해지면 못믿겠다 쓰는게 맞냐? a)쓰지말고 모킹이나 스텁써서 호출여부만 확인하던지,테스트용 db연결해서 통합테스트로 진행해라 내생각:맞는거같음 페이징들어가고 뭐하고 하면 페이크레포지토리의 테스트를 만들고싶을정도였음 2.로깅은 어떤식으로 해야하나 a)딱히 답이있는건 아니고 프로젝트 정책에 따라서 정해라 3.requestBody에서 localDate를 포트어댑터로 약의존시킨값을 받을때 어케해야하냐? a)사용하는 라이브러리에 따라 다르고,그안에 컨버터가 있을수도있으니 확인해보고,date류면 가능하면 json툴 안에서 해결해보고,그냥 스트링으로 받아서 컨트롤러에서 변환하는거도 나쁘지않음,dto에 문자를 날짜로 변환하는 기능을 넣어도됨 내생각:그냥 스트링으로 받아서 dto에서 변환..
스프링에서 dto의 LocalDate.now()의존성 풀기 이전글 https://rkrkrr0101.tistory.com/126 모든코드는 코틀린임 일단 밸리데이션의 LocalDate.now()는 해결했는데,문제는 dto에서 따로 검증하는 로직중에서 LocalDate.now()를 사용하는 로직이 있었음 이거도 테스트에서 LocalDate.now()를 의존하니까 의존성을 약하게해야했음 @PostMapping("/aa") fun save(@Valid @RequestBody aaDto: AaDto){ ... } data class AaDto(...){ init { ... val a=LocalDate.now() ... } } 대충 이런식 이래서 이런식의 문제를 해결할때 사용하는 가장 국룰패턴인, 인터페이스를 뽑고, 구현체에 해당객체를 바로 리턴한다음, @Componen..
스프링 테스트에서 validation을 테스트 하면서 localDate.now()의존성 풀기 모든 코드는 코틀린임 어노테이션으로 LocalDate나 LocalDateTime 벨리데이션을 한걸 테스트 하다보면 테스트에서 localDate.now()를 사용하는,즉 외부에 따라 값이변하는거에 의존하는게 굉장히 찝찝해짐 그래서 이걸 해소했음 먼저 테스트에서 밸리데이션을 하는거부터 해야함 테스트에서 밸리데이션은, import jakarta.validation.Validation val validator1 = Validation.buildDefaultValidatorFactory().validator or val validator=Validation.buildValidatorFactory().validator 를 통해 할수있고,만약 따로 시간고정할필요가 없으면 buildDefaultValidatorFact..
코틀린 스프링배치에서 태스크릿 사용시 예외 해결 직접 태스크릿을 만들때 class ValidatedParamTaskLet(private val fileName:String):Tasklet{ override fun execute(contribution: StepContribution, chunkContext: ChunkContext): RepeatStatus? { println(fileName) println("valid batch") return RepeatStatus.FINISHED } } 이렇게하면 예외가 남 org.springframework.beans.factory.BeanCreationException Caused by: org.springframework.aop.framework.AopConfigException: Could not gene..
spring jpa+mysql fulltext search+testcontainer 사용+테스트만들기 한 3일동안 이거랑만 싸웠다..힘들었다모든코드는 코틀린임  일단 mysql fulltext search(전문검색)를 jpa 네이티브쿼리 없이 사용하려면 하이버네이트의 펑션컨트리뷰터를 상속받은 커스텀펑션컨트리뷰터(이름은 알아서지으셈)를 만들어줘야함 class CustomFunctionsContributor:FunctionContributor { override fun contributeFunctions(functionContributions: FunctionContributions?) { if(functionContributions ==null){ throw IllegalAccessException() } functionContributions..
스프링부트 테스트시의 testcontainer 사용법 및 후기 사용법은 먼저 의존성 추가후 testImplementation 'org.testcontainers:testcontainers:1.19.4' // TC 의존성 testImplementation 'org.testcontainers:junit-jupiter:1.19.4' // TC 의존성 testImplementation 'org.testcontainers:mysql:1.19.4' // mySQL 컨테이너 사용 testImplementation 'org.testcontainers:jdbc:1.19.4' // DB와의 JDBC connection 해당 테스트할곳에 @DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace..