본문 바로가기

이슈와해결28

엔티티 필드 매핑 전략 탐구: 성능 테스터 Gatling을 이용한 Json 필드 매핑 사례 분석 목차 1. 개요 2. 목적 3. 테스트 환경 구성 4. 더미데이터 구성 5. 조회 로직 6. 테스트 전략 및 시나리오 7. 테스트 결과 분석 8. 결론 및 추가 과제 개요 사내에서 대규모 시스템 개편을 하면서 차세대 프로젝트에 참여한 경험이 있습니다. 일 평균 160만 건 이상의 데이터가 쌓였기 때문에 맡은 도메인에서 대규모 데이터 처리 시나리오를 고민해야 했습니다. 본 글에서는 효율적인 데이터베이스 매핑 방법을 탐구하면서 결정한 한 가지 방법에 대한 성능 테스트 내용을 다룹니다. 특정 엔티티의 특정 필드(ImportantField)에 대해 String 타입의 집합으로 데이터를 준비하고, 요청 쿼리를 통해 성능을 테스트하고 결과를 분석하는 내용입니다. 목적 ImportantField 필드에 대한 다양한 .. 2023. 12. 16.
MSA 도메인 서비스에서 id 채번 방식 - 멱등성 보장하기 개요 도메인 서비스를 개발하면서 id 채번 방식을 고민한 적이 있었다. 개인 프로젝트를 할 땐 auto generation 옵션으로 순번으로 생성되는 것을 너무 당연하게 생각했었다. 회사에서 다양한 케이스들을 접하면서 도메인 서비스에서 자동 채번으로 데이터가 쌓이기 시작할 때 다양한 문제가 생길 수 있다는 걸 알게 됐다. pk 생성 규칙을 정하기까지 다양한 옵션들을 탐구해보면서 고민했던 과정을 기록해보았다. @GeneratedValue 부터 멱등성 보장 규칙에 이르기까지 한 마디로 삽질의 기록이다. 하지만 해당 프로젝트를 하면서 정말 혼자했더라면 생각해보지도 못했을 것들을 많이 접하게 돼서 여러 배움 중에서도 인상 깊은 배움이었다. 용어나 예시 코드는 실제가 아닌 컨셉 용어, 컨셉 코드로 대체하였습니다... 2023. 12. 15.
입사 0년차 주니어의 첫 운영 배포와 실수 경험 목차 개요 및 사건 요약 첫 번째 문제 두 번째 문제 세 번째 문제 결론 회고 및 제안 개요 및 사건 요약 한 서비스에 기능 고도화를 개발하고 배포한 일이 있었습니다. 서비스 배포 과정에서 발생한 에러에 대해 원인을 파악하고 해결한 경험을 기록하여 공유해보려고 합니다. 용어나 코드는 실제의 것으로 작성하지 않고 컨셉으로 대체하였습니다. 대상 서비스: 서비스A 배포 내용: 유니버설 템플릿 적용을 통한 주요 기능 변경 및 추가 로직 도입 일시: 최근 날짜 (예: 2023년 11월 8일 10:30부터 12:30까지) 발생한 문제: 실제 운영 환경에서의 스프링 부트 어플리케이션 실행 실패, 주요 API 기능 제공 불가 결론: 3가지 주요 실패 원인 분석 첫 번째 문제 첫 번째 시도에서 만난 에러 메시지는 다음과.. 2023. 12. 14.
엔티티가 연장되는 속성을 가진 경우 효율적인 참조 관계 맺기 개요 댓글에 댓글처럼 어떤 엔티티가 줄을 타고 이어지는 경우가 있다. 사내에서 도메인 서비스를 개발하면서 비슷한 케이스가 있어서 고민해보았었다. 예시 서비스는 사용자에게 특정 기능의 연장 기능을 제공한다. 사용자는 해당 기능이 만료되기 일정 기간 전부터 연장을 신청할 수 있으며, 연장 신청 시 새로운 인스턴스가 생성된다. 이 과정에서 새 인스턴스와 이전 연장의 이력 관리가 중요하다. 따라서, 이 서비스에 대한 엔티티 설계에서 연장 이력의 연속성을 관리하는 방안에 대한 효율성을 탐구해야 한다. 사실 엄청 별거 아니지만 그때 고민한 내용과 생각해보았던 내용들을 간단하게 기록해보았다. 실제 용어와 코드는 컨셉으로 대체하였습니다. 목차 개요 현재 방식과 문제점 참조 관계를 개선하기 다른 방식은 없을까 결론 현재.. 2023. 12. 14.
리팩토링 회고 - QueryDsl 검색 로직을 좀 더 클린하게 만들어보기 0. 목차 목차 개요 첫 번째 구현 및 문제점 두 번째 구현 및 문제점 세 번째 구현 및 문제점 네 번째 구현 및 문제점 결론 1. 개요 사내 한 도메인 서비스에 새로운 API 를 추가 개발해야 하는 업무가 있었다. 검색 api를 제공해야 하는 부분에서 queryDsl을 사용면서 좀 더 클린한 방식의 코드 작성을 고민해보았다. *실제 코드가 아닌 컨셉 코드로 대체하였습니다. 2. 첫 번째 구현 및 문제점 구현 @RequiredArgsConstructor @Component public class DomainRepositoryImpl implements DomainCustomRepository { private final JPAQueryFactory queryFactory; @Override public .. 2023. 12. 13.