[Clean Architecture] 6장 함수형 프로그래밍

soohee·2022년 3월 19일
0

클린아키텍처

목록 보기
6/15

정수를 제곱하기

클로저를 이용한 제곱함수를 설명한다.

여기서 특징은, 자바와 다르게 , 가변변수를 허용하지 않는다는 점이다.

불변성과 아키텍처

아키텍처는 변수의 가변성을 염려한다.

그 이유는 경합 조건, 교착상태 조건, 동시 업데이트 문제가 모두 가변 변수로 인해 발생하기 때문이다.

  • 경합조건 / 교착상태 조건 / 동시 업데이트 문제
    • 경합조건
      • 다수의 쓰레드가 이 영역을 실행할 때, 경합 조건이 발생한다.
      • 더 형식적으로 말하자면, 두 쓰레드가 같은 자원으로 접근하기 위해 경쟁하고, 이 자원으로 접근되는 순서가 중요한 의미를 지니는 이러한 상황을 경합 조건
    • 교착 상태 조건
      • 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태로, '교착 상태'라고도 하며, 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.
    • 동시 업데이트 문제
      • 동시 업데이트 문제는 여러 데이터베이스 세션이 동시에 동일한 데이터를 업데이트하도록 허용될 때 발생할 수 있는 문제이다.

가변성의 분리

불변성을 실현시키기 위해서는 타협이 필요하다. 가변 컴포넌트와 불변 컴포넌트를 분리하는 작업이다.

불변 컴포넌트는 순수하게 함수형 방식으로만 작업이 되며, 어떠한 가변 변수도 사용되지 않는다.

따라서 변수의 상태를 변경할 수 있는 다른 컴포넌트와 통신한다.

상태변경은 컴포넌트들을 갖가지 동시성 문제에 맞닥뜨리게 하는 문제이기 때문에, 트랜잭션 메모리를 쓴다.

현명한 아키텍트라면, 불변 컴포넌트에는 최대한 많은, 가변 컴포넌트에는 최대한 적은 코드가 들어있게 해야한다.

이벤트 소싱

저장 공간과 처리능력의 한계가 사라지면서, 가변 변수가 많이 필요없게 되었다.

가변 변수를 설정하지 않고, 트랜잭션을 저장해 놓았다가 더해주며 처리하면 되기 때문이다.

하지만, 트랜잭션 수는 시간에 따라 무한히 증가할 수 있기 때문에, 생명주기를 설정함으로써, 저장공간을 비워줄 수 있다.

이벤트 소싱에 깔려있는 생각이 이러한 생각들이다.

결과적으로 어플리케이션은 CRUD를 하는 것이 아닌, CR만 수행하게 되는 것이다.

결론

도구는 달라졌고, 하드웨어도 변했지만, 순차, 분기, 반복, 참조로 구성된 소프트웨어의 핵심은 여전히 그대로다.

profile
🐻‍❄️

0개의 댓글