Computer >> 컴퓨터 >  >> 시스템 >> Linux

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

USENET은 분산형 전 세계 메시징 시스템입니다. 다양한 주제와 전문 분야를 다루는 10만 개 이상의 그룹이 존재하는, 사실상 최초의 글로벌 소셜 네트워크로 평가받습니다. 덕분에 USENET은 관심 있는 독자에게 지식과 토론이 쌓인 훌륭한 저장소 역할을 합니다.

Gnus란 무엇인가?

USENET은 최근 몇 년간 쇠퇴했지만, 여전히 토론과 뉴스 공유를 위해 사용하는 사람들이 있습니다. 요즘 대부분의 USENET 사용자는 Google Groups 웹사이트를 통해 네트워크에 접속합니다. 하지만 Emacs를 사용한다면, Emacs 안에서 직접 USENET 뉴스그룹을 열람할 수 있는 방법이 있습니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

Gnus는 뉴스그룹을 읽기 위해 만들어진 Emacs 패키지입니다. 뉴스 읽기를 쉽고 편리하게 만들어주는 강력한 기능이 가득한 프로그램으로, Emacs 내부에서 동작하기 때문에 게시물 내 텍스트를 자유롭게 조작하고 Emacs 시스템의 나머지 부분과도 손쉽게 연동할 수 있습니다.

왜 Emacs에서 뉴스 리더를 사용해야 할까?

Emacs는 언제나 확장성의 끝판왕으로 불려왔습니다. 수많은 패키지와 추가 기능을 갖추고 있을 뿐만 아니라, 텍스트 편집을 넘어선 기본 기능조차 매우 쉽게 확장할 수 있기 때문입니다.

Emacs는 상호 운용성(interoperability)이라는 개념 위에서 작동합니다. 이 개념 덕분에 Emacs는 패키지들을 결합해 텍스트를 생성하고 다양한 방식으로 가공할 수 있는 완전한 환경을 구축합니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

예를 들어 Emacs에는 자체 파일 관리자인 dired가 내장되어 있습니다. dired는 디렉터리 구조를 탐색하고 파일을 열 수 있는 간단한 Emacs 패키지입니다. 다른 파일 관리자와 달리 dired는 결과를 텍스트 형태로 보여준다는 점이 특별합니다.

만약 저널링 용도로 Org Mode를 함께 사용하고 있다면, 그 텍스트를 복사해 dired 결과물로부터 정교한 링크를 Org 파일 안에 만들 수도 있습니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

한 패키지의 텍스트 출력을 다른 패키지의 입력으로 활용할 수 있는 Emacs의 특성 덕분에, Gnus 같은 뉴스 리더는 Emacs 생태계에서 그 가치가 더욱 빛납니다.

예를 들어 뉴스 게시물에서 문구를 복사해 Org Mode에 붙여넣고, 저널 항목이나 일정, 아이디어 캡처로 추가하는 식의 활용이 가능합니다.

Gnus 설치

Gnus는 Emacs 버전 19.32부터 모든 기본 설치에 포함되어 있습니다. 최신 버전의 Emacs를 사용 중이라면 이미 Gnus가 포함되어 있을 가능성이 높습니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

Alt + X를 누르고 gnus를 입력하면 Gnus가 설치되어 있는지 확인할 수 있습니다. 이 명령은 아무 설정도 되지 않은 기본 상태의 Gnus를 불러옵니다.

USENET 그룹을 읽기 위한 Gnus 설정

Gnus의 초기 설정은 비교적 간단합니다. init.el 파일에 몇 가지 옵션만 지정하면 .newsrc 파일을 생성할 수 있습니다.

.newsrc 파일은 홈 디렉터리에 위치하는 뉴스그룹 리더의 표준 파일로, USENET 서버에서 이용 가능한 모든 그룹과 구독 중인 그룹을 기록하는 것이 주된 목적입니다.

또한 .newsrc 파일은 이미 읽은 게시물을 추적하는 상태(state) 파일 역할도 수행합니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

.newsrc 파일을 생성하려면 다음 명령을 실행하세요:

touch /home/$USER/.newsrc

초기 설정

파일 생성이 끝났다면 이제 Emacs의 설정 파일인 init.el 파일을 설정할 차례입니다. 기본적으로 이 파일은 "/home/$USER/.emacs.d/" 또는 "/home/$USER/.config/emacs" 경로에서 찾을 수 있습니다.

Gnus를 제대로 초기화하려면 init.el 파일에 다음 줄을 추가해야 합니다:

  (setq user-full-name '"yourusername")
  (setq user-mail-address '"yourname@email.invalid")
  (setq gnus-select-method '(nntp "news.eternal-september.org"))
  • user-full-name은 Emacs에서 사용자 이름을 지정하는 일반 옵션입니다. 뉴스 게시물을 보낼 때 Gnus가 "From" 헤더에 표시할 이름이 됩니다.
  • user-mail-address 역시 일반 옵션입니다. user-full-name과 마찬가지로 "From" 헤더에 표시될 이메일 주소를 Gnus에 알려줍니다. 필자는 유효하지 않은 이메일 주소를 사용했습니다.
  • 마지막 옵션 gnus-select-method는 Gnus 전용 옵션으로, 뉴스 리더가 접속할 서비스와 서버를 지정합니다. 필자는 nntp 서비스를 선택하고 "news.eternal-september.org"를 서버로 지정했습니다.
Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

원격 USENET 인증

주의할 점 하나는, 인증이 필요한 USENET 제공업체를 사용하는 경우 authinfo 파일에 계정 정보를 기록해야 한다는 것입니다. Gnus는 이 파일에서 USENET 서버 정보와 함께 사용자 이름 및 비밀번호를 읽어들입니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

생성 방법은 간단합니다. Emacs에서 Ctrl + X, Ctrl + F를 누른 뒤 /home/$USER/.authinfo를 입력하세요. 이 명령은 홈 디렉터리에 .authinfo 파일을 생성하고 버퍼로 엽니다.

.authinfo 파일의 기본 문법은 다음과 같습니다:

machine news.domain.name login yourusername force yes password yourpasswordgoeshere
  • machine 변수는 다른 머신(서버)에 접속함을 나타냅니다.
  • domain 이름 필드는 접속하려는 머신의 주소임을 Gnus에 알려줍니다.
  • login 필드에는 USENET 계정의 사용자 이름을 입력합니다.
  • "force yes" 옵션은 서버가 인증을 요구하지 않더라도 강제로 인증을 진행하도록 Gnus에 지시합니다.
  • 마지막으로 password 변수에는 USENET 계정의 비밀번호를 담습니다.

로컬 USENET 서버 사용하기

또한 Gnus는 로컬 스풀(spool) 파일을 소스로 삼을 수도 있습니다. 뉴스그룹을 로컬 머신으로 자동 다운로드하는 서비스를 운영 중이라면 유용한 기능입니다.

이를 위해서는 "gnus-select-method" 함수의 nntp 설정을 변경해야 합니다:

(setq gnus-select-method '(nnspool ""))

다만 Leafnode를 로컬 USENET 서버로 사용하는 경우에는 NNTP 서버로 설정해야 합니다. Leafnode는 일반적인 "/var/spool/" 디렉터리가 아닌, USENET 서버처럼 동작하기 때문입니다.

같은 머신에서 실행 중인 Leafnode 서버를 사용하려면 다음과 같이 입력하세요:

(setq gnus-select-method '(nntp "localhost"))

설정을 마쳤다면 Alt + x를 누르고 명령 버퍼에 gnus를 입력해 Gnus를 실행합니다. 그러면 Gnus가 로드되며 원격 USENET 서버에서 이용 가능한 모든 그룹을 가져옵니다.

기본 사용법

Gnus가 로드되면 빈 화면이 나타날 것입니다. 이는 기본적으로 Gnus가 구독하지 않았거나 이미 읽은 뉴스그룹을 숨기기 때문입니다.

Shift + 6을 누르면 USENET 서버에서 이용 가능한 모든 뉴스그룹 목록을 확인할 수 있습니다. 이렇게 하면 Gnus의 서버(Server) 화면이 열립니다. 필자의 경우 Eternal September에서 제공하는 모든 뉴스그룹이 표시되었습니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

USENET 그룹 구독

서버 화면에서 U 키를 눌러 특정 뉴스그룹을 구독하거나 구독 해제할 수 있습니다. 구독한 그룹은 Gnus를 처음 시작할 때 첫 화면에 나타납니다.

예를 들어 필자는 서버 화면에서 "alt.religion.emacs"와 "alt.folklore.computers" 두 그룹을 구독했습니다. Gnus를 다시 로드하니 두 그룹이 메인 화면에 나타나 바로 둘러볼 수 있었습니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

버퍼 이동

Enter 키를 눌러 뉴스그룹에 진입한 후, Ctrl + N, Ctrl + P 같은 표준 Emacs 이동 키를 사용해 그룹 내 다양한 게시물을 스크롤하며 살펴볼 수 있습니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

게시물을 열 때는 Enter 또는 Tab 키를 누르고, 게시물 내부에서 위아래로 스크롤할 때는 BackspaceSpace 키를 사용합니다.

Emacs의 검색 기능(Ctrl + S, Ctrl + R)을 활용하면 원하는 게시물을 빠르게 찾을 수 있습니다.

USENET 게시물 작성 및 답글 달기

뉴스그룹에 새 게시물을 작성하려면 A 키를 눌러 메시지 편집기를 띄운 뒤 게시물 내용을 작성하면 됩니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

작성이 끝나면 Ctrl + C를 두 번 눌러 해당 뉴스그룹으로 메시지를 전송합니다.

반대로 그룹 내 게시물에 답글을 달고 싶다면 Shift + S, Shift + F를 차례로 누릅니다. 그러면 "Followup(팔로우업)" 버퍼가 열리고, 원본 게시물이 이미 인용된 상태의 메시지 편집기로 이동합니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

새 메시지 작성과 마찬가지로 Ctrl + C를 두 번 누르면 해당 게시물로 팔로우업을 전송할 수 있습니다.

스코어파일(Scorefile)을 통한 필터링

Gnus에는 스코어파일을 활용하는 강력하면서도 사용하기 쉬운 필터링 시스템이 있습니다. 특정 패턴이나 조건에 걸린 게시물을 자동으로 "삭제(kill)"하는 일반적인 killfile과는 다릅니다.

스코어파일은 특정 게시물의 내부 점수를 단계적으로 올리거나 내려서, 어떤 게시물을 우선적으로 보여줄지, 어떤 것을 숨기거나 원격 서버에서 가져오지 않을지 Gnus가 판단하도록 합니다.

필터링 종류

게다가 Gnus는 기능이 풍부한 필터링 시스템을 갖추고 있어, 필터의 세부 요소를 세밀하게 조정할 수 있습니다.

Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

예를 들어 특정 게시물의 점수를 낮추고 싶다면 해당 게시물을 하이라이트한 후 L 키를 누르면 됩니다. 그러면 명령 버퍼에 작은 메뉴가 뜨며, 어떤 속성을 기준으로 점수를 매길지 물어봅니다.

속성 목록은 매우 다양하지만, 가장 중요한 것들은 다음과 같습니다:

  • A: 작성자 이름 기준 점수
  • S: 제목 텍스트 기준 점수
  • L: 줄 수 기준 점수
  • B: 본문 텍스트 기준 점수

필자는 이 게시물을 작성자 기준으로 점수 매기고 싶었기 때문에 A를 눌렀습니다.

필터 매칭 방식

이어서 Gnus는 이 점수에 적용할 문자열 매칭 방식을 묻습니다. 정확(exact), 부분 문자열(substring), 퍼지(fuzzy), 정규표현식(regexp) 중에서 선택할 수 있습니다:

  • Exact(정확): 전체 문자열로 텍스트를 매칭합니다.
  • Substring(부분 문자열): 문자열의 일부로 텍스트를 매칭합니다. 즉, 전체 텍스트가 일치하지 않아도 필터에 걸립니다.
  • Fuzzy(퍼지): 해당 뉴스그룹의 기존 게시물을 기반으로 한 예측 모델을 사용합니다. 기호나 숫자 등으로 텍스트를 가려 부분 문자열 매칭을 회피하려는 게시자를 걸러내는 데 특히 유용합니다.
  • Regexp(정규표현식): 전통적인 정규표현식으로 텍스트를 필터링합니다.
Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

필자는 부분 문자열 방식을 선택했기 때문에 S를 눌렀습니다.

필터 지속 기간

마지막으로 Gnus는 이 점수를 임시(temporary), 영구(permanent), 즉시(immediate) 중 무엇으로 적용할지 묻습니다.

  • Temporary(임시): 설정된 날짜에 점수가 만료됩니다. 특정 게시물이나 게시자의 점수를 일정 기간 동안만 올리거나 내리고 싶을 때 유용합니다.
  • Permanent(영구): 점수가 만료되지 않습니다. 그룹에 난입할 수 있는 스패머를 걸러내는 데 유용합니다.
  • Immediate(즉시): 점수를 스코어파일에 저장하지 않고 현재 버퍼에만 적용합니다. 당장 게시물을 걸러내고 싶지만 점수를 지속적으로 유지하고 싶지 않을 때 좋습니다.
Emacs에서 Gnus를 USENET 뉴스 리더로 활용하는 완벽 가이드

필자는 이 필터를 영구적으로 유지하고 싶었기 때문에 P를 눌렀습니다.

축하합니다! 이제 Emacs에서 Gnus를 뉴스 리더로 사용하는 기본기를 갖추셨습니다. 나아가 인증이 필요한 USENET 서버에 접속하는 방법과 스코어파일·필터링을 제대로 활용하는 법도 익혔습니다.

그런데 이 글을 읽고 Emacs에 대해 더 알고 싶어지셨다면, Doom Emacs 설치 방법도 배워보세요.

자주 묻는 질문

1. 메시지를 작성했는데 더 이상 보내고 싶지 않습니다. 게시물이나 답글을 취소하려면 어떻게 해야 하나요?

확실하지는 않지만, 현재 작성 중인 게시물을 취소할 수 있을 것입니다. 그러려면 Ctrl + C, Ctrl + D를 누르세요.

2. Gnus에서 여러 USENET 서버를 추가할 수 있나요?

네, 가능합니다! init.el 파일에 "gnus-select-method" 변수를 하나 더 추가하기만 하면 됩니다.

예를 들어 init.el 파일을 다음과 같이 작성할 수 있습니다:

  (setq user-full-name '"ramcesred")
  (setq user-mail-address '"ramcesred@email.invalid")
  (setq gnus-select-method '(nntp "news.eternal-september.org"))
  (setq gnus-select-method '(nntp "nntp.aioe.org")).
  (setq gnus-select-method '(nntp "localhost"))

작성이 끝나면 Emacs를 재시작해 Gnus 설정을 다시 불러오면 됩니다.

3. 게시물을 읽었더니 메인 화면 목록에서 사라졌습니다. 계속 지켜보고 싶은 게시물을 고정(pin)할 수 있나요?

네, 가능합니다! gnus-summary-tick-article-forward 함수를 사용하면 됩니다. 해당 게시물이 선택된 상태에서 U 키를 누르면 이 함수에 접근할 수 있습니다.

단, 이 방식은 해당 게시물 하나만 "고정"한다는 점에 유의하세요. 같은 스레드의 다른 답글들은 기본적으로 표시되지 않습니다. 전체 스레드를 다시 구성하려면 Shift + A, Shift + T를 누르세요.