Django는 현재 Python으로 웹 개발할 때 사용할 수 있는 제가 생각하기에
아주 강력한 프레임워크입니다.
2005년 7월 15일부터 출시되어 2020년 4월 8일 기준 3. 대 버전까지 나와있습니다.
웹 개발을 처음 입문하는 분들은 Django 쉬우면서 어려우실 수 있습니다.
우선 디잔고? ㄷ장오? 뭐라고 읽어야할지 한글을 쓰는 우리에게는 어렵죠
처음에 찾아볼때 저는 어무해로 기억했었죠. (한/영 타이핑 시 어무해)
쥉고라고 하는 것도 같고 주웽고라고 하는것도 같고 하지만 한글로는 대부분 장고라고 하는것 같습니다~(당연한 이야기)
본론으로 돌아와 초보자 시점에서 좋은 점과 어려운점을 간략하게 정리해보았습니다.
(startproject, startapp, createsuperuser를 하실 줄 안다는 가정입니다)
해당 내용에서 더 자세한 내용은 차차 포스팅하여 링크하도록 하겠습니다~
좋은점
- 방대한 라이브러리와 빌트인
"무엇을 좋아할지 몰라 다 준비해뒀어"라는 콘셉트의 장고는 아 이런 기능 없나 하고 구글링 하면 대부분 있습니다. 만약에 없다면? 구글링 하는 법을 공부하시고 다시 해보시면 있을 것입니다. 이미 이 부분에서 많은 게 해결됩니다.
- Admin 페이지
꼭 필요한 회원가입, 로그인, 로그아웃, 세션 관리를 할 줄 몰라도 이미 할 줄 알게 됩니다.
소셜 로그인도 라이브러리로 간단하게 붙일 수 있습니다.
-런서버 (runserver)
테스트를 하면서 바로바로 서버를 띄워 직접 보고 테스트하면서 개발할 수 있습니다. 테스트 코드 작성이 어려운 초보 개발자들에게는 직접 클릭하고 눈으로 볼 수 있는 게 최고겠죠~?
-ORM
데이터베이스 몰라도, SQL문을 몰라도, 우선 복붙으로 다양한 DB를 붙이고 사용할 수 있습니다. 몰라도의 전제는 처음에만 적용되는 거겠죠?
-django-rest-framework
API 필요는 한데 어떻게 개발하고 관리해야 할지 겁이 났지만 DRF로 직관적이면서 강력하게 관리하실 수 있습니다. serializers로 데이터 유효성 검사부터 저장까지 간편하게 관리할 수 있습니다. API로 데이터만 주고받을 수 있어도 할 수 있는 게 상당히 많아지는 것 같습니다.
class ItemListView(APIView):
def get(self, request, format=None):
if request.user.is_staff:
payments = {'product': '아이스크림', 'price': '50,000'}
return Response(payments)
else:
return Response(status=status.HTTP_403_FORBIDDEN)
def post(self, request, format=None):
serializer = serializersItemSerializer(data=request.data)
if serializer.is_valid():
product = request.data['product']
어려운 점
- MVC + Form
알면 강력하지만 알수록 복잡한 MVC패턴과 Form은 처음에 이해하기가 어려운 부분이 있었습니다. 유효성 검사를 철저하게 해 주기 때문에 잘 적용하면 안전하고? 정확한? 데이터를 전달받을 수 있습니다
Form의 경우 아 이런 거구나 했지만 막상 사용해보면 이럴 땐 어떻게 해야 하지? 막히는 부분이 제일 많은 부분이었던 것 같고 지금도 잘 다루기는 어려운 것 같습니다.
class ProductForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs)
self.fields['employees'].queryset = User.objects.filter(is_staff=True, is_active=True)
class Meta:
model = models.Product
# 예를 들어 셀렉트 옵션에 값을 넣어둘 때 위와 같이 한다면 현재 활성화된 직원만 불러오게 됩니다. 퇴사한 직원이 등록된 데이터를 업데이트할 경우 셀렉트 옵션에 퇴사한 직원이 없기 때문에 어떤 직원도 선택되지 않게 됩니다. 자칫 잘못하면 대형사고로 이어질 수 있는 부분이라고 생각이 듭니다. 이점 유의하세요! 위에 해결 방안은 제일 마지막 부분에 달아둘게요~
- 같은 기능 수많은 라이브러리
대단한 분들의 수많은 코드들이 있지만 무작정 install name을 할 수는 없습니다. 버전에 따라 작동하지 않거나 오류가 발생할 수 있기 때문입니다. 그래서 저는 해당 라이브러리의 github를 가서 start와 최근 업데이트 날짜를 확인하는 편입니다. 그리고 해당 라이브러리 에러 사항들을 찾아보고 내가 해결할 수 있을지 없을지 생각해보고 사용하려고 합니다.
-중급은 어디서 배워야 하죠?
Django의 경우 기초 강좌와 고급 강좌는 비교적 있는 편이지만 그 중간 과정의 강좌는 많이 없습니다. 이 부분은 다른 언어도 마찬가지겠지만 직접 경험하지 않는다면 모든 부분을 강좌로 꾸려놓을 수 없기 때문인 것 같습니다. 저 또한 다수의 이미지를 업로드받아 하나의 압축파일로 압축하여 저장하는 작업을 한적 있는데 며칠을 동안 실패를 거듭하며 자료만 찾았던 기억이 있네요 (추후에 포스팅 후 링크 걸겠습니다). 이 부분의 해결은 다양한 분야의 작은 사이드 프로젝트를 많이 경험해보는 게 좋다고 하네요
-ORM
장점에도 적혀있던게 단점에도 적혀있네요 그이유는 바로 최적화 부분에 신경을 써야한다는것입니다. 쿼리는 비싼 비용이 드는 작업입니다. 중복된 쿼리 성능저하를 불러일으킵니다. 예를들어 고객 1000명을 조회할때 중복 쿼리가 발생한다면 1000번이나 더 작업을 수행하는것이죠. 그것과 연결된 외래키가 있다면 더 많은 쿼리가 중복되어 발생하게 될것입니다. 최적화에 신경쓰세요!
- MVC + Form 해결했던 방법
self.fields['employees'].queryset = \
User.objects.filter(Q(is_staff=True)& Q(is_active=True)| Q(username=self.instance.employees))
# self.instance 를 활용하여 업데이트시 기존 퇴사자를 queryset에 추가하여 해결하였습니다.
'Django' 카테고리의 다른 글
Django에서 memcached 사용하기 (우분투, 윈도우) (0) | 2020.06.17 |
---|---|
[CRITICAL] WORKER TIMEOUT (pid:00000) (0) | 2020.05.27 |
Out of range value for column (SQLite is working but MySQL is not working) (0) | 2020.05.18 |
request로 전송받은 csv file 바로 읽고 데이터베이스 저장 (0) | 2020.05.11 |
파일 삭제하면 미디어 폴더에서도 파일 삭제하기 (0) | 2020.04.14 |
댓글