본문 바로가기

Programing

(391)
[Java] count++, count+=1, count = count + 1 차이는 아래와 같은 반복문이 있었는데 public class ForSumFrom1To100Example { public static void main(String[] args) { int sum = 0; for (int i = 1; i
[Java] Comparable vs Comparator 비교 Q. 질문 compareble은 정해진 기준으로 정렬할 때 사용하고 comparetor는 사용자가 원하는 기준을 커스텀해서 사용할 때 사용한다고 배웠는데 compareble도 리턴값만 수정하면 사용자가 원하는대로 기준값을 설정 할 수 있는 것 아닌가요? 이 둘의 차이점과 사용 용도의 차이를 잘 모르겟습니다. 인터페이스의 정의 다른 것을 찾아보기전에 각 인터페이스의 정의를 보고 넘어가자. Comparable 인터페이스 (docs) package java.lang; public interface Comparable { public int compareTo(T o); } Comparator 인터페이스 (docs) package java.util; @FunctionalInterface public interfa..
[Java] 참조(Reference)와 주소의 관계 자바 카페에서 2020-07-24 에 논쟁을 했던 내용이다. 어떤 자바를 공부하는 사람이 아래와 같은 질문을 했다. 질문 내용: equals(), == 질문드립니다. - 질문 내용 : 안녕하세요. 자바에서 equals(), ==는 주소값이 같은지 확인하는거라 들었는데요. class Person { String name; public Person(String name) { this.name = name; } @Override public boolean equals(Object obj) { if(!(obj instanceof Person)){ return false; }else{ return this.name == ((Person)obj).name; } } } 위 예제 처럼 equals를 오버라이딩 했습니다..
[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) { M..
[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..