본문 바로가기

Programing

(403)
[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..
[JobRunr] 시작하기 요약1. https://start.spring.io/ 에서 의존성은 Spring Web만 선택하여 생성2. JobRunr 의존성 추가3. Spring Data JPA, H2 의존성 추가4. JobRunr 대시보드 켜기5. 지연된 작업 수행 수행진행 배경주기적으로 수행하는 작업이나 특정 시간을 두고 동작하는 작업은 스프링 스케쥴러이나 스프링 배치로 구현이 가능하다.하지만 스프링 배치는 배치 처리 작업을 지원하는 강력한 프레임워크라는 장점이 있지만, 초기 테이블 구성 등의 다양한 설정이 필요하고 배치 작업을 처음 접하는 개발자에게 학습 곡선이 있다는 단점도 있다.반면 스프링 스케쥴러는 기존 환경에 간단하고 쉽게 구성을 할 수 있다는 장점이 있는 반면, 2개 이상의 인스턴스가 있는 분산 환경에서 적용할 경우 ..
[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..
실패하는 테스트부터 만들기 패턴 Mincho에게 버그에 대해 개선을 할 때 코드부터 고치지 말라고 종종 이야기한다. 대신 실패하는 테스트를 먼저 만들고 실패하는 것을 재현하고 이후 코드를 수정하여 성공하는 테스트로 만들라고 했다. 이런 패턴은 포프TV의 효율적인 테스트 코드 작성법에 나오는 것과 동일하다. 우연히 이동욱 님 블로그 기억보단 기록에 갔다가 Spring Batch에 PR을 올리셨던 것이 거절당한 것을 보게 되었다. Spring Batch Lead인 Mahmoud Ben Hassine가 comment를 남겼는데 이유는 명확했다. 실패하는 테스트가 없었기(There is no failing test in this PR) 때문이었다. 오픈소스 커뮤니티에서도 실패하는 테스트는 유효하다는 것을 느꼈다.
[Hibernate] Envers - 테스트 돌려보기 Envers의 코드 파악을 위해 테스트 코드를 먼저 파악해보기로 했다. 어떤 테스트를 먼저 돌려볼까 했는데.. AuditColumnNameTest 라는 테스트를 선택했다. - 패키지: org.hibernate.envers.test.integration.naming 데이터베이스 관련 테스트는 Fixture 설정하는 것이 복잡하고 공통적으로 필요하므로 추상클래스 상속받는 구조로 되어 있었다. 테스트 코드가 수행하는 작업은 @Audited 의 modifiedColumnName 기능이 잘 작동하는지에 대한 것이다. modified란 값이 변경되었는지 여부를 의미한다. 해당 컬럼의 데이터가 바뀌었는지를 나타내는 플래그(Flag) durgkfdlek. 테스트를 위한 Entity 클래스는 NamingTestEntit..
이름 짓기(naming things)은 어렵다. 도입 Phil Karlton은 컴퓨터 과학에서 어려운 두 가지를 아래와 같이 이야기했다. (Martin Folwer/Jatinder Singh이 전함) There are only two hard things in Computer Science: cache invalidation and naming things. 컴퓨터 과학에서 어려운 것은 딱 두 가지다. 캐시 무효화, 그리고 이름 짓기 이름은 여러 문맥에 있다. 파일명, 클래스명, 지역 변수명, 데이터베이스 테이블, 컬럼명 등... 오늘의 사례 오늘은 테이블의 컬럼 이름을 짓는 것으로 논쟁을 했다. 슬랙에 오후 4시 48분에 글타래를 시작했다. 마지막 스레드는 오후 6시 9분이었다. 이름 짓기가 어려웠던 이유는 우리말로도 어려웠던 용어들이었기 때문이다...
Java 17 으로 업데이트할 이유가 하나 더 생겼다. Spring Framework 의 메이지 버전 업데이트인 5.x → 6.x 에서는 Java LTS인 11 에서 17로 기본 버전(baseline)이 올라갔다. 그 뿐만 아니라 Java EE 8 에서 Jakarta EE 9+ 로 바뀌면서 패키지 네임스페이스도 jakarta 를 써야하는 변화도 있다. 아직까지는 스프링 프레임워크와 스프링 부트의 과거 버전과의 혼용의 과도기라서 비즈니스 적인 개발을 우선적으로 처리하여 유예하고 있었다. 3일전 (2023-08-04)부터 sonarcloud 분석을 돌리면 아래와 같은 메시지가 밑에 나타났다. The version of Java (11.0.20) you have used to run this analysis is deprecated and we will stop ..