본문 바로가기

Coding/Python113

MongoEngine EmbeddedDocument/Reference MongoEngine Embedded vs Reference 현재 파이썬으로 MongoDB와 연동하여 작업을 진행하고 있다. Raw query를 사용하는 사람은 당연히 없으므로 ODM(Object Document Mapper)을 찾아보던 중 Mongoengine이 가장 좋을 것 같다는 판단이 들어서 해당 ODM을 선택하여 개발중이다. MySQL등 RDB계열을 사용하다가 처음 NoSQL으로 넘어온 사람들에게 가장 헷갈리는 부분이 바로 '관계를 어떻게 표현해야할까' 이지 않을까 싶다. 나같은 경우에도 기존 관계형 데이터베이스만 사용하다보니 NoSQL에서 관계를 어떻게 해야할 지 많은 고민이 됐다. 이 포스팅은 그에 관련하여 많은 정보를 담진 않을 것이고 실제 Mongoengine을 통해 어떠한 형태로 도큐먼.. 2019. 3. 18.
Django AWS Elasticache 연동하는 방법 현재 백엔드 서버로 파이썬 장고를 사용하고 있다. 대부분의 기능구현이 완료되었고 마무리 단계에서 캐싱을 도입하려고 알아보던도중 AWS의 Elasticache를 이용하기로 결정했고 Django Elasticache를 연동하는 과정에 대해 서술한다.시작하기전에 알아둘 점 -> 작업은 쓰기/읽기로 나뉠텐데, 각 작업마다 하는 행동은 다음과 같다. 읽기 : 캐시서버에 존재하는지 탐색 -> 존재한다면 캐시서버에서 자료 return -> 존재하지 않는다면 데이터베이스에서 가져와서 사용자에게 뿌려주고 캐시서버에 set쓰기 : 데이터베이스에 저장 -> 캐시서버에 set 먼저 AWS로 들어가서 Elasticache로 들어간다. 아래쪽에 있는 지금 시작 버튼을 누른다. 캐시 서버는 Redis/Memcached 두가지 엔진.. 2019. 3. 13.
Django Restframework Custom User Model 적용 방법 Django에는 디폴트로 유저모델이 존재한다.하지만 해당 유저모델에는 상당히 많은 기본 컬럼이 존재하기에, 커스터마이징이 필요한 경우가 많다.일반적으로 Custom User Model을 만들려면 AbstractUser 또는 AbstractBaseUser를 상속받아서 만든다.먼저 아래의 명령어로 프로젝트와 앱을 생성한다. django-admin startproject project .django-admin startapp users 그리고 settings.py에 우리가 생성한 users와 rest_framework를 추가해준다.다음으로 models.py에 아래의 내용을 채워넣는다.from django.contrib.auth.models import AbstractBaseUser, BaseUserManage.. 2019. 2. 28.
Python Observer Pattern 소프트웨어를 설계할 때 가장 먼저 고려할 점이 바로 아키텍쳐 구조이다. 또한 아키텍쳐의 구조를 제대로 설계하려면 디자인 패턴또한 고려해야한다. 나는 이번에 다음과 같은 프로그램을 짜고 있었다. - 파일을 업로드하고 데이터베이스에 관련 정보를 저장하는 프로그램 위 프로그램의 플로우를 하나하나 살펴보자면 다음과 같다. 1. S3에 파일을 업로드한다.2. 업로드된 파일의 URL을 통해 특정 비즈니스 로직을 거친다.3. 로직을 거친 이후 나온 결과물을 최종적으로 데이터베이스에 저장한다. 여기서 발생할 수 있는 문제점이 있다. 1번 파일 업로드 부분에서 바로 오류가 발생하면 상관이 없겠지만, 2번 또는 3번처럼 파일을 업로드한 이후 오류가 발생한다면 S3에는 파일이 남아있지만 실제적으로 해당 파일을 Trackin.. 2019. 2. 20.
PyCharm AWS Lambda Plugin으로 작업하는 방법 AWS Lambda는 여러가지 장점을 가지고 있다.하지만 로컬에서 작업할 수 없기에 항상 작업한 결과물을 업로드하거나 직접 AWS콘솔에 붙어서 작업을 해야했는데이는 너무나 불편한 작업이었다.그래서 PyCharm에서 AWS Lambda관련하여 플러그인이 없을 지 찾아보던 중 SAM이라는 플러그인을 발견했다.나는 OSX를 사용하고 있으므로 맥 기준으로 설명한다.먼저 아래의 명령어로 brew를 업데이트한다. brew upgradebrew update 이제 저장소에 추가하고 설치한다. brew tap aws/tapbrew install aws-sam-cli 다음으로 파이참을 키고 설정 - Plugins에서 lambda를 검색한다. 오른쪽에 있는 AWS Toolkit을 설치한다음 재시작한다.이제 File - Ne.. 2019. 2. 11.
Python Anti Pattern - Using an unpythonic loop Using an unpythonic loopPEP20에 따르면 "There should be one- and preferably only one -obvious way to do it"이라고 나와있다.각 요소에 접근하기 위해 증가하는 인덱스를 생성자쪽에서 사용하는 for루프는 좋지 않다.이러한 경우, enumerate()를 사용하는것이 좋다. Anti-patternl = [1,2,3] # creating index variable for i in range(0,len(l)): # using index to access list le = l[i] print(i,le)위 코드는 리스트의 요소들에 접근하기위해 i변수를 사용한다.이것은 파이썬에서 순회할 때 권장되지 않는 방법이다. Best practicefor.. 2019. 1. 28.