노마드코더(nomad coder) 에어비앤비 클론 코딩 후기

2달에 걸친 풀스택 에어비앤비 클론 코딩을 드디어 끝냈내요. 이 코스를 통해 python과 Django를 배울 때는 재밌어서 하루도 빠짐없이 코딩을 했습니다. 5월에는 천천히, 6월에는 2배 정도 빠르게 했�

00pen.tistory.com

약 5개월에 걸쳐 nomad coder을 통해 풀스택 개발자로 성장하기 위해서 강의도 많이 들었고, 이제는 정말 직장에서 일을 하면서 돈도 벌고, 기업에서 경험을 쌓아야 겠다는 생각에 나만의 웹사이트나 앱을 만들어 포트폴리오를 만들어보고자 생각이 들었습니다.

계획은 자신의 자산 상태를 여러 그래프로 보여주는 Dashboard를 만드는 것입니다. 에어비앤비 클론 코딩을 할 때는 오직 Django로만 풀스택 개발을 했지만 기업에서는 대부분 백앤드와 프론트앤드를 나누어 개발하는 것이 일반적이기 때문에 그에 맞추어 Django (+ Rest Framework)로 백앤드 API 서버를 만들고, React와 Redux를 이용해 프론트엔드를 만들 예정입니다.

저는 2주일 안에 끝내는 것으로 잡고 싶었으나 주변 개발자님들의 말을 들어보면 그렇게 마음대로 되지는 않을 거라는 말을 들어 3주~4주를 목표로 잡았씁니다. 지금은 이미 백앤드 API 서버를 만들고 있는 중이고, 시작한지 3주가 되는 날은 8월 15일이네요.

 

프로젝트명은 asset-dashboard.

지금까지 진행상황은...

 

7월 25일 - 간단하게 머리 속 계획을 그림으로 그려보고, Django와 더불어 필요한 것들 설치

개발환경은 간단하게 Ubuntu 16.04(WSL로 윈도우에서 사용), VS Code로 했고, pipenv로 가상환경을 꾸려서 함

 

7월 26일 - 일단 백엔드 API에 필요한 주식정보(현재가, 종목코드) 가져오는 crawler 코드 먼저 짬

https://00pen.tistory.com/84

 

Marketdata.krx 종목코드, 현재가격 가져오기

주식데이터를 가져오는 방법으로는 증권사 api도 있고, github에 올려져 있는 여러 코드들도 있지만 Django 백앤드에 필요한 상장주식코드(ETF 포함)만 가져오는데 무겁게 하기 싫어 코드를 짜보았습

00pen.tistory.com

 

7월 27일 - crawler 코드 정리하고, Django에서 db로 넘겨주도록 commad 생성, 주요 Model과 Serializer, View 생성

Github 주소  - https://github.com/qhqnf/asset-dashboard

https://00pen.tistory.com/87

 

Django Rest framework 와 React로 포트폴리오 만들어보기(2)

https://00pen.tistory.com/85 Django Rest framework 와 React로 포트폴리오 만들어보기(1) 노마드코더(nomad coder) 에어비앤비 클론 코딩 후기 2달에 걸친 풀스택 에어비앤비 클론 코딩을 드디어 끝냈내요. 이..

00pen.tistory.com

 

주식데이터를 가져오는 방법으로는 증권사 api도 있고, github에 올려져 있는 여러 코드들도 있지만 Django 백앤드에 필요한 상장주식코드(ETF 포함)만 가져오는데 무겁게 하기 싫어 코드를 짜보았습니다. 여러 블로그와 github 코드를 참고하였는데 최근에 정책의 변화인지 기존의 글들을 따라하면 otp가 공백으로 들어오는 현상이 발생하더라구요.

insomnia에서 request를 보내면 되는데 VS code안에서는 공백이 돌아와서 한참 해맴...

https://leesunkyu94.github.io/data%20%EB%A7%8C%EB%93%A4%EA%B8%B0/make_data/#

https://github.com/sharebook-kr/pykrx

그래서 위 두 곳의 정보를 통해 코드를 재구성해 보았습니다. ( 제 생각에 종목코드 외에 과거 데이터, 공매도 데이터 등이 추가로 필요하면 위의 github 코드는 pypi에도 올려져 있으니 그냥 pip install pykrx 한 다음에 모듈을 사용하는 것이 가장 좋을 것 같습니다. )

감사하게도 계속 보수 중이십니다.

 

https://github.com/qhqnf/asset-dashboard/blob/master/stocks/management/commands/crawler.py

결론적으로는 위 블로그에서 기술된 기존 방식에서 헤더에 {"User-Agent": "Mozilla/5.0"} 만 더해주면 돌아가더라구요.  아마 무분별하게 크로울링을 하는 것을 방지하기 위해 웹을 통해 가져가도록 만든 것으로 예상이 됩니다. 그리고 제가 만든 종목코드와 현재가만 가져오는 코드는 위의 제 github에 있고, 제 코드는 전날의 데이터를 가져와서 데이터프레임을 iloc[0:3]을 해서 현재가까지만 column을 가져온 것 뿐입니다.

 

* React Native를 이용하여 개발하면서 Expo라는 앱을 사용하게 되었는데 Dev tool을 사용하면 갑자기 네이버도 안 들어가지고 '사이트에 연결할 수 없습니다' - ERR_CONNECTION_FAILED 라고 떠서 stackoverflow를 참고하여 해결한 방법입니다. (일반적인 경우에도 해결방법이 될 지는 모르겠네요...)

해결방법을 알려준 stackoverflow의 유저도 저와 굉장히 유사한 환경에서 개발을 하고 있었는데

1. WSL을 이용해 Ubuntu를 사용

2. React-Native와 Expo를 사용해 개발 중

위와 같은 상황에서 Expo Dev-tool을 사용하다보면 갑자기 인터넷이 연결되어 있지만 네이버와 같은 평범한 사이트도 연결이 되지 않는 상황이 벌어지고 있는 것 같습니다. 컴퓨터를 껐다가 키면 해결되긴 하지만 번거롭기 때문에 그보다 쉬운 방법을 알려주었습니다.

1 - WIN+R -> services.msc 검색 -> 서비스 창이 뜸
2 - LxssManager 찾기
3 - 우클릭 후 재시작

'네이티브 ELF 이진 파일의 실행을 지원합니다.' 라는 걸 보니 확실히 React Native와 관련이 있는 거 같긴한데... 왜 이러는 걸 까요... 아무튼 재시작을 하면 모든 사이트들이 잘 돌아가긴 합니다...ㅋㅋ

출처: https://stackoverflow.com/questions/58159333/err-connection-failed-on-chrome-ie-after-20-minutes-of-working-when-internet-is

HTTP 5xx

Django 개인프로젝트를 진행하면서 AWS ElasticBeanstalk에 배포하는 것을 하던 도중 이런 오류를 만나게 되었는데 일주일 동안 아는 걸 모두 동원해서 고쳐보려해도 고치지 못했습니다. 제가 사용했던 Django 버전은 2.2버전이였고, Ubuntu 16.04, python 3.7을 사용했습니다.

배포할 때는 모두 eb init -> eb create하면 여러가지 옵션들이 나오는데 모두 default값을 사용했습니다.

그러면 현재 2020.06.27 기준 python 3.7를 Amazon Linux2 환경에서 Django 2.2버전을 돌리게 되는 것입니다. 근데 문제는 이런 상태로 deploy를 하면 뭐를 해도 로그에 wsgi에 관련된 에러가 뜨게 됩니다. path를 바꿔봐도 config를 바꿔봐도 해결이 되지 않습니다. 보안, 로드밸런서의 문제도 아닌 것 같습니다.

;;

그래서 해본 것이 Django버전을 2.1로 낮추는 것이였습니다. 그리고 나서 pipfile을 requirements.txt로 바꾸고...등등 근데 그래도 되지 않습니다. 그래서 서버의 버전도 python 3.6에 Amazon Linux로 한 단계 낮추었습니다. 그랬더니 갑자기 아무 문제 없이 돌아갑니다...

결론) 제가 추측을 해보면 python 3.7에 Amazon Linux2에서 Django 2.2버전을 돌리면 어떤 문제가 생기는 것 같습니다. 그래서 그냥 버전을 한 단계씩 낮추어 배포하면 문제 없이 돌아갑니다...

파이썬을 예전에는 그냥 jupyter notebook이랑 VS code로 썼었는데 package 오류가 나면 구글을 통해서 마구잡이로 pip를 남발하다보니 특이하게 패키지가 Appdata폴더의 Local로 들어가기도 하고, Roaming으로 들어가기도 해서 이왕 배우는거 윈도우10부터는 WSL라는 걸 지원해준다고 하니 우분투를 깔아서 도전해보기로 했다.

https://realpython.com/installing-python/

 

Python 3 Installation & Setup Guide – Real Python

In this Python installation guide you'll see step by step how to get a working Python 3 distribution set up on Windows, macOS, Linux, iOS, and Android.

realpython.com

여기를 참고해서 깔아보았다.

개인적으로 WSL과 Ubuntu, pipenv를 사용하면서 오류들을 많이 겪어서 기록해 놓아야겠다는 생각도 들었다... 먼저 pipenv를 이용해서 가상환경을 구축하려고 했는데 이 패키지 버전을 보니 2018년 말에 마지막으로 업데이트되었고, 여러 전문가들이 pipenv는 그만쓰고 Docker을 쓰라하니 이번만 pipenv를 쓰기로 했다.

 

아무튼 WSL을 통해서 우분투를 까는 것은 아래 마이크로소프트 홈페이지에서 자세히 설명해 놓았고 이대로 했을 때 오류가 나지 않았다.

https://docs.microsoft.com/en-us/windows/wsl/install-win10 

 

Install Windows Subsystem for Linux (WSL) on Windows 10

Installation instructions for the Windows Subsystem for Linux on Windows 10.

docs.microsoft.com

그리고 윈도우와 다르게 우분투를 까니까 python이 이미 깔려 있다. 근데 2.7버전과 3.5버전이라는 것. 뿐만 아니라 default로 python2.7을 쓰고 있다. 항상 3버전을 써왔고 3.5에서는 지원 안 하는 패키지들이 있으니 3.7버전으로 깔고, python3 --version 하면 3.7을 default로 만들도록 하자.( VS code에서 깔끔하고 잘 코딩을 할 수 있도록 black과 flake8을 까는데 3.5는 오류가 난다.)

apt-get install python3.7-dev

로 python3.7을 깔아주었다.

 

sudo update-alternatives --config python

를 치면 alternatives(대안)이 없다고 나온다.

 

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1

python은 python2.7로 하게 그냥 놔두고 python3만 python3.7을 1대안으로 하도록 정해 놓았다.

python3 --version 하면 이제 python3.7.x가 나온다. 굿

 

그리고 기존 python에서는 pip오류가 안 났는데 pip._internal가 오류가 나서 재설치를 해주고 pip3만 쓰기로 약속했다.

참고링크: https://qastack.kr/ubuntu/1025189/pip-is-not-working-importerror-no-module-named-pip-internal

 

Pip이 작동하지 않습니다. ImportError : 'pip._internal'이라는 모듈이 없습니다.

 

qastack.kr

그리고 나서 VS code에서 Remote-WSL을 깔고 pipenv로 가상환경을 설정하니 잘 돌아간다.

(pipenv --three 이상하게 오류 떠서 안되고, pipenv --three --python=`which python3` 이걸로 해결)

+ Recent posts