Java

하이버네이트는 어떻게 자동 키 생성 전략을 결정하는가

하이버네이트는 어떻게 자동 키 생성 전략을 결정하는가

데이터베이스 테이블의 기본 키Primary key를 선정할 때 크게 2가지 선택지가 있는데 하나는 자연 키Natural key이고 또 하나는 대체 키Surrogate key이다. 자연 키는 전화번호, 이메일처럼 비즈니스적으로 의미 있는 키를 말하며, 대체 키는 비즈니스와 상관없이 임의로 만들어진 키를 말한다. JPAJava Persistence API는 데이터베이스 테이블 대체 키를 기본 키로 자동 생성하는 기능을 지원한다.

By 유 영모
스프링 부트 Auto-configuration과 JPA(하이버네이트) SQL문 로깅

스프링 부트 Auto-configuration과 JPA(하이버네이트) SQL문 로깅

JPA(하이버네이트)로 개발하다 보면 JPA가 자동으로 만들어 실행하는 SQL문을 확인하고 싶을 때가 있다. 이 글은 스프링 부트와 JPA를 함께 사용하는 환경에서 SQL문을 로깅Logging하는 방법을 소개한다. 예제 프로젝트 이해를 돕기 위해 간단한 스프링 부트 + JPA 예제 프로젝트를 만들고 SQL문 로깅을 추가해 보자. 예제 프로젝트는 스프링 부트에서 제공하는 부트스트랩Bootstrap 도구인 SPRING

By 유 영모
JAVA 8 에서 케이크 패턴(Cake Pattern)을 사용해보자

JAVA 8 에서 케이크 패턴(Cake Pattern)을 사용해보자

지난 글에서 의존성 주입(Dependency Injection)에 대한 이야기를 했었다. 이번 글에서는 다른 방식의 의존성 주입인 케이크 패턴을 소개한다. 스칼라의 케이크 패턴에 대한 자세한 내용은 여기를 참고 바란다. 케이크 패턴 스칼라의 케이크 패턴을 자바에서 사용해보자. 케이크 패턴은 의존성 주입의 한 방법이다. 자바 8에서는 인터페이스가 구현 코드를 담은 디폴트 메소드를 가질

By 이 상우
도커 초보의 우분투 Cron 삽질기

도커 초보의 우분투 Cron 삽질기

필자가 도커 초보인 동시에 우분투 초보라는 점을 감안하여 읽어 주셨으면 좋겠습니다. :) 이 글은 필자가 도커화Dockerize된 우부투에서 배치Batch 애플리케이션을 주기적으로 실행시키는 과정에서 겪었던 시행착오 과정을 정리한 것이다. Cron과 Cron Job 그리고 Crontab 필자가 우분투에서 배치 애플리케이션을 주기적으로 실행 시키기 위해 선택한 것은  Cron이었다. Cron은 리눅스 계열(이 글에서는 우부투) OS에서 제공하는

By 유 영모
JUnit Assertion에서 AssertJ로 갈아탈 때 소소한 팁

JUnit Assertion에서 AssertJ로 갈아탈 때 소소한 팁

필자는 현재 참여 중인 프로젝트에서 JUnit으로 테스트 코드를 작성하였다. 그 와중에 JUnit 보다 직관적인 Assert 구문과 풍부한 Assertion[1]을 제공하는 AssertJ를 알게 되었고 AssertJ로 테스트 코드를 리펙토링하고 싶었다. 기존에 작성된 JUnit Assertion 코드를 자동으로 AssertJ 코드로 바꿀 수는 없을까? AssertJ 마이그레이션Migration 도구 AssertJ 사이트에서는 JUnit Assertion을 AssertJ 코드로 바꿔주는

By 유 영모
Java 개발자를 위한 Maven + SonarQube + Docker로 시작하는 코드 정적 분석

Java 개발자를 위한 Maven + SonarQube + Docker로 시작하는 코드 정적 분석

켄트 벡Kent Beck은 자신의 책 익스트림 프로그래밍Extreme Programming에서 5 가치[1] 를 이야기 했는데 그중 하나가 피드백Feedback이다. 한번에 완벽하게 해결하기를 바라는 것보다 점진적 개선에 만족하기 때문에 우리는 피드백을 이용해 목표에 점점 더 가까이 다가간다. 피드백은 여러 가지 형식으로 우리에게 들어온다. - 익스트림 프로그래밍 47 쪽 더 나은 코드를 만들기 위해서는 피드백이

By 유 영모
JPA Native Query 사용 시 DTO로 매핑하기

JPA Native Query 사용 시 DTO로 매핑하기

이 글은 필자가 미디엄Medium에 쓴 2편의 글을 합하여 개정한 것이다. JPA Native Query를 사용하다 보면 반환 값으로 엔터티Entity 가 아닌 DTOData Transfer Object로 받고 싶을 때가 있다. 대표적인 경우가 통계이다. 통계 지표를 만들어낼 때 사용하는 SQL은 대부분이 복잡하고 길다. 문제는 SQL 실행 결과Result Set를 기존의 엔터티에 담기에는 형태가 맞지 않는데

By 유 영모
JavaBean Validation과 Hibernate Validator 그리고 Spring Boot

JavaBean Validation과 Hibernate Validator 그리고 Spring Boot

이 글은 JavaBean Validation(이하 Bean Validation)의 기본 개념과 Hibernate Validator와의 관계 그리고 Spring Boot에서 간단한 사용법을 소개한다. Bean Validation Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한

By 유 영모
IntelliJ에서 코드 한 줄 안 짜고 JPQL 실행하기

IntelliJ에서 코드 한 줄 안 짜고 JPQL 실행하기

관계형 데이터베이스를 사용하는 애플리케이션을 개발할 때 SQLStructured Query Language을 짜는 것은 피할 수 없는 일이다. Java 표준 ORMObject-Relational Mapping인 JPAJava Persistence API의 경우에도 다양한 조회를 위한 JPQLJava Persistence Query Language를 정의하고 있다. SQL 경우 데이터베이스 클라이언트 도구로 실행하고 결과를 확인할 수 있어서 애플리케이션 코드에서 SQL만 떼어 검증하기 쉽다. 반면

By 유 영모