[세컨드브레인 개발기] 8. 단체 메일은 조용히.
이번 편은 메일입니다. 교직원 포털의 그룹웨어는 대학 생활의 온갖 것이 지나가는 길인데, 회의 안내와 행정 공지가 오고, 동료의 메일이 오고, 학생의 질문이 옵니다.
이 흐름을 브레인에 넣어 두면, 브레인이 내가 하는 일의 적지 않은 부분을 저절로 알게 되는데, 그게 이 자동화를 시작한 이유였습니다. 메일 하나가 곧 업무 기록 하나라, 긁어 두면 기록이 되고 놓치면 흔적도 없어요. 회의록은 지나간 일을 남기는데, 메일은 지금 일어나는 일을 남깁니다.

그런데 막상 만들어 보니 메일을 긁어오는 일 자체는 어렵지 않았습니다. 어려웠던 것은 쌓인 메일을 어떻게 나누느냐였고, 그 나눔이 이 편의 전부예요. 수집은 도구의 일이고, 나눔은 사람의 일입니다. 어떤 기준으로 나뉘었는지, 하나씩 보겠습니다.
포털을 열고, 편지함을 걷는다

그룹웨어는 포털에 로그인해야 열리는데, 대학 포털은 교직원 계정으로 들어갑니다. 로그인 요청에는 계정의 종류를 가르는 값이 하나 실리는데, 교직원은 id_type=P를 써요. 이 계정으로 받은편지함이 열리면, 그 화면을 걷어내는 것이 수집의 전부였습니다. 스크랩은 그렇게 단순한 일이었어요. 받은편지함은 화면을 걷는 방식으로만 가져올 수 있었고, 긁는 쪽은 페이지를 넘기며 그 화면을 따라 지나갑니다. 그달 초의 기록에는 이 수집기가 두 번째 버전으로 다시 쓰였다는 줄이 남아 있습니다.
메일 하나가 문서 하나가 되어, 제목과 본문과 받은 날짜가 함께 그룹웨어 폴더에 남습니다. 볼트는 옵시디언 볼트라, 메일 문서도 다른 위키 문서와 같은 방식으로 쌓이고 검색돼요. 메일은 그렇게, 따로 챙기지 않아도 브레인에 들어옵니다.
메일 목록을 페이지 단위로 넘겨 스크랩해서, 옵시디언 볼트 안의 그룹웨어 폴더에 문서로 떨어뜨리는 작업은 하루 세 번 깨어납니다. 오전 여덟 시 반과 오후 한 시 반, 저녁 여섯 시 반이 그 시각이고요. 오후에 온 메일은 저녁 회차가 건지고, 밤사이 온 것은 아침 회차가 치우는 리듬이었습니다. 메일이 도착하는 시간대에 맞춘 듯한 시각들이었는데, 왜 그 시각들인지는 기록에 남기지 않았어요.
브레인에 들어오는 자료는 한 번에 큰 덩어리인 경우가 많았는데, 메일은 하루에 몇 번씩 조금씩 자라는 처음 보는 모양이었습니다. 수집의 모드는 둘로 나뉘는데, 처음에는 받은편지함의 전 페이지를 훑는 백필 모드로 돌리고, 그다음부터는 새로 온 메일만 보는 증분 모드로 돌아갑니다. 과거의 메일은 첫 회차가 한꺼번에 긁어들이고, 그 뒤로는 매일 조금씩만 걷어요. 긁는 곳은 받은편지함 하나였고, 보낸 메일은 내가 이미 아는 내용이라 브레인에 넣을 이유가 없었습니다.
본문이 두 줄이고 서류가 전부인 메일도 있었는데, 첨부가 곧 내용인 것들이었습니다. 첨부는 메일마다 폴더를 하나씩 만들어 그 안에 내려받았는데, 나중에 원문이 필요하면 그대로 꺼내 쓸 수 있게 두는 것이에요. 폴더 이름에는 메일 번호가 붙어, 원문을 찾을 때 기준이 되었습니다. 브레인은 원문을 태우지 않는 편이고, 원문과 정리본을 함께 두어야 나중에 되짚어 갈 수 있다고 생각합니다. 본문만 떠 가고 원문이 사라지면, 그 메일은 기록으로서 반쪽이 됩니다. 첨부 폴더는 동기화에서 빼 두었어요. 무거운 폴더는 오가지 않습니다.

받는이를 본다
긁어오기 다음으로 가장 쓸모있는 일이 시작됩니다. 메일마다 받는이와 참조인을 추출해서, 그 목록에 내 이름이 어떻게 실려 있는지를 보는 것이에요. 받는이 목록은 곧 메일의 성격을 말해 주는데, 내 이름이 받는이 자리에 따로 적혀 있으면 그 메일은 나에게 온 것이고, 이름 대신 그룹 별칭이 적혀 있으면 단체에 온 것입니다. 목록 하나만 봐도 성격이 갈라지는, 그런 단순한 규칙이었습니다.
그래서 분류는 스크랩과 함께 끝났어요. 매칭에 쓸 내 이름은 등록해 두었고, 단체 메일의 별칭은 달러 기호로 시작하는 그룹 이름이라 개인 이름과 겹칠 일이 없어 구분이 더 쉬웠습니다. 부서 공지나 메일링 리스트가 그런 형태라 이름 매칭을 걸면 개인 메일과 단체 메일이 깔끔하게 갈라졌습니다.
메일의 성격을 묻는 일을 본문이 아니라 받는이에게 시켰는데, 받는이는 메일을 보낸 쪽이 이미 정해 준 것이에요. 알림은 이 분류를 따라가는데, 개인 메일에는 텔레그램으로 즉시 알림이 가고, 단체 메일은 볼트에 조용히 쌓입니다.
단체 메일까지 알림을 보내면 어떻게 되는지, 나는 잘 알고 있습니다. 알림이 열 개 스무 개 쌓이면 결국 알림 자체를 안 보게 되고, 중요한 것이 섞여 있어도 그것까지 함께 놓치게 됩니다. 알림을 많이 받아 본 사람이라면 누구나 겪어 봤을 일이에요.
알림이 많아지는 쪽으로 설계하면 안 된다는 것, 그것이 그때 얻은 교훈이었습니다. 예전에는 알림을 많이 붙이는 쪽이 열심인 쪽 같아 보였는데, 알림이 늘수록 그것들을 확인하는 일이 하루의 일이 되어서, 결국 아무것도 확인하지 않게 됩니다.
그래서 알림은 가장 좁은 문으로만 통과시키기로 했습니다. 알림의 문은 하나만 두었어요. 나에게 온 메일만, 그것도 도착한 그 순간에만. 나머지는 조용합니다. 알림은 그 하나로 충분했습니다.
받는이·참조인 → 이름 매칭 → 개인 메일 → 텔레그램 즉시 알림
→ 단체 메일 → 볼트에만 쌓인다
알림은 이 분류가 밖으로 내보내는 끝자락일 뿐이고, 나뉜 메일은 어느 쪽이든 브레인에 남습니다. 개인 메일과 단체 메일의 차이는 알림이 오느냐 마느냐뿐, 둘 다 볼트에 들어와 검색됩니다. 볼트는 개인과 단체를 가리지 않아서, 알림이 없어도 메일은 브레인에 남아요. 알림이 좁아진 것과 브레인이 넓어진 것은, 같은 결정의 양면이었습니다.
첨부를 텍스트로
본문은 그 자체가 텍스트라 문제가 없는데, 첨부가 문제였습니다. 첨부의 종류는 두 갈래인데, 문서 파일은 텍스트 추출기가 그대로 읽어 내고, 스캔은 글자가 그림으로 저장된 것이라 읽어 낼 텍스트가 애초에 없습니다. 스캔은 그 자체가 그림이에요.
문서 형식도 제각각이라, PDF는 pdftotext를, 워드와 프레젠테이션, 엑셀은 압축을 풀어 안에 든 XML을 읽는 방식이었습니다. 한글 문서는 전용 추출기가 읽습니다. 이 도구들은 모두 글자가 텍스트로 저장되어 있음을 전제로 하는데, 스캔처럼 글자가 그림으로 찍힌 것은 손을 쓸 수 없어요.
그림에서 글자를 뽑아내는 OCR을 돌려야 했습니다. tesseract에 한국어와 영어 글자판을 얹어 두고, 스캔 PDF는 페이지마다 이미지로 바꾼 뒤 글자를 뽑아냈습니다. 페이지를 이미지로 바꾸는 일은 pdftoppm이 맡고, 그 이미지에서 tesseract가 글자를 뽑는 식이에요. 사진으로 찍힌 서류도 같은 길을 지나갑니다.
이렇게 뽑힌 텍스트는 본문처럼 검색되고, 브레인에 들어와 다른 자료와 이어집니다. 텍스트로 뽑힌 첨부는 메일 본문과 함께 한 문서가 되는데, 나중에 같은 주제로 찾으면 본문과 첨부가 함께 걸려 나옵니다. 뽑힌 글자가 완벽하지는 않아도, 검색에 걸린다는 것 자체가 값어치가 있었습니다.
쌓이는 것을 나누는 일

이렇게 모은 메일은 계속 쌓입니다. 하루 세 번, 일주일에 스무 번이 넘는 회차가 돌면 그룹웨어 폴더는 금방 부풀어 오르는데, 쌓인 메일에도 분류가 적용됐어요. 단체 메일은 메일을 받은 날짜가 서른 날을 넘기면 아카이브 폴더로 옮겨지고, 개인 메일과 최근 메일은 그 자리에 남습니다.
첫 실행에서 옮겨진 단체 메일만 160건이어서 폴더의 메일이 789건에서 629건으로 줄었고, 다시 찾을 일이 거의 없는 오래된 공지가 그 대부분이었습니다. 옮겨진 메일은 자리만 바꿀 뿐 사라지지 않아요. 쌓이는 곳이 나뉘면 찾는 곳도 나뉩니다.
돌아보면 이 자동화에서 스크립트가 한 일은 긁어오는 것보다 나누는 것이 더 많았습니다. 긁어오는 것은 누구나 짤 수 있는데, 쌓인 것을 어떻게 나눌지는 그 데이터를 매일 보는 사람만 정할 수 있어요. 분류가 없으면 브레인은 그냥 창고입니다.
창고는 쌓일수록 들어가기 싫어지는 법이고, 들어가지 않는 브레인은 아무것도 아닙니다. 쌓는 일은 스크립트가 하고, 꺼내는 일은 분류가 정합니다. 수집은 한 번 짜면 그대로지만, 분류는 데이터를 보며 다듬어지는 일이라 자동화의 숙제는 항상 분류 쪽에 남습니다. 알림을 좁힌 것도, 오래된 단체 메일을 치운 것도 같은 생각에서 나왔어요. 무엇을 보여줄지 고르는 일, 그것이 자동화가 하는 일의 대부분이라고 생각합니다.
그렇게 메일은 조용히 들어왔습니다. 그 뒤로 나는, 포털에 로그인해 메일을 일일이 훑던 일을 그만두었는데, 그 일이 알림 하나로 줄어든 셈이었어요. 브레인이 그 일을 받아 갔으니까. 메일 다음으로 브레인에 들어온 것은 논문이었는데, 논문은 매주 월요일 아침에 모여 한국어 요약으로 만들어져 텔레그램으로 보내집니다. 그 이야기는 다음 편에서.
'공부 > 인공지능' 카테고리의 다른 글
| [세컨드브레인 개발기] 10. 브레인에 MCP 를 달다 (읽기 → 쓰기) (0) | 2026.08.12 |
|---|---|
| [세컨드브레인 개발기] 9. 매주 월요일 아침, 논문이 온다. (0) | 2026.08.11 |
| [세컨드브레인 개발기] 7. 전사가 깨진 이유. (0) | 2026.08.05 |
| [세컨드브레인 개발기] 6. 소리가 줄어드는 녹음. (0) | 2026.08.05 |
| [세컨드브레인 개발기] 5. 끊기지 않는 유입. (0) | 2026.08.03 |