기업회원의 전체 조회 기능은 다음과 같은 요구사항을 포함하고 있었습니다:
viewCount
초기화 문제초기에는 viewCount
필드가 null
인 상태로 조회되는 경우가 발생했습니다. 이는 신규 기업회원 등록 시 viewCount
가 명시적으로 설정되지 않았기 때문입니다.
해결책: 엔티티 코드에서 viewCount
필드의 디폴트 값을 0으로 설정하였습니다.
@Column(nullable = false, columnDefinition = "INTEGER DEFAULT 0")
private Integer viewCount;
대량의 기업회원 데이터를 필터링하고 페이지네이션 하면서 성능 이슈가 발생했습니다. 특히, 특정 필드로 정렬 및 필터링하는 과정에서 쿼리 응답 시간이 길어졌습니다.
해결책: 다음과 같은 최적화 작업을 수행했습니다:
CREATE INDEX idx_cp_name ON CompanyUsers(cpName);
CREATE INDEX idx_cp_rating ON CompanyUsers(averageRating);
public Page<CompanyUser> findAllWithFilters(String sort, Float minRating, Float maxRating, Pageable pageable) {
// 동적 쿼리 생성 로직
}
필터링 조건이 복잡해지면서 코드의 가독성이 떨어지고 유지보수가 어려워졌습니다.
해결책: 필터링 로직을 별도의 서비스 클래스로 분리하여 책임을 분산시켰습니다.
public class CompanyUserSpecification implements Specification<CompanyUser> {
@Override
public Predicate toPredicate(Root<CompanyUser> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
// 필터링 조건 로직
}
}
페이지네이션은 클라이언트와 서버 간의 데이터 전송량을 줄이고 응답 속도를 개선하기 위해 필수적입니다. 이를 위해 Spring Data JPA의 Pageable
인터페이스를 활용했습니다.
기업회원 조회 시 다양한 조건으로 필터링할 수 있도록 요구되었습니다. 이를 위해 Criteria API와 Specification 패턴을 도입했습니다.
기업회원 프로필 조회 시마다 viewCount
를 증가시키는 요구사항이 있었습니다. 이를 트랜잭션 내부에서 처리하여 데이터의 일관성을 보장했습니다.
이번 기업회원 전체 조회, 페이지네이션 및 필터링 기능 구현은 다음과 같은 트러블슈팅과 기술적 의사결정을 통해 성공적으로 완성되었습니다:
viewCount
필드 초기화 문제 해결이 과정에서 성능과 유지보수성을 고려한 다양한 최적화 작업과 디자인 패턴을 적용하였으며, 이를 통해 보다 효율적이고 확장 가능한 시스템을 구축할 수 있었습니다.