Java 19

[subList] Java.Util.ArrayList$SubList Deserialization 이슈 해결

Dto에서 선언한 List를 Service로직이나 Dao단에서 subList를 이용할 경우가 있습니다. 해당 subList를 통해 특정 길이로 잘라서 아래와 같이 사용하는 경우가 있었습니다. List dataList = new ArrayList(); dataList = dataList.subList(0,5); subList는 fromIndex, toIndex를 받아 해당하는 크기만큼 리스트를 반환합니다. 해당 값을 Redis로 캐싱할 때 아래와 같은 이슈가 발생했습니다. Redis deserialization error could not read JSON: cannot construct instance of ` Java util. ArrayList$SubList` subList로 자르면서 캐싱된 데이터 ..

Java 2022.03.30

QueryDSL StringTemplate 사용

* QueryDSL StringTemplate 사용 QueryDSL에서도 SQL Function 사용을 통해 쿼리를 간단하게 작성해야 할 경우가 있습니다. 이 경우 Expressions.stringTemplate() 혹은 Expressions.numberTemplate() 등을 통해 SQL Function을 사용할 수 있습니다. 이를 통해 Date cast, lower case 작성 등을 QueryDSL에서 쉽게 사용 가능합니다. Postgres에서 사용하는 간단한 예시 쿼리문을 몇개 살펴보겠습니다. 예시1) Date 추출 JPAQuery query = this.queryFactory.selectfrom(myTable) .groupby(Expressions.stringTemplate( "DATE_FORM..

Java 2022.02.23

[Java-17] 자바 암호화 확장 정책 다운 및 설치

■ JCE 다운 및 설치 Java Cryptography Extension(JCE) 다운로드 및 설치 방법을 정리합니다. 다운로드 링크는 아래와 같습니다.(반드시 jdk 버전을 확인해야 합니다. 아래는 java8버전 입니다) http://www.oracle.com/technetwork/java/javase/downloads/index.html 링크 이동후 아래쪽에 보시면 'Additional Resources' 목록에 위치해 있습니다. Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 위 제목 확인 후 다운로드하시면 됩니다. 압축을 풀고, 기존 ${JAVA_HOME}/jre/lib/secu..

Java 2018.05.08

[Java-16] Project language level 설정

안녕하세요. 트러블 슈팅 기록입니다. 간단하고 쉽게 해결 가능하지만, 정보가 없어 여기에 기록합니다. ■ usage of api documented as @since 1.6+ 'usage of api documented as @since 1.6+' 컴파일 시 위와 같은 오류가 발생했습니다. 처음보는 오류라 무엇일까... 찾아보던 중 해결한 결과를 기록하겠습니다. 해결방안은 간단한데요. Project Settings으로 가서 Project language level을 1.6 이상으로 설정해주면됩니다. 기본으로 SDK default로 설정이 되어 있다면, 현재 SDK 버전에 맞게 language level을 설정해요 그래서 이로인해 오류가 발생할 확률은 적을 것 같습니다만.... 무슨 이유에서인지 해당 오류..

Java 2018.05.07

[Java-15] JVM 개념과 구조

■ JVM (Java Virtual Machine) JAVA의 JVM이란 개념에 대해서 정리하겠습니다. JVM이란 Java Virtual Machine의 약자로 어떤 하드웨어 및 OS에서든 자바 실행 코드의 변경 없이 JAVA 코드를 실행시킬 수 있게 해주는 가상 머신입니다. JAVA는 어디서든 자바 바이트 코드를 해석하고 실행할 수 있도록 가상 머신 기반으로 작동하도록 설계되었는데요. 이 핵심 역할을 하는 것이 바로 JVM입니다. ● JVM 구조 JVM구조를 먼저 그림으로 보겠습니다. 위 그림이 JVM의 전체 구조입니다. 특히 JVM을 이해하는 데 있어서는 위에 있는 Java Source Code, Java Byte Code에 대해 이해하는 것이 중요합니다. ▶ Java Byte Code 우리가 작성한..

Java 2017.11.18

[Java-14] 어노테이션

■ 어노테이션 (Annotation) 오늘은 어노테이션에 대해 정리하겠습니다. 어노테이션 (Annotation)이란? 어노테이션의 사전적 의미는 '주석'입니다.즉, 주석처럼 코드에 달아 해당 코드에 특수한 의미를 부여해주는 기능을 합니다. 가장 효율적으로 사용되는 부분은 유효성 검사 부분입니다. 코드의 문법 에러를 체크하여 유효성을 확인해줍니다. ● 사용 방법 사용 방법을 보겠습니다. 먼저 형태는 아래와 같습니다. @Annotation_name @ 문자를 사용하고, 뒤에 해당 어노테이션명을 작성해주는 것이죠. Model 클래스에 어노테이션을 사용하여 유효성 검사를 하는 예시를 보시죠. @NotNullprivate String name; @NotNull@Min(0)@Max(10)private Integer..

Java 2017.05.08

[Java-13] 제네릭

■ 제네릭 (Generic) 오늘은 제네릭에 대해 정리하겠습니다. 빈번한 타입의 변환은 프로그램 성능에 좋지 않은 영향을 미칩니다. 그렇기에 이러한 형 변환 시 발생할 수 있는 문제점을 사전에 방지하기 위해 '제네릭'이 있습니다 제네릭은 특정 자료형에 얽매이지 않고 프로그래밍을 할 수 있게 해줍니다. 구체적인 타입을 명시하지 않고, 타입 파라미터로 대체하여 사용하죠. ● 선언 방법 사용 방법은 다음과 같습니다. public class 클래스명 {...}public interface 인터페이스명 {...} 타입 매개변수 T를 사용한다는 것 외에는 기존 클래스와 인터페이스 형태와 동일합니다. 타입 매개 변수의 형태는 다음 5가지가 있습니다.- E : Element- K : Key- N : Numer- T :..

Java 2017.03.18

[Java-12] 람다식 (Lambda)

■ 람다식 (Lambda) 오늘은 람다식에 대해 정리하겠습니다. 람다식은 자바8부터 추가된 개념으로 '식별자 없이 실행 가능한 익명의 함수 표현식'입니다. 이렇게 개념만 보면 약간 이해가 안가고 헷갈릴 수 있는데요. 사용 방법은 다음과 같습니다. (parameter) -> body (parameter) -> { body } () -> body () -> { body } 더 이해가 안간다고 하시는 분들이 계시겠네요... 너무 단순하죠? 이게 바로 람다의 장점이자 단점이 되는 것 입니다. 기존의 불필요한 코드를 줄이고 가독성을 향상시켰다는 아주 큰 장점이 특징입니다. 장점과 동시에 이는 또한 너무 줄여버린 나머지... 람다에 익숙하지 않는 사람에게는 모호하다는 것이 단점이기도 해요. ● 기존 코드 vs 람다..

Java 2017.03.11

[Java-11] 스트림 (Stream)

안녕하세요. 오늘은 스트림에 대해서 정리해보겠습니다. ■ 스트림(Stream) 먼저 스트림이란 ?컬렉션의 저장 요소를 하나씩 참조하여 람다식으로 처리할 수 있도록 해주는 반복자 크게 중간 처리와 최종 처리로 나뉘어 집니다.중간 처리 : 필터링, 매핑, 정렬, 그룹핑 등최종 처리 : 합계, 평균, 카운팅 등 ● 특징 - 람다식으로 요소 처리 코드를 제공 - 내부 반복자를 사용한 병렬처리 - 중간 처리와 최종처리를 할 수 있다. 여기서 람다식은 무엇일까요? 람다식 역시 자바8에서 등장한 개념입니다. 다음 포스팅(또는 그 다음 포스팅...)에서 정리할 예정입니다. 여기서는 간단히 정의만 알고 넘어가죠! 람다식의 정의는 아래와 같습니다.식별자 없이 실행 가능한 익명의 함수 표현식 이제 람다식은 중간중간 계속 나..

Java 2017.03.02

[Java-10] 예외 처리(Exception)

■ [Java-10] 예외처리 (Exception) 안녕하세요. 오늘은 JAVA의 예외처리에 대해서 알아보겠습니다. 순서는 아래와 같습니다! ■ 예외란?■ 실행 예외의 종류■ 예외 처리 코드■ 예외 떠넘기기■ 사용자 정의 예외 ■ 예외란? 예외란 오류의 한 종류입니다. 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 바로 예외(Exception)이라 합니다. 예외는 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있어요 그렇기에 예외 처리가 아주 중요하죠. 예외는 2가지 종류로 나뉠 수 있습니다.- 실행 예외 (Runtime Exceptions)- 일반 예외 (Exceptions) ■ 실행 예외(Runtime Exceptions)의 종류 실..

Java 2017.02.18