SpringBoot

SpringBoot - 단순 정리 및 고려, 추가 사항 (2024.05.14)

hminor 2024. 5. 14. 19:03

2024.05.14(화) 

1. @GeneratedValue
기본 키를 생성하는 방식을 지정하며, strategy 속성으로 생성 전략을 설정

2. @RequiredArgsConstructor
해당 클래스의 모든 final 필드 또는 @NotNull으로 표시된 필드를 가지고 있는 생성자를 자동으로 생성할 수 있음.

3. 영속화
엔터티 객체를 데이터베이스에 저장하는 것을 의미.


4. createdAt
기본적으로 builder로 감싸서 repository.save()를 통해 저장한다면 자동으로 생성되지만,
직접 엔터티 객체를 생성해서 저장 하려한다면
@CreatedDate 어노테이션을 사용한 CreateEntity 클래스를 상속받아 사용하더라도
저장시 setter를 사용해서 LocalDateTime.now()로 변경해줘야 한다.


5. 지금 주식 데이터 저장 시퀀스
StockController에서 Get 요청시 Service에서 
StockRepository를 저장 후, DetailStockRepository에 저장할 것을 준비 후 저장.
여기서 DetailStockRepository에 저장하기 위해선 아래의 작업들을 거칠 것 같음
1) 우선은 네이버 주식 크롤링
2) 종목명, 전일비, 등락률에 대한 데이터를 선정 후 데이터 타입에 맞게 변경
3) DetailStockEntity 타입의 배열인 detailStockList에 forEach로 하나씩 돌리며 조건에 부합할 경우 builder를 사용해서 추가하기
4) 이후 detailStockRepository savaAll() 메서드를 사용하여 detailStockList를 저장.


6. 고려해 볼 것
- 첫번째.
현재는 요청할 때마다 Stock 테이블에 row가 생성되고, 
해당 row의 PK인 stock_id를 FK로 저장하며 createdAt 또한 함께 detailStock 테이블에 저장되는데
여기서 연도-월-일 만 저장하는 date 컬럼을 추가해서 
특정 일자에 대한 모든 데이터를 조회하기 쉽게 할 것인지,
아니면 그냥 해당 테이블을 조회한 다음 filter를 사용해서 조회하던지 고민해봐야 할 듯하다.

- 두번째.
detailStockEntity 테이블에 크롤링하는 요청 시 계속해서 100개씩 추가되니까
만약 4분 주기라면 하루 36,000개의 row가 생기니까 10일이면 360,000개의 row가 생기기에
이게 과연 효율적인가라는 생각을 하기에 조금 고려해보는 것도 좋을듯한데
그냥 우선은 특정 row의 createdAt과 현재 LocalDateTime.now()와의 차이가 7이면
자동으로 삭제되도록 하는 것도 좋을 듯하다.

7. 추가할 서비스
- 첫번째.
우선은 프론트에서 stock row를 선택하면 선택한 것에 따른 
상세 주식 데이터를 프론트로 Bar 차트로 시각화해보고
전일비에 따른 색상을 바로 표시해주기.

- 두번째.
특정 주식을 클릭 시 detailStockEntity에 특정 주식 데이터를 순서대로 나열하여 데이터 시각화 해보기.

- 세번째.
스케줄러를 활용해서 주기적으로 조회하도록 하기
아니면 갱신되는 주기를 파악해서 그 주기에 맞게 요청하도록 하기.