현상ZonedDateTime 타입의 컬럼에 ZonedDateTime.now() 값 저장시 현재 시간보다 9시간 빠른 시간으로 저장 됨JPA DB insert log 에서는 현재 시간으로 저장 요청을 하지만, 실제 DB에는 9시간 빠른 시간으로 저장된 것을 확인 원인Spring Boot 3.1 버전부터 Hibernate 6.2 버전이 적용되는데, 6.2 버전에서 OffsetDateTime, ZonedDateTime 사용시 timezone 을 다루는 방식이 변경되면서 생긴 현상변경된 시간대(timezone) 정보를 다루는 방식내부적으로 TimeZoneStorageType 값과 매핑하여 저장 및 조회 로직이 결정됨기본값은 TimeZoneStorageType.DEFAULTDB 컬럼이 시간대 정보를 저장하면 시간..
1. java의 날짜와 시간 클래스 변천사1. java.util.Date (java 1.0)날짜를 의미하는 Date라는 클래스의 이름과 달리 특정 시점을 날짜가 아닌 밀리초 단위로 표현1900년을 기준으로 하는 오프셋, 0에서 시작하는 달 인덱스 등 모호한 설계로 유용성이 떨어짐ex) 2017년 9월 21일을 가르키는 Date 인스턴스를 만드는 코드 (자바 9가 나온 날짜..) Date date = new Date(117, 8, 21);// 출력 결과// Thu Sep 21 00:00:00 KST 2017 2. java.util.Calendar (java 1.1)Date 클래스의 여러 메서드를 deprecated 하고 대안으로 나온 클래스0에서 시작하는 달 인덱스가 변하지 않음DateFormat 등의 클..
Reflection? java에서는 reflection이라는 api를 제공한다. reflection은 구체적인 클래스 타입을 알지 못해도 클래스의 메서드나, 타입, 변수들에 접근할 수 있도록 해주는 api이다 대표적인 적용 예시로는 1) JPA에서 객체 조회시 데이터가 들어가는 것 2) @RequestBody 사용 시 DTO 객체에 데이터가 들어가는 것 3) 테스트 케이스 작성시 private 메서드를 테스트할 때 등이 있다. 어떻게 가능한걸까? 기본적으로 객체에 데이터를 넣기 위해서는 일련의 과정(new, setter 등)이 필요하고, 접근 제어자에 따라 접근이 불가능한 것이 맞다. 하지만 reflection이 적용된다면 이러한 과정이 필요하지 않고 private 메서드의 접근도 가능하다. 바로 ref..
우테캠 미션 진행당시 도메인 객체의 id 값에 대해 Long을 사용하는 것을 보면서 왜 long이 아닌 Long을 사용하지? Long과 long의 차이는 뭐지? 라는 의문이 생겼다. Long과 long의 차이와 어떤 경우에 사용하면 좋은지에 대해 알아보려고 한다. long은 원시 타입(Primitive Type), Long은 참조 타입(Reference Type)이다 원시 타입은 정수, 실수, 문자, 논리 리터럴 등 실제 메모리에 데이터 값을 직접 저장하는 타입으로서 boolean, char, byte, short, int, long, float, double를 말한다. 참조 타입은 객체의 주소를 저장하는 타입으로 메모리 주소 값을 통해 객체를 참조하는 타입으로서 원시 타입을 제외한 문자열, 배열, en..
자바 jdk가 이미 설치되어 있고 버전을 변경하려 할 때 적용하는 방법 자바 jdk 버전별로 다운받는 링크 블로그(감사합니다!) https://nhj12311.tistory.com/37 자바 11 설치 - https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 자바 버전 변경하기 1) sudo vi ~/.bash_profile 입력하고 비번 입력 2) JAVA_HOME 경로 변경 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home 3) source ~/.bash_profile 입력 4) java -version 해서 변경된 버전 확..