Advice from evergreen

Humbler·2020년 3월 5일
0

우선 명심하자. 똑같은 실수를 2번 하지 않자. 성심껏 가르쳐주신 상록님에 대한 예의다.

OperationsError 같은 게 떴을 경우.
상록님 조언.

  1. models를 확인한다. table이 있는지, columns가 제대로 있는지 등.

  2. 만약 장고 파일에서 문제가 없다면, mysql을 열고 db를 선택한 후, show tables;를 쳐보면 /// 장고 file에는 있는 table이 mysql에는 없을 수 있다. 그래서 Error가 난 것이다.

    tip. 만약 각 테이블들의 구체적인 column들을 보고 싶다면, mysql 콘솔에서 'explain account(테이블명)'을 쳐주자. 정리되서 나올 것이다.
  3. 이 경우에는

    find . -path "*/migrations/*.py" 
    find . -path "*/migrations/*.py" -not -name "__init__.py" -delete

    이 명령어들로 ~/migrations/~.py(*은 all 의미) file들을 찾아보고, 있다면 'init.py'가 아닌 파일들만 지워준다.

    보통 0001과 같은 file들이 지워질 것이다. 이 0001 또는 0002 등의 파일들은 models.py가 변했을 때마다 'python managy.py makemigrations' 명령어를 실행하면 0001,0002,0003...의 순으로 순서가 올라가며 생성된다. 예로 Account table에 column을 하나 더 추가하고 makemigrations를 하면 기존보다 숫자가 하나 더 올라간 '000*'과 같은 파일이 생길 것이다. 이 파일들은 여러개가 있어도 문제되지 않는다. 그 이유는 가장 높은 숫자의 최신 file만이 유효하기 때문이다.

    여기까지는 장고 앱 자체 내에서만 'table을 이렇게 만들것이다.'하고 파일로써 정보를 가지고 있는 것이다.

    그리고 이걸 'python managy.py migrate'를 해주면, 장고에 연동된 db의 안으로 table(들)이 생성된다. 처음 생성됐으므로 비어있는 table들일 것이다.
    ps. 우리가 흔히 만드는 my_settings.py 파일 안에 DATABASE 객체를 만들어주는 것이 즉, '장고에 db를 설치(연동)하는 것이다.'

    그럼 'python manage.py shell'을 키고 거기서 Account.objects.create(~)를 해줘서 관리자 입장으로(서버단 개발자의 입장으로) data를 생성하고 확인해볼 수 있다. Account.objects.all()을 해주면 모든 게 다 뜨겠지.
    내가 지금까지 하던 httpie 방식은 front개발자의 입장에서 하는 것이라고 하신다. 즉, 퍼블리셔의 관점에서는 submit 속성이 달린 버튼을 클릭하는 것과 같겠지..
    그래서 상록님께서 권하시길 zshell 하나, mysql 하나, python shell 하나, 서버 돌리는 zshell 하나 총 4개를 켜놓고 작업하라고 하신다. 그래서 본인은 아주 큰 모니터 쓰신다고..
    종합해보면, Error가 났을 시 터미널에서 장고가 다 말해준다고 하신다. 첫째, models 파일에서 빈 column이나 이런 게 없나 볼 것. 둘째, 첫째가 문제가 없다면 db의 table들의 column이 제대로 되어있나 볼 것. 셋째, 둘째에 문제가 있다면, db를 새로 만들어서 'python makemigrations'과정부터 쭉 다시해주거나, db 자체에서 지워줄것. 여기서 꼭 기억해야 할 건, 위의

        find . -path "*/migrations/*.py" -not -name "__init__.py" -delete

    이 명령어를 실행해서 지우는 것은 오직 '장고의 파일'일 뿐이라는 것이다. 저 명령어를 실행해도 db가 밀리지는 않는다.
    db는 새로 만들거나 db 자체에서 지워줘야 한다.

.1 상록님은 vscode, vim 둘 다 쓴다고 하신다.
.2 상록님은 영어 욕심이 많다고 하신다.
.3 상록님은 구글의 환경설정(언어는 영어로, 리젼도 영어로)을 다 영어로 해두셨다 한다. 리젼을 영어로 해둬야 구글 미국 서버를 사용하는 것이므로 미국의 양질의 영어로 된 정보들이 검색된다고 한다. 언어를 영어로 해두면 그냥 화면의 글자만 영어로 되는 것이라고 한다.
.4 자정까지 하려고 했는데, 안될 것 같으면 2시까지 하면 되겠지 뭐, 하시고 마음 편히 천천히 제대로 공부하려고 했다신다.
.5 상록님은 되게 느리다고 하신다. 이해될 때까지 왜 그런지 알려고 하고, 안 알면 안 넘어 간다고 하신다.
.6 공책에다가 쓰는 걸 좋아하신다고 한다. 명령어등은 맥북 메모 iCloud app에다가 써두어서 아무때나 필요하다고 생각날 때마다 꺼내볼 수 있게 하시고, 개념이나 정보등은 수기로 공책에 작성하신다고 한다. 또는 블로깅도 하시긴 하는데, 그다지 공들이지는 않았다고 하신다. 여튼 필요할 때 바로바로 찾아볼 수 있도록 적어두는 게 필요하다고 하신다. 명령어나 이런 것을 다 기억할 수는 없다고 하신다. 좋은 개발자가 되기 위해서는 적어두는 게 정말 중요하단 걸 다시한번 느꼈다. 이제서야... 제대로...
.7 동기들, 멘토분들에게 언제나 물어보라고 하신다.
.8 김아란 이라는 영어강사가 대학때 교환학생 가서 그 때부터 영어 제대로 배우기 시작하고, 결국엔 UC Berkely에 가서 session까지 할 정도의 영어 실력을 가지게 되었다고 한다. 유튜브에 있다고 한다. 감명 받고 영어욕심이 많아지셨다고 한다.
.9 잘 적어뒀다가 혼자서 해보고 하면서 되면, '아 이렇게 되는구나' 하고 알고, 반복하다 보면 적어둔 걸 안 보고도 하게 되는 것이라신다.
.10 test를 해볼 수 있어야 한다고 함. 지속적으로. 예를 들어 내가 지금 Profileupdate View를 만들었는데, 여기서도 refund 관련 column들이 update 되면, 다른 column 6개가 다 None으로 원하지 않던 update가 되어 저장되게 된다. 이것을 확인해보기 위해 다 1,1,1,1,1,1,1 값을 주고 refund 관련 column에만 값을 2 로 바꿔준뒤 함수를 실행해보면, View의 로직이 제대로 설계되어 있다면 refund를 제외한 다른 column들의 값은 그대로 있고 refund column의 값만 update가 되어있을 것이다. 이걸 front end처럼 httpie로 해도 되지만, 관리자(서버 개발자)가 하듯 python shell에서 해보자. 빠르게 할 수 있다.

profile
무엇을 모르는지 모르는 상태에서 무엇을 모르는지 아는 상태가 되어가는.

0개의 댓글