본문 바로가기

Programing/Framework

(78)
[WIL] Spring Boot 3.4.0 - JPA 통합테스트 깨짐 이슈 스프링 부트를 3.3.5에서 3.4.0으로 올렸다.총 4293개의 테스트 케이스중에 15개의 에러, 1개의 실패가 발생했다. 1개의 실패는 spring-web의 DefaultResponseErrorHandler 코드의 변경으로 이루어졌다.3.3.5 업데이트글과 마찬가지로 getErrorMessage의 메시지 구성이 변경되어 깨지는 것이었다.이슈: https://github.com/spring-projects/spring-framework/pull/28958커밋: https://github.com/spring-projects/spring-framework/commit/f85c4e1ea714281c03287d1448dab9efcf81fc34Spring Cloud의 의존 버전이 2024.0.0가 아닌 202..
[Spring] Boot update 3.3.4 to 3.3.5, MethodArgumentTypeMismatchException 변경 사항 확인 by 테스트 코드 지난 주 스프링 부트 버전 업데이트를 진행했다.스프링 부트 버전 변화에 따라 스프링 프레임워크 버전도 업데이트가 되었다.spring boot 3.3.4: spring framework 6.1.13spring boot 3.3.5: spring framework 6.1.14프레임워크의 기능을 테스트할 때를 알기Zarar의 블로그에 좋은 소프트웨어 개발 습관들(Good software development habits)이라는 글을 본 적이 있다.GeekNews에  "프레임워크의 기능에 대한 테스트를 하지 않기"로 변역이 되어 있어서 무조건 프레임워크의 기능을 테스트하지 말자로 들릴 수 있다. 하지만 나는 "프레임워크의 기능을 테스트할 때와 하지 말 때를 알자"로 해석했다.Know when you're test..
[Spring] @Retryable과 @Transactional 는 순서에 따라 동작을 다르게 한다? 금주에 확인한 [Spring] 중첩된 @Transactional의 readOnly 동작 확인 관련해서 인터넷에서 찾아보다가 순서에 대한 글들을 발견했다.[끄적끄적] @Transactional 안에서 retry 사용을 주의하세요 ✔스프링 @Retryable 과 @Transactional의 주석 순서에 따른 프로세스 차이 ❓1번 글은 트랜잭션 안에서 재처리 처리되는 부분이 문제가 될 수 있겠다는 점에서는 동의를 했다.2번 글의 @Retryable과 @Transactional 는 순서에 따라 동작을 다르게 한다는 글을 보고 정말로 그런지 궁금해졌다. 왜냐하면 만약 '내가 프레임워크 개발자라는 관점'으로 생각해보았을 때, 만약 Annotation의 선언 순서에 따라 동작이 달라지도록 구현을 했다면개발자들이 예측..
[Spring] 중첩된 @Transactional의 readOnly 동작 확인 배경이번 주 진행했던 작업 중에 @Transactional(readOnly = true)가 붙은 리포지토리 메서드에서 데이터를 읽지 못하는 현상이 있어서 디버깅을 했다.가설가장 먼저 떠오른 원인은 Writer 인스턴스와 Reader 인스턴스간의 복제 지연(Replication Rag)이었다. 이전 회사에서 복제 지연으로 조회 데이터가 없었던 경험이 있었기 때문이다.당시 주문 도메인을 담당하고 있었다. 주문이 만들어지고 나서 메시지 큐로 이벤트를 보내는 역할이었다. 마침 큐를 소비(consume)하는 클라이언트가 API를 통해 주문 데이터를 조회를 하고 있었다. 문제는 API가 데이터 응답을 할 때 사용하는 DB는 Reader 인스턴스에서 읽도록 구현이 되어 있었다. 당시에는 이런 상황을 위해 Writer..
[Spring] @Cacheable - null 값도 캐싱이 되고 있었다. 발단백오피스에는 사번이 아닌 이메일을 통해 로그인을 하는 정책을 가지고 있었다.IP 대신 Domain 주소를 쓰는 것처럼 본인의 사번보다는 이메일이 외우기 쉽기 때문이다.시스템 내부적으로는 대리키인 사번으로 저장한다.따라서 이메일과 사번을 매핑이 필요했다.또한 입사나 퇴사 같은 이벤트가 발생할 경우에만 바뀌므로 자주 업데이트되지 않는 데이터 유형에 속했다.따라서 latency를 줄이고 불필요한 부하를 줄이기 위하여 DB에서 매번 조회하는 것보다 캐시에서 반환하도록 하고 있었다. 신규 개발자 분이 입사하셔서 DB상 매핑 데이터를 추가했는데 계속 매핑이 안되는 현상이 발생했다.왜 그럴까 고민을 했는데 속으로 혹시 NULL 값에 대한 캐싱 때문일까 생각을 했다. 디버깅으로 오픈소스 스터디오픈소스가 어떻게 동작..
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..