[2021-04-15 목] TIL

노을·2021년 6월 8일
0

TIL

목록 보기
75/81

[ToDo 프로젝트] 카드 리밸런싱


카드 이동시 기존 카드들의 priority를 기반으로 사칙연산을 해서 이동할 카드의 priority를 구하기 때문에 특정 시점에 한계가 있을거라 생각이 됨.

테스트 코드를 통해 카드 이동을 1000번 해본 결과, 특정 사이클을 기점으로 priority가 중복돼 더이상 카드별로 priority를 비교 할 수 없게 됐다.

아이디어

나:

  • 소수점 자리 수를 새서 double의 한계치에 도달하기 전에 리밸런싱 ⛔
  • 리밸런싱할 소수점 자리의 기준을 정하기 애매함.

아이작:

  • move 메소드 내에서 계산된 priority값이 prevCard.priority 또는 nextCard.priority과 같아질 때 리밸런싱 ✅
private boolean checkRebalance(double renderedPriority, Card prevCard, Card nextCard) {
        if (prevCard != null && renderedPriority == prevCard.getPriority()) {
            return true;
        }
        if (nextCard != null && renderedPriority == nextCard.getPriority()) {
            return true;
        }
        return false;
    }

private void rebalancePriority(CardColumn cardColumn, User user) {
        List<Card> cards = getList(cardColumn, user);
        double priority = 0.0;
        for (Card card : cards) {
            priority += PRIORITY_STEP;
            card.setPriority(priority);
        }
        cardRepository.saveAll(cards);
    }
# card를 move 하는 메소드 내부 로직중..

if (rebalanced = checkRebalance(priority, prevCard, nextCard)) {
    rebalancePriority(to, user);

    prevCard = getCard(prevCardId, user); //리밸런싱후 기존 카드들의 정렬순서를 보장하기 위함
    nextCard = getCard(nextCardId, user); // ..
    priority = renderPriority(prevCard, nextCard, to, user); // ..
}

겹치지 않고 테스트 성공!

MySQL foreign key 무시


SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

SpringBoot Test


@SpringBootTest

  • 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트
  • 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 운영환경과 가장 유사한 테스트

출처: https://goddaehee.tistory.com/211 [갓대희의 작은공간]

Git : Origin과 Local의 레포가 다른 상황


  • 현재 내 Local은 remote와 리베이스된 상태에서 작업을 했음

  • Origin은 remote와 Merge가 돼있음

  • Origin과 Local의 싱크를 맞추기 위해선?

어?? 갑자기 이거 무슨 상황이었는지 햇갈린다.. 내일 다시 해봐야지

520  git fetch origin dev/BE // origin repo 불러옴
522  git reset --hard origin/dev/BE
523  git reflog  // git log는 커밋 이력 reflog : git 명령어 실행 기록
500  git cherry-pick ae97543
502  git stash // 작업하던게 있어서! 잠시 저장
503  git cherry-pick ae97543
504  git stash pop
505  git switch -c feature/implement-rebalance

Git 리베이스를 조심해야한다?


2021-04-14(수)

어제 PR을 올리려는데 Remote Repository에 미리 머지 돼있는 iOS 팀원 브랜치(dev/iOS)의 파일(.gitignore)과 충돌이 발생해서 rebase를 하여 충돌을 해결하고 PR을 요청했다.

어제 한 작업 내역이 잘한 일인지 잘모르겠어서 오늘 아침 아이작에게 관련 내용에 대해 질문을 했다.

아이작은 rebase는 주로 혼자 작업한 걸 가져올 때 사용한다고 한다.

팀의 컨벤션마다 다르겠지만 다른 사람의 commit 이력을 rebase하기보다 merge를 하는게 좋다고 한다.

왜??

1. 만약 rebase 를 하게 되면 이전에 다른사람이 작성했던 commit 이력이 복사돼서 붙여지게 되면서 isaac56 authored and sanhee committed 10 hours ago 와 같이 rebase를 요청한 사람의 이름이 추가로 붙게된다.

  • 혹시 위 결과를 불편해하는 사람도 있을 수 있으니, 만약 rebase 를 해야하는 상황이라면 commit 작성자와 미리 얘기를 나눠보고 하는게 좋을 것 같다.

2. rebase는 commit 이력을 복사해와서 일자로 만들다보니 연쇄적으로 컨플릭트가 발생될 가능성이 있다.

  • 충돌이 계속나서 힘들면 git rebase --abort 리베이스 취소를 하고 merge를 하는게 좋다!
### rebase

git remote add upstream https://github.com/codesquad-members-2021/todo-list.git

git rebase upstream/team9 // 여기서 충돌이 발생 

git status  // .gitIgnore가 충돌의 원인임을 알게됨. 

git rebase --continue  // 충돌 해결 후 반영하기 위해, 리베이스 정상

git push origin  // ! [rejected] dev/BE -> dev/BE (non-fast-forward)*

git switch -c dev/BE_TEMP   // 혹시 모르니 백업 브랜치 생성

git pull -f origin dev/BE // 강제로 푸쉬

git reset --hard 0bbcaa9 // dev/BE_TEMP 원하는 지점으로 옮기기 위해

git switch dev/BE

git push -f origin // origin에 remote repository 내용 반영
### 이전 rebase 내역을 없애고 merge를 하려고 하는 상황

git push origin dev/BE -f // 아이작의 로컬저장소에 남아있는 어제 저장소 정보를 강제로 푸쉬하여 저장소를 어제상태로 되돌림.

git remote add upstream https://github.com/codesquad-members-2021/todo-list.git

git pull upstream team9

vi .gitignore // 또는 IDE에서 충돌해결

git commit // 충돌해결 반영

git push origin dev/BE

git pull origin dev/BE

기타


리눅스 명령어

  • ps -eaf | grep todo
    • 프로세스 아이디 확인
  • kill -9 프로세스 번호
  • nohup ./gradlew bootrun & (* & : 백그라운드 실행)

[프로그래머스] 완주하지 못한 선수


처음엔 동명이인, 두번째엔 효율성에 걸려서 진짜 완주하지 못했다. ㅋ......ㅋ

오늘 애써 외면하던 내 알고리즘 위치가 저기 맨 바닥인걸 체감하게 됐다.

내일부터 꾸준히 풀어야겠다..

profile
카르페디엠

0개의 댓글