public Optional<ProductSpecificResponse> findSpecificProductById(final Long id, final Long memberId) {
        return Optional.ofNullable(jpaQueryFactory.select(constructor(ProductSpecificResponse.class,
                        product.id,
                        product.description.location,
                        product.description.title,
                        product.description.content,
                        product.price.price,
                        product.productStatus,
                        product.statisticCount.visitedCount,
                        product.statisticCount.contactCount,
                        product.categoryId,
                        member.id,
                        member.nickname,
                        member.id.eq(memberId),
                        product.statisticCount.likedCount,
                        isLikedAlreadyByMe(memberId),
                        product.createdAt
                )).from(product)
                .where(product.id.eq(id))
                .leftJoin(member).on(member.id.eq(product.memberId))
                .leftJoin(productLike).on(productLike.productId.eq(product.id).and(productLike.memberId.eq(memberId)))
                .leftJoin(category).on(category.id.eq(product.categoryId))
                .fetchOne());
    }
@Test
    void 상품_상세_정보를_조회한다() {
        // given
        Member member = memberRepository.save(일반_유저_생성());
        Product product = productRepository.save(상품_생성());

        // when
        Optional<ProductSpecificResponse> result = productQueryRepository.findSpecificProductById(product.getId(), member.getId());

        // then
        assertSoftly(softly -> {
            softly.assertThat(result).isPresent();
            softly.assertThat(result.get().id()).isEqualTo(product.getId());
        });
    }