그냥 생각나서 좀 적어봅니다.
사람들은 디지털 신호를 생각할 때 이런 걸 생각합니다:
하지만 모든 전기 신호는 (원자나 그 밑 단위까지 따지면 좀 다를 수도 있습니다만 상식적인 선에서는) 결국 아날로그입니다. 순식간에 0에서 1로 바뀌거나 1에서 0으로 바뀔 수는 없습니다. (캐패시턴스를 생각하셔도 되고 rect 신호의 푸리에 변환값을 생각하셔도 됩니다.) 그래도 CPU 내부에서는 신호가 그나마 저런 형태로 나오는 편이지만 (물론 그나마 저렇다는 거지 실제로 저렇지 않습니다), 밖으로 나가면 상황은 더 나빠집니다.
예를 들어 두 컴퓨터간에 자료를 전송하는 경우 노이즈도 끼고 두 컴퓨터의 클럭 오차 등에 의해 신호가 원하는 타이밍에 들어온다는 보장도 없습니다. 거기에 사람들은 컴퓨터가 빠르게 자료를 처리하고 보내길 원하지 천천히 동작하기 원하지 않습니다. 그래서 신호 하나가 수 비트치 정보를 담고 있는 일도 흔합니다. 예를 들어 WiFi 송수신기가 256QAM을 지원한다는 것은 한 신호에 8비트치 정보가 들어있다는 뜻입니다 (정확히 말해서는 그런 신호가 여러 개 동시에 송신됩니다.) 당연히 저렇게 각지고 단순한 신호가 나오지 않습니다. 유선 환경도 아닌 지저분하고 제약적인 무선 채널에서 그런 신호를 보낸다는 것입니다. 유선환경도 별 다를 건 없습니다. 신호 품질은 무선보다 보통 더 좋지만 그렇다면 그만큼 더 신호를 한번에 더 많이, 복잡하게 보낼 뿐입니다.
밑의 이미지는 흔히 무선통신에 쓰는 PSK신호의 시뮬레이션 결과입니다. 실제로는 저기에 노이즈나 각종 오차가 더 많이 낍니다. (밑의 이미지도 impairment model이 약간 적용되기는 했습니다.)
...결국 디지털 컴퓨터라고 자료를 전송하는 데 오류가 없을 수는 없습니다. 오히려 데이터를 전송할 때 오류는 발생해도 됩니다. 중요한 건 오류가 발생하느냐 마느냐가 아니라, 오류가 있을 때 복구가 가능하냐 불가능하냐입니다. 디지털 통신의 장점은 통신중 오류가 발생하지 않는 게 아니라 통신중 발생한 오류를 발견, 복구할 수 있다는 점입니다.
가장 단순한 예는 패리티 비트입니다. (2진수 기준으로) 보내려는 데이터에 0이나 1을 덧붙여서 1의 갯수를 짝수 혹은 홀수로 맞추는 기법입니다. 이러면 송수신중 비트 하나가 뒤집어진 경우 1의 갯수가 바뀌므로 오류를 검출해낼 수 있습니다. 홀수개 오류를 검출할 수 있는 기법으로, 오류를 검출해주기만 하고 오류를 수정해주지는 않으나 신호를 다시 전송할 기회가 있다면 신호를 한번 다시 전송하는 걸로 오류를 고칠 수 있습니다. (물론 실전에서는 더 정확한 검출법을 사용합니다.)
그런데 그냥 검출만으론 충분하지 않은 경우도 있습니다. 예를 들어, 한번에 신호 전송을 성공해야 하는 경우라던가 아니면 오류가 너무 잦은 경우. 그런 경우 FEC(전방 오류 정정) 코드를 씁니다. 이런 코드는 단순히 오류를 검출하기만 하는 코드에 비해 더 길이가 길지만 어느정도의 오류는 재전송 없이 그 자리에서 발견, 수정하는 게 가능합니다. 대표적으로 해밍코드가 있습니다. ( https://ko.wikipedia.org/wiki/%ED%95%B4%EB%B0%8D_%EB%B6%80%ED%98%B8 )
통신 채널을 적절히 파악한 상태에서, 이런 오류 정정 기법들을 적절히 활용해 통신을 하면 이론상 오류를 원하는 수준까지 다 잡아낼 수 있습니다. 물론 진정한 의미의 (오류 수정 기법 적용 후의 오류율로) 0% 오류율은 달성할 수 없지만, 평생 걱정하지 않아도 될 수준까지 이를 낮추는 것은 충분히 가능합니다. (여기서 "진정한 의미에서 0% 오류율은 달성할 수 없다" 는 것은 "눈을 감았다 떴을 때 내가 옆 방으로 순간이동해있을 가능성이 물리학적으로 0%는 아니다"랑 마찬가지의 맥락입니다. 이론상으로 있을 수 없는 일은 아니지만 실제로 겪을만한 건 아니라는 거죠..)
물론 오류 검출/정정 기법들을 적용하면 그만큼 실제로 보내려는 자료 말고도 추가적인 자료를 전송해야 해서 전송 속도는 느려집니다. 하지만 (제대로 구성된 디지털 시스템은) 절대 이로 인해 통신 속도가 0이 되지는 않습니다. 이것이 바로 디지털 통신의 강점입니다. 이론상 최대 채널 용량
C = (대역폭) * log2 (1 + (신호 전력) / (잡음 전력)) 비트/초
의 속도까지는 아무 깨짐 없는 완벽한 통신이 가능하며, 실제로는 이것보다는 좀 느리지만 그래도 정확히 자료를 전송하는 기법들이 사용되고 있습니다. 이에 대한 자세한 증명은 정보이론 관련 서적에서 찾아보실 수 있습니다.
반면, 아날로그 통신은 이러한 보정기법들을 사용할 수 없어 통신시 오류를 피할 수 없습니다. 그래서 아날로그 신호는 비교적 쉽게 열화됩니다. (물론 아날로그도 잘 하면 오류를 최소화하는 것은 가능하기는 합니다. 그저 오류를 어떻게 발견해서 고쳐볼 방법이 없고 처음부터 열화가 적은 좋은 채널/매체에 의존하는 수 밖에 없다는 것일 뿐이지요..)
요컨대, 디지털 파일을 여러번 복사한다고 일반적으로 파일이 열화될 일은 없습니다. (*물론 매체 자체가 고장나거나 해서 파일이 깨지는 것은 다른 이야기..) 음악 파일을 복사한다고 뭐가 열화된다거나 하는 것은 말도 안 되는 이야기입니다. 하지만 이것은 디지털에서는 사실상 완벽한 오류 보정이 가능하기 때문이지 애초에 아무런 오류도 발생하지 않기 때문은 아닙니다. 그리고 그렇기 때문에 이러한 설계가 잘 되어있지 않은 환경에서는 자료가 깨질 가능성도 있습니다. (예를 들어 표준 USB 오디오카드같은 경우 오류율이 높은 편입니다. 뭐 조금 깨져도 듣는데는 별 탈 없겠지-라는 느낌의 설계. 외에도 좀 구린 웹하드 솔루션같은건 파일 깨먹는 일이 흔하지요..)
에러가 난다면 하드웨어가 고장난 것이니 그것만 고치면 되는거고요(....)