개인프로젝트/기능프로그램_오늘뭐입지

20240514_미세먼지 파트 조정

일일일코_장민기 2024. 5. 14. 14:09
728x90

1. pk 변경

- 기존의 serial 형태의 pk는 데이터 insert / update를 시키는데 문제를 계속 일으켰다.

- save(), saveAll()은 pk를 기준으로 데이터를 파악하는데 serial로 계속 늘어나니 계속 insert만 되었다.

--> pk를 serial id에서 StationName 컬럼으로 변경했다.

==> 당연히 vo과 dto도 변경

 

2. dto setter 변경

- 기존에는 setter 단계에서 모든 변경을 한 채 전송했다.

ex) grade가 1이면 좋음, 단위 붙이기 등

--> grade에서 좋음 상태면 1로 취급이 안 되기 때문에 default로 넘어가는 문제 발생

==> 1, 좋음 -> 좋음이 되도록 변경했다

public void setPm25grade(String pm25grade) {
    this.pm25grade = switch (pm25grade){
        case "1", "좋음" -> "좋음";
        case "2", "보통" -> "보통";
        case "3", "나쁨" -> "나쁨";
        case "4", "매우나쁨" -> "매우나쁨";
        default -> "점검 중";
    };
}

--> 단위가 중복해서 붙은 문제도 발생

==> 삭제 후 jsp에서 단위를 붙이는 것으로 변경했다.

 

이런 문제는 DB에 변경된 데이터가 들어가기 때문에 발생하는 문제였다.

 

3. delete & save에서 saveAll로 변경

- 1에서 pk가 바뀐 덕분에 saveAll()을 사용할 수 있게 되었다.

- saveAll()은 데이터가 늘어날 수록 save()에 비해 속도 차이가 많이 나기 때문에 기존에 기록한 개선점 중 하나이기도 했다.

- 또한 DB의 데이터를 지웠다가 넣는 것도 아니기 때문에 지운 뒤에 문제가 생겨서 데이터를 불러오지 않게 되는 위험도 억제할 수 있었다.

public void dustRequest(List<PaticulatemattervoDto> paticulateMatterDtoList) {
    List<Paticulatemattervo> paticulatemattervoList = new ArrayList<>();
    for (PaticulatemattervoDto dto : paticulateMatterDtoList) {
                Paticulatemattervo paticulatemattervo = new Paticulatemattervo();
                BeanUtils.copyProperties(dto, paticulatemattervo);
                paticulatemattervoList.add(paticulatemattervo);
    }
    log.info("paticulatemattervoList: {}", paticulatemattervoList);
    dustApiRepository.saveAll(paticulatemattervoList);
}