다음은 웹 개발자를 위한 대규모 서비스를 지탱하는 기술을 읽고 정리한 내용입니다 🙌


[강의19] 알고리즘과 평가

데이터 규모와 계산량 차이

  • 데이터가 클 수록 알고리즘이나 데이터 구조 선택이 속도에 영향을 미친다.
    • ex. 선형탐색 vs. 이분탐색

알고리즘이란?

  • 알고리즘은 값의 집합을 입력, 다른 값의 집합을 출력으로 하고 명확하게 정의된 계산절차이다.
  • 유한한 자원인 CPU나 메모리를 어떻게 활용하여 문제를 해결해야 할까?
  • 적절한 데이터구조를 사용하여 알고리즘을 구현해야지 효과가 있다.
  • 결국 측정이 중요하다 !!

알고리즘을 활용한 데이터 처리

  • 과도한 알고리즘이 항상 더 효율이 좋은 것은 아니다.
    • 때로는 간단한 알고리즘이 더 시간을 줄여줄 때가 있다.
      • 과도한 알고리즘의 경우 전처리에 많은 시간이 소요되기도 한다.
    • 항상 측정이 중요하다. 단순이 데이터가 ‘적다’, ‘많다’ 라는 것으로 판단하는 것은 좋지 않다.

데이터 압축과 속도 - 전체적인 처리량을 높이기 위한 사고방식

  • 압축이라는 것이 오히려 압축을 해제하고 처리하는 관점에서 더 무겁다고 생각할 수 있다.
  • 하지만 처리량 관점에서는 데이터를 압축하는 것이 더 빠르다.
    • 컴퓨터에 CPU와 I/O라는 두 종류의 부하가 있는데, 압축을 할 경우 CPU에는 더 무리가 갈 수 있으나, I/O측면에서 보면 대기를 줄일 수 있다.
  • I/O 처리를 하며 대기하는 동안은 CPU 가 처리할 수 없다.
  • CPU가 여유롭고 I/O가 바쁜 경우가 많으므로 I/O 부하를 줄이고 그 정도의 부담을 CPU에 넘기는 것이 전체적인 처리량을 높일수도 있다.

실전에서 사용하면서 느낀 점

  • 처음에 단순한 정규표현식을 사용해서 구현을 했던 것을 적절한 알고리즘과 자료구조를 활용하면서 개선시키면서 느낀것들이 있다.
  • 처음에 구현한 심플한 방식이 데이터가 적었을 때 더 적합했던 적도 있다.
    • 구현에 걸리는 비용이 적고, 유연성이 풍부하다.
    • 하지만 데이터가 커지면서 문제가 생긴다. 이때는 캐싱 등으로 우선 문제를 잠재우다가 결국에는 본질적인 해결책이 필요하다.
    • 즉, 현재 사용중인 알고리즘이 가지고 있는 문제점을 개선하여 문제를 개선할 필요가 있는 것이다.
  • 처음부터의 최적화가 중요한 것은 아니다. 이후에 데이터의 규모가 커졌을 때 본질적인 문제 해결방법을 미리 고민하는 것이 좋다.