오늘은 JPARepository 내에서 사용하는 방법에 대한 가이드를 적어볼까 합니다. 보통 아래와 같이 SQL 을 작성하게 됩니다. 아래의 findById로 조회하는 경우 JPARepository 의 Override를 하게 되는것이기 때문에 우선권을 갖게 됩니다. @Query(value = "SQL") Optional findById(@Param("id") Long id); 근데 이와 같은 엔티티에 또 다른 엔티티가 Join이 되어 있는데, FetchType=LAZY인 경우 데이터를 가져오는 경우 쿼리가 2번 호출됩니다. AClass.java @Entity public class AClass { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) publ..
이번에 작성할 내용은 JPA 복합키 매핑을 적용할 때 엔티티 클래스 생성하는 내용을 살펴보고자 합니다. create table push_log ( push_id bigint not null, user_id bigint not null, clicked bit not null default false, primary key (user_id, push_id) ) engine=InnoDB ; 위와 같이 푸시를 발송한 내역의 테이블이 존재하며, 클릭했는지 안했는지 체크하기 위한 플래그값인 'clicked' 라는 값을 가진 로그성 테이블이 존재한다고 가정합니다. 이렇게 primary key가 2개 이상인 경우 복합키로 보통 통칭을 하는데 복합키는 구현하는데 크게 중요하지 않으므로 패스하겠습니다. 방법은 2가지가 있..
안녕하세요~ 오늘은 19년도에 올라온 영상이지만 아직까지도 도메인 설계에서 주력으로 사용하고 있는 내용을 잘 설명해주시고 있는 우아한테크세미나 영상을 하나 가져왔습니다. 바로 우아한형제들의 개발실장님이신 조영호님께서 올려주신 내용입니다. 이 영상에서는 JPA를 활용하여 어떻게하면 Dependency, 즉 의존성을 최소화하고 대용량 데이터를 트랜잭셔널하게 핸들링할 수 있는 도메인 설계 방법에 대해 올려주셨었는데, 아직까지도 공부를 하고 있는 저에게 있어 많은 도움이 되서 공유 링크를 올립니다 :) https://www.youtube.com/watch?v=dJ5C4qRqAgA 해당 내용에서는 ORM 기법을 사용하여 사용하고 있는 Java 내용을 '주문' 이라는 비즈니스 로직에 빗대어 설계를 한 프로세스 과정..
오늘은 간단하게 JPA에서 연관관계에 있는 엔티티를 입력받으려 할 떄 에러가 난 증상을 간단히 기술해보고자 합니다. 케이스는 아래와 같습니다. A class @Entity @Data ... public class Aclass { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String col1; private String col2; private String col3; private LocalDateTime createdAt; } B class @Entity @Data ... public class Bclass { @Id @GeneratedValue(strategy = GenerationType.ID..
이번 글에서 작성해볼 내용은 Flyway로 DB Schema 와 Seed 를 관리하는 내용을 담아보려 합니다. 우리는 대개 개발환경을 구성하고 개발 검수가 완료된 소스를 운영서버 또는 스테이지 서버에 올려서 테스트를 진행하곤 합니다. 이 때, DB 작업이 개발 서버에서는 적용되어 정상적으로 검수가 되었으나, 실제로 운영 서버에서 적용이 되지 않아 에러가 발생하곤 하는 실수를 할 수 있습니다. 아무래도 사람이 작업하는 환경이다 보니 더더욱 그럴 수 있습니다. 가장 먼저 Flyway 는 JPA를 사용하여 DB Schema 가 변경되는 이력 및 테이블 정보를 만드는 DDL 을 자동으로 생성해주는 DevTools입니다. 공식 홈페이지는 https://flywaydb.org/와 같고 실제로도 많은 기업들이 이 기..
오래전에 Java에서 JPA를 사용하는 글을 올려본 적이 있어요. 그래서 이번에는 Kotlin에서도 가능할 것인지 테스트 겸 프로젝트를 구성해보았습니다. 먼저 프로젝트를 만들어봐야겠죠? IntelliJ를 사용하였고, Spring Initializr를 사용했습니다! File -> New -> New Project에서 Spring Initializr를 선택합니다. 프로젝트명과 그룹도 정해주시고 Type은 Gradle Project, Language Kotlin으로 설정합니다. 다음으로 Dependency를 선택할 부분인데 API의 용도로만 사용하기 위해 심플하게 선택했습니다. 제가 잘못한 게 'Spring Web Starter'가 추가가 안되었습니다 ㅠㅠㅠ 추가해주세요. 프로젝트가 생성되고 build.gra..
어느 개발자들이나 신기술에 대한 갈망은 조금이나마 있을 것이다. 현재 우리나라에서 사용하고 있는 대부분의 프로그램 및 앱들은 SQL을 기반으로 작동하고 있다. 신기술이라고 얘기하기는 애매하지만 이번 글에서는 SQL을 되도록이면 최소화하여 (사용하지 않는 것이 아니다) 작동하는 프로그램의 원리에 대해 간단히 살펴보려고 한다. 가장 먼저 용어를 정리해보아야 한다. 글 제목에 적혀 있는 3개의 용어를 정리해보았다. 정의 ORM(Object Relational Mapping) : 객체와 DB 테이블이 매핑을 이루는 것 객체 하나는 하나의 테이블이 된다. JPA(Java Persistent API) : 자바 ORM 기술에 대한 API 표준 명세 (이 링크에서 JPA에 대한 어노테이션을 살펴볼 수 있어요) Hib..