메인페이지에는 단품들과 세트상품들이 각 카테고리에 해당되는 상품들의 데이터를 다져와야한다.
아래 코드는 단품 테이블과 세트 테이블을 UNION으로 합치는 쿼리문이다.
`SELECT
p.name,
p.size,
pi.url,
p.price
FROM products p
INNER JOIN products_images pi ON p.product_image_id = pi.id
WHERE name LIKE '%퍼퓸'
UNION
SELECT
pg.name,
pg.size,
pi.url,
pg.price
FROM products_groups pg
INNER JOIN products_images pi ON pg.product_group_image_id = pi.id

사용시 세트 테이블은 size가 필요없으나 위의 컬럼을 맞추기 위해 추가됨에 따라 불필요한 컬럼이 발생하였고 그를 수정하기 위해 JSON_ARRAYAGG, JSON_OBJECT를 사용하였다.
`SELECT
category.category_description,
(SELECT
JSON_ARRAYAGG(JSON_OBJECT(
"name", p.name,
"id", p.id,
"size", p.size,
"url", pi.url
)) JSON FROM products p
INNER JOIN products_images pi ON p.product_image_id = pi.id
WHERE p.name LIKE '${categoryStr}%'
) product,
(SELECT
JSON_ARRAYAGG(JSON_OBJECT(
"name", pg.name,
"setId", pg.id,
"url", pi.url
)) JSON FROM products_groups pg
INNER JOIN products_images pi ON pg.product_group_image_id = pi.id
WHERE pg.name LIKE '${categoryStr}%'
) setProduct
from category
WHERE category.name = '${categoryStr}';

로 변경 하지만 변경시 products라는 키에 모든 나머지 요소가 값으로 입력되어 출력되어 Service 단에서 출력되는 정보를 한 번 가공해준다.
for (const productCategory of productCategoryList) {
productCategory.product = JSON.parse(productCategory.product)
productCategory.setProduct = JSON.parse(productCategory.setProduct);
}
를 추가함으로 JSON스트링을 JSON.parse 매서드를 사용하요 문자열화하여 출력한다.