본문 바로가기

전체 글847

OSX PostgreSQL 정리 계속 도커로 띄워서 사용하다보니 로컬에서 띄우는 방법을 잊어버려서 정리하고자 이렇게 포스팅으로 남긴다. 현재 맥북을 사용하고 있기 때문에 OSX를 기준으로 설명한다. 설치 brew install postgres 초기 접속 psql postgres 실행 postgres -D /usr/local/var/postgres 계정 생성 create user 계정이름 with encrypted password '비밀번호' DB생성 시 Owner 명시 create database 디비명 owner 계정이름 encoding 'utf-8' 생성한 유저 Superuser 권한 주기 alter user 계정이름 with superuser 2019. 10. 22.
Django Middleware로 특정 주소 Redirect 시키는 방법 현재 서버는 모든 요청이 API Gateway를 한번 거쳐서 들어오는 형태로 구성되어있다. 각 서비스별로 팀내에서 부를 용어를 통일하기위해 hide처럼 임의의 명칭을 부여했고, 모든 요청앞에 /hide/와 같은 형태로 prefix를 붙이기로 했다. 기존에는 /api/v1/로 시작하는 URL들의 집합체였는데, 모든 URL들에 prefix를 붙이자니 조금 번거로운 작업이 될 것으로 생각하여 Django의 Middleware에 훅을 거는 방식으로 진행하였다. 위 사진을 보면 어떠한 형태로 Django의 Request/Response가 처리되는지 한눈에 알 수 있을 것이다. 우리는 Request가 들어올 때 prefix를 붙여주는 작업을 진행해야하므로 Request Middleware를 생성하기로 했다. fro.. 2019. 10. 21.
Python Alembic으로 Migration 관리하는 방법 Django같은 경우 풀스택을 지향하는 프레임워크로써 기본적으로 수많은 기능들을 제공한다. 그 중 편리한 기능중 하나가 바로 마이그레이션이다. 프레임워크에서 기본적으로 마이그레이션 기능을 제공하기에 사용자는 추가적인 설치나 세팅을 해줄필요가 없이 손쉽게 정의한 모델을 데이터베이스 테이블로 생성할 수 있다. 하지만 Flask, Sanic등 자유도가 높은 프레임워크의 경우 마이그레이션을 위한 기본 기능이 존재하지 않는다. 일반적으로 Alembic을 통해 마이그레이션 관리를 통합하는데, 본 포스팅에서는 SQLAlchemy를 사용하는경우에 Alembic을 통해 데이터베이스 마이그레이션을 관리하는 방법에 대해 기술한다. 1. 설치 아래의 명령어로 라이브러리를 설치한다. pip3 install alembic2. 초.. 2019. 9. 26.
Django Restframework Serializer 뜯어보기 현재 Custom Authentication을 구현하여 request.user에 Header에 들어있는 특정한 값을 파싱하여 넣도록 구현했다. 그 다음으로 리퀘스트를 검증하기위해 Serializer를 사용하는데, 일반적으로 시리얼라이저는 정의해놓은 필드이외의 값을 받지 못한다. 예를 들어 아래와 같은 시리얼라이저가 있다고 가정해보자. class CreatePostRequestSerializer(serializers.Serializer): body = serializers.CharField(required=False) attachments = serializers.ListField(required=False)리퀘스트로는 body, attachments 두개의 값이 들어오고 제대로 값이 들어왔는지 판단하는 .. 2019. 9. 19.
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.