깔끔한 파이썬 탄탄한 백엔드 - 10장

Jajuna_99·2022년 6월 13일
0

10장 API 아키텍처

  • API 아키텍처
  • 레이어드 패턴(Layered Pattern)
  • API 아키텍처

    지금까지의 실습(10장 전)은 app.py라는 하나의 파일에 모든 코드가 들어있다.

    이렇게 개발 할 때는 코딩을 조금 해본 분들이라면 아실테지만 개발 과정이 간단하고, 한 파일에서 확인해서 복잡성을 줄인다는 장점이 있다.

    하지만 실제 적용 시스템에서는 하나의 파일에 모든 코드를 넣는 것은 굉장히 좋지 않을 것이다. (10000줄이 넘는 코드를 한 파일에서 컴파일 한다고 생각하면...)

    실제로는 논리적으로 혹은 기능적으로 영역을 구분하여 코드를 관리하는 것이 좋다.
    이렇게 코드의 구조를 더 체계적으로 그리고 효율적으로 구현하는 것을 코드의 아키텍처(architecture)라고 한다.

    아키텍처 구상할 때 필요한 요소들:

    • 확장성(extensibility)
      확정성을 고려하지 않고 구현한 코드들은 시스템의 규모가 커질수록 문제가 많이 생길 확률이 높아지기 쉽다.
    • 재사용성(reusability)
      재사용성이 높아야 코드의 양도 적어지고 개발의 속도도 높아지며, 코드 또한 더 안전하고 견고한 코드를 구현하기 쉽다.
    • 유지보수 가능성(maintainability)
      유지 보수가 쉬운 코드를 구현하기 위해서는 구조적으로 로직이 잘 정리가 되고 나뉘어 있어야 한다. 함수나 클래스 등을 사용하여 코드를 추상화(abstraction)하고 서로 독립적인 로직을 분리하여 필요한 곳에 적절하게 사용되도록 하는 코드를 구현하여 유지보수를 더 쉽게 할 수 있도록 하는 것이 중요하다.
    • 가독성(readability)
      코드의 가독성은 너무 중요하다. 특히 협업을 한다면 훨씬 신경써야 할 요소일 것이다.
    • 테스트 가능성(testability)
      추상화가 잘 구현되어 있고 담당하는 역할이 잘 나뉘어 있는 구조를 만들어 테스트하기 쉬운 구조를 만든것이 중요하다.

    레이어드 패턴(Layered Pattern)

    책에서는 레이어드 패턴 단 한개의 패턴만 소개해준다. 따른 패턴들을 따로 공부하는 것도 좋은 경험이 될 것이다.

    레이어드 패턴은 크게 'presentation layer', 'business layer', 'persistence layer' 순으로 구현해서 레이어들을 층층이 쌓는 시스템 구조이다.

    • presentation layer

    해당 시스템을 사용하는 사용자 혹은 클라이언트 시스템과 직접적으로 연결되는 부분

    웹사이트에서는 UI, 백엔드 API에서는 엔드포인트 부분에 해당한다.

    이 레이어에서는 API의 엔드포인트들을 정의하고 전송된 HTTP 요청들을 읽어 들이는 로직을 구현한다.

    • presentation layer

    비지니스 로직이 직접적으로 구현되는 부분

    실제 시스템이 구현해야 하는 로직들을 이 레이어에서 구현하게 된다. 앞에 했던 실습을 예를 들면 tweet 엔드포인트에서 300자가 넘는지 확인하여 거부 혹은 승인하는 로직 등이 비즈니스 로직이다.

    • presentation layer

    데이터베이스와 관련된 로직을 구현하는 부분

    business layer에서 필요한 데이터 생성, 수정, 읽기 등을 처리하여 실제로 데이터베이스에서 데이터를 저장, 수정, 읽어 들이기를 하는 역할을 한다.

    레이어드 아키텍처의 핵심 요소
    이 아키텍처의 핵심 요소는 바로 단방향 의존성이다. 각각 레이어는 오직 자기보다 하위에 있는 레이어에만 의존한다. 의존하지 않는 레이어에서는 독립적으로 작동해야 한다.

    또 다른 핵심 요소는 'separation of concerns'이다. 각 레이어의 역할이 명확해야 하다는 요소이다.

    10장 요약

    API 아키텍처에 대해 알아보고 (제 깃헙 파일을 보시면) 실습 내용들을 아키텍처 패턴에 맞춰 세분화하고 구조를 바꿨다.

    아키텍처란 것은 정확하게 '~~이다.'가 아니고 개념이기 때문에 언제든 확장되고, 새롭고 효율적인 아키텍처가 개발될 수 있다고 생각한다. 그렇지만 과거와 현재의 아키텍처를 이해하고 구현할 줄 알아야 새로운 아키택처 패턴을 창조할 통찰력 또한 생긴다고 본다.

    이런 의미에서 이미 기존의 여러 아키텍처 패턴들을 알아보고 공부하는 것 또한 중요한 과제라고 생각된다.

    profile
    Learning bunch, mostly computer and language

    0개의 댓글