Clean Architecture - 패러다임

다용도리모콘·2021년 7월 13일
0

개발 책 읽기

목록 보기
11/18

구조적 프로그래밍(Structured Programming)

구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다.

테스트는 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 수는 없다.

구조적 프로그래밍은 프로그램을 증명 가능한 세부 기능 집합으로 재귀적으로 분해할 것을 강요한다. 그러고 나서 테스트를 통해 증명 가능한 세부 기능들이 거짓인지를 증명하려고 시도한다.

소프트웨어 아키텍트는 모듈, 컴포넌트, 서비스가 쉽게 반증 가능하도록(테스트하기 쉽도록) 만들기 위해 분주히 노력해야 한다.

객체 지향 프로그래밍(Object-Oriented Programming)

객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다.

객제지향 언어는 다형성을 좀 더 안전하고 더욱 편리하게 사용할 수 있게 해준다.

의존성 역전(Dependency Inversion)을 사용하면 소프트웨어 아키텍트는 시스템의 소스 코드 의존성 전부에 대해 방향을 결정할 수 있는 절대적인 권한을 갖는다. 이를 통해 업무 규칙(Business Rules)을 UI, Database와는 독립적으로 개발, 배포할 수 있다.

함수형 프로그래밍(Functional Programming)

함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.

함수형 언어가 가지는 변수의 불변성은 가변 변수로 인해 발생하는 경합 조건(race condition), 교착 상태 조건(deadlock condition), 동시 업데이트(concurrent update) 문제를 방지한다.

자원이 제한된 조건인 경우 시스템 내부의 서비스를 가변 컴포넌트와 불변 컴포넌트로 분리해야 한다. 그리고 가변 변수들을 보호하는 적절한 수단을 동원해 뒷바침해야 한다.

적절한 수단...?

저장공간과 처리 능력의 한계가 커질수록 가변 상태의 필요성은 더 적어진다. 변경된 상태를 저장하는 대신 변경하는 트랜잭션 자체를 저장하는 이벤트 소싱(event sourcing)이 그러하다. 결과적으로 애플리케이션은 CRUD가 아니라 CR만 수행하게 되므로 동시 업데이트 문제 또한 일어나지 않는다. ex) 버전 관리 시스템

(이벤트 소싱)NDC 쿠키런킹덤 세션에서 들었던 내용이다. https://www.youtube.com/watch?v=FUEZibcZEkg

결론

패러다임은 우리에게서 무언가를 뺏어 우리가 코드를 작성하는 방식의 형태를 한정시킨다.

소프트웨어는 순차, 분기, 반복, 참조로 구성된다. 그 이상도 이하도 아니다.

결국 만들 수 있냐를 넘어 얼마나 잘 만들 수 있냐가 중요한 것 같다.

0개의 댓글