본문 바로가기
작디 작은 나만의 라이브러리/Persistence-Code-Generator

[신입 개발자의 세 번째 라이브러리]실제 프로젝트 적용과 회고 : persistence-code-generator 개발기(fin)

by 시니성 2024. 12. 14.
728x90

들어가며

이번 글은 어느덧 persistence-code-generator 개발기의 마지막 편입니다.
지금까지 라이브러리의 설계와 구현을 살펴보았는데요.
이번 편에서는 실제 프로젝트 적용을 통해 달성한 정량적인 생산성 향상과 그 과정에서 느낀 것들을 공유하고자 합니다.

생산성 향상 효과

보일러 플레이트 코드 감소(feat. 정량적 분석)

persistence-code-generator의 가장 큰 성과는 영속성 계층의 보일러플레이트 코드를 94% 감소시킨 것입니다.
실제 수치로 살펴보겠습니다:

도메인 엔티티 1개당 (칼럼 다섯개의 가벼운 엔티티 예시):

  • 어노테이션 포함 개발자가 작성하는 코드: 20줄 (전체의 6.25%)
  • 자동 생성되는 코드: 300줄 (전체의 93.75%)
  • 전체 필요한 코드: 320줄

예시를 통해 살펴보겠습니다:

// 개발자가 작성하는 도메인 엔티티 코드 (전체 필요 코드의 6.25%)
@EntityDefinition(tableName = "payments")
data class Payment(
    @PrimaryKey
    @Column("id")
    @AutoIncrement
    val id: Long = 0,

    @Column("amount")
    @Decimal(precision = 10, scale = 2)
    val amount: BigDecimal,

    @Column("payment_method")
    @ValuedEnum
    @DbString(limit = 2)
    val paymentMethod: PaymentMethod,

    @Column("status")
    @ValuedEnum
    @DbString(limit = 1)
    val status: PaymentStatus,

    @Column("created_at")
    @TimeStamp(hasDefaultValue = true, defaultValue = "now")
    val createdAt: LocalDateTime
)

이 20줄의 코드로부터 자동 생성되는 코드(전체의 93.75%):

  1. KTORM 엔티티 코드: 약 45줄

    • 인터페이스 정의
    • 프로퍼티 매핑
    • 변환 메서드
    • ID 클래스
  2. KTORM 테이블 스키마: 약 25줄

    • 테이블 정의
    • 컬럼 매핑
    • 컨버터 연결
  3. DDL 정의: 약 30줄

    • 테이블 생성 정의
    • 컬럼 타입 및 제약조건
    • 인덱스 설정
  4. Base Repository: 약 110줄

    • CRUD operations
    • Batch 처리 메서드
    • 에러 핸들링
    • 로깅
  5. ValuedEnum 컨버터: 약 90줄

    • 각 ValuedEnum 타입별 컨버터
    • 타입 안전성 보장 로직

개발자에게 비즈니스 로직 집중 환경 제공 및 휴먼 에러 감소

  • 도메인 엔티티 하나를 작성하고 영속성 레이어에 대한 설정은 어노테이션으로 할 수 있게 함으로써, 비즈니스 도메인 코드에 집중 할 수 있는 환경을 제공합니다.
  • 서비스 코드 작성 중 레포지토리에의 오퍼레이션이 필요할 때 기본적인 CRUD와 BatchCRUD가 구현되어 있으므로, 단순한 영속성 오퍼레이션은 생성된 코드를 호출 하는 것만으로 작성 가능합니다.
  • 칼럼의 데이터 타입이 바뀌거나, 칼럼 삭제, 추가 등의 작업이 일어날 경우, KTORM 테이블 정의, KTORM 엔티티 정의, 테이블 생성 SQL 수정 등 여러 부분에 수정이 필요한데 이때 일어날 실수의 여지를 아예 없애버렸습니다.

마치며

persistence-code-generator는 영속성 계층의 보일러플레이트 코드를 94% 줄임으로써, 개발자가 비즈니스 로직에 더 집중할 수 있는 환경을 만들었습니다.
전체 필요 코드의 단 6.25%만 작성하면 되는 놀라운 효율성은, 개발 생산성 향상이 단순한 구호가 아닌 실제 달성 가능한 목표임을 보여줍니다.

처음엔 팀의 생산성 향상을 위해 작성한 라이브러리였지만, 라이브러리를 개발한 제게도 많은 영감을 주었던 프로젝트 였습니다.
아이러니하게도 영속성 계층의 코드를 자동 작성하는 과정에서 도메인 엔티티와 영속성 엔티티의 차이점, 비즈니스 로직이 있는 도메인 계층을 클린하게 유지하는 것의 장점 등을 느끼게 해주었습니다.
저는 비록 신입 개발자 이지만 앞으로도 저희 팀이 비즈니스 도메인에 대해 더 깊이 이해하고 집중할 수 있는 환경을 만들기 위해 다양한 시도를 해 볼 생각입니다.

여태껏 긴 시리즈를 끝까지 읽어주셔서 감사합니다!

728x90