전체 글132 DDD의 Entity와 JPA의 Entity를 구분해야하는 것인가? DDD Entity와 JPA Entity 구분의 고민 EATceed 프로젝트에서는 JPA의 Entity와 도메인 주도 설계(DDD)의 Entity를 구분하여 코드를 작성하고 있습니다. 하지만, 몇몇 JPA 엔티티와 DDD 엔티티들이 구조적으로 거의 흡사하여, 이 둘을 구분하는 것이 옳은 선택인지 고민이 생겼습니다.제가 생각하는 장점과 단점은 아래와 같습니다.장점명확한 책임 분리DDD Entity는 비즈니스 로직과 도메인 모델링에 집중하고, JPA Entity는 데이터베이스와의 매핑에만 집중하게 되어 각 클래스의 책임이 명확해집니다. 이를 통해 코드를 더 이해하기 쉽고 유지보수하기 용이하게 만듭니다.도메인 모델의 순수성 유지DDD Entity는 데이터베이스에 의존하지 않고, 순수한 도메인 로직만을 포함하게.. 2024. 8. 15. 헥사고날 아키텍처 회고 (2) https://rasony.tistory.com/190 헥사고날 아키텍처 회고EATceed 프로젝트에서 헥사고날 아키텍처를 사용해보며, 고민해본 점을 서술해보려고 합니다.먼저, 헥사고날 아키텍처를 도입한 이유입니다. 헥사고날 아키텍처를 도입한 이유 계층형 아키텍처rasony.tistory.com 프로젝트를 진행하며, 외부 서비스를 이용해야하는 기능들이 점점 더 생기기 시작하였습니다. 구체적으로, AWS의 S3와 SES 서비스를 이용하고, 데이터베이스로는 MariaDB와 Redis를 사용하게 되었습니다.또한, 특정한 트리거로 인한 스케줄링 기능을 사용하기 위해 Quatz를 도입하였습니다. 이에 아래와 같은 패키지가 추가되었습니다. 현재 패키지 구조는 도메인기반으로 패키지 구조를 나누고 있었습니다.하지만,.. 2024. 7. 28. ApplicationContext Caching을 활용한 테스트 환경 개선 배경프로젝트가 진행되면서 Jacoco를 도입해 테스트 커버리지를 측정하고, 처참한 커버리지를 보여줌으로써 팀원들(저 포함..)이 테스트를 작성하도록 독려했습니다. 이를 통해 테스트 코드의 수가 점차적으로 늘어나고 있었습니다. 또한, 테스트 컨테이너를 활용하여 테스트 환경을 구축하는 데 힘을 쏟았습니다. 어느덧, 테스트의 수가 70개가 넘어갈 때쯤 Run All Tests할 때 걸리는 시간이 꽤나 늘어나 있었습니다. ApplicationContext Caching 스프링에서는 테스트에 사용되는 애플리케이션 컨텍스트를 생성하고 관리하여 테스트에 적용해주는 테스트 프레임워크를 제공합니다. 테스트 컨텍스트 프레임워크는 테스트가 사용하는 컨텍스트를 캐싱해서 여러 테스트가 컨텍스트를 공유하는 방법을 제공합니다.하.. 2024. 7. 23. 팩토리 메서드 패턴을 사용하여 도메인 리팩토링하기 프로젝트를 진행하며 아래의 도메인 클래스가 너무 많은 기능을 가지고 있어 리팩토링할 필요가 있다고 생각했습니다.public class Nutritionist { private DailyMeal dailyMeal; private Member member; public boolean evaluateProteinAchieve() { return member.measureTargetProtein() - getCurrentProtein() 위의 Nutritionist 즉 영양사 도메인은 단백질, 탄수화물, 지방, 칼로리 달성률을 계산하는 책임과 영양사 도메인을 생성하는 책임을 가지고 있습니다.하나의 도메인이 너무 많은 책임을 가지고 있다고 생각하여 책임을 분리하기로 하였습니다. - .. 2024. 7. 13. CI시 JPA Entity와 DB Schema 검증하기 최근 PR에서 발생한 데이터베이스 스키마와 JPA 엔티티 간의 불일치 문제로 인해 서버가 과부화되는 문제가 발생했습니다. 이로 인해 EC2의 CPU 사용률과 CPU 크레딧 사용량을 급증시키고, 결국 예상보다 높은 비용이 발생하게 되었습니다. 이를 방지하기 위해 CI 파이프라인에 JPA Entity와 DB Schema 검증 단계를 추가하였습니다.문제 상황스키마 오류로 인해 서버 애플리케이션이 지속적으로 재시작되는 상황이 발생했습니다. 이는 다음과 같은 문제를 야기했습니다.서버 과부하: 애플리케이션이 지속적으로 재시작되면서 EC2 인스턴스의 CPU 사용률과 CPU 크레딧 사용량이 급증비용 증가: 예상보다 높은 비용이 발생 문제 해결 방법 이러한 문제를 방지하기 위해, JPA Entity와 DB Schema가.. 2024. 6. 28. 통합 테스트에 테스트컨테이너 도입 프로젝트를 진행하며 개발집의 테스트에 대해 고민하게 되었습니다. 현재 프로젝트에서 테스트의 상당수를 차지하고 있는 것은 통합 테스트입니다. 통합 테스트는 애플리케이션의 모든 구성 요소가 개발자의 예상대로 작동하는지 확인하는 것입니다. 그러나 기존 개발팀의 통합 테스트는 서비스 환경의 DB와는 달리 H2를 사용하고 있었습니다.또한, Redis의 경우에는 테스트 전 수동으로 실행하고 있었습니다. 문제점이러한 방식은 실제 환경과 다른 데이터베이스를 사용하기 때문에 테스트의 신뢰성을 보장하기 어렵고, 테스트 시마다 Redis를 수동으로 실행해야 하므로 개발자의 생산성이 저하되며, 개발자의 로컬 환경마다 테스트 데이터가 상이할 수 있다는 문제가 있었습니다. 따라서, 통합 테스트 시 DB를 세팅하는 방법에 대해 .. 2024. 6. 25. 이전 1 2 3 4 5 6 ··· 22 다음 728x90