diff --git "a/\354\261\225\355\204\260_2/\354\240\225\353\214\200\354\234\244.md" "b/\354\261\225\355\204\260_2/\354\240\225\353\214\200\354\234\244.md" new file mode 100644 index 0000000..d1ffb79 --- /dev/null +++ "b/\354\261\225\355\204\260_2/\354\240\225\353\214\200\354\234\244.md" @@ -0,0 +1,41 @@ +> 계층형 설계를 통한 소프트웨어 구조 +> 타임라인을 통한 문제 해결 + +- 액션: 호출 횟수와 시점에 의존 +- 계산: 어떤것을 결정, 계획 및 부수 효과가 없는것 +- 데이터: 결제정보 재고, 피자 조리법 + +### 변경 가능성에 따라 코드 나누기 (계층형 설계) + +- 비즈니스 + - 이번 주 특별 조리법, 재료 구입 +- 도메인 + - 조리법, 재료 목록 +- 기술 + - 자바스크립트 + +비즈니스 → 도메인 → 기술 순으로 기술이 가장 밑바닥에 존재하는 형태 + +아래일 수록 잘 안바뀌며, 위일 수록 의존성이 없음. + +그리고 각각의 레이어가 존재(주방, 창고 등) + +계층형 설계는 의존성에 대한 관리를할 수 있음으로 유지 보수를 더 잘할 수 있게됨. + +### 타임라인 다이어그램 + +시간순으로 액션을 나열한 것. (일급 함수를 통해 작성) + +나열을 통해 병렬 처리할 수 있는 것들을 분리 → 분산 시스템으로 개선 가능 + +- 병렬 처리에 대한 문제를 파악하고 개선할 수 있지만 +- 서로 다른 타임라인의 액션간의 실행 순서는 보장할 수 없음 + +### 타임라인 커팅 + +서로 다른 타임라인의 액션간의 실행 순서는 보장을 위함. + +`고차 동작`으로 구현됨. 각각의 독립적인 작업이 완료되면 다른 작업이 끝나기를 기다린 후 나머지 작업을 진행. ( `Promise.all` `Promise.allSettled` ) + +- 커팅으로 잘려진 작은 단위로 시간 관계없는 타임라인 파악가능 +- 타임라인 커팅으로 서로 다른 작업의 시간적 관계를 파악가능