인터넷 릴레이 챗

실시간 채팅과 메시지를 위한 프로토콜

인터넷 릴레이 챗(Internet Relay Chat, 약칭: IRC)은 실시간 채팅 프로토콜이다. 채널이라 불리는 토론 포럼에서 그룹 대화를 하기 위해 설계되었으나[1] 개인 메시지를 통한 1:1 소통[2], 그리고 파일 공유를 포함한 채팅 및 대화 전송[3]도 가능하다.[4]

그리고 IRC는 전통적인 채팅 프로토콜로, 이를 지원하는 수많은 서버 네트워크와 클라이언트가 존재한다.

역사 편집

 
최초의 IRC 서버 tolsun.oulu.fi (2001년)

IRC는 "WiZ"란 별명을 사용하던 Jarkko Oikarinen가 핀란드의 한 BBS에서 쓰이던 채팅 프로그램을 대체하기 위해, 1988년 8월에 제작했다. Oikarinen은 Bitnet에서 쓰이던 Bitnet Relay Chat에서 힌트를 얻어 IRC를 만들었다.

IRC는 정보통제로 베일에 가려있던 철의 장막 뒤에서 차츰 붕괴되어가던 소련의 모습을 외부에 알려주는 매개체로 기능하면서 이름을 날렸고[5], 이후 걸프전 때에도[6] 비슷한 방식으로 쿠웨이트에서의 실상을 외부에 알렸다.

타임라인 편집

1990
1992
1994
1996
1998
2000
2002
2004
2006
2008
2010
2012
2014
2016
2018
2020

IRC 네트워크

기술적인 정보 편집

 
IRC로 만들어진 엑스챗 클라이언트
 
OS X에서 사용되는 콘솔 기반 IRC 클라이언트 Xaric. 두 개의 IRC 채널과 소프트웨어 개발자와의 개인 대화 내용이 화면에 떠있다.

IRC는 TCP 기반의[7] 공개 네트워크 프로토콜으로, TCP뿐만이 아니라 TLS을 지원하기도 한다. IRC 서버는 IRC 네트워크 확장을 목적으로 다른 IRC 서버들로 접속이 가능하다.[8] 사용자들은 클라이언트를 서버에 연결함으로써 IRC 네트워크에 접근한다.[9]

IRC 프로토콜은 RFC를 통해 공개되어 있다. IRC에 관한 최초의 RFC는 RFC 1459이며, 이후 2000년에 이를 개정해 RFC 2810, RFC 2811, RFC 2812, RFC 2813의 네 개로 정리하였다.

IRC 프로토콜은 초기에는 평문 프로토콜로 정의되었으며, 이후 확장되었다. IRC 접속 포트는 IANA에서 194/TCP를 할당해 두었지만, 많은 운영 체제에서 이 포트를 사용하려면 특별 권한이 필요하기 때문에, 대부분의 서버에서는 6667/TCP 포트를 사용한다.[10]

IRC 프로토콜은 문자는 8 bit라고만 규정하고 있을 뿐, 이용하는 텍스트에 대한 문자 인코딩은 규정하고 있지 않다. IRC가 생겨났을 당시에는 한 인코딩만 지원하는 텍스트 터미널만 줄창 쓰였고, IRC 프로토콜 설계자들은 IRC 사용자간 대화가 호환 가능한 인코딩 하에서 이루어질 것이라고 단순히 생각했었다. IRC 프로토콜의 이러한 성격은, 사용자들이 서로 다른 클라이언트와 (혹은) 다른 플랫폼 상에서, 영어를 제외한 다른 언어를 써서 서로 대화하고자 할 때 문제가 되기도 한다.

현존하는 모든 클라이언트-서버 IRC 프로토콜들은 IRC2server의 irc2.8 버전에서 구현된 프로토콜에서 나왔다. 이 프로토콜은 RFC 1459 문서에 규정되어 있다. RFC 1459가 발표된 이래로, irc2.10 버전 구현의 새 기능들 때문에, RFC 2810, RFC 2811, RFC 2812 등등의 여러 개정판 프로토콜이 발표되었다. 그러나 이 개정판 프로토콜들은 많은 구현에서 채택되지는 않고 있다.

IRC 프로토콜에 대한 많은 규격 문서들이 발표되었지만, 공식 규격 문서는 존재하지는 않는다. 위에서 말한 RFC들을 참조 삼아 엄격하게 구현한 클라이언트는 현재 거의 하나도 없다고 해도 과언이 아니다.

IRC 서버들의 표준적인 구조는 일종의 트리(비순환 그래프)를 이룬다. 메시지들은 트리 내에서 전달에 필요한 가지(branch)들만을 따라 전달된다. 반면에 네트워크 스테이트(network state)는 모든 서버에게 전송된다. 일반적으로 매우 높은 수준의 비명시적 신뢰 관계가 서버들 사이에 존재한다. 이 아키텍처는 몇 가지 문제점을 가지고 있다; 잘못 동작하는 서버나 악의적으로 놓인 서버가 IRC 네트워크에 치명적인 손실을 가져다 줄 수도 있다. 의도적인 것에 의한 결과이든 하부 네트워크의 상황에 따른 결과이든 구조의 어떠한 변경은, 넷-스플리트(net-split)이나 넷-조인(net-join)을 요구할 수도 있다. 이로 인해 수많은 네트워크 트래픽과 가짜의 나감/들어옴(quit/join) 메시지가 유발되어 잠시 통신 연결이 손실될 수도 있다.[11] 또한 구조의 어떠한 변경은 대규모의 네트워크에 서버를 하나 추가한다는 셈이 되는데, 이것은 많은 네트워크에 백그라운드 밴드위스 부하를 가져다 주고, 서버에 많은 메모리 부하를 야기한다.

URI 스킴 편집

IRC에는 세 개의 인식 가능한 통합 자원 식별자(URI) 스킴이 있다.: irc, irc6, ircs.[12] 지원할 경우, 다음을 포함한 다양한 형태의 하이퍼링크를 허용한다.

irc://<host>[:<port>]/[<channel>[?<channel_keyword>]]

여기에서 항목들은 (필요하면) 지정된 호스트에 연결하여 특정 채널에 참여하기 위해 대괄호로 감싸고 있다.([,]는 선택 사항)[13] (클라이언트 자체적으로 내부에서 사용하거나 웹 브라우저와 같은 다른 응용 프로그램으로부터 사용할 수 있다) irc는 기본 URI이며, irc6는 IPv6를 이용하여 연결을 맺으며, ircs는 보안 연결을 규정한다.

기타 편집

마이크로소프트에서 IRC 프로토콜을 변형하여 1998년 IRCX라는 것을 내놓았다.[14] 당시 IRC 네트워크가 직면했던 문제점들의 일부만을 해결하였다. 사람들은 당시 이것에 대해 "시기상조"라고 했다.

클라이언트 편집

클라이언트 소프트웨어 편집

편집

바운서 편집

각주 편집

  1. "One-to-many". Internet Relay Chat Protocol. p. 11. sec. 3.2. RFC 1459. https://tools.ietf.org/html/rfc1459#section-3.2. 
  2. "One-To-One Communication". Internet Relay Chat: Architecture. p. 5. sec. 5.1. RFC 2810. https://tools.ietf.org/html/rfc2810#section-5.1. 
  3. Rollo, Troy. “A description of the DCC protocol”. irchelp.org. 2011년 4월 8일에 확인함. 
  4. Wang, Wallace (2004년 10월 25일). 〈Instant Messaging and Online Chat Rooms: Internet Relay Chat (IRC)〉. 《Steal this File Sharing Book》 1판. San Francisco, California: No Starch Press. 61–67쪽. ISBN 978-1-59327-050-6. 
  5. “IRC transcripts from the time of the 1991 Soviet coup d'état attempt”. Chapel Hill, North Carolina: ibiblio. 2009년 6월 28일에 원본 문서에서 보존된 문서. 2011년 4월 8일에 확인함. 
  6. “IRC logs of events of the Gulf War”. Chapel Hill, North Carolina: ibiblio. 2011년 4월 8일에 확인함. 
  7. "Introduction". Internet Relay Chat Protocol. p. 4. sec. 1. RFC 1459. https://tools.ietf.org/html/rfc1459#section-1. 
  8. "Servers". Internet Relay Chat Protocol. p. 4. sec. 1.1. RFC 1459. https://tools.ietf.org/html/rfc1459#section-1.1. 
  9. "Clients". Internet Relay Chat: Architecture. p. 3. sec. 2.2. RFC 2810. https://tools.ietf.org/html/rfc2810#section-2.2. 
  10. "Connect message". Internet Relay Chat Protocol. p. 29. sec. 4.3.5. RFC 1459. https://tools.ietf.org/html/rfc1459#section-4.3.5. 
  11. "Network Congestion". Internet Relay Chat: Architecture. pp. 7 – 8. sec. 6.3. RFC 2810. https://tools.ietf.org/html/rfc2810#section-6.3. 
  12. “Uniform Resource Identifier (URI) Schemes”. Internet Assigned Numbers Authority. 2012년 10월 14일에 확인함. 
  13. Butcher, Simon (January 2003). Uniform Resource Locator Schemes for Internet Relay Chat Entities. IETF. I-D draft-butcher-irc-url-04. https://tools.ietf.org/html/draft-butcher-irc-url-04. Retrieved 2011-04-10. 
  14. Abraham, Dalen (June 1998). Extensions to the Internet Relay Chat Protocol (IRCX). IETF. I-D draft-pfenning-irc-extensions-04. https://tools.ietf.org/html/draft-pfenning-irc-extensions-04. Retrieved 8 April 2011. 

외부 링크 편집

  • (영어) IRC - Curlie
한국어를 사용하는 IRC 서버
  • HanIRC (irc.hanirc.org:6661~9,: 8080) UTF-8(apink.hanirc.org:8080) - 2015년 11월 holywar.net 도메인만료로 IP로만 접속가능, 2017.04.14 13시 이후 운영되던 holywar 서버 접속불가. UTF-8 서버인 aoa.hanirc.org 만 접속가능.
  • 단군넷 (irc.dankun.net:6661~9, 방화벽 우회 포트 8080,8888)[깨진 링크]
  • 오징어 네트워크 (irc.ozinger.org:6660~9, 8080 단, 6667은 서버에 따라 안 될 수도 있음)
  • Luatic (irc.luatic.net cp949(6661~6669,7777,SSL+6443, 일부서버 8080) utf-8(7778,SSL+6444) )