지금까지의 실습(10장 전)은 app.py라는 하나의 파일에 모든 코드가 들어있다.
이렇게 개발 할 때는 코딩을 조금 해본 분들이라면 아실테지만 개발 과정이 간단하고, 한 파일에서 확인해서 복잡성을 줄인다는 장점이 있다.
하지만 실제 적용 시스템에서는 하나의 파일에 모든 코드를 넣는 것은 굉장히 좋지 않을 것이다. (10000줄이 넘는 코드를 한 파일에서 컴파일 한다고 생각하면...)
실제로는 논리적으로 혹은 기능적으로 영역을 구분하여 코드를 관리하는 것이 좋다.
이렇게 코드의 구조를 더 체계적으로 그리고 효율적으로 구현하는 것을 코드의 아키텍처(architecture)라고 한다.
아키텍처 구상할 때 필요한 요소들:
책에서는 레이어드 패턴 단 한개의 패턴만 소개해준다. 따른 패턴들을 따로 공부하는 것도 좋은 경험이 될 것이다.
레이어드 패턴은 크게 'presentation layer', 'business layer', 'persistence layer' 순으로 구현해서 레이어들을 층층이 쌓는 시스템 구조이다.
해당 시스템을 사용하는 사용자 혹은 클라이언트 시스템과 직접적으로 연결되는 부분
웹사이트에서는 UI, 백엔드 API에서는 엔드포인트 부분에 해당한다.
이 레이어에서는 API의 엔드포인트들을 정의하고 전송된 HTTP 요청들을 읽어 들이는 로직을 구현한다.
비지니스 로직이 직접적으로 구현되는 부분
실제 시스템이 구현해야 하는 로직들을 이 레이어에서 구현하게 된다. 앞에 했던 실습을 예를 들면 tweet 엔드포인트에서 300자가 넘는지 확인하여 거부 혹은 승인하는 로직 등이 비즈니스 로직이다.
데이터베이스와 관련된 로직을 구현하는 부분
business layer에서 필요한 데이터 생성, 수정, 읽기 등을 처리하여 실제로 데이터베이스에서 데이터를 저장, 수정, 읽어 들이기를 하는 역할을 한다.
레이어드 아키텍처의 핵심 요소
이 아키텍처의 핵심 요소는 바로 단방향 의존성이다. 각각 레이어는 오직 자기보다 하위에 있는 레이어에만 의존한다. 의존하지 않는 레이어에서는 독립적으로 작동해야 한다.
또 다른 핵심 요소는 'separation of concerns'이다. 각 레이어의 역할이 명확해야 하다는 요소이다.
API 아키텍처에 대해 알아보고 (제 깃헙 파일을 보시면) 실습 내용들을 아키텍처 패턴에 맞춰 세분화하고 구조를 바꿨다.
아키텍처란 것은 정확하게 '~~이다.'가 아니고 개념이기 때문에 언제든 확장되고, 새롭고 효율적인 아키텍처가 개발될 수 있다고 생각한다. 그렇지만 과거와 현재의 아키텍처를 이해하고 구현할 줄 알아야 새로운 아키택처 패턴을 창조할 통찰력 또한 생긴다고 본다.
이런 의미에서 이미 기존의 여러 아키텍처 패턴들을 알아보고 공부하는 것 또한 중요한 과제라고 생각된다.