오늘 한 것
팀장 위임받기-내 레포지토리로 옮기기
regex를 이용해 회원가입 기능 보완하기
로그인 기능 만들기
PR조율 및 오류 해결
레포지토리 옮기기
팀장분이 건강 문제로 잠시 떠나셨다. 그래서 이제부터 내가 선장이다.
근데 콜라보레이터를 받긴했는데, 떠난 분의 레포지토리서 계속 PR을 하는건 뭔가 모양새가 영 아니다.
최대한 커밋로그를 살리면서 내 계정으로 옮겨보자.
1. 포크 최신화
원본 레포지토리에 있던 main이 아닌 브랜치이 중요한 변경사항들을 일단 모두 merge하여 main에 반영하였다.
그렇게 하고서 이전에 포크했던 내 계정의 포크 레포지토리를 sync fork로 최신화 하였다.
2. git pull
이후 이전에 원격 레포지토리와 연결되어있던 로컬 레포지토리 main 브랜치에서 변경사항들을 pull한다.
3. remote remove origin, remote add origin
git remote remove origin
git remote add origin [SSH주소]
이후 원래 연결되어 있던 원격레포지토리와의 연결을 끊고, 내 계정에 빈 레포지토리를 새로 만들어 연결해서 푸시하면 된다.
이렇게 하자 기존의 main branch에 있던 커밋 로그는 잘 살릴 수 있었다.
오류 발생 - OSError: [WinError 123]
스스로불러온 버그에 짓눌려 로그는 배쉬를 가리우며~
OSError: [WinError 123] 파일 이름, 디렉터리 이름 또는 볼륨 레이블 구문이 잘못되었습니다
한참 기능을 구현 하던중 팀원중 한분이 위와같은 오류가 발생하며 django 서버의 실행이 되지 않는다며 문의하였다.
시도 1. 폴더 변경
위와같은 오류는 폴더명에 한글이나 일부 특수문자가 섞여 있을 시 생길수 있다고 하여 프로젝트가 위치한 경로를 변경해 보았다.
그러나 아무일도 일어나지 않았다.
시도 2. macOS에서 실행되나 보기
나는 해당 문제를 겪지 않았고 에러메시지도 윈도우 환경에 한정된 것 같아 같은 코드가 다른 환경에서는 어떻게 실행되는지 확인이 필요하다고 판단해 내 환경에서도 같은 코드를 실행해 보았다.
ModuleNotFoundError: No module named 'django-summernote' in django
위와 같은 오류가 발생하며 실행되지 않았다.
따라서 django-summernote 모듈이 설치되지 않은것이 원인으로 보인다.
이를 확인해보기위해 setting.py를 확인해 보니, 설치한적이 없는 django-summernote이 INSTALLED_APPS에 들어가 있었다.
그러나 해당 팀원과 나는 애초에 해당 모듈과 연관된 어떠한 수정사항도 만들지 않았다는 점이 의문이었고 함부로 지워도 되는지 알 수 없었다.
해결: commit history 확인하기
이 오류가 언제 어디서 발생한 것인지 확인해보기 위해 commit log를 확인해본 결과, git pull 에서 계속 충돌이 나던 다른 팀원의 문제를 해결 하기 위해 급하게 PR 이후 merge했을 때 흘러들어온 코드가 문제였다.
해당 팀원은 다른 기능을 구현하기 위해 해당 모듈을 설치하는 블로그 포스팅을 시험삼아 따라해보고 있었는데, 그것을 main브랜치에서 하고 있었고 따라서 pull에서 오류가 생기고 있었다.
이런 변경사항이 있다는 것을 미처 지우지 못하고 타 팀원에게 알리지도 못한채 급하게 눈앞의 문제만 해치우느라 쥐도새도모르게 코드가 섞여버린 것이었다.
아무튼 해당 코드는 쓸 필요가 없는 것으로 판명되어 지워버리고 해결하였다.
조건에 따라 여러 타입의 반환형을 가지는 함수
def sign_in_view(request):
"""username과 password를 받아 로그인"""
...
user = authenticate(request, username=username, password=password)
if not user:
return render(request, "user/signin.html", {'error': 'Invalid ID or PW.'})
login(request, user)
return redirect('/')
위의 함수는 조건에 따라 render 함수의 실행결과를 반환할 수도, redirect 함수의 실행결과를 반환할 수 있다. Django에서 두 함수의 반환형은 각각 HttpResponse, HttpRedirectResponse이다. 이렇게 경우에 따라 다른 반환형을 어떻게 annotate할 수 있을까?
1. 그냥 HttpResponse만 쓰기
def sign_in_view(request) -> HttpResponse:
HttpRedirectResponse는 HttpResponse의 서브클래스 이므로 HttpResponse만 써도 틀리지는 않다. 그러나 이런 annotation에 쓸때는 최대한 구체적인 클래스를 쓰는 것이 좋기는 하다.
2. '|' 쓰기
def sign_in_view(request) -> HttpResponse|HttpsRedirectResponse:
3.10 이상버전에서는 비트연산자로 쓰이던 | 를 경우에 따라 다른 반환형을 가지는 것을 표현하기 위해 쓸 수 있다.
이전버전에서는 오류가 난다는 단점이 있다.
3. Union 쓰기
def sign_in_view(request) -> Union[HttpResponse,HttpsRedirectResponse]:
typing 모듈(기본제공)에서 제공되는 Union을 사용해 표현할 수 있다.
4. 웬만하면 통일하기
이렇게 특수한 경우가 아니라면 애초에 함수가 하나의 반환형만 가지도록 하는 것이 최선이라는 것을 명심하자.
배운점
1. 하나의 함수는 하나의 반환형만 가지는 것이 권장사항이다.(사실 안 그러는게 가능한 파이썬이 너무 유연한 것이긴하다)
2. 양도받은 레포지토리 내 레포지토리로 옮기기를 직접해보았다.
3. PR을 받아 merge를 할때는 반드시 충돌사항이나 직전 변경사항만이 아니라 전체 변경사항을 훑어보자. 10~20분이면 50분 넘게 헤맬 오류를 막을 수도 있다.
레퍼런스
https://stackoverflow.com/questions/70469151/correct-type-hint-for-multiple-return-values
Correct type hint for multiple return values
Let's say that I have a function returning a single value in some cases and multiple values (i.e. tuple) in other cases. def foo(a: int, b: int, flag: bool): if flag: return a else:...
stackoverflow.com
https://github.com/summernote/django-summernote/issues/473
ModuleNotFoundError: No module named 'django-summernote' in django 4+ · Issue #473 · summernote/django-summernote
i am getting the below error while doing makemigrations ModuleNotFoundError: No module named 'django-summernote '
github.com
OSError: [WinError 123] 파일 이름, 디렉터리 이름 또는 볼륨 레이블 구문이 잘못되었습니다: '<frozen imp
django에서 코딩중 다음과 같은 에러가 발생하였다.. OSError: [WinError 123] 파일 이름, 디렉터리 이름 또는 볼륨 레이블 구문이 잘못되었습니다: '' 인터넷 검색을 해도 import를 하면된다고 하는데 아무
ojjy.tistory.com
'TIL' 카테고리의 다른 글
23.04.14 TIL(django웹서비스에 image업로드 구현) (0) | 2023.04.16 |
---|---|
23.04.13 TIL (0) | 2023.04.13 |
23.04.11 TIL(팀플개발일지) (0) | 2023.04.12 |
23.04.10 TIL(팀플 개발일지) (2) | 2023.04.11 |
23.04.07 TIL (0) | 2023.04.08 |