맥북 프로가 타이핑을 놓치기 시작했다, 범인을 찾기까지
난 10년 넘게 맥북으로 먹고살고 있다. 특히, 명동 애플스토어에 들어가 “지금 당장 살 수 있는 맥북 14인치 중 가장 좋은 거 주세요.”를 당당히 외치고(사실, 그때도 600만원 짜리 i9 인텔 맥북에 100MB 사진 100장을 노이즈 리덕션 걸고 빡이 쳐서 그랬던거다…) 데려와 지난 3년 동안 빡세게 굴려 온 내 M2 Max. 32기가 메모리에 1TB SSD 그리고 5K 모니터 두 대를 물려서 한 대는 세로로 세워 놓고 쓰는데, 4K 영상 소스를 4~500기가 씩 던져도 군말이 없던 놈이다.(이번 양평랠리 450GB짜리 다큐 한 편도 이 녀석으로 만들었다.)
그런 놈이 어느 날부터 밀리기 시작했다. 흔히 맥북 타이핑 렉이라고 부르는 그 증상이다. 렌더링을 돌릴 때도 아니고 타임라인을 긁을 때도 아니었다. 그냥 글을 칠 때. 한 글자를 누르면 반 박자쯤 뒤에 화면에 나타나고, 심하면 두세 글자가 뭉쳐 있다가 한꺼번에 튀어나왔으며 마우스 커서는 움직임을 전혀 쫒아오지 못했다.
처음엔 그러려니 했다. 맥이 좀 지쳤나 보다, 재부팅하면 되겠지. 그런데 이게 며칠을 가더니 나중엔 문장 하나를 치는 동안 커서가 어디쯤 있는지 눈으로 좇아야 하는 지경이 됐다. 편집이야 손이 익어서 어찌어찌 하는데, 글이 안 써지니 일이 안 됐다. 좌우간 범인을 찾기로 했다. 그게 2주짜리 삽질의 시작이었다.
맥북 타이핑 렉, 제일 먼저 의심한 건 키보드였다
키 입력이 밀리니 키보드를 건드리는 놈부터 의심하는 게 인지상정이다. 내 맥에는 카라비너 엘리먼츠(Karabiner-Elements)가 깔려 있다. 키를 리맵하는 물건이고, 시스템 아주 깊은 곳에 드라이버를 하나 심어 두는 방식이라 뭔가 이상하면 제일 먼저 눈총을 받는 처지다.

그래서 껐다. 아무 변화가 없었다. 프로파일을 비우고, 데몬을 내리고, 나중엔 아예 dext까지 확인했는데도 밀리는 건 똑같았다. 생각해 보면 이 물건을 몇 년을 아무 탈 없이 써 왔는데 하필 지금 갑자기 배신할 이유가 없었다. 여기서 하나 배운 게 있는데, ‘제일 수상해 보이는 놈’과 ‘실제로 그 짓을 한 놈’은 대개 다르다는 것이다. 애먼 놈에게 누명을 씌우고 시작하면 진짜 범인은 그동안 편하게 숨어 있는다.
오래된 용의자, 한국식 보안 프로그램
다음 타자는 뻔했다. 홈택스에 한 번 들어갔다가, 인터넷뱅킹 한 번 하겠다고 깔린 그 물건들 말이다. 위즈베라 델피노, 라온 터치엔 엔엑스키, 유니크루스… 목록을 뽑아 보니 로그인할 때마다 조용히 올라오는 에이전트가 넷이나 됐다. 키보드 입력을 가로채는 게 본업인 놈들이니 이번엔 정황도 그럴듯했다.
전부 내렸다. launchctl로 사용자 도메인과 시스템 도메인 양쪽에서 죽여 놨으니 이제 인터넷뱅킹도 정부24도 못 쓴다. 그 대가로 얻은 건 조금 빨라진 부팅이었다. 타이핑은 그대로였다.
지우면 나아질 것 같다는 착각
이쯤 되니 진단이 아니라 청소가 되기 시작했다. 안 쓴 지 오래된 소프트웨어 신디사이저를 지웠고(1기가쯤 나왔다), 그 김에 딸려 있던 아이락 디알엠 프레임워크도 걷어냈다. 로지텍 지허브는 로그인 항목에서 꺼도 자꾸 살아나기에 런치디 레벨에서 아예 막았다. 11테라짜리 외장 레이드는 스포트라이트 색인을 꺼 버렸다. 재부팅한 뒤마다 색인 프로세스가 씨피유를 물고 늘어지던 게 사라졌으니 이건 그 자체로 남는 장사였다.
청소를 하는 김에 진단 리포트도 날짜순으로 늘어놓고 하나씩 열어 봤다. 스포트라이트, 디스크 쓰기, 원드라이브… 범인처럼 보이는 이름은 많았지만 타이핑이 밀린 시각과 겹치는 건 하나도 없었다.

맥은 확실히 깨끗해졌다. 그리고 타이핑은 여전히 밀렸다. 지름신 대신 청소신에게 어루만짐을 당한 셈이다.
6일 만에 재부팅했더니 좋아졌다, 이틀 동안은
터미널에 uptime을 쳐 보고 조금 놀랐다. 6일이었다. 맥은 원래 안 끄고 쓰는 물건이라고 믿고 살았는데, 화면을 그리는 윈도우서버 프로세스가 며칠에 걸쳐 메모리를 야금야금 쥐고 안 놓는다는 이야기를 어디선가 봤다. 5K 두 장에 한 장은 세로로 돌려 놨으니 그릴 것도 많다.
믿고 넘어가는 대신 한번 재 봤다. 아무 작업도 하지 않는 상태에서 윈도우서버가 씨피유를 37.6퍼센트 물고 있었고, 메모리 발자국은 3기가를 넘겼다. 활성 모니터에 뜨는 235메가와는 열세 배 차이다. 압축 메모리는 10기가, 스왑은 4기가 가까이 차 있었다.

재부팅했다. 확 좋아졌다. 아, 이거였구나 싶었다. 그런데 이틀 뒤에 똑같이 밀리기 시작했다. 범인을 잡은 게 아니라 알리바이가 하나 늘었을 뿐이었다. 재부팅으로 좋아진다는 건 뭔가가 시간이 갈수록 쌓인다는 뜻인데, 그 쌓이는 게 시스템 전체인지 그 위의 무엇인지는 여전히 모르는 상태였다.
범인은 시스템이 아니라 창 하나였다
돌파구는 엉뚱한 데서 나왔다. 밀리는 게 지긋지긋해서 같은 문장을 브라우저 주소창에 쳐 봤다. 안 밀렸다. 메모장에도 쳐 봤다. 안 밀렸다. 그리고 원래 글을 쓰던 그 앱으로 돌아와 다시 쳤더니, 밀렸다. 같은 키보드로, 같은 순간에, 창만 바꿨는데 결과가 달랐다.

그때까지 나는 “맥이 느려졌다”를 전제로 2주를 뒤진 것이었다. 전제가 틀렸으니 아무리 뒤져도 안 나올 수밖에.
문제의 앱은 일렉트론으로 만든 물건이었다. 쉽게 말해 브라우저 한 통을 통째로 안고 도는 앱이다. 이런 앱은 화면을 다시 그리는 동안 들어온 키 입력을 버리지 않고 줄을 세워 두는 옵션을 켤 수 있는데, 이게 켜져 있으면 렌더가 무거워질수록 내 손가락이 그 뒤에 서게 된다. 대화가 길어질수록, 창 안에 쌓인 내용이 많아질수록 렌더는 무거워진다. 재부팅하면 좋아졌던 것도 이걸로 설명이 된다. 재부팅하면 그 창도 같이 비워졌으니까.
내 맥이 늙은 게 아니었다. 창 하나가 무거웠던 것이다. 32기가에 30코어 지피유를 물린 장비를 놓고 2주 동안 키보드 드라이버를 의심했다니, 허탈한 생각이 들 정도였다.
그래서 지금은 원인을 안 만드는 쪽으로 쓴다
고친 게 아니라 안 생기게 하는 쪽으로 정리했다. 두 가지뿐이다.
첫째, 전체화면인 채로 며칠씩 방치되는 창을 만들지 않는다. 무거워지는 건 맥이 아니라 그 창 안에 쌓인 내용과 시간이라, 하루를 넘겨 켜 둘 것 같으면 그전에 앱을 재시작하고 대화를 새로 시작한다. 새 대화창을 열어도 작업 조건을 다시 불러 줄 필요가 없는 건 스킬에 적어 뒀기 때문이다. 참고 계속 쓰면 점점 나빠지기만 한다. 글을 길게 써야 하는 일은 아예 웹 브라우저로 옮겨서 하고, 같은 서비스인데도 브라우저 쪽이 확실히 가볍다.
둘째, 작업에 여유가 생길 때 한 번씩 재부팅한다. 처음엔 2~3일에 한 번은 해야 하는 줄 알았는데, 첫째를 지키고 나니 그럴 일이 없어서 요즘은 보통 주 단위를 넘긴다. 재부팅 주기를 부지런히 줄인 게 아니라 줄일 필요가 없어진 쪽이다.
그래도 생기면 재부팅이다, 그런데 안 생긴다
증상이 도지면 순서는 단순하다. 재부팅으로 일단 털어 내고, 그다음에 로그를 뒤져 무엇이 쌓였는지 추적한다. 앞에서 2주를 태운 건 이 순서를 몰라서였다.
그런데 솔직히 말하면 요즘은 두 번째 단계까지 갈 일이 없다. 원인을 안 만들기 시작한 뒤로 증상 자체가 안 나온다. 대응을 잘하게 된 게 아니라 대응할 일이 사라진 것이다(이게 제일 허탈하면서도 제일 확실한 해결이었다).
남은 것들은 이렇게 정리했다. 지우는 김에 라이브러리 폴더를 뒤지다 9.6기가짜리 가상머신 번들을 하나 발견했는데, 안 쓰는 기능이라 그것도 지웠다. 타이핑과는 상관없지만 에스에스디는 정직하게 늘어났다. 카라비너는 그대로 쓴다. 애초에 죄가 없었다. 인터넷뱅킹 에이전트들은… 필요할 때 다시 켜기로 하고 그냥 뒀다.

돌아보면 이번 삽질에서 남는 건 결론보다 순서였다. 증상이 “시스템이 느리다”로 보일 때 시스템부터 뒤지면 안 된다. 같은 동작을 다른 앱에서 한 번만 해 봤으면 2주가 반나절이었다. 다음에 또 뭔가 밀리기 시작하면 난 제일 먼저 창을 바꿔 볼 생각이다.
즐거운 작업 되시기 바란다.