본문 바로가기

Programing/Framework

(73)
Spring Cloud OpenFeign - 연결 속성이 바뀌었다. 처음 스프링 클라우드의 OpenFeign 추가했을 때 설정은 아래와 같았다. 언제가 아래와 같이 IntelliJ IDEA에서 밑줄이 쳐있다는 것을 알게 되었다. Spring Boot 버전을 올리면서 Spring Cloud 버전도 올라갔을 것이다.아마도 버전이 바뀌면서 설정 프로퍼티의 이름이 변경되었을 것이다. 언제부터 바뀌었나?spring-cloud-dependencies: 2021.0.3스프링 부트 2.7.3일단 2022년 9월 7일 커밋으로 체크아웃을 해보니 spring-cloud-openfeign-core:3.1.3 에서는 프로퍼티가 syntax-highlight가 동작하고 있었다.대응하는 프로퍼티 파일은 org.springframework.cloud.openfeign.FeignClientPrope..
[Laravel] Scheduled Jobs 에러 수행 결과 받기 얼마전에 .env 파일 설정이 공백이 들어가 있어서 스케줄된 작업이 돌지 않았던 일이 있었다. 당시 환경 변수들을 .env 에서 getenv(), $_ENV, $_SERVER 등으로 자동적으로 가져올 수 있게 하는 의존성 패키지인 vlucas/phpdotenv 2.6.9 버전을 쓰고 있었다. .env 설정 정보에 공백이 들어가 있을 때 아래와 같은 메시지가 나오면서 작업은 수행되지 않는다.The environment file is invalid: Dotenv values containing spaces must be surrounded by quotes.https://github.com/vlucas/phpdotenv/blob/2e93cc98e2e8e869f8d9cfa61bb3a99ba4fc4141/src..
[Hibernate] Envers - 테스트 돌려보기 Envers의 코드 파악을 위해 테스트 코드를 먼저 파악해보기로 했다. 어떤 테스트를 먼저 돌려볼까 했는데.. AuditColumnNameTest 라는 테스트를 선택했다. - 패키지: org.hibernate.envers.test.integration.naming 데이터베이스 관련 테스트는 Fixture 설정하는 것이 복잡하고 공통적으로 필요하므로 추상클래스 상속받는 구조로 되어 있었다. 테스트 코드가 수행하는 작업은 @Audited 의 modifiedColumnName 기능이 잘 작동하는지에 대한 것이다. modified란 값이 변경되었는지 여부를 의미한다. 해당 컬럼의 데이터가 바뀌었는지를 나타내는 플래그(Flag) durgkfdlek. 테스트를 위한 Entity 클래스는 NamingTestEntit..
fastcampus: 실무 프로젝트로 배우는 Kotlin & Spring - Part 4/Ch02/03 오류 발견 위치: https://fastcampus.app/courses/211160/clips/779520?position=1248&organizationProductId=13720 Part 4. 실제 예제를 기반으로 자바 프로젝트에 코틀린 도입해보기 ch02. 자바 프로젝트(ToDo프로젝트) 코틀린으로 리팩토링 하기 03. 컨트롤러 레이어 리팩토링 22:51 자바로 되어 있는 코드를 코틀린으로 옮기는 것을 예제로 보여 주는 강좌였다. 18:04경에 Assert.notNull 을 코틀린의 checkNotNull로 바꾸는 부분이 있었다. 이 부분을 보면서 저 변환은 계약 위반이라고 생각했다. 그 이유는 무엇일까? 기존에 Assert.notNull 는 스프링이 제공해주는 Assertion utility이다. 코드를 ..
WebClient: 기본 헤더 설정을 Consumer 를 이용하기(Java/Kotlin) Java WebClient 에 공통적으로 사용하는 헤더가 있다면 defaultHeader 를 이용하여 설정해놓으면 매번 WebClient 사용할 때마다 설정할 필요가 없어진다. WebClient webClient = WebClient.builder() .baseUrl("http://markbucciarelli.com") .defaultHeader("Authorization", "Bearer 7e0af818e0564a238bbcf6b9a0f7c176") .build(); Authorization 는 알려져 있는 헤더이므로 org.springframework.http 패키지의 HttpHeaders 클래스의 상수에 이미 정의되어 있다. package org.springframework.http; public ..
[Spring] @Repository Bean에서 예외 변환 없이 전파하기 @Component 는 스프링 IOC 컨테이너에 Bean 을 등록할 때 붙이는 어노테이션이다. 실제 업무를 하다보면 @Controller, @Service, @Repository 로 유스케이스 별로 특정 의미를 더 부여하여 특징을 부여할 수 있다. 더 자세한 것은 스프링 레퍼런스 1.10.1. @Component and Further Stereotype Annotations 참고 @Repository 의 경우 다른 스테레오 타입과 달리 예외 변환기(Exception Translation)를 거친다는 것이 차이점이 있다. 이유는 하이버네이트나 JPA 같은 DAO를 사용하게 되면 구현체에 따라 반환하는 예외가 다양해질 수 있기 때문이다. 세부 사항의 예외가 프레임워크를 넘어 던져지면 구현체의 예외를 알아야 ..
[WebFlux] block()/blockFirst()/blockLast() are blocking, which is not supported in thread 후기 백엔드를 개발하다가 이제 회원 백엔드를 맡으면서 Spring WebFlux를 다루게 되었다. 아직 Reactive Stack에 대한 경험이 부족해서 도메인 객체를 포함해서 DB연결 및 Redis 연결을 동기식으로 처리를 했다. 그런데 이전에 개발된 회원 번호에 대한 유효성 확인을 하는 함수가 Mono 를 반환하게 되어 있었다. 어디서 들은 지식으로 block()을 이용해서 블로킹 처리를 하려고 했더니 아래와 같은 에러 메시지가 발생했다. block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-2 누가 이렇게 에러를 던지나 찾아보았다. Mono의 block()은 아래와 같이 구현되어 ..
Spring Boot: JPA(Hibernate) 네이밍 전략 spring.jpa.hibernate.naming.physical-strategy 및 spring.jpa.hibernate.naming.implicit-strategy 을 통해 테이블 이름이나 컬럼 이름에 대한 네이밍 전략 설정이 가능하다. 네이밍 컨벤션에는 여러가지가 있다. camelCase: 앞자는 소문자 단어 사이에 대문자 PascalCase: camleCase와 같은데 첫 글자가 대문자이다. Initial Capitals, Initial Caps, InitCaps 로도 불린다. snake_case: 모든 문자는 소문자(lowercase)로 단어간 구분은 언더스코어(_)로 구분한다. kebab-case: 모든 문자는 소문자(lowercase)로 단어간 구분은 대시(-)로 구분한다. ALL CAPS:..