본문 바로가기
728x90

작디 작은 나만의 라이브러리/Persistence-Code-Generator5

[신입 개발자의 세 번째 라이브러리]실제 프로젝트 적용과 회고 : persistence-code-generator 개발기(fin) 들어가며이번 글은 어느덧 persistence-code-generator 개발기의 마지막 편입니다.지금까지 라이브러리의 설계와 구현을 살펴보았는데요.이번 편에서는 실제 프로젝트 적용을 통해 달성한 정량적인 생산성 향상과 그 과정에서 느낀 것들을 공유하고자 합니다.생산성 향상 효과보일러 플레이트 코드 감소(feat. 정량적 분석)persistence-code-generator의 가장 큰 성과는 영속성 계층의 보일러플레이트 코드를 94% 감소시킨 것입니다.실제 수치로 살펴보겠습니다:도메인 엔티티 1개당 (칼럼 다섯개의 가벼운 엔티티 예시):어노테이션 포함 개발자가 작성하는 코드: 20줄 (전체의 6.25%)자동 생성되는 코드: 300줄 (전체의 93.75%)전체 필요한 코드: 320줄예시를 통해 살펴보겠습니.. 2024. 12. 14.
[신입 개발자의 세 번째 라이브러리] 컴파일 타임에 클래스의 FQCN 알아내기 - persistence-code-generator 개발기(4) 들어가며이전 편에서는 ValuedEnum 처리와 타입 안전성 확보에 대해 다뤘습니다.이번 편에서는 @WithConverter 구현 과정에서 마주친 문제와 그 해결 방법을 공유하고자 합니다.@WithConverter(converter: Kclass)를 통해 받은 클래스 리터럴을 통해 메타데이터에 접근할 수 없는 문제@WithConverter는 다음과 같이 구현된 간단한 어노테이션입니다:@Target(AnnotationTarget.PROPERTY)@Retention(AnnotationRetention.RUNTIME)annotation class WithConverter( val converter: KClass>)하지만 이 간단한 어노테이션의 구현 과정에서 한 가지 어려운 점에 직면했습니다.컴파일 타임 .. 2024. 12. 7.
[신입 개발자의 세 번째 라이브러리] 타입 안전한 Enum 변환과 확장성 - persistence-code-generator 개발기(3) 들어가며이번 편에서는 persistence-code-generator를 작성하며, 기본 기능 외에도 디테일한 표현이 가능하도록 신경을 쓴 부분인 ValuedEnum 처리와 컨버터 등록 어노테이션인 @WithConverter에 대해 다루어 보겠습니다.ValuedEnum: 값을 가진 열거형먼저 ValuedEnum의 개념과 그 필요성부터 이해해보겠습니다.ValuedEnum은 실제 데이터베이스에 저장될 값을 가지는 형태의 enum입니다.저는 키오스크나 포스와 같은 클라이언트 솔루션을 개발하는 개발자로서, 결제 데이터를 취합하고, 통계 데이터를 보여주는 서버(이하 '집계 서버')와의 API 통신 코드를 짤 때가 많았는데요.이 때 ValuedEnum의 유용함을 느꼈습니다.왜냐하면, 집계 서버는 단일 문자열 값으로 .. 2024. 12. 6.
[신입 개발자의 세 번째 라이브러리] 도메인 엔티티에서 영속성 코드 생성하기 : persistence-code-generator 개발기(2) 들어가며이전 편에서 소개한 것처럼, persistence-code-generator는 도메인 엔티티로부터 필요한 영속성 관련 코드를 자동으로 생성합니다. 이번 편에서는 실제 구현의 핵심이 되는 어노테이션 설계와 코드 생성 로직을 상세히 다뤄보겠습니다.어노테이션 설계와 구현먼저 사용자 관점에서 직관적이고 명확한 API를 제공하기 위해 다음과 같은 어노테이션 체계를 설계했습니다:엔티티 레벨 어노테이션@Target(AnnotationTarget.CLASS)@Retention(AnnotationRetention.RUNTIME)annotation class EntityDefinition( val tableName: String = "", val ifNotExists: Boolean = true)컬럼 타.. 2024. 12. 5.
728x90