전체 글 94

JPA Entity Timestamp 관리 전략: DB Level vs Application Level

JPA Entity에서 생성 시간(created_at)과 수정 시간(updated_at)을 관리하는 방식은 크게 두 가지로, 데이터베이스 레벨(columnDefinition)과 애플리케이션 레벨(@CreationTimestamp/@UpdateTimestamp)입니다. 각 방식의 특징과 적합한 사용 환경에 대해 알아보겠습니다.1. 데이터베이스 레벨 관리 (columnDefinition)1.1 구현 방식@Column(name = "created_at", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")@Generated(event = EventType.INSERT)private Instant createdAt;@Column(name = "updated_a..

DB/JPA 2025.01.20

Java Pattern 클래스 사용 시 반드시 알아야 할 주의점

Java에서 정규 표현식을 다룰 때 Pattern 클래스는 매우 중요한 역할을 한다. 하지만 Pattern을 잘못 사용하면 성능 저하나 예상치 못한 동작이 발생할 수 있다. 나는 실제로 프로젝트에서 정규식을 사용할 때 이러한 문제로 지적을 받은 경험이 있었고, 이를 해결하기 위해 Pattern 사용 시의 몇 가지 주의사항을 정리하게 되었다.   Pattern 클래스란 무엇인가?Pattern 클래스는 Java에서 정규 표현식을 다루기 위한 클래스이다. 주로 Pattern.compile(String regex) 메서드를 통해 정규식을 컴파일하고, 이를 기반으로 생성된 Matcher 객체를 사용해 문자열 매칭 작업을 수행한다. 예를 들어, 다음과 같은 코드로 정규식을 사용할 수 있다.Pattern patter..

Java 2025.01.13

효율적인 테스트 코드를 위한 도구 선택: AssertJ와 JUnit의 차이

테스트 코드를 작성할 때 사용하는 AssertJ와 JUnit의 기본 assert 메서드는 모두 검증 로직을 작성하기 위한 도구지만, 그 사용 방식과 기능, 제공하는 개발 경험에서 차이가 있다. 이 두 가지를 디테일하게 비교하여 설명하면 아래와 같다. AssertJAssertJ는 플루언트 API 스타일과 체이닝 방식으로 구성된 검증 라이브러리로, 테스트 코드의 가독성을 높이고, 복잡한 데이터 타입 검증을 쉽게 처리할 수 있도록 설계되었다. 1-1. 주요 특징플루언트 인터페이스: 메서드를 체이닝으로 연결하여 가독성이 높다. 테스트 코드의 의도를 자연스럽게 드러낼 수 있어 읽기 쉽다.데이터 타입 지원: 기본 데이터 타입뿐만 아니라 리스트, 맵, 배열, 날짜, 예외 등 다양한 데이터 타입을 위한 검증 메서드를 ..

Java 2025.01.10

Spring Boot 'InvalidConfigDataPropertyException' 해결하기

org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid in a profile specific resource [origin: class path resource [application-dev.yml] - 3:13] 이 에러는 Spring Boot의 설정 파일 관리에서 잘못된 위치에 특정 프로퍼티를 정의했을 때 발생한다. 특히 spring.profiles.active와 관련된 설정 문제일 가능성이 크다.   에러 원인 분석spr..

error-log 2024.12.22

Hashtable의 동기화(synchronization)

Hashtable의 동기화(synchronization)는 주로 메서드 수준에서의 동기화를 통해 이루어진다. 이는 Hashtable의 메서드들이 synchronized 키워드로 선언되어 있기 때문이다. 이 동작 방식에 대해 좀 더 구체적으로 살펴보면 다음과 같다 메서드 수준 동기화Hashtable의 대부분의 메서드가 synchronized 키워드를 사용하여 구현되어 있다. 이는 동시에 여러 스레드가 동일한 메서드에 접근하는 것을 차단함으로써 데이터의 일관성을 보장한다.예를 들어, 데이터를 삽입하거나 검색할 때 사용하는 put과 get 메서드의 구현은 아래와 같다. put 메서드의 구현public synchronized V put(K key, V value) { // Null 값 처리 if (k..

Java 2024.12.10

Hashtable의 정의와 구조

Hashtable은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료구조이다. 내부적으로는 배열과 해시 함수를 기반으로 동작하며, 빠른 데이터 검색과 삽입을 지원한다. Java에서는 java.util.Hashtable 클래스로 제공되며, 동기화를 기본적으로 지원한다는 점에서 HashMap과 차이가 있다.  잠깐, 여기서 Hashtable 의 동기화란?https://hgggny.tistory.com/entry/Hashtable%EC%9D%98-%EB%8F%99%EA%B8%B0%ED%99%94synchronizationHashtable의 구조Hashtable은 해시 함수(hash function)를 이용하여 데이터를 저장할 위치를 결정한다.키를 해시 함수에 전달하여 해시값을 생성한다.생성된 해시..

Java 2024.12.04

@Transactional 사용법과 옵션

@Transactional 사용법과 옵션Spring 프레임워크에서 @Transactional 어노테이션은 트랜잭션 관리를 간편하게 해주는 도구로, 트랜잭션의 원자성, 일관성, 고립성, 내구성을 보장하도록 설정할 수 있다. propagation: 트랜잭션의 전파 방식을 결정 (기본값은 REQUIRED).isolation: 트랜잭션 격리 수준을 설정하여 트랜잭션 간 데이터 접근을 제어 (예: READ_COMMITTED, REPEATABLE_READ 등).timeout: 트랜잭션이 완료되기까지의 최대 시간을 설정.readOnly: 트랜잭션이 데이터 변경 없이 읽기 전용임을 선언.@Transactional(isolation = Isolation.SERIALIZABLE, timeout = 10, readOnly ..

Spring 2024.12.03

세션 기반 인증과 토큰 기반 인증의 차이, 왜 다를까?

웹 개발을 하다 보면 사용자 인증 방식을 선택해야 할 때가 있다. 주로 사용하는 방식은 두 가지인데, 바로 세션 기반 인증과 토큰 기반 인증이다. 각각의 방식이 어떤 차이를 가지는지, 그리고 어떤 상황에서 적합한지 알아보자. 세션 기반 인증: 서버가 기억하는 방식세션 기반 인증은 서버가 '사용자 상태'를 기억하는 구조다. 사용자가 로그인하면 서버가 세션을 생성하고, 클라이언트는 세션 ID를 통해 인증된 상태임을 증명한다. 이 세션 ID는 일반적으로 쿠키에 담아 매 요청마다 서버에 전송된다.장점: 서버에서 사용자의 상태를 저장하므로 안정적인 인증을 유지할 수 있다.예를 들어, 사용자 로그아웃 시 서버에서 세션을 삭제해버리면 모든 접속이 끊어진다.단점: 서버에 세션 상태를 저장해야 하므로 서버에 부하가 갈 ..

Spring/Spring 2024.12.02

@Transactional 사용하기 전, Transaction 이랑 먼저 친해지기

요새 회사에서 머리가 터지는 (?) 문제가 하나 (사실은 여러 개 일지도 ) 있습니다. 그건 바로, 할 때마다 새로우면서도 전체적인 플로우를 정확히 이해해야 적용할 수 있는 트랜잭션 !제대로 이해하기 위해 먼저 기본 지식을 한번 더 체크하기 위해 정리해 보려고 한다.    트랜잭션(Transaction) 이란?트랜잭션(Transaction)은 데이터베이스 관리에서 하나의 작업 단위를 의미한다. 트랜잭션은 데이터베이스의 일관성을 유지하기 위해 필요한 조치들을 묶어서 관리하는데, 이를 정리하면 "모든 작업이 성공적으로 수행되거나, 전부 수행되지 않음"을 보장하는 것이 포인트 !   트랜잭션의 특징 - ACID 속성트랜잭션은 ACID라는 네 가지 중요한 특성을 통해 데이터베이스의 안정성과 일관성을 유지한다.원..

Spring/Spring 2024.10.27

mysql insert 오류 : Data truncation: Out of range value for column

Data truncation: Out of range value for column 스프링 부트에서 MySQL로 데이터를 삽입하는 과정에서 Data truncation: Out of range value for column 오류를 만나는 경우가 종종 있습니다. 이 오류는 보통 데이터 타입 불일치나 저장하려는 값이 해당 컬럼의 데이터 타입 범위를 초과할 때 발생합니다. 이번 글에서는 이 문제의 원인과 해결 방법에 대해 알아보겠습니다. 오류 발생 상황스프링 부트 애플리케이션에서 MySQL로 데이터를 저장하려고 할 때, 다음과 같은 에러가 발생할 수 있습니다:Data truncation: Out of range value for column 'column_name' at row 1이 에러는 MySQL이 해당 ..

Spring/error 2024.10.27