반응형

Programming 375

(java) transient volatile 키워드는 무엇인가

Java transient volatile Keyword Querydsl에서 Expression이 적용되는 방식을 찾아보다가 transient, volatile 키워드를 발견하게 되었는데요. 해당 키워드는 Expression 외에도 Hashtable, ConcurrentHashMap, PredicateOperation, PredicateTemplate 등 여러 곳에서 사용되고 있었으며, 지난번에도 한번 스쳐간 기억이 있어 이번 기회를 통해 정리해 보게 되었습니다. 우선 'transient'와 'volatile' keyword는 전혀 다른 역할을 하는데요. transient는 객체의 직렬화 과정에서 사용되는 키워드이며, volatile은 멀티 스레드 환경에서 여러 스레드에 의해 동시에 접근될 수 있는 변수..

Programming/Java 2023.08.02

java 임시 비밀번호 생성(SecureRandom 사용하는 이유)

java 특수문자를 포함한 비밀번호 생성 방법(SecureRandom 사용 이유) 해당 포스팅에서는 'java 임시 비밀번호 생성 방법'에 대한 내용을 다루고 있으며, 임시 비밀번호 생성 과정에서 Random 클래스가 아닌 'SecureRandom 클래스를 사용하는 이유'도 함께 살펴봅니다. 임시 비밀번호 생성 기본 예시 private static final char[] rndAllCharacters = new char[]{ //number '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', //uppercase 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R..

Programming/Java 2023.07.30

@AutoConfiguration을 사용하여 라이브러리 만들어보기

자동 구성 @AutoConfiguration을 사용한 라이브러리 만들어보기 spring boot에서는 AutoConfiguration 기능을 통해 web, data, aop, cache, jdbc 등 여러 라이브러리에 대한 자동 구성을 제공하는데요. 아래 내용은 '@AutoConfiguration을 적용하여 자동 구성이 실행되는 방식을 활용한 라이브러리를 만드는 방법과 만들어진 라이브러리를 사용하는 방법'에 대한 내용입니다. (예시에서는 gradle build tool을 사용하였습니다.) * 추가로 spring boot 자동 구성 auto configuration이 동작하는 원리가 궁금하시다면 포스팅 맨 하단에 관련 자료에 대한 링크가 있으니 참고하시면 좋을 것 같습니다. build.gradle plug..

Java Map 반복시키는 가장 효율적인 방법

Java Map Interface 반복시키는 가장 효율적인 방법 Map Interface Map 인터페이스는 Key와 Value를 하나의 쌍으로 저장하는 방식의 자료형이며, 리스트나 배열과 같이 순차적으로(sequential) 해당 요소 값을 구하는 것이 아니라 'key를 통해 value를 가져오는 방식'이 가장 큰 특징입니다. 구현체 중 가장 많이 사용되는 클래스는 HashMap이며, 순서가 필요한 경우 입력된 순서대로 데이터가 출력되는 LinkedHashMap, 입력된 key의 sort 순서로 데이터가 정렬되는 TreeMap 등이 있습니다. 아래는 java에서 map을 반복시키는 몇 가지 방법들에 대해 어떤 방법이 더 효율적인지 궁금하여 비교하며 정리해 본 내용입니다. Map 반복 방법 Map map..

Programming/Java 2023.07.26

Spring Boot 자동 구성 AutoConfiguration 동작 원리 파헤치기

Spring Boot 자동 구성 AutoConfiguration 동작하는 원리 파헤치기 Spring Boot AutoConfiguration 자동 환경 설정(AutoConfiguration)은 Spring Boot의 가장 대표적인 기능이라고 할 수 있는데요. 스프링 부트는 spring-boot-project의 하위 모듈인 'spring-boot-autoconfigure'라는 프로젝트를 통해 web, aop, jdbc, jpa, redis 등, 수많은 자동 환경 설정(자동 구성)을 제공합니다. (spring-boot-starter 안에 spring-boot-autoconfigure가 포함되어 있습니다.) 개발자의 입장에서는 사용할 라이브러리의 의존성만 추가하게 되면 autoconfigure를 통해서 해당 ..

java stream BigDecimal add 합계 구하는 방법

java stream을 통해 BigDecimal 합계 또는 연산하는 방법 부동소수점의 부정확성으로 인해 java에서는 소수점에 대한 정확한 계산이 요구되거나 화폐 단위를 사용할 때 BigDecimal 타입을 사용하는데요. 해당 포스팅은 'java에서 stream을 활용하여 BigDecimal을 연산하는 방법'에 대해 정리한 내용입니다. 코드 예시 List bigDecimalList = Arrays.asList( BigDecimal.valueOf(1.123), BigDecimal.valueOf(0.335), BigDecimal.valueOf(2.10101), BigDecimal.valueOf(0.54321) ); //stream을 사용하지 않는 경우 연산 BigDecimal sum = BigDecimal...

Programming/Java 2023.07.19

@Conditional 어노테이션의 기능과 확장(@ConditionalOnXxx)

@Conditional 어노테이션의 기능과 확장 '@Conditional' 어노테이션은 Spring 4.0(released on 2013)부터 제공되기 시작했는데요. @Configuration, @Component, @Bean 어노테이션과 함께 사용되며, 이름 그대로 특정 조건을 만족하는지를 구별하는 기능입니다. 직접 사용할 일이 많을 것 같지는 않았지만 spring boot 자동 구성에 중요한 역할을 하는 당, 흥미 있는 기능이라고 생각되어 정리해 보았습니다. 아래 내용에서는 @Conditional 어노테이션을 직접 구현 및 적용하여 조건에 따라 동작하는지 여부를 살펴보고, 스프링 부트에서 확장된 @ConditionalOnXxx 어노테이션 기능을 통해 자동 구성이 실행되는 부분에 대해 간단하게 살펴보겠..

java image resize library 이미지 리사이즈 라이브러리 비교해보기

Compare java image resizing libraries 해당 포스팅에서는 썸네일 생성 등, 이미지의 사이즈를 조절하는 기능을 java에서 구현하기 위해 사용할 수 있는 몇 가지 라이브러리와 해당 라이브러리들의 사용 방법에 대해 살펴봅니다. + 마지막에는 각 라이브러리들을 사용한 image resizing 결과를 비교해 보는 내용도 포함되어 있습니다. java.awt.Graphics2D Image.getScaledInstance() thumbnailator Imgscalr 1. java.awt.Graphics2D 'Graphics2D Class'는 graphics contexts에 대한 추상화를 제공하는 기본 클래스인 Graphics Class를 확장한 것으로 java 플랫폼에서 2차원 텍스트..

Programming/Java 2023.07.15

@QueryDelegate 어노테이션으로 QueryDSL where절 간결하게 사용하기

QueryDSL @QueryDelegate 어노테이션 사용해 보기 'QueryDSL'은 정접 타입을 이용해서 SQL 등의 쿼리를 생성해 주는 오픈 소스 프로젝트이며, 이름 그대로 query(데이터 조회)에 특화되어 있습니다. * dsl(Domain Specific Language) 특정 도메인을 적용하는데 특화된 프로그래밍 언어 문자가 아닌 코드로 쿼리를 작성하기 때문에 컴파일 시점에서 문법 오류를 발생할 수 있다는 장점이 있으며, 동적인 쿼리 작성이 편리하고, 쿼리의 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다는 장점이 있는데요. 해당 포스팅은 '@QueryDelegate Annotation을 통해 QueryDSL의 where 조건절을 간결하게 사용하는 방법'에 대해 정리한 내용입니다. 예시 ..

Java 8, 11, 17 버전별 추가된 기능 (+ 무슨 버전을 써야할까?)

java 8, 11, 17 버전이 많이 사용되는 이유와 버전별 추가된 기능 최근 몇 년 동안 java에서 가장 많이 사용되는 버전은 'java 8'으로 저 역시 실무에서는 java 8만 계속 사용하고 있는데요. 자바는 2021년 9월 출시된 LTS 버전 java 17 이후로 2023년 7월 현재 java 20 버전까지 출시가 된 상태입니다. 이처럼 java에는 다양한 버전이 있는데요. 아래 jetbrains의 '2022년 개발자 생태계 설문조사'를 살펴보면 자바 개발자들이 사용하는 버전이 java 8, 11, 17에 집중되어 있는 것을 볼 수 있는데, 그 이유는 무엇일까요? 해당 포스팅은 자바 생태계에서 java 8, 11, 17이 많이 사용되는 이유와 각 버전별로 추가된 기능에 대해 정리한 내용입니다...

Programming/Java 2023.07.05
반응형