본격적인 이슈를 소개하기에 앞서 기능하나를 소개하려고 한다. 사용자 스토리 : 사용자는 관심있는 주식을 관심항목으로 등록할 수 있다. 간단한 기능이다. 이를 구현하기 위해 서버에서는 interest_asset 테이블을 설계했다. account_id 가 설정한 관심자산 목록은 콤마(,) 로 이어져서 데이터베이스에 저장한다. 예를들면 A 사용자가 52번, 418번, 3번, 17번 자산을 관심자산으로 등록하면 "52,418,3,17" 이런식으로 저장된다고 생각하면 된다. (각각의 데이터를 ROW 로 빼지 않고 이렇게 문자열 형태로 저장한 이유에 대해서는 해당 포스팅에서 소개하진 않는다! 이 포스팅에서 중요한건 그게 아니기 때문에 우선 넘어가자!) 관심자산 추가 API 의 로직은 이렇다. account_id 의..
우리 팀 프로젝트에서는 JPA 와 QueryDSL 을 조합해서 사용하고 있다. 해당 프로젝트에서 JPA 를 통해 Batch Insert 하는 과정에서 겪었던 문제를 소개하고, 어떻게 해결했으며 그 결과로 어느정도의 성능향상이 이뤄졌는지 소개하려고 한다. Batch Insert 란? 간단히 설명하면 여러 개의 Row 를 한 번의 쿼리로 Insert 하는 방식이다. MySQL 은 Bulk Insert 방식을 통해 Batch Insert 가 가능하다. INSERT INTO MEMBER(NICKNAME, AGE) VALUE ('wiz', 29); INSERT INTO MEMBER(NICKNAME, AGE) VALUE ('chan', 27); INSERT INTO MEMBER(NICKNAME, AGE) VALUE..
Dependency org.springframework.boot spring-boot-starter-data-r2dbc io.r2dbc r2dbc-h2 runtime com.h2database h2 runtime Spring Data R2DBC 를 이용하기 위해서는 r2dbc-spi, r2dbc-pool, spring-data-r2dbc 의 의존성이 필요한데 spring-boot-starter-data-r2dbc 의존성 하나를 추가하면 이 모든 의존성을 한번에 추가해준다. 그리고 H2 Database 를 사용하기 위해서 관련 의존성을 추가해준다. Configuration @Configuration @EnableR2dbcRepositories public class R2dbcConfig extends Ab..
JPA 에서 가장 중요한 개념이라고 하면 연관관계 매핑과 영속성 컨텍스트가 있다. 이번 포스팅에서는 이 중에서 연관관계 매핑에 대해서 이야기해보려고 한다. 객체지향 프로그램에서의 객체와 RDB 에서의 테이블이 서로 연관관계를 맺는 방법이 다르다. 그렇기 때문에 이 둘의 차이를 채우기 위한 매핑과정이 필요하고 이를 ORM 인 JPA 가 수행하게 된다. 연관관계에서는 아래와 같은 용어들이 등장한다. 방향(Direction) : 단방향 연관관계, 양방향 연관관계 다중성(Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 연관관계의 주인(Owner) 데이터 중심의 모델링 JPA 에서 해주는 연관관계 매핑에 대해서 알아보기에 앞서 잘못된 연관관계 방법에 대해서 살펴보..