반응형
현업에서는 API 개발을 한 이후 성능이 나오지 않아 튜닝을 하기도 하는데 보통은 아래와 같은 문제를 지키지 않아 발생한다.
- 지연로딩, 조회 성능 최적화
- 컬렉션 조회 최적화
- 페이징, 한계 돌파
- OSIV, 성능 최적화
보통은 API 장애의 90%는 조회 쪽에서 발생한다. -> 사람들이 조회를 많이 하기 때문이다.
조회용 샘플 데이터를 입력하도록 하자.
우선 application.yml파일의 ddl-auto를 create로 만들어주도록 하자.
- userA
- JPA1 BOOK
- JPA2 BOOK
- userB
- SPRING1 BOOK
- SPRING2 BOOK
클래스를 하나 만들고 데이터들을 집어넣어주었다.
/**
* 총 주문 2개
*- userA
* - JPA1 BOOK
* - JPA2 BOOK
* - userB
* - SPRING1 BOOK
* - SPRING2 BOOK
*/
@Component
@RequiredArgsConstructor
public class InitDb {
private final InitService initService;
@PostConstruct
public void init() {
initService.dbInit1();
initService.dbInit2();
}
@Component
@Transactional
@RequiredArgsConstructor
static class InitService {
private final EntityManager em;
public void dbInit1() {
Member member = createMember("userA", "서울", "1111", "11111");
em.persist(member);
Book book1 = new Book();
book1.setName("JPA1 BOOK");
book1.setPrice(10000);
book1.setStockQuantity(100);
em.persist(book1);
Book book2 = new Book();
book2.setName("JPA2 BOOK");
book2.setPrice(20000);
book2.setStockQuantity(100);
em.persist(book2);
OrderItem orderItem1 = OrderItem.createOrderItem(book1, 10000, 1);
OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2);
Delivery delivery = new Delivery();
delivery.setAddress(member.getAddress());
Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
em.persist(order);
}
private Member createMember(String name, String city, String street, String zipcode) {
Member member = new Member();
member.setName(name);
member.setAddress(new Address(city,street,zipcode));
return member;
}
public void dbInit2() {
Member member = createMember("userB","진주","2","22222");
em.persist(member);
Book book1 = new Book();
book1.setName("SPRING1 BOOK");
book1.setPrice(20000);
book1.setStockQuantity(200);
em.persist(book1);
Book book2 = new Book();
book2.setName("SPRING2 BOOK");
book2.setPrice(40000);
book2.setStockQuantity(300);
em.persist(book2);
OrderItem orderItem1 = OrderItem.createOrderItem(book1, 20000, 3);
OrderItem orderItem2 = OrderItem.createOrderItem(book2, 40000, 4);
Delivery delivery = new Delivery();
delivery.setAddress(member.getAddress());
Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
em.persist(order);
}
}
}
메소드들을 뽑아서 간략하게 만들어도 되지만 귀찮은 관계로 생략한다.
뽑아도 좋고, 안뽑으면 말고
이제 API 개발을 시작해보자.
반응형
'공부 > Spring Boot' 카테고리의 다른 글
API 개발 고급 - 컬렉션 조회 최적화 (0) | 2025.02.19 |
---|---|
API 개발 고급 - 지연 로딩과 조회 성능 최적화 (0) | 2025.02.03 |
API 개발 기본 (0) | 2025.01.31 |
웹 계층 개발 (1) | 2024.11.25 |
애플리케이션 구현(도메인 개발) (0) | 2024.11.21 |