[Spring] 쇼핑몰 4 - 상품 등록 / 수정2

춤인형의 개발일지·2025년 3월 1일

Spring실습

목록 보기
38/40

저번의 문제는 등록까지는 어케어케 됐는데 상품 수정을 해결을 못했다. 연결이 왜 안되는지는 모르겠지만! 답답하니까 다른 방법을 생각해봤다.

❓옵션을 하나로 생각
옵션안에 옵션을 하니까, 재귀함수로 인한 성능 문제가 생겼다. 지금으로서는 해결이 안됐다. 그래서 옵션을 하나로 관리하기로 했다.

{
  "products": [
    {
      "id": "product_1",
      "optionCombinations": [
        {
          "id": "opt_1",
          "color": "빨강",
          "size": "230",
          "stock": 3
        },
        {
          "id": "opt_2",
          "color": "빨강",
          "size": "240",
          "stock": 7
        },
        {
          "id": "opt_3",
          "color": "파랑",
          "size": null,
          "stock": 2
        }
      ]
    }
  ]
}

이런 식으로 옵션의 칼럼을 여러개 둬서 관리하게끔 한다. 그러면 훨씬 쉬워진다! 그래서 옵션안에 옵션이 아니여도 빨강색의 여러 사이즈로 구분할 수 있고, 관리자들도 편하게 데이터 베이스를 볼 수 있을 것이다.
대신! 프론드엔드에서 구분해줘야한다. 최상위옵션을 선택하지 않으면 아래도 선택하지 못하게 해야한다.

내가 선택한 방식은
❗️EndPoint따로 두기
분리를 시켜준다는 이야기이다. 옵션을 만드는 api를 따로 만들어서 따로 관리하자! 그렇게 하면 일단 개발이 쉬워지고, ManyToOne의 관계로 쉽게 접근할 수 있다고 생각했다.

그래서 만든 상품 등록은 아래와 같다

상품 등록

@Transactional
    public ProductResponse save(Admin admin, ProductRequest productCreateRequest) {
        Admin admin1 = adminRepository.findById(admin.getId())
                .orElseThrow(() -> new NoSuchElementException("관리자가 아닙니다."));

        Product product = productRepository.save(new Product(
                productCreateRequest.productName(),
                productCreateRequest.price(),
                productCreateRequest.description(),
                productCreateRequest.category(),
                productCreateRequest.productCondition()
        ));


        if(productCreateRequest.productOption() != null){
            List<ProductOption> productOptions = productCreateRequest.productOption().stream()
                    .map(optionRequest -> productOptionRepository.save(new ProductOption(
                            optionRequest.color(),
                            optionRequest.size(),
                            optionRequest.stock(),
                            product)))
                    .toList();

            product.addOptions(productOptions);
        }

        List<ProductOptionResponse> optionResponses = convertRequestToResponse(product);

        return new ProductResponse(
                product.getId(),
                product.getName(),
                product.getPrice(),
                product.getDescription(),
                product.getCategory(),
                product.getProductCondition(),
                optionResponses,
                LocalDateTime.now()
        );
    }

상품을 저장하고, 그 상품에 대한 옵션을 저장하자

0개의 댓글