Mock API 작성하는 팁
🐥 카카오테크캠퍼스 - 2단계 2주차 과제를 수행 할 때, 하나하나 데이터를 입력해야 하는 불편함이 있었는데
오늘 강사님이 보여주신 코드를 보니까 깔끔해서 들고 왔다
@GetMapping("/products")
public ResponseEntity<?> findAll(@RequestParam(defaultValue = "0") int page) {
List<ProductRespFindAllDTO> responseDTO = new ArrayList<>();
// 상품 하나씩 집어넣기
responseDTO.add(new ProductRespFindAllDTO(
1, "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전", "", "/images/1.jpg", 1000
));
responseDTO.add(new ProductRespFindAllDTO(
2, "[황금약단밤 골드]2022년산 햇밤 칼집밤700g외/군밤용/생율", "", "/images/2.jpg", 2000
));
난 일단 DTO를 만들어서 위의 코드처럼 데이터를 하나하나 생성해서 넣는 방법을 사용하였다.
즉 하드코딩 된 방식으로 상품을 추가하고 있다.
이러면 상품의 데이터가 변경되면 코드 자체를 변경해야 합니다.
이 방식은 유지 보수가 어렵고, 확장성이 낮습니다.
멘토님 코드 분석
// 빈을 정의하기 위한 Spring 애노테이션
@Component
public class FakeStore {
// 다양한 더미 데이터 목록을 저장하는 데 사용되는 비공개 변수들
private List<Product> productList = productDummyList();
private List<Option> optionList = optionDummyList(productList);
private List<Cart> cartList = cartDummyList(optionList);
// 더미 제품 목록을 반환하는 메소드
private List<Product> productDummyList() {
// 제품 정보를 저장할 빈 리스트를 생성합니다.
List<Product> productList = new ArrayList<>();
// 더미 데이터를 생성하고 리스트에 추가합니다.
productList.add(new Product(1L, "Product1", 10000, "description1"));
productList.add(new Product(2L, "Product2", 20000, "description2"));
// 더미 데이터가 포함된 리스트를 반환합니다.
return productList;
}
// 더미 옵션 목록을 반환하는 메소드
private List<Option> optionDummyList(List<Product> productList) {
// 옵션 정보를 저장할 빈 리스트를 생성합니다.
List<Option> optionList = new ArrayList<>();
// 더미 데이터를 생성하고 리스트에 추가합니다.
optionList.add(new Option(1L, "Option1", 1000, productList.get(0)));
optionList.add(new Option(2L, "Option2", 2000, productList.get(1)));
// 더미 데이터가 포함된 리스트를 반환합니다.
return optionList;
}
// 더미 장바구니 목록을 반환하는 메소드
private List<Cart> cartDummyList(List<Option> optionList) {
// 장바구니 정보를 저장할 빈 리스트를 생성합니다.
List<Cart> cartList = new ArrayList<>();
// 더미 데이터를 생성하고 리스트에 추가합니다.
cartList.add(new Cart(1L, 1, optionList.get(0)));
cartList.add(new Cart(2L, 2, optionList.get(1)));
// 더미 데이터가 포함된 리스트를 반환합니다.
return cartList;
}
}
FakeStore
클래스의 코드를 살펴보겠습니다.
여기에는 Product
, Option
및 Cart
개체의 더미 목록을 생성하는 메서드가 포함되어 있습니다.
productDummyList()
방법
이 방법은 더미 제품 목록을 생성합니다.
private List<Product> productDummyList() {
List<Product> productList = new ArrayList<>();
productList.add(new Product(1L, "Product1", 10000, "description1"));
productList.add(new Product(2L, "Product2", 20000, "description2"));
return productList;
}
2. optionDummyList()
메소드:
이 메서드는 더미 옵션 목록을 만듭니다. 각 옵션은 더미 제품 목록의 제품과 연결되어 있습니다.
private List<Option> optionDummyList(List<Product> productList) {
List<Option> optionList = new ArrayList<>();
optionList.add(new Option(1L, "Option1", 1000, productList.get(0)));
optionList.add(new Option(2L, "Option2", 2000, productList.get(1)));
return optionList;
}
cartDummyList()
메소드:
private List<Cart> cartDummyList(List<Option> optionList) {
List<Cart> cartList = new ArrayList<>();
cartList.add(new Cart(1L, 1, optionList.get(0)));
cartList.add(new Cart(2L, 2, optionList.get(1)));
return cartList;
}
이 메서드는 더미 카트 항목 목록을 만듭니다. 각 장바구니 항목에는 더미 옵션 목록의 옵션이 포함되어 있습니다.
이러한 더미 데이터 목록은 FakeStore
클래스의 비공개 필드로 저장되므로 클래스 전체에서 액세스하고 사용할 수 있습니다.
FakeStore
클래스의 맨 위에 있는 @Component
주석은 Spring Bean이고 수명 주기가 Spring 컨테이너에 의해 관리됨을 나타냅니다.
이는 FakeStore
가 Spring의 종속성 주입을 사용하여 다른 구성 요소에 주입될 수 있음을 의미합니다.
이 가짜 데이터를 테스트에 쉽게 주입할 수 있으므로 테스트 목적에 특히 유용할 수 있습니다.
사용 방법 : Controller에서 이렇게 쓰인다
@RequiredArgsConstructor // Lombok 라이브러리가 제공하는 어노테이션으로 필요한 인자를 가진 생성자를 자동으로 생성합니다.
@RestController // 이 클래스가 REST 요청을 처리하는 컨트롤러라는 것을 Spring에게 알려주는 어노테이션입니다.
public class CartRestController {
private final FakeStore fakeStore; // FakeStore 의존성이 여기에 주입됩니다.
}
이제 컨틀로러에서 만들어진 FakeStore를 사용한다.
이 때 FakeStore의 생성자를 자동으로 생성하기 위해 @RequiredArgsConstructor
를 사용한다.
그후 private final로 FakeStore를 선언함으로써 싱글톤으로 더미 데이터를 다룬다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
MyBatis (0) | 2023.07.11 |
---|---|
Restful API (2) | 2023.07.11 |
TypeORM의 Entity 참조는 어떻게 일어나는가? (0) | 2023.06.27 |
조회 vs Join 무엇이 더 효율적인가 (0) | 2023.06.27 |
Secondary Index (0) | 2023.06.17 |