오늘은 지난날을 돌이켜보며, Segmentation (이하 세그폴트)와 코어 덤프에 관한 얘기를 해볼까 합니다.
아 오늘 너무 마셨어! 뇌내 세그폴트 날 것 같아!
취한 어느 개발자의 독백입니다. 네, 만들어 낸거예요. 다른 개발자들이 트위터 등에 세그폴트가 나니 뭐니 하는 것처럼 저 또한 세그폴트 소리를 해대고는 했습니다.
세그폴트? Segmentation Fault라니 이게 대체 뭔 소리일까요? 개발자가 아닌 사람들은 이게 대체 뭔 소린지 전혀 모를 겁니다.
그런데 한 가지 이상한 사실이라면, 여러분들은 컴퓨터를 쓰면서 한번씩은 Segmentation Fault를 경험했다는 겁니다. 다만 그게 세그폴트인지 아닌지는 전혀 모를 겁니다.
특히, 저사양 PC에서 3D 어드벤처 게임이라던지 뭐라던지 간에, 고사양을 요구하는 게임을 즐겨왔던 사람이라면 적어도 10 번 이상은 봐왔을 겁니다.
전 리눅스 유저라서 세그폴트가 세그폴트인지 아닌지 정확하게 나오지만(Kubuntu 16.04 LTS를 쓰는데 KDE Plasma 쉘이 세그폴트를 너무 자주 일으킵니다. 다음 LTS에서는 고치기를 희망합니다.), 이 글을 보는 모든 사람들은 Windows를 쓰실 테고, Windows는 세그폴트를 정확히 표기하지 않기 때문에, Windows에서의 예시를 한 번 보여 드리겠습니다.

이게 Windows에서의 세그폴트입니다. 이거 메모리 오류 아니냐고요? 아닙니다. 세그폴트 맞습니다.
세그멘테이션 결함 (Segmentation Fault, 줄여서 세그폴트 또는 Segfault) : 프로그램이 허용되지 않은 메모리 영역에 접근을 시도하거나, 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생하는 오류 (한국어 위키백과)
그리고 일부 개발자들은 뒤에 “(core dumped)”까지 붙여서 세그폴트 밈을 던집니다. core dumped? 그게 뭘까요? 이것 역시 일반인들은 모를겁니다.
코어 덤프는, 쉽게 말해서 세그폴트나 기타 오류를 일으킨 프로그램이 에러가 날 당시의 메모리 상태, 시스템 정보, CPU 상태 등이 덤프되어 기록되는 겁니다. 이 덤프 기록은 주로 디버깅에 사용됩니다. 즉, 내가 어떤 컴퓨터에서 돌아가고 있었는지, 어떻게 오류가 났는지, 그 이유는 무엇인지 등이 기록되는 것이 바로 코어 덤프입니다. 한 마디로 “경위서”죠.
코어 덤프는 일반적으로는 프로그램 제조사에게 보내거나, 또는 그냥 버려뒀다가 백신 프로그램 등에 내장된 PC 최적화 기능을 사용해서 밀어버립니다. 물론 자신이 개발자라면 코어 덤프를 분석할 수도 있겠죠.
세그폴트는 무조건 프로그램 제조사의 잘못이라고 볼 수는 없습니다. 운영체제의 문제거나, 또는 특정 프로그램(백그라운드에서 돌아가는 백신 등), 컴퓨터의 제조사, 심지어는 시스템을 사용하는 사용자의 문제일 수도 있다는 겁니다. 프로그램 자체를 정말 대충 만들어 놓지 않는 이상은 원인을 찾기가 쉽지 않은 특이한 오류입니다. 어쩌면 교통사고와 비교할 수도 있겠습니다.
블로그 포스팅 중에서는 여전히 어색하고 긴 글이지만, 읽어주셔서 감사합니다.
ps. 어차피 메모리 어디를 참조하려 했고 뭘 할 수 없었는지 풀어 써놔도 일반인들은 알아듣지 못할텐데 왜 Windows는 그런 식으로 언어를 순화했는지 모르겠네요.
답글 남기기