Programing/JVM(Java, Kotlin) (97) 썸네일형 리스트형 [JPA] 엔티티의 연관관계 시행착오 회사에서 JPA를 사용하고 있었지만 테이블이 비정규화되어 있어서 테이블간에 join이 불필요했다. 엔티티 역시 연관관계를 가지지 않았기에 단순하게 CRUD 정도만 하면 되서 복잡도는 낮았다. N+1 문제가 발생할 일이 없다. 대신 불필요한 데이터를 중복적으로 저장을 하기 위한 오버헤드가 존재했다. 이번에 현금영수증 관련 개발을 하면서 약간의 정규화를 해서 테이블의 연관관계를 갖도록 설계를 진행했다. 그런데 데이터를 저장하면서 부터 난관에 봉착했다. 예를 들면 아래와 같은 특정 필드가 값을 기본값을 가지지 않는다는 등의 알 수 없는 메시지를 만났다. Caused by: java.sql.SQLException: (conn=2575762) Field 'CASH_RECEIPT_REQUEST_ID' doesn't.. [Java] Scope shadowing과 DCL51-J 가끔 sonarqube 돌려보면 DCL51-J 에 대한 코드 냄새가 잡힌다. 예를 들면 아래와 같다. 5번째 라인에서 지역변수 value를 사용하면 멤버변수인 value와 이름이 동일한데 사용했다고 경고를 한다. public class Foo { private String valueType; public void foo(SomeParameter someParameter) { ValueType valueType = someParameter.getValueType(); if (valueType != null) { this.valueType = valueType.name(); } } } 이럴 경우 어떠한 방법이 좋을까? 방법1. 지역 이름을 바꾼다. - 쉬우면서 명시적인 방법이다. public class Fo.. [Java] 내가 사용하는 GC 알고리즘은 무엇일까? 자바에서는 보통 아래 다섯가지를 주요 GC 타입을 기술한다. Serial Garbage Collector- S GC Parallel Garbage Collector- P GC CMS Garbage Collector- CMS GC G1 Garbage Collector- G1 GC The Z Garbage Collector- ZGC 웹에서 기본 CG를 찾아보면 자바 버전에 따라 달라졌음을 알 수 있다. stackoverflow: Default garbage collector for Java 8 Java 7 - P GC Java 8 - P GC Java 9 - G1 GC Java 10- G1 G 시간대에 따라 힙의 증감 톱니바뀌는 다름을 알 수 있다. 트래픽이 적은 새벽 3시~8시에는 주기가 길고, 많은 주간.. [Java] JMM 에 대한 글들 자바에서 동시성에 대해 알기위한 기초. 자바 메모리 모델의 줄임말 JMM에 대한 JSR-133 스펙을 대신할 수 있는 좋은 글들이 있어서 블로그에 링크를 달아둔다. Java 5의 동시성 라이브러리를 많이 만든 더그 리(Doug Lea)의 The JSR-133 Cookbook for Compiler Writers 그림이 곁들어져 있는 Aleksey Shipilёv의 Close Encounters of The Java Memory Model Kind [Java 11] 자바11 에서 테스트가 깨진다!? Spock Framework 로 테스트 코드를 짜고 있다. 이상하게 자바8에서는 잘 동작하던 것이 11에서 깨지는 것이 발견되었다. 두 개의 테스트가 실패했는데 공통점은 인터페이스를 익명클래스로 상속해서 오버라이딩하는 부류의 코드였다. 결국 Spock Framework에서 제공하는 Stub()으로 그 인터페이스를 대체했더니 사라지긴 했다. 에러 스택은 아래와 같았다. 클래스로더가 테스트 메소드에서 오버라이딩한 클래스를 로딩을 못하는 느낌이 든다. (모듈 때문일까?) java.lang.ClassFormatError: Illegal method name "어떤 테스트..." in class com/tistory/namocom/service/FooSpec$1 at java.base/java.lang.Class.. [Java] Object.hashCode JavaDoc - History Java 1.3.1 hashCode public int hashCode()Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no i.. [Java] "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."? 자바의 정석 453쪽에 보면 "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."라는 말이 나와있다. 물론 Object의 hashCode는 오버라이드가 가능하므로 다음과 같이 코드를 짠다면 무조건 같은 해시코드만 반환이 될 것이다.public class Foo { @Override public int hashCode() { return 1; } public static void main(String[] args) { Foo foo1 = new Foo(); Foo foo2 = new Foo(); System.out.println(foo1 == foo2); System.out.println(foo1.hashCode() == foo2.hashCode()); } }위의 코드를 실행한다면false tru.. [java] Java 8의 시간은 10000년을 파싱 못한다? 10000년까지 살아 있을지는 모르겠지만 테스트 케이스를 만들었는데 LocalDate.parse("10000-01-01") 위와 같은 코드는 아래와 같은 파싱 예외가 발생한다. java.time.format.DateTimeParseException: Text '10000-01-01' could not be parsed at index 0 at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) at java.time.LocalDate.parse(LocalDate.java:400) at j.. 이전 1 2 3 4 5 6 ··· 13 다음