TIL — API 아키텍처

이성보·2020년 12월 27일
0
post-thumbnail

참고 자료
송은우. 『깔끔한 파이썬 탄탄한 백엔드』. 비제이퍼블릭, 2019.

코드 구조의 중요성

코드의 구조를 체계적, 효육적으로 구현하는 것을 코드의 아키텍처(Architecture)라고 한다.

어떠한 코드 아키텍처가 체계적이고 효율적인 아키텍처일까?
다음 요소들을 염두에 두어야한다.

  • 확장성
  • 재사용성
  • 보수 유지 가능성
  • 가독성
  • 테스트 가능성

확장성

처음에는 간단한 시스템이란 서비스가 발전하고 해당 기업이 성장해 갈수록 시스템도 커져 갈 수밖에 없다.
그러므로 확장성이 높은 구조로 코드를 구현하는 것이 중요하다.

재사용성

재사용성이 높아야 코드의 양도 적어지고 개발의 속도도 높아지며, 코드 또한 더 안전하고 견고한 코드를 구현하기 쉽다. 여기서 말하는 재사용성은 코드 레벨의 재사용성, 즉 함수나 클래스를 재사용하는 수준의 재사용성보다는 구조적인 재사용성을 이야기한다.

보수 유지 가능성

보수 유지가 쉬운 코드를 구현하기 위해서는 구조적으로 로직이 잘 정리가 되고 나뉘어 있어야 한다.
그러므로 함수나 클래스 등을 사용하여 코드를 추상화(abstraction)하고 서로 독립적인 로직을 분리하여 필요한 곳에 적절하게 사용되도록 하는 코드를 구현하여 보수 유지를 더 쉽게 할 수 있도록 하는 것이다. 코드의 구조를 구현할 때도 이러한 추상화와 독립적으로 분리하는 것이 중요하다.

가독성

어려운 로직을 쉽게 간단하게 구현하는 것이 좋은 개발자다.
마찬가지로, 코드의 구조 또한 이해하기 쉽게 구현해야 한다. 복잡하면 이해하기가 힘들기 때문에 보수와 유지가 힘들 수밖에 없고 오류가 많이 생길 수밖에 없다.

테스트 가능성

테스트를 잘 구현하기 위해서는 unit test를 하기 쉬운 코드로 구현해야 한다. unit test를 하기 쉬운 코드는 추상화(abstraction)가 잘되어 있고, 한 가지 역할만 하는 코드다. 코드의 구조도 마찬가지다. 추상화가 잘 구현되어 있고 담당하는 역할이 잘 나뉘어 있는 구조가 테스트하기 쉬운 구조다.

레이어드 패턴

  • presentation layer
  • business layer
  • persistence layer

presentation layer

해당 시스템을 사용하는 사용자 혹은 클라이언트 시스템과 직접적으로 연결되는 부분이다. 웹사이트에서는 UI 부분에 해당하고 백엔드 API에서는 엔드포인트 부분에 해당한다. 그러므로 presentation layer에서 API의 엔드포인트들을 정의하고 전송된 HTTP 요청(request)들을 읽어 들이는 로직을 구현한다. 실제 시스템이 구현하는 비즈니스 로직은 다음 레이어(layer)로 넘기게 된다.

business layer

비즈니스 로직을 구현하는 부분이다. 실제 시스템이 구현해야 하는 로직들을 이 레이어에서 구현하게 된다.

persistence layer

데이터베이스와 관련된 로직을 구현하는 부분이다. Business layer에서 필요한 데이터 생성, 수정, 읽기 등을 처리하여 실제로 데이터베이스에서 데이터를 저장, 수정, 읽어 들이기를 하는 역할을 한다.

레이어드 아키텍처의 핵심 요소

단방향 의존성

각각의 레이어는 오직 자기보다 하위에 있는 레이어에만 의존한다.
그러므로 presentation layer는 business layer에게 의존하고, business layer는 persistence layer에게만 의존하게 된다.
그 뜻은 반대로 business layer는 presentation layer에 대해 완전히 독립적이며, persistence layer는 business layer나 presentation layer에 대해 완전히 독립적이다.

"separation of concerns"

각 레이어의 역할이 명확하다는 뜻이다. Presentation layer에는 비즈니스 로직이 전혀 구현되어 있지 않다. 비즈니스 로직을 처리하기 위해서 presentation은 business layer의 코드를 호출해서 사용해야 한다. 마찬가지로, business layer에는 데이터베이스 관련 로직이 전혀 구현되어 있지 않다. 데이터베이스 처리를 하기 위해서는 persistence layer의 코드를 호출해서 사용해야 한다.

0개의 댓글