본문 바로가기

[GetTogether] macOS 용 자소교정기 - 발단 2020년 2월이 되어 상반기가 끝나서 평가를 했다. 평소 프로젝트를 디렉토리로 관리를 해서 ls 명령을 파일로 만들어서 쓰려고 했는데 한글 자소가 풀리는 현상이 있었다. 예) 위의 폴더를 ls 명령과 리다이렉션을 이용하면 디렉토리 목록을 파일로 만들 수 있다. 하지만 list.txt 파일의 내용은 아래와 같았다. 한글의 자소가 풀어졌던 것이다. 다만 이것은 텍스트 에디터 Sublime Text 2 이 유니코드의 NFD를 제대로 처리를 못하고 있어서 이렇게 보이는 것이다. NFD를 처리하고 있는 기본 텍스트 편집기는 아래와 같이 제대로 보인다. 결국 mac OS에서 윈도우로 옮겨진 파일 이외에도 내부적으로 NFD로 구성된 한글이 문제가 발생될 수 있는 것을 경험한 것이다. 그래서 NFD로 되어 있는 파일..
[macOS] 주 디스플레이 변경하기 기본적으로 보조 모니터는 주 디스플레이로 설정이 안되어 있다. 나의 경우는 맥북을 제일 왼쪽에 두고 사용을 하는데 이게 고개를 돌려야 해서 불편하다. 처음 뜨는 윈도우나 alfre, 볼륨 표시도 주 디스플레이에 나오기 때문이다. 하지만 변경하는 법이 있었다는... 여러 창들 중에 위에 하얀색 메뉴바같은 모양이 있는데 그것이 붙어있는 네모가 주 디스플레이다. 하지만 너무 작아서 이게 변경이 된다는 생각을 못했다. 아래 그림처럼 마우스 커서를 위에 두고 드래그 하면 옮길 수 있다. 아래 처럼 해당 회색 길다란 네모를 드래그를 해서 주 디스플레이로 사용할 곳에 드롭을 하면 된다.
[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 =..
[JPA] N+1 문제 면접 때 자주 나오는 단골 문제 N+1 Ploblem이다. 내가 맡고 있는 팀은 그동안 테이블을 비정규화 해서 사용을 하고 있었기에 엔티티가 관계를 맺고 있지 않아서 이 문제를 만날 일이 없었다. 이번에 현금영수증 관련 기능을 개발하면서 그동안 중복저장하던 데이터를 좀 효율적으로 사용하기 위해 정규화를 해서 테이블을 쪼갰다. 드디어 N+1 문제를 만났다. EntityA, EntityB 가 있는데 EntityB 안에 EntityA를 포함하고 있다고 치자. FetchType이 EAGER 라면 EntityB를 조회하면 자동으로 EntityA 를 조회하는 쿼리까지 수행이된다. 조회하는 EntityB의 개수가 10개라면 각각 관련된 EntityA까지 추가로 +10회 조회가 되어 총 11회의 조회가 발생한다. 그렇..
[Hibernate] JPA 스키마 검증은 어떻게 수행될까? 실제 DB와 엔티티가 일치하는지 애플리케이션이 동작할 때 검증을 하도록 설정이 되어 있다. 만약 일치하지 않는 경우가 발생하면 예외를 던지며 애플리케이션을 멈추어 조기에 문제가 있음을 알 수 있게 한다. DB에 무엇인가 쿼리를 날려서 일치여부를 확인할 것인데 쿼리도 보이지 않아서 파게되었다. 일부러 예외를 발생시키고 예외의 stacktrace를 찾다보니 SpringHibernateJpaPersistenceProvider 에서 createContainerEntityManagerFactory 에서 시작할 수 있었다. package org.springframework.orm.jpa.vendor; class SpringHibernateJpaPersistenceProvider extends HibernatePer..
[oos] Garmin - Looks like our laces game undone 자주는 아닌데 처음 본다. "Looks like our laces game undone" "우리의 레이스 경기들이 끝나지 않은 것 같습니다.' 피트니스를 서비스에 비해 만든 임시 페이지 같다.
[Alfred] 워크플로우 - 단축키로 파일 옮기기 Alfred를 2020년 5월 12일에 구입했다. 주 목적은 snippet이었지만 다른 기능이 많이 있었다. 그중 돋보이는 것은 여러 일련의 작업을 쉽게 하도록 해주는 워크플로우(workflow)인 것 같다. 어제부터 사용해서 아직 많이 있지는 않지만 처음 써보면 어느정도 시행착오가 있기 때문에 기록해두었다. 나중에는 나도 까먹을지 몰라. 현제 Alfred 4버전 기준으로 설명을 한다. Workflows 메뉴를 선택하면 현재 목록을 1단계에서 보여주고, 선택하면 해당 워크플로우가 어떻게 구성이 되었는지 알 수 있다. 회사에서 이모지를 많이 만들고 있는데 만들고 나면 휴지통에 버리지 않고 이모지를 모아두는 디렉토리에 이동을 한다. 액션은 크게 세 가지이다. 1. Finder를 연다. 2. 단축메뉴에서 sl..