객체의 어느 한부분의 품질을 높이거나 낮추는게, 다른 부분의 품질을 높이거나 낮추는데 영향을 끼치는 상황을 이야기한다. 일반적으로 한쪽의 품질을 높이면, 다른쪽의 품질은 떨어지는 방향으로 흐른다.
소프트웨어 개발을 예로들어보자. 일반적으로 개발시간을 늘리면 제품의 완성도는 높아지겠지만, 개발시간이 늘어날 수록 비용이 증가하게 된다. 그러므로 시간과 비용을 비교해 가면서 최적의 타협점을 찾아내어야 한다. 이것을 트레이드오프라고 한다.
컴퓨터 과학에서는 space-time트레이드오프가 중요하게 취급된다. 메모리(:12)의 사용을 크게 하면 크게할 수록 프로그램이 빨리 작동하게 할 수 있겠지만 비용역시 크게 증가할 것이다. 반대로 메모리의 사용을 줄이고, 하드디스크의 사용을 늘리면 비용은 줄어들겠지만 프로그램은 점점더 느리게 작동할 것이다. 결국 프로그래머는 비용과 시간을 고려해서 적당한 타협점을 찾아내야 한다.
데이터전송시 데이터를 높은 수준에서 압축하면 전송시간과 비용을 절약할 수 있을 것이다. 그러나 압축과 해제에 더 많은 CPU(:12) 자원을 소비하게 될 것이다.
인라인 코드를 사용해서 컴파일(:12)을 할경우, 더 빠른 프로그램을 만들 수 있다. 그러나 코드의 크기가 커지는 관계로 더 많은 메모리 공간을 소비하게 될 것이다.
두개의 단어를 포함한 문서중에서 더 높은 유사도를 가진 문서를 찾고자 할경우, 문서에 포함된 두 단어의 거리를 구할 수 있을 것이다. 문서상의 정확한 단어의 위치를 가지고 판단하면, 좀 더 정확히 유사한 문서를 찾아낼 수 있겠지만 더 많은 시간이 소비될 것이다. 비트필드를 사용하면 유사한 문서를 찾아내는 능력은 떨어지겠지만 짧은 시간에 더 많은 문서의 유사도를 계산할 수 있을 것이다.
사용자 입장에서는 하나의 시스템으로 보이지만, 여러 개의 독립적인 컴퓨터들의 집합이다.
CAP 이론: 분산시스템은 3개 속성을 모두 가지는 것이 불가능하다는 특징을 갖는다.
Consistency (일관성)
데이터는 항상 일관성 있는 상태를 유지해야 한다.
데이터의 조작 이후에도 무결성을 해치지 않아야 한다.
모든 노드가 같은 시간에 같은 데이터를 보여줘야 한다.
Availability (가용성)
특정 노드에 장애가 발생하더라도 서비스는 가능해야 한다.
데이터 저장소에 대한 모든 동작(read, write 등)은 항상 성공적으로 리턴되어야 한다.
Partitions Tolerance (분리 내구성)
노드 간에 통신 문제가 발생하여 메시지를 주고받지 못하는 상황이더라도 서비스는 가능해야 한다.
Availability의 경우는 특정 노드에 "장애"가 발생한 상황에 대한 것이고, Partitions Tolerance의 경우는 노드는 정상이지만 네트워크에 문제가 발생하여 연결이 끊어지는 상황이라는 점에서 차이점이 있다.
분산컴퓨팅은 분산시스템을 연구하는 컴퓨터과학의 한 분야이다.
CPU들을 네트워크로 상호 연결하여, 전체적인 일의 부분 부분을 나누어 더 빨리 처리하는 방식이다.
동시에 많은 계산을 하는 연산의 한 방법이다.
여러 일을 동시에 더 빨리 처리하는 방식이다.
예: 비트 수준, 명령어 수준, 데이터, 작업 병렬 처리 등
분산컴퓨팅과 병렬컴퓨팅의 차이점
이들 중 분명한 차이가 존재하지 않는다고 한다.
공통점: 일을 동시에 처리한다.
차이점: 분산처리는 "동시에 여럿이서 하나의 일을", 병렬처리는 "동시에 여러 일"을 처리한다는 점에서 차이가 있다
https://www.cloudflare.com/ko-kr/learning/bots/how-captchas-work/