Coding/Python113 Python dataclass property/setter 파이썬 3.7부터 보다 간편하게 클래스를 생성할 수 있는 dataclass가 추가됐다. dataclass를 사용하여 Getter/Setter를 추가할 때 발생한 문제점과 해결 방법에 대해 기술한다. 파이썬에서 Getter/Setter를 사용하려면 @proprety와 @요소.setter라는 특수한 데코레이터를 사용해야한다. 먼저 일반적인 클래스의 경우 어떻게 사용하는지부터 살펴본다. class User: def __init__(self, id: str, pw: str): self.id = id self._pw = pw @property def pw(self): return self._pw @pw.setter def pw(self, value: str): self._pw = value if __name__ .. 2019. 9. 18. Python Requests Retry 일반적으로 파이썬에서 리퀘스트를 보낼 때 requests 라이브러리를 사용한다. 사용법이 간단하고 직관적이므로 처음 사용하는 사용자들이라도 손쉽게 사용할 수 있기 때문이다. (https://2.python-requests.org/en/master/) 만약 리퀘스트를 보낸 후 돌려받은 Response를 통해 어떠한 로직을 거쳐야하는 상황이 있다고 가정해보자. 만약 단 한번의 리퀘스트를 전송했는데 대상 서버의 상태가 죽어있을 경우 정상적인 Repsonse를 받을 수 없고 그 이후에 거치는 로직또한 정상적으로 탈 수 없다. 따라서 대상 서버의 응답이 정상이 아니라면, 일정한 횟수동안 재시도(Retry)를 하도록 구현해야한다. 이러한 재시도 로직이 필요할 경우 개발자가 직접 특정한 로직을 구현할 필요없이 라이브.. 2019. 9. 5. Python Method Chaining SQLAlchemy, MongoEngine 또는 Django ORM 등의 쿼리를 보면 Chaining을 통해 쿼리를 쉽게 작성할 수 있다는걸 알 수 있다. 예를 들어 아래와 같은 형태이다. User.objects.filter(user_id=1).order_by('-user_id')위 쿼리는 user_id=1의 결과값을 역순으로 정렬하여 return해준다. 쿼리에서 알 수 있듯이 filter().order_by() 형태로 함수들을 Chaining해줬다. 만약 Chaining을 지원하지 않았다면 filter()를 한번해주고 그 결과값을 다시 order_by()를 해주는 형태로 나눠서 작성해야 했을 것이다. 이는 상당히 많은 경우에서 유용한데, 파이썬의 경우 정말 간단한 방법을 통해 Method.. 2019. 7. 17. ECS Blue/Green CodeDeploy 연동 배포 자동화 스크립트 이전에 AWS ECS를 사용할 때 Deployment Type을 Blue/Green Deployment로 지정하여 배포하는 방법에 대해 포스팅했었다. (https://hides.tistory.com/1013) 해당 포스팅을 통해 서비스를 생성하면 CodeDeploy의 애플리케이션쪽에 자동으로 연관된 애플리케이션과 배포 그룹이 생성된다. ECS콘솔에서 서비스를 선택하고 직접 업데이트 버튼을 눌러서 배포를 진행할수도 있지만 명령어를 한번 실행시키는 형태로 배포를 자동화시키고 싶었다. 그래서 awscli쪽을 알아보던 중 CodeDeploy관련 create-deployment를 이용하면 쉽게 가능할 것이라고 생각했다. 자세한 문서는 https://docs.aws.amazon.com/cli/latest/refer.. 2019. 6. 21. Python zip으로 병렬처리 시 리스트의 크기가 다른 경우 일반적으로 두개의 리스트를 병렬로 다루고 싶을 때 zip() 메소드를 이용한다. 나같은 경우 두개의 리스트를 하나하나 루프를 돌며 비교하는 검증 작업을 진행하고 있었다. 작업 도중 한가지 문제점을 발견했는데, 바로 사이즈가 다를 때였다. zip()을 사용하여 두개의 리스트를 순회하면 사이즈가 다른 경우 사이즈가 작은 리스트의 작업까지만 순회하고 루프를 종료한다. a = [1, 2, 3] b = [4, 5] for x, y in zip(a, b): print(f'x: {x} / y: {y}') 예를 들어 위와 같이 사이즈가 다른 두개의 리스트를 zip을 통해 순회하면 결과는 다음과 같다. x: 1 / y: 4x: 2 / y: 5 나는 마지막 값까지 순회하며 처리하고 싶었다. 그렇다면 무언가 특정 값으로 P.. 2019. 6. 14. MongoEngine과 Pymongo 같은 Connection 유지하는 방법 보통 파이썬으로 MongoDB에 접근하여 작업할 때 MongoEngine을 자주 사용했었다. 형태가 Django의 모델과 상당히 유사하고 사용법또한 간단했다. 또한 가장 눈여겨봤던 점은 커뮤니티 활성도였다. 타 ODM보다 깃허브 스타가 많았으며 스택오버플로우 등에서 관련 자료를 찾기 쉬웠다. MongoEngine은 PyMongo를 좀 더 사용하기 쉽게 Wrapping해놓은 라이브러리이다. PyMongo를 사용해보면 알겠지만 문법이 간결하지않고, 조금 더 Raw한 느낌이다. 실제로도 가장 네이티브에 근접하게 만들어진 라이브러리이기에 속도 또한 빠르다. 그렇기에 MongoEngine이란 ODM을 사용하고 있었는데, 아무래도 PyMongo의 모든 기능을 제공하진 않는다. 일반적인 작업은 그냥 몽고엔진만을 통해.. 2019. 6. 13. 이전 1 2 3 4 5 6 7 ··· 19 다음