공부/Spring Boot

API 개발 고급 - 준비

Stair 2025. 1. 31. 14:54
반응형

현업에서는 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 개발을 시작해보자.

반응형