JPA

🚩 1. 들어가며... Spring Data JPA를 사용하는 환경에서 여러 개의 데이터 삽입을 위해 saveAll() 메소드를 실행시키면, N개의 데이터마다 N개의 Insert쿼리를 날린다. 이렇게 되면 데이터베이스의 성능이 매우 떨어지게 되는데, 이런 문제를 해결하기 위해 Bulk Insert를 구현하게 되는데 이 과정에서 발생한 문제와 해결 방법을 포스팅한다. 🚩 2. 문제 상황: N개의 데이터 만큼 N개의 Insert Query를 날리는 saveAll() 여러 개의 데이터를 저장할 때 사용하는 saveAll() 메소드는 마치 Bulk(Multi Row) Insert로 동작할 것 같지만, 사실은 그렇지 않다. 만약 하나의 상품에 여러 개의 이미지를 저장한다고 할 때 saveAll() 메소드는 이미지..
· 월간회고
🚩 1. 이번 달의 주요 사건 📌 1-1. SQLD 시험 한 방에 합격하다! 지난 11월에 응시했던 SQLD 시험 결과가 나왔고, 1과목 만점과 함께 안정적인 점수로 합격했다. 지난 번에 1과목은 좋은 점수가 기대된다고 했는데 만점을 받았고 불안했던 2과목은 예상했던 것 보다 괜찮은 점수가 나와서 너무 기쁘다! 이번 회차가 어렵고 헷갈리는 지문이 많았다고 하는데 정말 다행이다🤩 공부 목적으로 도전한 시험인데, 개인 프로젝트를 하면서 ERD를 짜고 있는 지금! 확실히 도움이 많이 됐다고 느낀다. 이렇게 결과까지 얻어가니 보람차고 속이 후련하다. 그래도 SQL은 계속해서 써보고 공부할 예정이다. 📌 1-2. 코딩테스트 흥미를 느끼다. 이번 달 목표로 코테 문제를 풀고 30개 기록하기가 있었는데 아슬아슬하게 ..
🚩 1. 들어가며... Spring Data JPA를 사용하며 개인 프로젝트를 진행하고 있던 중 유저 계정의 활성화 여부를 별도로 값을 주지 않아도 기본값(true = '1')이 삽입되도록 데이터베이스에서 DEFAULT 값을 세팅해주었다. 이러한 과정에서 발생한 문제와 해결방법과 함께 포스팅한다. 🚩 2. 문제 상황 - 기본형 boolean과 데이터베이스 기본값 데이터 베이스의 DDL에서 'is_enabled' 컬럼을 tinyint NOT NULL DEFAULT '1'로 설정했다. 설정의 목적은 해당 엔티티의 필드에 값이 명시적으로 초기화 되지 않고, 쿼리에 포함되지 않는다면(null이 할당되는 것과는 다르다.) 데이터베이스가 자동으로 true = '1'을 기본값으로 사용할 수 있도록 하는 것이다. 하지..
🚩 1. 들어가며... JPA Spring Date를 공부할 목적으로 개인 프로젝트를 진행하며 Entity클래스를 구현하고 있던 중 Lombok 라이브러리의 @AllArgsConstructor의 문제점과 @Setter를 지양해야 한다는 것을 알게 되었다. 따라서 '@AllArgsConstructor', '@Setter'이 두 어노테이션을 사용하지 않고 Entity객체를 만들고 @ToString 사용시에도 순환 참조에 유의하여 사용하는 방법에 대해서 포스팅할 것이다. 🚩 2. @AllArgsConstructor, @Setter 사용을 지양하고 @Builder를 도입하기 📌 2-1 기존 코드 @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor @..
🚩 1. 리포지토리 인터페이스(Repository Interface)로 데이터 베이스 액세스 재사용 실현하기 📌 1-1. 인터페이스 정의 공통 리포지토리 인터페이스를 정의 이 인터페이스는 애플리케이션의 데이터 액세스 로직을 추상화하며, 메소드 시그니처를 제공 public interface MemberRepository { Member save(Member member); Optional findById(Long id); // ... 기타 메소드들 } 📌 1-2. JDBC 구현 MemberRepository 인터페이스를 확장하여 JDBC를 사용하는 구현체를 작성 public class JdbcMemberRepository implements MemberRepository { // ... JDBC를 사용하여..
모험가 죠
'JPA' 태그의 글 목록