본문 바로가기

Programing

(391)
실패하는 테스트부터 만들기 패턴 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 ..
[블리자드] 장기 미이용 계정의 휴면 전환 안내 후 로그인 안되는 현상 블리자드 회원 가입을 11월에 해서 그런지 11월에 장기 미이용 계정의 휴면 전환 안내 메일이 또 왔다. 일단 구입했던 게임이 있으니 로그인을 통해 휴면 전환은 막는 것이 좋을 것 같아서 로그인을 했다. 그런데 이메일, 비밀번호를 넣고 로그인 버튼을 눌렀으나 overview 로 이동하지 않고 계속 로그인 창이 떴다. 혹시나 싶어 로그인 문제 해결을 눌렀다. 벌써 계정 잠김이 되었나 싶어서 계정 잠김 해제을 눌러 해제 절차를 했다. PASS 인증으로 본인 인증을 수행한다. 이후에 다시 로그인을 하니 그 동안 약관이 많이 바뀌었는지 세 개의 약관에 대해 동의 화면이 나타났다. 동의를 하고 계속 버튼을 눌렀더니 로그인이 잘되지 않았다. (다시 로그인 화면으로 나왔는지 또 다른 약관 동의가 나왔는지 블로그를 기..
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를 사용하게 되면 구현체에 따라 반환하는 예외가 다양해질 수 있기 때문이다. 세부 사항의 예외가 프레임워크를 넘어 던져지면 구현체의 예외를 알아야 ..