본문 바로가기

JAVA79

Records JEP 395에는 레코드를 다음과 같이 요약했습니다. Enhance the Java programming language with records, which are classes that act as transparent carriers for immutable data. Records can be thought of as nominal tuples. 자바 14, 15 preview에서 2021년 3월 16일 JDK 16에 General Availabilty에 도달하면서 Java 레코드는 공식적으로 언어의 일부가 된 Records는 불변 데이터 객체를 매우 쉽게 정의할 수 있는 새로운 형태의 클래스이며 데이터를 저장하고, 접근하기 위한 필드와 해당 필드에 대한 접근자 메서드를 자동으로 생성해 줍니다. 2.. 2023. 7. 11.
ZGC (HotSpot) 보호되어 있는 글 입니다. 2023. 7. 11.
Java Duration and Period Class 소개 Duration과 Period 클래스는 자바 8에서 추가된 클래스로, 시간과 날짜 사이의 간격을 나타내기 위해 사용됩니다. 이들 클래스는 자바에서 시간과 날짜를 다루는데 매우 유용하며, 다양한 상황에서 사용될 수 있습니다. Duration 클래스 Duration 클래스는 두 시간 사이의 간격을 나타내기 위해 사용되는 클래스입니다. 이 클래스는 시간을 나노초 단위로 표현하며, 다음과 같은 방법으로 사용할 수 있습니다. Duration threeMinutes = Duration.ofMinutes(3); Duration twoHours = Duration.ofHours(2); Duration tenSeconds = Duration.ofSeconds(10); Duration 클래스는 두 시간 사이의 차이를.. 2023. 2. 23.
Increasing Code Cache Increasing the Code Cache Size tier 4로 코드를 컴파일하는 경우 해당 코드가 이제 Code Cache에 추가되는 것을 안다. 다만 Code Cache의 크기는 제한적이라는 문제가 하나 있다. Julio Falbo에 따르면 많은 양의 메서드가 tier 4에 추가되는 경우, 다음 코드를 위해서 몇 개의 코드는 Code Cache에서 제거된다는 것이다. 제거된 코드블록은 다시 다른 코드블록을 제거하고 다시 추가되는 반복적인 상황이 발생한다. ( 해당 글에는 code cache size가 가득 찬 경우 코드블록이 추가될 때 어떤 원리나 순서로 삭제된다는 설명글이 없다. ) 다른 말로 하면 거대한 애플리케이션을 운영하면서 level 4로 컴파일된 코드블록들은 지속적으로 code cac.. 2023. 2. 20.
Code Cache 애플리케이션 모니터링을 도입하던 도중 위젯에 code cache에 관해 설명하는 부분이 있었다. Granafa에서 필요 없는 모니터링 위젯을 제거하는 과정에서 code cache가 무엇인지 몰라 정리를 늦췄는데 이번에 한번 알아보려고 한다. 이 글은 다음 블로그를 참고했다. https://julio-falbo.medium.com/ Júlio Falbo – Medium Read writing from Júlio Falbo on Medium. https://www.linkedin.com/in/juliofalbo/. Every day, Júlio Falbo and thousands of other voices read, write, and share important stories on Medium. juli.. 2023. 2. 18.
Java 11 HttpClient Class 보호되어 있는 글 입니다. 2022. 12. 13.
S3 다중 업로드를 병렬로 처리 시 발생할 수 있는 문제..(CountDownLatch) 최근 파일을 S3에 업로드를 진행하면서 발생하는 문제에 대해 해답을 찾고 있었다. 문제는 다음과 같다. 클라이언트 요청 시 MultipartFile로 파일을 받고 해당 파일을 병렬 작업을 통해 S3에 업로드 요청을 보낸다. 업로드 요청 또한 비동기로 처리된다. 이 과정에서 문제는 다음과 같다. 서블릿은 클라이언트가 multipart form data로 파일을 전송할 때 특정 temp 위치에 파일을 쓰는 IO 작업이 일어난다. 이를 IO 작업 대신 스트림 형태로 메모리에 올려도 되지만 파일 자체가 여러 개일 가능성이 크기 때문에 메모리를 생각해 임시 폴더에 파일을 쓰고 요청이 종료될 시 자동으로 삭제되는 스프링의 MultipartFile을 사용했다. 병렬적으로 S3에 파일 스트림을 열고 업로드를 진행하는 .. 2022. 12. 3.
Comparable Object.equals에 더해서 순서까지 비교할 수 있으며 Generic을 지원한다. this가 compareTo에 전달된 객체보다 작으면 음수, 같으면 0, 크다면 양수를 리턴한다. 반사성, 대칭성, 추이성을 만족해야 한다. 반드시 따라야 하는 것은 아니지만 x.compareTo(y)==0이라면 x.equals(y)가 true여야 한다. 구현 방법 자연적인 순서를 제공할 클래스에 implements Comparatable 을 선언한다. compareTo 메서드를 오버라이드 한다. public class CompareNumber implements Comparable{ @Override public int compareTo(CompareNumber o) { return 0; } } compareTo 메.. 2022. 11. 14.
keytool keytool은 Java SDK와 함께 배포되어 bin 디렉터리에 존재하는 보안 관련 프로그램이다. keytool은 키스토어라는 일종의 데이터베이스를 관리하는 프로그램이다. 이 키 스토어는 두 개의 항목을 가지고 있다. 1. key entry - 비밀키와 공개키와 관련된 인증서 체인으로 구성 2. trusted certificate entry - 신뢰할 수 있는 기관을 나타내는 공개키 인증서 키스터의 각 항목은 alias에 의해 식별된다 따라서 키스토어에 새로운 엔티티를 추가할 때 반드시 이 별명은 부여해야 한다. keytool이 지원하는 커맨드는 다음과 같습니다. genkey : 공개키/비밀키 쌍을 만듭니다. 지정한 키스토어가 없는 파일이라면 새로 파일을 생성합니다. certreq : 인증서 서명 요청.. 2022. 11. 14.
equals 정의 우리가 만든 객체는 눈으로 보기엔 논리적으로 동등할지 몰라도 메커니즘 상 처음부터 서로 같은 객체는 없다. 생성 시 고유한 메모리 주소 값을 참조하는 객체로 자바에선 해시 코드값으로 가볍게 확인할 수 있다. 실제로 Hashcode와 equals를 사용해 동등하다고 판단하는 HashMap을 볼 수 있다. 또한 여러 객체들이 논리적으로 동등한 지 판단하여 분기하는 경우도 많다. 최근 나는 엔티티와 별도의 객체를 비교하는 일이 필요했다. 하지만 엔티티에 equals를 재정의하는 일은 너무 위험부담이 커서 추가 로직을 통해 처리하였다. 아마 이는 equals를 잘 정의하는 법을 몰랐기 때문이 아닐까? 그래서 오늘은 이펙티브 자바의 equals 관련 내용을 공부하고 자려고 한다. equals 메서드에는 일반 규약.. 2022. 11. 10.