더북(TheBook)

1.5.2 자원 소모

모든 것을 일회용품으로 해결하는 현대 사회에서 학습 시스템에 소비자 중심의 소비 전략을 적용하는 것은 매력적입니다. 장애물에 부딪히면 돈으로 해결하는 것이죠. 데이터 스토리지는 매우 저렴합니다. GPU가 달린 컴퓨팅 하드웨어도 클릭 한 번으로 대여할 수 있지요. 이러한 방식은 다음 질문으로 이어집니다. “자원이 모자랄 때 하드웨어를 더 투입하기만 하면 문제를 해결할 수 있을까요?”

답은 “그렇다.”일 수도 있지만, 최소한 정량적 데이터를 이용해서 결정을 내려 봅시다. 계산 시스템의 복잡도가 한 단계 증가할 때마다 이러한 시스템을 사용하는 특권에 대한 비용을 지불합니다. 즉, 소프트웨어 지원과 전문 지식을 갖춘 인적 자원이 더 필요합니다. 가져다 쓸 수 있는 복잡한 소프트웨어 라이브러리도 필요합니다. 이렇게 되면 빠르게 프로토타이핑할 수 있는 능력을 잃게 됩니다. 이처럼 지불하는 각 항목에 대한 비용 지출을 정당화할 필요가 있습니다. 또 보통 시스템에서 병목은 코드의 작은 부분에서 발생하는 경우가 많습니다. 더 빨리 움직이려고 전반적인 시스템의 단순성을 유지하고 조금 더 복잡한 처리에 의존하는 영역의 규모를 줄이도록 노력해야 합니다.

우리는 두 가지 주요 자원인 시간과 메모리를 측정하려고 합니다. 계산에 시간이 얼마나 소요되나요? 필요한 최대 메모리 크기는 얼마인가요? 보통 시간과 메모리 사이에서 상충 관계가 발생합니다. 예를 들어 흔하게 하는 질문은 그 답을 미리 구해 놓으면 빠르게 전달할 수 있습니다. 그러나 이 방식의 단점은 답을 어딘가에 저장해 두어야 한다는 것입니다. 연산에 필요한 시간은 줄였지만, 필요한 메모리 사용량은 늘린 것이죠.

인치를 미터로 바꿀 때처럼 참조 테이블을 사용한 적 있다면 이 상충 관계를 경험해 본 것입니다. 계산기를 꺼내어 공식에 값을 입력하고 답을 얻는 것도 가능합니다. 그 대신 테이블이 적힌 페이지를 몇 장 넘겨서 원하는 값을 찾을 수도 있지요. 미터 변환 공식은 상당히 간단하기 때문에 참조 테이블을 사용하는 것이 더 효율적인 방법은 아닙니다. 그러나 공식이 매우 복잡한 문제라면, 테이블을 사용하는 것이 시간을 훨씬 아낄 수 있지요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.