본문 바로가기

Programing/OpenSource

(45)
[Spock Framework] Mock vs Stub Spock Framework Reference Documentation 을 보면 다른 종류의 Mock Objects로 Stub을 소개하고 있다. 레퍼런스에서는 mock 은 stubbing과 mocking을 둘 다 할 수 있고 ,stub은 단지 stubbing 만 할 수 있다고 나와 있다. 가장 큰 차이는 stub은 몇 번 호출되었는지를 물어볼 수 없는 차이가 있다. 하지만 이것으로는 Mock() 와 Stub()을 언제 써야할 지 명확하지 않다. 우연히 처음에는 Stub()을 사용하다가 카운팅 여부를 확인해야 해서 이후에 Mock()으로 바꾸는 작업이 있었는데 이 side-effect로 다른 테스트 케이스가 깨지는 경험을 하게 되어 차이를 이제야 이해할 수 있었다. 예를 들어 아래와 같이 CancelSer..
[GetTogether] macOS 용 자소교정기 - 발단 2020년 2월이 되어 상반기가 끝나서 평가를 했다. 평소 프로젝트를 디렉토리로 관리를 해서 ls 명령을 파일로 만들어서 쓰려고 했는데 한글 자소가 풀리는 현상이 있었다. 예) 위의 폴더를 ls 명령과 리다이렉션을 이용하면 디렉토리 목록을 파일로 만들 수 있다. 하지만 list.txt 파일의 내용은 아래와 같았다. 한글의 자소가 풀어졌던 것이다. 다만 이것은 텍스트 에디터 Sublime Text 2 이 유니코드의 NFD를 제대로 처리를 못하고 있어서 이렇게 보이는 것이다. NFD를 처리하고 있는 기본 텍스트 편집기는 아래와 같이 제대로 보인다. 결국 mac OS에서 윈도우로 옮겨진 파일 이외에도 내부적으로 NFD로 구성된 한글이 문제가 발생될 수 있는 것을 경험한 것이다. 그래서 NFD로 되어 있는 파일..
[slf4j] MDC에 put만 계속한다면 MDC를 이용해서 Correlation ID 추적에 사용을 하고 있다. 스프링을 사용한다면 AsyncHandlerInterceptor 인터페이스를 구현한 HandlerInterceptorAdapter 를 상속받으면 preHandle 과 afterCompletion 메서드에 MDC에 값을 넣고 지우게 구현이 가능하다. import java.util.UUID; import org.slf4j.MDC; public class MDCInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { ..
[JPA] Hibernate + MariaDB : count(*)의 매핑이 BigInteger로 되는 이유는? 회사의 수지님이 퇴근 전 물어보아 찾아보게 된 MaraiDB의 JDBC 드라이버. EntityManager 를 통해 NativeQuery를 수행하는데 반환되는 타입이 Long으로 생각했는데 BigInteger 타입으로 반환되어 ClassCastException 가 발생했다고 한다. 간략하게 코드로 보면 아래와 같다. @Service public class CountService { private final EntityManager entityManager; @Autowired public CountService(EntityManager entityManager) { this.entityManager = entityManager; } public Long countIssue() { Query query =..
[Hibernate] JPA 스키마 검증은 어떻게 수행될까? 실제 DB와 엔티티가 일치하는지 애플리케이션이 동작할 때 검증을 하도록 설정이 되어 있다. 만약 일치하지 않는 경우가 발생하면 예외를 던지며 애플리케이션을 멈추어 조기에 문제가 있음을 알 수 있게 한다. DB에 무엇인가 쿼리를 날려서 일치여부를 확인할 것인데 쿼리도 보이지 않아서 파게되었다. 일부러 예외를 발생시키고 예외의 stacktrace를 찾다보니 SpringHibernateJpaPersistenceProvider 에서 createContainerEntityManagerFactory 에서 시작할 수 있었다. package org.springframework.orm.jpa.vendor; class SpringHibernateJpaPersistenceProvider extends HibernatePer..
[라이선스] Wunderlist 3.19.41 Wunderlist가 2020년 5월 6일부로 사용이 중단된다고 해서 라이선스 스냅샷을 찍어둔다. 목록 Wunderlist 3.19.41 Copyright © 2015 6 Wunderkinder GmbH All Rights Reserved 개인정보처리방침 - 임프린트 - 사용 약관 Imprint 6 Wunderkinder GmbH Karl-Liebknecht-Straße 32 10178 Berlin Contact Mail: hello@6wunderkinder.com Handelsregister AG Charlottenburg HRB 128663 B UstID DE815214657 Geschäftsführer Christian Reber Privacy Policy We, 6Wunderkinder GmbH ..
[Apache Lucene] Lucene의 의미는? 사실 사람의 이름이라 의미를 찾기는 어렵다. Lucene을 만든 Doug Cutting 의 아내의 미들네임이 Lucene인 것과 그의 아내의 할머니의 이름이 루씬이다. 출처: Barker, Deane (2016). Web Content Management. O'Reilly. p. 233. ISBN 1491908106
[tomcat] HttpServletRequest.getHeader 헤더를 보면 가끔 대소문자를 가리지 않고 동작하는 경우가 있어서 확인을 해보았다. package javax.servlet.http; public interface HttpServletRequest extends ServletRequest { /** * Returns the value of the specified request header as a * String. If the request did not include a header of the * specified name, this method returns null. If there are * multiple headers with the same name, this method returns the first head * in the reque..