JPA @OneToMany와 foreign key 그리고 deadlock
@OneToMany 관계와 foreign key를 사용하면서 Deallock이 발생할 수 있는 경우를 확인해 보고 해결 방법도 확인해 보겠습니다.
@OneToMany 관계와 foreign key를 사용하면서 Deallock이 발생할 수 있는 경우를 확인해 보고 해결 방법도 확인해 보겠습니다.
JPA를 사용하면서 SQL function을 사용하고 싶은 경우가 생길 수가 있습니다. 예제를 통해서 필요한 상황과 해결 방법을 알아보겠습니다.
Spring Data JPA를 이용하면 쉽게 페이징 처리를 할 수 있습니다. JpaRepository 인터페이스를 상속받으면 Spring에서 제공하는 페이징 관련 기능을 이용할 수 있습니다.
JPA Criteria에서 Entity 관계를 설정한 경우에는 조인 쿼리를 통해서 Entity를 조회할 수 있습니다. Order와 Member가 N:1로 설정되어 있을 때 JPA Criteria로 조회하는 방법을 확인해보겠습니다. @Entity @Table(name = "memb...
Hibernate에서 @ManyToOne의 FetchType을 LAZY로 설정해도 추가 쿼리가 실행되는 이유와 N+1 현상이 발생하는 과정을 확인해보겠습니다.
보통 테이블의 키값은 DB에서 제공하는 sequence나 auto increment 같은 증가 값 형태를 많이 사용하는데요. 특정 방식으로 키값을 관리해야 하는 경우도 있습니다. 예를 들면 uuid나 주문번호처럼 일정 패턴으로 생성하는 값을 키값으로 사용하는 경우가 있습니다.
데이터를 저장할 때 특정 조건에 의해서 증가하는 값을 Hibernate에서는 어떻게 할 수 있는지 확인해보겠습니다.
기존 테이블 기준으로 Kotlin Entity를 생성 하려다 보면 property type을 nullable 과 not null 중에 고민하게 되는 상황이 있습니다. 왜 이런 상황이 생기는지 어떻게 해결하는지 좋을지 확인해보겠습니다.
Kotlin으로 Entity를 만들 때 등록일/수정일 정의를 어떻게 하는 게 좋을지 고민한 내용입니다.
PK 컬럼이 not null인 것 처럼 JPA에서 @Id 애노테이션이 있는 필드도 not null 이어야 합니다. PK 컬럼이 여러개인 복합키인 경우에도 PK로 지정한 컬럼은 모두 not null 이어야 하는데요. JPA를 사용하면서 이부분에 대해 경험한 내용입니다.
이전 글에서 bulk insert 처리를 할 수 있는 방법 중에 하나가 @Id 값 알고 있는 경우라고 했었는데요. 실제로 잘 되는지 확인하는 과정에 발생한 문제 내용을 공유합니다.
JPA에서 Batch Insert가 되지 않아서 그 이유를 확인한 과정을 공유합니다. Spring, Kotlin, MySQL 환경기준으로 작성했습니다.
직접 서비스를 운영하면서 겪은 MySQL 관련 문제를 공유합니다.
Lombok은 많은 편의 기능을 제공하기 때문에 거의 대부분의 자바 개발자들이 사용하고 있을 것입니다. 오늘은 Lombok 중에서도 @Builder 애노테이션으로 생성된 builder 메소드 사용 여부를 확인 방법에 대해서 확인해 보겠습니다.
2개의 리스트가 있고, 정렬된 하나의 리스트를 기준으로 나머지 하나의 리스트를 정렬해야 하는 경우에 Java8에서 추가된 List의 sort 메소드와 Comparator를 이용해서 쉽게 처리할 수 있다.
Java8 숫자 타입 List에서 합계를 구하는 방법입니다. Integer, Long, Double은 Stream의 reduce()나 전용 Stream을 이용해서 바로 sum 구할 수 있고 BigInteger, BigDecimal은 reduce를 이용해서 구합니다.
지난번에 작성한 Java Bean Validation 제대로 알고 쓰자에 이어서 Spring Boot 환경에서 Validation을 어떻게 사용할 수 있는지 확인해보겠습니다. Spring에서도 Hibernate Validator를 사용합니다. Java Bean Validation에...
개발하면서 제일 중요하게 생각하는 것 중에 하나가 validation입니다. 개발하고 운영하다 보면 클라이언트로부터 입력받은 값의 오류로 발생하는 장애가 꽤 많습니다. 잘못된 값을 전달받아 즉시 오류가 발생하면 그나마 다행입니다. 오류 없이 그대로 데이터가 저장이나 수정되고 그 데...
지난번에 작성한 Enum and @RequestParam in Spring에 이어서 이번에는 JSON으로 전달된 Request Body에서 Enum 타입을 처리하려면 어떻게 해야 하는지 확인해보겠습니다.
Spring에서 문자나 숫자로 전달된 Request Parameter를 Enum 타입으로 처리하는 방법과 custom conveter를 만드려면 어떻게 해야 하는지 확인해보겠습니다.
Java8에서 Collectors.toMap()을 사용할 경우 NPE 발생에 대한 주의가 필요합니다. 개발 및 테스트 환경에서는 이상이 없었는데 운영에서 오류가 발생한 경험에 대한 내용입니다.
Map에서 key와 value의 위치를 서로 변경해야 할 일이 생길 수 있습니다. 어떻게 처리해야 할지 살펴보겠습니다. 기본적으로 Map은 중복된 key 값을 가질 수 없지만 value는 중복일 수 있습니다. 그래서 서로 위치를 변경하게 되면 value는 List로 처리해야 합니다.
오랜만에 사용하려면 기억나지 않는 DecimalFormat 클래스의 Number Format Pattern을 정리합니다.
Java8 stream을 사용하여 중복된 요소가 있는지 확인하려면 distinct()를 호출한 후 count() 정보와 원본 리스트의 size()를 비교하여 알 수 있습니다.
ThreadPoolTaskExecutor는 이름에서 알 수 있듯이 스레드 풀을 사용하는 Executor입니다. 상위 인터페이스를 확인해 보면 java.util.concurrent.Executor를 Spring에서 구현한 것을 확인할 수 있습니다. 이 스레드 풀을 사용할 때 설정에 ...
Spring Boot 환경에서 application을 shutdown 하는 방법 중 대표적인 것이 actuator의 shutdown endpoint 기능을 이용하는 것입니다. 이 endpoint는 예상과 달리 처리 중인 요청이 있더라도 그냥 shutdown 처리를 합니다. 정말로 ...
지난번에 작성한 Java Bean Validation 제대로 알고 쓰자에 이어서 Spring Boot 환경에서 Validation을 어떻게 사용할 수 있는지 확인해보겠습니다. Spring에서도 Hibernate Validator를 사용합니다. Java Bean Validation에...
Spring에서 문자나 숫자로 전달된 Request Parameter를 Enum 타입으로 처리하는 방법과 custom conveter를 만드려면 어떻게 해야 하는지 확인해보겠습니다.
Spring을 사용하면 트랜잭션을 설정하기 위해 보통은 @Transactional 애노테이션을 많이 사용합니다. @Transactional은 클래스나 메서드에 지정해서 사용하게 됩니다. 그러다 보니 트랜잭션 적용 범위를 제어하기가 힘들 수 있는데요. 이럴 경우에 사용할 수 있는 방...
이전에 작성했던 JPA Batch Insert with MySQL 글에서 JDBC Batch와 JdbcTemplate을 이용한 bulk insert 처리하는 방법에 대해 잠깐 얘기한 적이 있었습니다. 이번에는 batch insert 이후에 생성된 데이터의 키값을 가져오는 방법에 대...
Kotlin으로 Entity를 만들 때 등록일/수정일 정의를 어떻게 하는 게 좋을지 고민한 내용입니다.
@OneToMany 관계와 foreign key를 사용하면서 Deallock이 발생할 수 있는 경우를 확인해 보고 해결 방법도 확인해 보겠습니다.
Lock wait timeout exceeded; try restarting transaction 발생 이유와 해결
JPA에서 Batch Insert가 되지 않아서 그 이유를 확인한 과정을 공유합니다. Spring, Kotlin, MySQL 환경기준으로 작성했습니다.
직접 서비스를 운영하면서 겪은 MySQL 관련 문제를 공유합니다.
kotlin을 이용해서 개발하고 있지만 최근에서야 property와 function의 차이점을 알게 된 것 같습니다. 어떻게 구분해서 사용하는 것인가? 대한 고민 없이 그냥 사용했었는데요. 그 차이에 대해서 고민한 내용입니다.
예전에는 테스트 코드를 작성하려고 해도 스스로도 익숙하지 않았고 테스트 코드 작성에 대해 호의적이지 않은 사람이 있거나 일정 압박으로 테스트 코드를 작성하다가도 중간에 포기한 적이 많았습니다. 지금 진행하는 프로젝트는 kotlin으로 개발하고 있으며 구성원 모두가 테스트 코드의 ...
기존 테이블 기준으로 Kotlin Entity를 생성 하려다 보면 property type을 nullable 과 not null 중에 고민하게 되는 상황이 있습니다. 왜 이런 상황이 생기는지 어떻게 해결하는지 좋을지 확인해보겠습니다.
Kotlin으로 Entity를 만들 때 등록일/수정일 정의를 어떻게 하는 게 좋을지 고민한 내용입니다.
이전에 작성했던 JPA Batch Insert with MySQL 글에서 JDBC Batch와 JdbcTemplate을 이용한 bulk insert 처리하는 방법에 대해 잠깐 얘기한 적이 있었습니다. 이번에는 batch insert 이후에 생성된 데이터의 키값을 가져오는 방법에 대...
이전 글에서 bulk insert 처리를 할 수 있는 방법 중에 하나가 @Id 값 알고 있는 경우라고 했었는데요. 실제로 잘 되는지 확인하는 과정에 발생한 문제 내용을 공유합니다.
JPA에서 Batch Insert가 되지 않아서 그 이유를 확인한 과정을 공유합니다. Spring, Kotlin, MySQL 환경기준으로 작성했습니다.
현재 커넥션 수 확인하기 DB 커넥션 수가 제대로 동작하는지 확인하고 싶은 경우가 있다면 HikariDataSourcePoolMetadata클래스를 이용해서 현재 사용 중인 커넥션 수를 확인할 수 있습니다.
이전에 작성했던 JPA Batch Insert with MySQL 글에서 JDBC Batch와 JdbcTemplate을 이용한 bulk insert 처리하는 방법에 대해 잠깐 얘기한 적이 있었습니다. 이번에는 batch insert 이후에 생성된 데이터의 키값을 가져오는 방법에 대...
JPA에서 Batch Insert가 되지 않아서 그 이유를 확인한 과정을 공유합니다. Spring, Kotlin, MySQL 환경기준으로 작성했습니다.
개인적으로는 DTO 클래스가 필요할 때 불변 클래스로 만드는 것을 선호합니다. 여러 장점이 있지만 그 중에서도 객체 값이 중간에 변경될 일이 없기 때문에 다른 걱정이 없이 사용할 수 있는 장점이 특히 매력적인 것 같습니다.
지난번에 작성한 Enum and @RequestParam in Spring에 이어서 이번에는 JSON으로 전달된 Request Body에서 Enum 타입을 처리하려면 어떻게 해야 하는지 확인해보겠습니다.
kotlin 환경에서 Jackson 라이브러리를 사용할 때 객체 변환이 생각대로 잘 안될 수 있습니다. 어떤 경우가 있는지 어떻게 해결할 수 있는지 확인해 보겠습니다.
Lombok은 많은 편의 기능을 제공하기 때문에 거의 대부분의 자바 개발자들이 사용하고 있을 것입니다. 오늘은 Lombok 중에서도 @Builder 애노테이션으로 생성된 builder 메소드 사용 여부를 확인 방법에 대해서 확인해 보겠습니다.
뒤늦게 알게된 Http Request File 기능이 좋아서 메뉴얼 참고해서 내용 정리립니다.
예전에는 테스트 코드를 작성하려고 해도 스스로도 익숙하지 않았고 테스트 코드 작성에 대해 호의적이지 않은 사람이 있거나 일정 압박으로 테스트 코드를 작성하다가도 중간에 포기한 적이 많았습니다. 지금 진행하는 프로젝트는 kotlin으로 개발하고 있으며 구성원 모두가 테스트 코드의 ...
뒤늦게 알게된 Http Request File 기능이 좋아서 메뉴얼 참고해서 내용 정리립니다.
자바 클래스 List 형태의 응답을 Map으로 제공받고 싶은데 현실적으로 어려운 경우 할 수 있는 방법에 관한 내용입니다.
뒤늦게 알게된 Http Request File 기능이 좋아서 메뉴얼 참고해서 내용 정리립니다.
AdSense PIN 번호 받은 기념으로 블로그에 대해서 다시 한번 생각해봤다.
지난주 목요일부터 저희 회사도 재택근무를 시작했습니다. 코로나19 바이러스로 재난위기 경보 수준이 “심각” 단계로 되면서부터 재택근무가 가능한 산업분야에서는 많이 도입하는 것 같습니다.
지난번에 작성한 Java Bean Validation 제대로 알고 쓰자에 이어서 Spring Boot 환경에서 Validation을 어떻게 사용할 수 있는지 확인해보겠습니다. Spring에서도 Hibernate Validator를 사용합니다. Java Bean Validation에...
개발하면서 제일 중요하게 생각하는 것 중에 하나가 validation입니다. 개발하고 운영하다 보면 클라이언트로부터 입력받은 값의 오류로 발생하는 장애가 꽤 많습니다. 잘못된 값을 전달받아 즉시 오류가 발생하면 그나마 다행입니다. 오류 없이 그대로 데이터가 저장이나 수정되고 그 데...
Java8 stream을 사용하여 중복된 요소가 있는지 확인하려면 distinct()를 호출한 후 count() 정보와 원본 리스트의 size()를 비교하여 알 수 있습니다.
오랜만에 사용하려면 기억나지 않는 DecimalFormat 클래스의 Number Format Pattern을 정리합니다.
SSH 기본 사용방법에 대해 알아보겠습니다. 접속명령 SSH의 기본 포트는 22번입니다. > ssh 아이디@호스트 # SSH 접속 > ssh 아이디@호스트 -p포트 # SSH 접속 포트변경 Key 생성 접속할 때마다 매번 계정과 패스워...
뒤늦게 알게된 Http Request File 기능이 좋아서 메뉴얼 참고해서 내용 정리립니다.
PK 컬럼이 not null인 것 처럼 JPA에서 @Id 애노테이션이 있는 필드도 not null 이어야 합니다. PK 컬럼이 여러개인 복합키인 경우에도 PK로 지정한 컬럼은 모두 not null 이어야 하는데요. JPA를 사용하면서 이부분에 대해 경험한 내용입니다.
PK 컬럼이 not null인 것 처럼 JPA에서 @Id 애노테이션이 있는 필드도 not null 이어야 합니다. PK 컬럼이 여러개인 복합키인 경우에도 PK로 지정한 컬럼은 모두 not null 이어야 하는데요. JPA를 사용하면서 이부분에 대해 경험한 내용입니다.
Kotlin으로 Entity를 만들 때 등록일/수정일 정의를 어떻게 하는 게 좋을지 고민한 내용입니다.
자바 클래스 List 형태의 응답을 Map으로 제공받고 싶은데 현실적으로 어려운 경우 할 수 있는 방법에 관한 내용입니다.
데이터를 저장할 때 특정 조건에 의해서 증가하는 값을 Hibernate에서는 어떻게 할 수 있는지 확인해보겠습니다.
데이터를 저장할 때 특정 조건에 의해서 증가하는 값을 Hibernate에서는 어떻게 할 수 있는지 확인해보겠습니다.
보통 테이블의 키값은 DB에서 제공하는 sequence나 auto increment 같은 증가 값 형태를 많이 사용하는데요. 특정 방식으로 키값을 관리해야 하는 경우도 있습니다. 예를 들면 uuid나 주문번호처럼 일정 패턴으로 생성하는 값을 키값으로 사용하는 경우가 있습니다.
Spring을 사용하면 트랜잭션을 설정하기 위해 보통은 @Transactional 애노테이션을 많이 사용합니다. @Transactional은 클래스나 메서드에 지정해서 사용하게 됩니다. 그러다 보니 트랜잭션 적용 범위를 제어하기가 힘들 수 있는데요. 이럴 경우에 사용할 수 있는 방...
kotlin 환경에서 Jackson 라이브러리를 사용할 때 객체 변환이 생각대로 잘 안될 수 있습니다. 어떤 경우가 있는지 어떻게 해결할 수 있는지 확인해 보겠습니다.
docker로 nginx를 실행하고 logrotate 설정하는 방법을 확인해 보겠습니다. nginx alpine 이미지에는 logrotate가 없지만, 호스트에 logrotate가 있다면 docker volume을 통해서 log 파일을 logrotate를 실행할 수 있습니다. 이렇...
docker로 nginx를 실행하고 logrotate 설정하는 방법을 확인해 보겠습니다. nginx alpine 이미지에는 logrotate가 없지만, 호스트에 logrotate가 있다면 docker volume을 통해서 log 파일을 logrotate를 실행할 수 있습니다. 이렇...
git을 사용하고는 있지만 그때그때 필요한 기능만 사용하다 보니 모르는 명령어 또는 제대로 알고 사용하고 있지 않은 명령어가 있다는 생각이 들었습니다. 보통 업무를 할 때는 툴을 통해서 많이 작업하다 보니 특히 그랬던 것 같은데 이번 기회에 공부할 겸 정리를 한번 해봤습니다.
개인적으로는 DTO 클래스가 필요할 때 불변 클래스로 만드는 것을 선호합니다. 여러 장점이 있지만 그 중에서도 객체 값이 중간에 변경될 일이 없기 때문에 다른 걱정이 없이 사용할 수 있는 장점이 특히 매력적인 것 같습니다.