분류 전체보기 11

FastAPI settings 관리

대부분의 웹 개발은 웹앱에 필요한 구성(Configuration)정보를 필요로 합니다. 그리고 그 구성 중에서 secret keys, database credentials 등은 각각의 환경마다 정보가 다를 수 있습니다. 장고 프레임워크에서는 이를 위한 모범사례로 환경마다 파일을 구분하고 Git에서 관리하는 것이었습니다. 다만, 이럴 경우 민감한(Sensitive) 정보들에 대해서는 환경 변수로 별도 관리되어야 합니다. FastAPI에서는 내부적으로 pydantic 패키지를 사용하는데 이 패키지가 제공하는 모듈로 환경 변수를 읽어 settings를 관리합니다. 자 그럼 pydantic를 활용하여 간단한 예제를 보겠습니다. from fastapi import FastAPI from pydantic impor..

Python/FastAPI 2020.10.05

템플릿 메소드(Template Method)

디자인 패턴 중에서 템플릿 메소드(Template Method) 패턴에 대해 알아보자. 템플릿 메소드 패턴은 GoF가 제시한 행동 패턴(Behavioral Patterns) 중의 하나로 슈퍼 클래스에서 알고리즘에 대한 메소드의 뼈대(skeleton)만 작성하고, 서브 클래스에서 해당 메소드를 상속(inheritance)받아 구체적인 구현을 재 정의(overriding) 하는 패턴이다. 템플릿 메소드 패턴은 소프트웨어 개발 원칙들 중 DRY(Don't repeat yourself)에 해당한다. DRY는 어떠한 경우든 모든 형태의 데이터 중복을 지양하는 원리이다. 즉, 같은 코드를 중복되어 작성하지 말란 원칙이다. 템플릿 메소드 패턴은 동일한 알고리즘을 슈퍼 클래스에서 작성하기에 코드 중복을 최소화 한다. ..

싱글턴(Singleton)

디자인 패턴중에서 싱글턴(Singleton) 패턴에 대해서 알아보자. 기본 개념 싱글턴 패턴은 오래전부터 많이 알려지고 사용된 디자인 패턴중에 하나로 하나의 클래스에 인스턴스를 하나만 만들어야하는 경우 사용되는 패턴이다. 최초 생성 이후에 호출되는 생성자는 최초 인스턴스를 리턴한다. 싱글턴은 다음과 같은 상황에 사용된다. 공유자원(shared resource)에 대한 동시접근(concorrenct access)을 제어할 필요가 있는 경우. 여러 시스템에서 하나의 자원에 접근하는 지점이 필요한 경우. 유일객체(unique object)가 필요한 경우. 일반적으로 싱글턴이 사용되는 예는 다음과 같다. logging class. print spooler. DBCP(Dabasebase Connection Poo..

Django 3.0 | 프로젝트 시작하기

이 포스팅에서는 장고 3.0와 python 3.8.x을 이용하여 간단한 앱을 구현할 것입니다. 그리고 본격적으로 웹 어플리케이션을 만들기 전에 프로젝트 스켈레톤에 대해 다룰 예정입니다. 가상환경(Virtual Environment)구축하기. 프로젝트 구조 구성하고 첫번째 앱 시작하기. 환경별로 settings 분리하기. 민감한 설정정보들 관리하기. STATIC 파일 관리하기. 가상환경(Virtual Environment) 구축하기. 로컬에 python 3.8.x가 설치되어 있다고 가정하고 시작하겠습니다. 만약 python 3.8.x가 설치되어 있지 않다면 여기를 참조하여 설치를 진행해 주세요. 에제의 root directory명은 learn-django3 입니다. 해당 디렉토리로 이동하여 아래 커맨드를 ..

Python/Django 2020.09.29

Django 2.2 | 유저 모델 커스텀하기

Custom User Model 장고의 공식 문서에서는 user model을 프로젝트에 맞게 커스텀하기를 권장하고 있다. 이유는 user model의 내장된 필드들이 필요하지 않을 수도 있고, 내장되지 않는 필드들이 필요할 수도 있기 때문이다. 프로젝트 개발 중간 단계에 user model을 커스텀하려고 하면 프로젝트가 장고와 내부적으로 연결되어 있기 때문에 전환이 어려울 수 있다. 그렇기에 프로젝트 시작 단계에서 user model을 커스텀하여 개발하는게 좋다. user model 커스텀은 장고 v1.5에 큰 변화를 이루었다. v1.5 이전의 권장 방법은 Profile model에 OneToOne 으로 관계를 맺는 것이었고, 이는 헷갈리기 쉬운 구조였다. 레거시한 장고 프로젝트를 보면 이런 코드를 볼 ..

Python/Django 2020.09.29

Django 2.2 | 프로젝트 디렉토리 구조

프로젝트 레이아웃 이번 포스팅에서는 프로젝트의 디렉토리 구조인 레이아웃에 대해 말하려 한다. 프로젝트 레이아웃은 장고로 개발된 많은 프로젝트마다 그리고 장고 개발자들 사이에서도 의견이 분분하다. 무엇이 모범사례이고, 정답인지는 정확히 모르겠지만 개인적으로 적지 않은 장고 프로젝트를 진행하면서 익숙해진 나름의 프로젝트 레이아웃에 대해 말하려 한다. 정답은 아니기에 참고만 해주길 바란다. 바로 앞에 작성한 포스팅의 startproject와 startapp을 실행하면 기본적인 레이아웃은 아래와 같을 것이다. learn.django coninggu_project/ # 프로젝트 디렉토리 __init__.py settings.py urls.py wsgi.py coninggu/ # 앱 디렉토리 __init__.py ..

Python/Django 2020.09.29

Django 2.2 | Hello World 그리고 dockerize(도커화)

Docker 현대적인 프로그래밍에서 모든 기술의 발전에도 불구하고 모든 개발자의 로컬환경을 똑같이 구성하기에는 여전히 어려운 과제 중 하나이다. 팀의 협업간에는 그 문제가 더욱 커진다. 도커는 최신 기술이지만 앞서 말한 문제를 해결한다는 이유로 프로덕션-레벨에서까지 많이 사용되고 있다. 도커가 나오기 전에는 팀에 새로운 개발자가 투입되면 README 파일을 공유하여 그 파일에 적힌 순서대로 로컬 환경을 구성하였지만, 도커가 나온 이후에는 Dockerfile과 docker-compose.yml 파일을 공유하여 실행하는 것만으로 다른 팀원들과 동일한 로컬 환경을 아주 간단히 구성할 수 있게 되었다. 도커의 핵심 아이디어는 대부분의 컴퓨터가 리눅스 OS에 의존한다는 것이고, 만약 이 리눅스-OS-레벨에서 가상..

Python/Django 2020.09.29

퍼사드(Facade)

디자인 패턴 중에서 퍼사드(Facade)에 대해서 알아보자. 퍼사드 패턴은 GoF가 제시한 구조 패턴(Structural Pattern)중의 하나로 클라이언트에게 시스템의 복잡성(complexity)을 숨기고, 사용하기 편하도록 간단하고 구체적인 고수준의 인터페이스를 제공하는 패턴이다. 복잡한 라이브러리 또는 프레임워크를 생각해 보자. 원하는 동작을 위해선 객체를 초기화하고 종속성을 추적하며 메소드를 실행해야 한다. 하지만 클라이언트측에선 이를 모두 이해하고, 유지하기란 쉽지 않다. 퍼사드는 시스템이 아무리 복잡하더라도 간단하고 쉽게 클라이언트가 접근 할 수 있는 인터페이스를 제공하는 것이다. 기본개념 퍼사드 패턴에는 일반적으로 Facade 클래스, System 클래스, Client 클래스가 있다. Fa..

보그(Borg)

디자인 패턴 중에서 보그(Borg) 패턴에 대해 알아보자. 보그는 단일 상태(monostate) 라고도 불리운다. 단일 동작을 위한 싱글톤(Singleton) 패턴과 매우 유사하지만 차이점은 상태(state)를 공유한다는 점이다. 즉, 여러개의 인스턴스는 하나의 상태(state)를 공유한다. 싱글턴을 사용한다면 서브클래싱(subclassing)에서는 보그 패턴이 더 나은 대안이 될 수 있다. 두 개 이상의 서브클래스가 하나의 슈퍼클래스를 상속한 경우 서브클래스별로 동작(behavior)을 다르게 재 정의하지만 상태는 여전히 공유되기 때문이다. class Borg: _shared_sate = {} def __init__(self): self.__dict__ = self._shared_sate if __na..

데코레이터(Decorator)

디자인 패턴 중에서 데코레이터(Decorator)에 대해서 알아보자. 데코레이터 패턴은 GoF가 제시한 구조 패턴(Structural Pattern) 중의 하나로 어떤 한 클래스의 인스턴스 동작을 변경하지 않고, 새로운 인스턴스에 동작을 다이나믹하게 추가하는 패턴이다. 데코레이터 패턴은 기능이 확장될 때 서브클래싱(subclassing)의 대안으로 사용할 수 있다. 그리고 데코레이터 패턴은 객체지향 5대 원칙(SOLID) 중 OCP(Open-Close Principle)에 해당한다. OCP는 확장에는 개방되고, 변경에는 폐쇄한다는 원칙인데, 이는 변경을 위한 비용은 가능한 줄이고, 확장을 위한 비용은 가능한 극대화해야 한다는 의미이다. 즉, 기존의 소프트웨어를 쉽게 확장해서 재사용할 수 있어야 한다는 것..

FastAPI 살펴보기

Python은 Django, Flask, Falcon 같은 프레임워크로 인해 lightweight web apps 을 신속히 개발함에 있어서 좋은 선택입니다. 수 년동안 Flask는 이를 위한 최고의 프레임워크였지만, 이에 FastAPI라는 새로운 도전자가 나타났습니다. FastAPI는 고성능(high performance), 낮은 진입장벽(easy to learn), 높은 생산성(fast to code), ready for production 라고 소개하고 있습니다. FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints. 주..

Python/FastAPI 2020.09.20