본문 바로가기

내일 배움 캠프

2023-12-29

오늘은 팀 프로젝트 4일 차이다. 오늘 진행한 내용은 다음과 같다. 

1. CardService기능 구현 완료

 

1. 어제 기능을 일부 구현했으나 문제 되는 부분이 있어서 전반적으로 수정을 하고 일단 로직적으로 문제가 안되게끔 기능 구현을 완료했다. 오전에 작성한 코드가 오후에 git 관련 명령어를 잘못 입력하는 바람에 작업했던 결과물이 날아가서 오후에 복구하고 새로운 기능까지 추가하면서 오늘 하루가 다 지나갔다.

 

기존에 있던 기능에서 해당칼럼의 마지막 카드로 보낼때  가중치를 계산하는 방식은 한 칼럼의 카드를 마지막번을 기준으로 기준점에서 ColumnEntity에 필드값인 maxWeight를 가져와서 +1을 해준 값을 /2만 즉 ( lastCardWeight + maxweight)/2 값을 통해 마지막 weight값을 부여했다. 하지만 이방식은 결국 maxWeight에 접근할 때 칼럼의 데이터값이 필요하기 때문에 ColumnRepository를 조회할 수밖에 없고 또한 기존방식의 단점은 결국 칼럼에 maxWieght값이 자리하고 있기 때문에 DB에 자원을 비효율적으로 사용하고 있다고 판단했다 따라서 기존에 사용하던 방식을 버리고 CardRepository에서 쿼리 메서드를 통해 카드 가중치중에 Max값을 뽑아와서 가중치를 처리하는 방식으로 변경했다. 

private Card calculateWeightMoveCard(Card card, Long moveCardPosition, List<Card> cardList) {
    // cardList값이 있는데 첫번째 칸에 들어가는 경우
    double calculateWeight = 0;

    if (moveCardPosition == 1) { // 옮기려는 카드 위치가 첫번째 일때

       Card nextCard = cardList.get(0);
       calculateWeight = nextCard.getWeight() / 2;

    } else if (moveCardPosition >= cardList.size()) { // 옮기려는 카드 위치가 마지막 일때

       Double moveColumnMaxWeight = cardList.get(cardList.size() - 1).getWeight();
       calculateWeight = moveColumnMaxWeight+1;

    } else { // 그 외 경우

       calculateWeight = (cardList.get(moveCardPosition.intValue() - 1).getWeight()
          + cardList.get(moveCardPosition.intValue() + 1).getWeight()) / 2;

    }
    card.updateCardWeight(calculateWeight);
    return card;
}
@Query("SELECT MAX(c.weight) FROM Card c WHERE c.columns = :columnsId")
Optional<Double> findMaxWeightByColumnsID(Long columnsId);

그러면 카드 생성을 할때는 카드가 없다면 어떤 방식을 줄 것인가에 대해서 고민을 했는데 위의 쿼리메서드에서 Optional을 부여하여 orElse기능을 통해 최댓값이 없을 경우 즉 카드가 없을 경우에 디폴트값으로 1.0을 주는 방식으로 했다. 

또한 생성할때 카드가 있다면 최댓값에서 1.0의 가중치 값을 더해준 값으로 설정하여 마지막 카드가 되도록 했다.

public double findMaxWeightAndCheckNull(Long columnId){
    return cardRepository.findMaxWeightByColumnsID(columnId).orElse(1.0);
}

 

위와 같은 방식을 통해 기존에 Entity의 의존성도 줄여줄 뿐만 아니라 DB자원 최적화까지 동시에 처리했다고 볼 수 있다. 

'내일 배움 캠프' 카테고리의 다른 글

2024-01-03  (1) 2024.01.04
2024-01-02  (2) 2024.01.03
2023-12-28  (2) 2023.12.29
2023-12-27  (0) 2023.12.27
2023-12-26  (0) 2023.12.27