spring

    Gradle Composite Build 기반 Monorepo 전환기

    Gradle Composite Build 기반 Monorepo 전환기

    오랜만에 글을 작성합니다.사내에서 여러 spring, kotlin 프로젝트를 monorepo 로 이전하게 되면서 배운 점, 과정을 기록하기 위해 작성합니다.1. Monorepo를 도입한 이유1.1 기존 Polyrepo 구조에서의 문제사내, 그리고 저희 팀은 Spring 프로젝트를 담당하는 개발자가 2~3명뿐이었습니다.하지만 운영해야 할 서비스는 10개 이상으로, 각 서비스가 개별 저장소(Polyrepo)로 관리되고 있었습니다.Polyrepo 방식이 처음에는 큰 문제가 없어 보였지만, 서비스가 늘어나고 운영 기간이 길어지면서 다음과 같은 한계가 발생했습니다. 1) 공통 라이브러리 관리의 어려움각 프로젝트에서 동일한 공통 코드와 라이브러리를 사용하고 있었지만, Polyrepo 구조에서는 라이브러리 관리가 서..

    JPA N + 1, FetchJoin, EntityGraph

    JPA N + 1, FetchJoin, EntityGraph

    필자는 Spring Data JPA 를 많이 사용 중에 있다. 초반에 해당 문제로 골머리를 앓았던 기억이 있는데 그때 기억도 나는 겸 다시 정리도 하는 겸하여 정리해보고자 한다. 준비 우선 테스트를 진행해 볼 엔티티를 작성하자. 책과 작가를 엔티티로 삼았으며 책 → 작가를 의존하는 ManyToOne 관계를 맺어주었다. 코드는 아래와 같다. Entity @Entity @Getter @NoArgsConstructor @ToString public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToOne private Author author; public..

    Spring JPA - Hibernate 에서 field가 Enum일때 @ColumnDefault는 어떻게?

    Spring JPA - Hibernate 에서 field가 Enum일때 @ColumnDefault는 어떻게?

    Spring Boot 기반에 JPA 를 사용하는 중에 Enum 으로 Field를 관리하는 일이 많아졌습니다. 이때 Enum 에 초기값을 DB 단에서 설정해주어도 되고 Entity 객체를 생성할 때 기본으로 할당해주는 방법을 주로 사용하고 있었습니다. 근데 @ColumnDefault 로는 설정을 못해줄까? 라는 의문점이 생겨 적용을 해보았습니다. 아래는 예제 코드입니다. // enum public enum BoardType { NOTICE, FREE, COMMUNITY, ORGANIZATION; } // Entity Class ... @Column(name = "type") @NotNull @Enumerated(value = EnumType.STRING) private BoardType type; ... ..