TIL#97 Flask 기초(3)

Dasom·2020년 10월 21일
0

Flask

목록 보기
3/7
post-thumbnail

from flask import g
어제에 이어 플라스크에서 많이 쓰이는 기본적인(?) 모듈이나 메소드에 대해 공부중이다. g객체는 각각의 request 내에서만 값이 유효한 변수이다. 요청이 동시에 들어와도 각각의 request 내에서만 유효하기 때문에 사용자 ID를 저장해도 문제가 없다고 한다. 데이터베이스 연결은 하나의 트랜잭션을 가지기 때문에 요청 하나가 하나의 연결을 사용함을 보장해야 한다. 그러기 위해 좋은 방법은 애플리케이션 컨텍스트를 이용하는 방법인데 request 변수는 현재의 요청에 관한 요청 객체이고, g 객체는 현재의 애플리케이션 컨텍스트와 연관된 범용 변수이다. 애플리케이션 컨텍스트는 요청이 들어오기 전에 만들어지고 요청이 끝날 때마다 제거된다고 한다.

from flask import current_app
current_app 은 현재 생성되어 있는 Flask 객체를 가리키는 것이다.

JSONEncoder
api 상에서 json 형태로 응답을 보내려면 json serialize(직렬화) 를 해야 한다. json에는 표현할 수 있는 데이터타입이 한정되어 있어서 app.json_encoder 를 통해 치환을 해주어야 한다.

class CustomJSONEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, set):
            return list(obj)

        return JSONEncoder.default(self, obj)

이런 식으로 데이터 타입을 바꿔줄 수도 있다. 위는 set type 을 jsonify() 에서 표현할 수 없기 때문에 표현 가능한 list type 으로 바꿔주는 코드이다.


Layered Architecture

백엔드 api 코드에 가장 널리 적용되는 패턴 중 하나가 레이어드 아키텍처라고한다. 코드를 논리적인 부분 혹은 역할에 따라 독립된 모듈로 나누어서 구성하는 패턴이다.

핵심요소는 단방향 의존성이다. 각각의 레이어는 오직 자기보다 하위의 레이어에만 의존한다. 또 다른 핵심요소는 separation of concerns이다. 각각의 레이어의 역할이 명확하다는 뜻이다.

레이어드 아키텍쳐로 코드를 구현하면 확장성, 가독성, 재사용가능성이 높아진다.

  • Presentation Layer
  • Business Layer
  • Persistence Layer

Presentation Layer - view

시스템을 사용하는 사용자 혹은 클라이언트 시스템과 직접적으로 연결되는 부분이다. API의 엔드포인트를 정의하고 전송된 HTTP 요청을 읽어들이는 로직을 구현한다. 그 이상의 역할은 담당하지 않는다.

Business Layer - service

실제 시스템이 구현해야 하는 로직들을 구현한다. 장고의 views.py 같은 역할이다. 예를 들면 글이 100자가 넘으면 안되는 조건의 로직 같은 경우를 비즈니스 레이어에서 구현한다.

Persistence Layer - model

데이터베이스와 관련된 로직을 구현한다. 비즈니스 레이어에서 필요한 데이터 생성, 수정, 읽기 등을 처리하여 실제로 데이터베이스에서 저장, 수정, 읽어 들이기를 한다.

profile
개발자꿈나무🌲

0개의 댓글