개발은 재밌어야 한다
반응형
article thumbnail
[Java] SimpleDateFormat으로 날짜 포맷 값 생성하기: 밀리초 단위까지
JAVA 2024. 12. 2. 01:52

많은 애플리케이션에서 고유한 값이나 정밀한 시간 정보가 필요할 때, 날짜 포맷을 활용합니다. 일반적으로 "yyyyMMddHHmmss" 형태로 초 단위까지 기록하지만, 초 단위만으로는 여러 이벤트가 겹칠 수 있습니다. 이런 상황에서 밀리초(millisecond)를 추가하여 더 정밀한 시간을 기록하면 고유성과 정확도를 높일 수 있습니다. 기본 초 단위 날짜 포맷초 단위까지 포함된 날짜 포맷을 만드는 기본적인 방법은 아래와 같습니다:import java.text.SimpleDateFormat;import java.util.Date;public class DateExample { public static void main(String[] args) { // 초 단위 날짜 포맷 St..

article thumbnail
[Spring] @Async로 비동기 프로그래밍 구현하기
Spring 2024. 11. 27. 22:44

Spring에서 제공하는 @Async는 비동기 작업을 간단히 구현할 수 있도록 해줍니다. 이 글에서는 @Async에 대해 포스팅하려고 합니다.1. @Async란 무엇인가?@Async는 메서드를 별도의 스레드에서 실행시켜 비동기 처리를 가능하게 하는 Spring 어노테이션입니다. 이를 통해 메인 스레드의 작업 흐름을 차단하지 않고도, 병렬로 작업을 수행할 수 있습니다.왜 @Async를 사용할까?응답 시간 단축: 백그라운드 작업 처리 중에도 빠르게 응답 반환.리소스 효율화: 스레드 풀을 사용해 리소스를 효과적으로 관리.코드 간소화: 복잡한 스레드 관리 없이 비동기 작업 구현.2. @Async 설정@Async를 사용하려면 설정이 필요합니다.Step 1. @EnableAsync 활성화Spring 애플리케이션에서..

article thumbnail
Stream API에서 Null 체크 처리하기
JAVA 2024. 11. 26. 21:05

Java Stream API는 컬렉션을 효율적으로 처리하기 방법이지만, null 값이 포함된 경우 예기치 않은 오류가 발생할 수 있습니다. 특히, NullPointerException을 주의해서 사용해야 합니다. 이번 글에서는 Stream API에서 안전하게 null 체크를 처리하는 방법을 알아보겠습니다.왜 Null 체크가 필요한가?Stream 연산 중 null 값이 존재하면 NullPointerException이 발생할 수 있습니다. 예를 들어, 다음 코드를 보면 문제가 생길 가능성이 있습니다List list = Arrays.asList("A", null, "B");long count = list.stream() .filter(s -> s.startsWith("A")) //..

article thumbnail
스칼라 서브쿼리란? SQL에서의 활용과 주의점
RDBMS 2024. 11. 25. 00:16

SQL에서 서브쿼리는 하나의 쿼리 내에 포함된 또 다른 쿼리를 의미합니다. 그중에서도 스칼라 서브쿼리(Scalar Subquery)는 단일 값(스칼라 값)을 반환하는 서브쿼리입니다. 이 값은 숫자, 문자열, 날짜 등 어떤 데이터 유형이든 될 수 있으며, 주로 SELECT 절이나 WHERE, HAVING 절에서 사용됩니다. 이번 글에서는 스칼라 서브쿼리의 개념, 활용 사례, 장단점, 그리고 주의점에 대해 알아보겠습니다.스칼라 서브쿼리란?스칼라 서브쿼리는 SQL 실행 중 하나의 값을 반환하는 서브쿼리입니다. 보통 다음과 같은 특징을 가집니다:단일 값 반환스칼라 서브쿼리는 반드시 단일 값(1개의 행, 1개의 열)을 반환해야 합니다. 만약 다중 행이 반환되면 실행 시 오류가 발생합니다.사용 위치스칼라 서브쿼리는..

article thumbnail
Kafka 컨슈머 장애 사례: 메시지 처리 시간 초과로 인한 CommitFailedException
Kafka 2024. 11. 24. 23:59

Kafka 컨슈머 장애 사례: 메시지 처리 시간 초과로 인한 CommitFailedException장애 상황운영 중인 Kafka 컨슈머 애플리케이션에서 특정 시점에 다음과 같은 오류 로그가 발생했습니다:org.apache.kafka.clients.consumer.CommitFailedException: Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group. 이 오류는 컨슈머가 메시지를 처리하는 도중 Kafka의 컨슈머 그룹에서 리밸런싱(Rebalanc..

article thumbnail
@NotNull, @NotEmpty, @NotBlank의 차이점과 사용법
Spring/Spring 2024. 11. 22. 16:17

Spring Boot 애플리케이션을 개발할 때 입력 값의 유효성을 검증하는 것은 중요한 과정입니다. 이를 위해 자주 사용하는 어노테이션 중 하나가 Bean Validation에서 제공하는 @NotNull, @NotEmpty, @NotBlank입니다. 이 글에서는 각 어노테이션의 차이점과 사용법을 예제와 함께 알아보겠습니다.@NotNull, @NotEmpty, @NotBlank란?이 세 가지 어노테이션은 Java Bean Validation API(javax.validation.constraints)에서 제공되며, 주로 Spring Boot의 유효성 검사 과정에서 사용됩니다.각각의 동작 방식은 다음과 같습니다.어노테이션설명대상 타입@NotNull값이 null이 아니어야 합니다.모든 객체 타입@NotEmpt..

article thumbnail
Jenkins에서 주기적 빌드 설정하기: 크론식으로 알아보는 스케줄링
CS 2024. 11. 21. 14:02

Jenkins는 CI/CD 파이프라인 자동화를 위한 강력한 도구입니다. 그중에서도 주기적 빌드 설정은 배치 작업이나 테스트 자동화를 위해 자주 사용됩니다. 이번 글에서는 Jenkins에서 주기적 빌드를 설정하는 방법과 크론식(Cron Expression)을 활용하는 방법을 알아보겠습니다.Jenkins 주기적 빌드란?Jenkins의 Build periodically 옵션은 특정 시간 간격으로 자동 빌드를 실행하도록 설정할 수 있는 기능입니다. 반복적인 작업을 자동화함으로써 개발자와 운영자의 생산성을 높이는 데 필수적입니다.크론식(Cron Expression) 기초Jenkins는 빌드 주기를 설정할 때 크론식을 사용합니다. 크론식은 다음과 같은 5개의 필드로 구성됩니다:필드 순서값의 범위의미1분0-59분2시..

article thumbnail
Spring Retry로 안전한 Feign 호출 처리하기
Spring/Spring 2024. 11. 20. 12:44

비즈니스 로직을 처리하다 보면 비동기적으로 데이터가 생성되거나, 외부 API 호출 시 타이밍 이슈로 데이터가 준비되지 않아 실패하는 상황을 자주 겪게 됩니다. 특히, Feign 클라이언트를 사용할 때 외부 API가 아직 데이터 준비를 마치지 않은 상태라면 null 값이나 예외가 발생할 수 있습니다.최근 저 역시 이런 문제를 경험했는데, 이를 해결하기 위해 Spring Retry를 활용해 재시도 로직을 도입했고, 최종적으로 실패한 경우에만 알림을 전송하는 구조로 개선했습니다. 이 과정을 공유하고자 합니다.문제 상황Feign 호출 실패외부 API 호출 시 데이터가 아직 생성되지 않아 예외(null)가 발생.재시도 필요외부 시스템이 데이터를 생성하는 데 약간의 지연 시간이 필요하므로, 요청을 일정 시간 간격으..

article thumbnail
Spring에서 동일한 타입의 Bean 충돌 문제 해결하기
Spring/Spring 2024. 11. 19. 15:45

Spring 애플리케이션을 개발하다 보면, 의존성 주입 중 동일한 타입의 Bean 충돌 문제를 경험할 수 있습니다. 이번 포스팅에서는 이 문제의 원인과 이를 해결하기 위한 다양한 방법을 소개합니다.에러 상황: 동일한 타입의 Bean 주입 충돌Spring 컨테이너가 특정 Bean을 주입하려 할 때, 동일한 타입의 Bean이 여러 개 정의되어 있다면 다음과 같은 에러가 발생할 수 있습니다.에러 메시지 예시Parameter 3 of constructor in com.example.controller.MyController required a single bean, but 2 were found: - userServiceImpl1: defined in [com.example.service.UserServi..

article thumbnail
Java에서 NullPointerException 피하기
JAVA 2024. 11. 16. 22:07

NullPointerException(NPE)는 Java 개발자라면 누구나 한 번쯤 겪어본 골칫거리입니다. 이 글에서는 NPE를 예방하기 위한 Java의 주요 도구인 Optional 클래스를 중심으로, null 안전성을 향상시키는 다양한 기법을 비교하고 활용법을 소개합니다.NullPointerException: 왜 발생할까?NPE는 다음과 같은 상황에서 주로 발생합니다:null 값을 참조하려고 할 때String name = null;System.out.println(name.length()); // NPE 발생메서드의 반환값이 null인데 이를 처리하지 않을 때 public String findName() { return null;}System.out.println(findName().length(..

article thumbnail
[Java] Reflection를 활용한 런타임 동적 프로그래밍
JAVA 2024. 11. 15. 17:47

Java의 Reflection API는 런타임에 클래스의 메타데이터에 접근하고 조작할 수 있도록 해줍니다. Reflection을 활용하면 객체의 클래스 정보를 동적으로 확인하고, 객체의 메서드 호출, 필드 접근 등도 가능해지죠. 성능과 보안상의 이슈도 있을 수 있으니 신중한 접근이 필요합니다. 이 글에서는 Reflection의 기본 개념과 활용 방법을 단계별로 설명해 보겠습니다.Reflection API란?Reflection은 런타임에 Java 객체의 클래스를 조사하고, 필드나 메서드 등을 동적으로 호출할 수 있는 기능입니다. 주로 다음과 같은 상황에서 사용됩니다. 클래스 정보 확인: 클래스 이름, 메서드, 필드, 생성자 등 다양한 메타데이터를 조회할 수 있습니다.동적 객체 생성: 런타임에 클래스의 객체..

article thumbnail
Java의 Map 컬렉션 정리: HashMap, TreeMap, LinkedHashMap 비교
JAVA 2024. 11. 14. 17:43

Java에서 데이터를 key-value 형태로 저장할 때 많이 사용하는 자료구조가 바로 Map입니다. 그중에서도 HashMap, TreeMap, LinkedHashMap은 가장 흔히 쓰이는 Map의 구현체들인데, 이들의 차이점과 사용 예시를 알아 보겠습니다.HashMap: 빠르고 유연한 비동기 Map기본 개념과 내부 구조HashMap은 해시 테이블 구조를 사용하여 데이터를 저장합니다. key의 해시 값을 이용해 버킷(bucket)을 찾아 저장하고, 필요 시 연결 리스트나 트리 구조를 통해 데이터를 빠르게 조회할 수 있도록 합니다.Java 8 이후에는 해시 충돌을 최소화하기 위해, 해시 버킷이 일정 크기 이상이 되면 연결 리스트 대신 트리로 변환하여 조회 속도를 높입니다.특징과 성능동기화(Synchroni..

반응형