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

 

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

노마드코더(nomad coder) 에어비앤비 클론 코딩 후기 2달에 걸친 풀스택 에어비앤비 클론 코딩을 드디어 끝냈내요. 이 코스를 통해 python과 Django를 배울 때는 재밌어서 하루도 빠짐없이 코딩을 했습�

00pen.tistory.com

7월 25일에 시작해서 8월 1일로 백엔드를 얼추 다 만들었습니다. 처음으로 혼자서 처음부터 끝까지 만들어보니 기획/계획의 중요성과 디자인 패턴의 중요성도 알게 된 것 같습니다. 왜냐하면 약 3일 정도 삽질을 한 게 욕심내서 APIView로 하나하나 만들어 보려다 코드가 점점 더러워져서 Viewset으로 바꾸어 만들었습니다. 2일 동안 만든 코드가 Viewset으로 바꾸니 하루만에 다 고칠 수 있을 정도로 Viewset는 편리했습니다. 그리고 나머지 customizing이 필요한 부분만 APIView로 커버했습니다.

가장 재밌으면서 오래 걸렸던 부분은 Django ORM을 이용해서 total asset을 구하는 부분이였는데 transaction_type이 Buy와 Sell 둘로 나누어져 있어 이걸 Case를 이용해 Buy는 +로 Sell은 -로 새로운 field를 만들어주고, 합쳐주는 쿼리문을 만든 것이었습니다. 처음에는 어렵게 느껴졌지만 계속 새로고침하면서 에러를 통해 고쳐나가니 빠르게 배울 수 있었습니다. 

총 자산 구하기

이 쿼리문 하나 만드는데 Django Document와 블로그 글을 통해 1시간 넘게 걸린 것 같은데 아래의 transaction을 POST받을 때 자산에 음수가 나오지 않도록 하는 것을 만드는데는 10분도 안 걸린 것 같습니다.ㅋㅋ

transaction create할 때 validate하기

이제 이걸 배포하고 React를 이용해 Front-end를 만들고 이어주는 것만 남았는데 백엔드 만드는데만 하루에 2~3시간씩 약 8일이 걸렸는데 대략 끝내기까지는 예상한 대로 2주는 더 걸리지 않을까 생각이 듭니다.

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

Function Based View를 사용하고 싶으면 @api_view

 

Class Based View 사용하고 싶으면 APIView, Generics.~~APIView, Viewset 중 하나

APIView는 View(Rest Framework에 있는게 아닌 Django에 있는 것)를 상속받긴 하지만 거의 백지상태. 안에 만들고 싶은 Http method를 골라서 만들어주면 됨. (ex. get, post, put, delete ...)

Generics.~~APIView와 APIView 사이에 GenericAPIView가 있긴 한데 둘을 이어주는 징검다리 느낌. GenericAPIView를 써본 적은 없음. 이제 ListAPIView, ListCreateAPIView, DestroyAPIView 등등이 있는데 단어 하나가 붙을 때마다 그 Mixin같이 따라 온 거라 보면 됨. (ex. ListAPIView는 APIView에 ListModelMixin이 같이 와서 List Method를 이미 어느정도 만들어 놓음)

Generics에 있는 View들은 get, post, put, delete method를 잘 가공해서 List( or Retrieve), Create, Update, Destory로 만들어 놓음. 그래서 get, post method를 보면 그냥 가공해 놓음 List( or Retrieve), Create method를 부르기만 함.

get과 list
post와 create

Viewset과 APIView 사이에도 GenreicViewset이 있긴 한데 이것또한 징검다리 같은 느낌. Viewset들은 위의 Mixin들은 많이 넣어서 더 편리하게 만들어 놓음. ModelViewSet은 Mixin들을 모두 넣어 놓았고, ReadOnlyModelViewSet은 get만 가지도록 List와 Retrieve Mixin만 가져옴.

ModelViewSet
ReadOnlyModelViewSet

참고 문헌: http://www.cdrf.co/

 

Django REST Framework 3.9 -- Classy DRF

What is this? Django REST framework is a powerful and flexible toolkit that makes it easy to build Web APIs. It provides class based generic API views and serializers. We've taken all the attributes and methods that every view/serializer defines or inherit

www.cdrf.co

 

노마드코더(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

 

 

2달에 걸친 풀스택 에어비앤비 클론 코딩을 드디어 끝냈내요. 이 코스를 통해 python과 Django를 배울 때는 재밌어서 하루도 빠짐없이 코딩을 했습니다. 5월에는 천천히, 6월에는 2배 정도 빠르게 했으니 아마 열심히 하시는 분이라면 6주면 끝낼 수 있지 않을까 싶습니다. (사실 AWS와 연동하는데 일주일 동안 풀지 못한 오류가 있었는데 그거 때문에 시간을 많이 잡아먹음... 혹시라도 같은 오류가 나시는 분이 있을까 글도 올림 - [Django/AWS EB] wsgiPath 오류 및 502 Bad gateway)

 

5월과 6월 장장 2달간의 코딩

 

니꼴라스와 함께한 첫 풀스택 클론 코딩의 후기를 말해보자면 먼저 하고 싶은 말은 처음에는 어렵습니다. 처음에는 코드를 같이 써보고도 어떻게 돌아가는지 이해가 되지 않습니다. 근데 강의를 들어보면 같은 문제를 여러가지 방식으로 풀어주거나 비슷한 걸 여러 개  같이 만들어보는데 이렇게 여러 번 반복하다보면 갑자기 이해가 됩니다. 예를 들어 Django에서는 template(html)과 view와 url을 같이 쓰는데 대충 설명해보자면 template는 유저가 보는 화면을 구성하는 것이고, view는 그걸 돌리는(?) 방식이고, url는 www.naver.com 같이 주소라고 보시면 됩니다. 처음에는 이 세가지가 어떻게 연결되는지 잘 이해가 되지 않는데 여러 번 만들다 보면 이해가 됩니다.

 

내 home view

 

두 번째로 느낀 것은 코코아톡 강의나 바닐라JS강의를 들을 때는 몰랐는데 AWS에 배포를 하고 누군가가 내가 만들걸 볼 수 있게 되었을 때 굉장한 보람을 느꼈습니다. 그래서 강의 중 이 배포 부분이 가장 어렵고, 가장 보람을 느끼게 되는 부분이 아닐까 싶습니다. 

마지막으로 어느정도 난이도가 있는 강의를 들었다고 생각하지만 오히려 이 강의를 들으면서 제가 얼마나 아무것도 몰랐는지 느끼게 되었습니다. Django라는 framework가 굉장히 편리하게 만들어져 있음에도 불구하고, 이걸 정말 전문적으로 이용하기 위해서는 이제 wsgi랑 서버에 대해서도 알아야 하고, 실제 실무에서는 백엔드와 프론트엔드를 나누어 놓기도 하는데 그러기 위해서 API 특히, Django REST API(DRF)에 대해서도 알아야 하고, 그리고 이번에 만든 것은 굉장히 정적인데 이걸 멋지게 만들려면 Javascript를 이용해 사용자의 이벤트를 잡아줘야 하고, 등등.

결론적으로 이 에어비앤비 클론 코딩 강의는 코딩을 하면서 보람을 많이 느끼게 한 강의라고 생각하고, 클론 코딩 강의이기 때문에 부담없이 천천히 배울 수 있는 강의라고 생각합니다.

강의와 별개로 혼자 만들어본 My reservation
끝!

저는 이제 정말 장고를 잘 이용하기 위해서 노마드 코더에서 REST API 강의를 수강해보겠습니다ㅋㅋ

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버전을 돌리면 어떤 문제가 생기는 것 같습니다. 그래서 그냥 버전을 한 단계씩 낮추어 배포하면 문제 없이 돌아갑니다...

+ Recent posts