관리 메뉴

흰둥씨의 개발장

[함수형 코딩#2] 현실에서의 함수형 사고(예시로 살펴보기) 본문

함수형 프로그래밍/쏙쏙 들어오는 함수형 코딩

[함수형 코딩#2] 현실에서의 함수형 사고(예시로 살펴보기)

돈워리비해삐 2023. 6. 25. 00:32

함수형 사고 ?
ㄴ1) 액션, 계산, 데이터 => 계층형 설계
ㄴ2) 일급 추상 => 타임라인 다이어그램(분산시스템을 이해하기 위해 사용), 일급함수(함수를 인자로 받음)

피자집 예시 1)번 적용예시
액션, 계산, 데이터를 구분하고, 계층형 설계하기
계층형 설계는 유지 보수를 잘하기 위해 사용(각 계층은 코드의 변경 가능성에 따라 나눔)

액션 - 반죽 펴기
- 피자 배달
- 재료 주문
  자주바뀜
|
|
|
|
자주안바뀜
<계층화 설계>


피자 조리법   --------------- 이번주 사야 할 것



조리법 순서 ----------------- 재료 목록



JS 객체 / 배열  --------------JS 객체 / 숫자
계산 - 조리법에 나온것을 두배로 만들기 
- 쇼핑목록 결정
데이터 - 고객 주문
- 영수증
- 조리법

 

계층형 설계 ? 
ㄴ각 계층은 그 아래있는 계층을 기반으로 만들어짐 (가장 위에 있는 코드는 의존성이 거의 없음)
ㄴ일반적으로 비즈니스 규칙, 도메인 규칙, 기술스택 계층으로 나눔 
ㄴ계층형 설계로 만든 코드는 테스트, 재사용, 유지보수 쉬움 

 

피자집 2)번 예시 타임라인 다이어그램 (시간의 순서에 따라 흐름보기 편함)
타임라인 다이어그램은 시간에 따라 변하는 액션을 시각화 하는 것 
ㄴ1개의 로봇이 혼자 차례대로 일하는 시스템
ㄴ피자를 만드는데에 오류는 없지만 빠른?것같지는 않음 

a로봇 투입








주문접수
반죽만들기
반죽 펴기
소스 만들기
소스 뿌리기
치즈 갈기 
치즈 뿌리기
오븐에 넣기 
10분기다리기
서빙 

 


피자집 2)번 예시 분산시스템으로 (여러대의 로봇이 일하는 것 같은 시스템)
ㄴ로봇3대가 각자의 타임라인을 가지고 동시에 일하는 시스템
ㄴ각 타임라인에서 처리되는 일 순서가 섞여서 누가 먼저 끝나는지 알수없고, 엉뚱한 피자가 만들어질 가능성이 있음 
ㄴ서로 타임라인을 맞추지 않으면 분산시스템은 예측 불가능한 순서로 실행됨

주문접수 
a로봇 b로봇 c로봇
반죽 만들기 치즈 갈기 소스 만들기 
? ? 반죽 펴기
소스 뿌리기
치즈 뿌리기
오븐에 넣기 
10분 기다리기 
서빙 

 

결론 
1. 분산시스템은 서로 실행순서를 맞춰야함 
2. 액션실행되는 시간은 중요하지 않음 (일반적으로 오래걸리는 작업이 항상 그렇지 않기 때문에 ....)
3. 드물지만 타이밍이 어긋나는 경우가 실제로 일어남(타임라인은 올바른 결과를 보장해야함)
4. 타임라인 다이어그램으로 시스템 문제 찾기 수월함

 

분산시스템의 문제점 해결하기 
타임라인 커팅 : 3대의 로봇이 움직일 때 서로를 기다릴수 있게 하기 (=여러 타임라인 동시 진행시 서로 순서 맞추는 방법)
타임라인 커팅은 액션간의 협력을 위해 사용 
ㄴ타임라인 커팅은 high-order operation(고차동작)으로 구현함
ㄴ3대의 로봇은 서로의 작업 끝나기를 기다렸다가 모두 완료하면 로봇한대가 cut아래 동작을 수행함 

주문접수 
a로봇 b로봇 c로봇
반죽 만들기 치즈 갈기 소스 만들기 
CUT : 3개의 로봇이 위 작업을 모두 끝낼 때까지
아래 작업으로 진행하지 말자! 
반죽펴기
소스 뿌리기
치즈 뿌리기
오븐에 넣기
10분 기다리기
서빙