본문 바로가기
Today I Learned 2024. 5. 24.

(24.05.24)[6주차] Spring 숙련 강의 04 마무리

1차로 Spring 숙련 강의를 전부 듣기는 했는데도 아직도 이해가 완벽히 안되는 부분이 많기 때문에

7주차 진행이 가더라도 한번더 듣는 시간을 가져야 할것


Spring 숙련 강의 간단정리

  • 어제 학습했던 Entity간의 관계 및 방향성을 적용해서 실습하는 학습을 오늘 종일 진행
  • 그 중에 중요한 부분인 orphanRemoval과 Scheduer, 페이징과 정렬에 대해서 나의 말로 정리
더보기

고아 Entity 삭제

orphanRemoval

  • 연관관계를 삭제하는 것만으로도 Entity자체를 DB에서 삭제를 할 수 있음
    • 즉, 기존의 CascadeType.REMOVE 의 기능을 같이 수행하고 있다고 볼 수 있음
  • ***단, 참조하고 있는 Entity를 삭제하는지 확인을 꼭 해야
    • @ManyToOne 관계의 Entity일 경우 똑같은 항목에 대해서 각각 다른 항목이 참조를 하고 있을 수 있기 때문에 조심해야함
    • ex) Adam이 CheeseBurger을 주문, Belinda가 CheeseBurger을 주문 이런 Food-Customer의 @ManyToOne 관계에서 Adam을 orphanRemoval=true 옵션으로 인해 삭제되면 CheeseBurger가 삭제되면서 Belinda가 주문한 것 자체가 없어져버림 → 걍 사용할 수 없음
    • Cascade.REMOVE 도 마찬가지

Scheduler 구현

  • 매일 특정 시간에 관심 상품 목록 제목으로 검색해서, 최저가 정보를 업데이트하는 스케쥴러

@EnableScheduling

**@EnableScheduling**
@EnableJpaAuditing
@SpringBootApplication
public class MyselectshopApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyselectshopApplication.class, args);
    }

}
  • 스케쥴링을 위해 걸어줘야하는 Annotation
  • @Scheduled(cron = "0 0 1 * * *") 사용을 할 수 있어야
    • cron 특정 시간마다 작동시키게 해줄 수 있는 명령어
    • 초, 분, 시, 일, 월, 주 순서

Spring Data 페이징 및 정렬

  • 정렬 조건을 요청
  • 페이징
    • page : 조회할 페이지 번호 (1부터 시작)
    • size : 한 페이지에 보여줄 상품 개수 (10개로 고정!)
  • 정렬
    • sortBy (정렬 항목)
      • id : Product 테이블의 id
      • title : 상품명
      • lprice : 최저가
    • isAsc (오름차순?)
      • true: 오름차순 (asc)
      • false : 내림차순 (desc)
  • 페이징 및 정렬 기능을 제공
Sort.Direction direction = **isAsc ? Sort.Direction.ASC : Sort.Direction.DESC;**
Sort sort = Sort.by(direction, sortBy);
**Pageable** pageable = PageRequest.of(page, size, sort);

Page<Product> products = productRepository.findAllByUser(user, pageable);
  • isAsc 을 통해서 정렬방향 설정
  • **Pageable 인터페이스 객체**를 사용해서 페이징, 정렬사용
    • (현재 페이지(0시작), 데이터 노출 개수, 정렬 방법(ASC, DESC)
    • Page 타입으로 반환 시켜서 사용
  • **Page 객체는 여러개의 항목을 페이지 단위로 묶어놓고 있는 컬렉션 형태의 타입**

 

 

 

 

 


실습을 하는 와중에 오타를 쓰거나, 상수의 접근 제어자를 잘못 쓰거나 하는 실수로 인해서 실습 서비스 프로그램의 에러가 발생하느라 하루종일 진땀을 뻇다.

영타는 빠른 편에 속하지만서도 이런 코드의 세세한 부분을 깔끔하게 챙겨가는 것 역시 개발자의 역량이라고 보기 때문에

코드의 길이나 양이 많아질 수록 어지럽더라도 정신차려서 코드를 적는 데에 실수를 하지 않도록 해야할것