카테고리 없음

[Django] Lexorank 적용기 1일차

alpakaka 2024. 10. 11. 20:09

오늘의 할일은 다음과 같다.

이렇게 진행해 볼 예정이다.

 

일단 lexorank 부터 적용하면 좋을 듯 싶다.

아래의 오픈소스를 사용했다.

https://github.com/rozumdev/django-lexorank

 

GitHub - rozumdev/django-lexorank: This package implements an algorithm similar to JIRA's lexorank, but without using buckets fo

This package implements an algorithm similar to JIRA's lexorank, but without using buckets for rebalancing that can be used with Django projects. - rozumdev/django-lexorank

github.com

 

일단 Pip install django-lexorank 로 다운받아줬다.

 

그 다음에 이런식으로 수정해주었는데, order 를 RankField로 설정해주었고 아래로 추가될 수 있도록 insert_to_bottom을 True 로 설정해주었다.

 

음. 일단 실행해보자.

일단 위와 같이 Order 를 전부 수정해준 후에 makemigrations 를 진행했는데,

 

이런 문제가 생겼다.

rank 라는 필드가 새로 생성되고 이미 기존에 있는 걸 어떻게 처리할까요 라고 물어보고 있다.

 

그러면 order 필드를 제거 하고 다시 시도해봐야겠다. order -> rank 로 변환될 수 있지 않을까...?

 

어떻게 해야하나 고민이 많다... 이미 순서가 있는 상태이긴 한데 이걸 어떻게 적용할 수 있을까...

 

그래서 어차피 롤백이 가능하다는 마음으로, 일단 order -> rank로 이름을 변경한 후에 rankedmodel을 넣어보려고 한다.

이러면 뭔가뭔가 되지 않을까 싶다.

 

일단 진행해본다.

 

결과가 신기하게 진행이 되었는데, subtodo 와 category 는 빈 값이 있다고 하는데 todo는 잘 되었다...?

뭔가 테스트했던 기록들이 남아있었던 듯 하다.

일단 이렇게 Migrations 는 끝났으니 이제 다른 코드들을 수정해주어야한다.

 

엄청나게 큰 일이 되었다...

머리가 좀 아프다..

일단 어떻게 생긴건지 잘 모르겠어서 db안에서 확인해봤다.

 

이런식으로 적용되어있는 것을 확인할 수 있었다

 

그런데 갑자기 의문이 들었는데, 브랜치에서 수정을 했는데.. rds 자체에 적용이 되고 있었다... 

저번에 왜 에러가 난건지 이해됨과 동시에 이거 이래도 되는건지 의문이 들었다.

브랜치를 사용하는 이유가 develop 브랜치와 같은 큰 브랜치를 지키면서 새로운 것들을 적용 하기 위한 것인데, 이러면.. 모델을 바꾸는 날 바로 수정하지 않으면 오늘도 dev 서버가 먹통인 채로 살아야하지 않나... 의 의문이 들었다.

팀원들과 상의를 해봐야겠다....

 

뭐 여튼 잘 적용된 것을 확인할 수 있었다.

이제 다음단계로 넘어가야 겠다. 약간 걱정되는 것은 저 레포에서 지원하는 lexorank 와 같이 취급해줄 수 있는가가 의문인데, 일단 해본다. 안되면.. dev 초기화 하고, main 은 수제로 하나하나 바꿔야겠죠...?

 

이제 큰 공사를 시작해야한다.

request body 를 전부 수정해야하고, 처리하는 로직을 전부 수정해야한다.

일단 manager 부터 간단하게 수정하면서 시작해보자.. manager 에서는 order -> rank 로만 수정했으면 되는 것이었다.

 

제일 간단한 category 먼저 수정해본다. 

...

수정하다보니 모든 serailizer 와 models 를 수정했다...

pytest 를 해봤는데 계속 에러가 발생해서 왜 그런가 생각해보니...

test 에서 인자가 바뀌어야하기 때문에.....

....^^

럭키비키자나 이참에 테스트코드도 전부 개편한다.

 

생각해보니 이렇게 금방 고칠 수 있던 것도 skinny view, fat model을 적용했기 때문이렸다...

멘토님 감사합니다... 만약 적용 안했으면 testcode 와 마찬가지로 todos 에 있는 모든 api를 바꿔야하는 상황이었다.

몇수앞을 보셨던 건가요...

 

 

그런데 중간에 다른 백엔드 팀원분이 수정을 하다가 안되시는 걸 발견해버렸다.

그래서 급하게 migrate 를 롤백하는 수를 찾아봐야한다.

https://stackoverflow.com/questions/32123477/how-to-revert-the-last-migration

 

How to revert the last migration?

I've made a migration that added a new table and want to revert it and delete the migration, without creating a new migration. How do I do it? Is there a command to revert last migration and then ...

stackoverflow.com

여기를 참고했다.

 

현재 dev 에 적용해야하는 사항은 13까지여야하고, 내 브랜치는 15까지 진행되어있어서 어떻게 롤백을 할 수 있을 지 고민중이다.

이렇게 되었다.

이렇게 수정사항을 넣었는데 팀원분의 pytest 에서 엄청난 에러를 날려주었다. 추가로 나의 develop 브랜치에서도 엄청난 에러가 발생하였다.

적용이 안되었나 싶었다..

그런데 rds 에서 봤을 때는 order 로 전꺼로 잘 정의가 되어있었다. 그런데 pytest 돌리면 계속 에러가 나는 상태가 지속되었다.

그래서 정 안되겠어서 localhost 띄우고 localhost 에서 봤는데 localhost 는 또 문제가 없었다.

그럼문제는 하나다.

pytest 로 만드는 test용 db는 적용이 안된것이다. 그래서 pytest 에서만 문제가 계속해서 발생한다고 여길수밖에 없다.

그러므로 이에 관련해서 찾아봐야한다.

test_db 에서는 위와 같이 되어있다.

그래서 생각해보니 무서운 이야기가 만들어졌다.

우리는 dev서버에서만 migrate 를 진행했는데, 왜 test_db에 적용이 되었지..?

올해 여름 다 갔다.

근데 두번째 의문은, 다시 migrate 를 했는데 왜 dev만 적용이 되고 test_db에는 적용이 안되었지?

곧 가을도 갈 것 같다. 그렇게 겨울이 온다...

지피티에게 답을 들었다. 이런 이유라고 들었다.

팀원분이 해결방법을 찾았는데 python manage.py migrate --database=test 로 하면 될 것 같다고 하였다.

그래서 독을 푼내가 다시 적용을 해봤다...

잘 적용이 완료되었다!!

그래서 이제 팀원분이 진행하면 될 것 같다.

이런 경우를 방지하기 위해서 staging 을 추가해서 버전 관리를 해야하나 고민중이다.

 

일단 다른 팀원분이 더이상 dev 서버에 접속하지 않아서 급하게 해보려다가..

테스트코드에서 막혀서 그냥 여기서 마무리해야겠다...

 

남은 시간은 코테를 해봐야지 히히