정보공간_1

[4기 부산 김한남] 분산 컴퓨팅 시스템과 BitTorrent 본문

IT 놀이터/Elite Member Tech & Talk

[4기 부산 김한남] 분산 컴퓨팅 시스템과 BitTorrent

알 수 없는 사용자 2013. 12. 4. 22:35

안녕하세요! 부산멤버십 22-1기 김한남 회원입니다. 

네 번에 걸쳐 신명회로망에 대하여 이야기를 해보았습니다만 이번 회는 주제를 바꿔 분산 컴퓨팅 시스템(Distributed Computing System)과 이와 관련된 시스템인 BitTorrent에 대하여 간단히 이야기 해보고자 합니다. 

BitTorrent와 같은 P2P(Peer-to-Peer) 프로그램은 
저작권에 대한 유저 개개인의 인식에 따라 잘 못 사용되어질 경우 특정 개인이나 단체가 소유하고 있는 컨텐츠의 저작권을 침해한다는 이유 때문에 사회적인 이슈가 되고 있기도 합니다만, 저와 같은 소프트웨어 엔지니어와 IT에 관심이 있는 여러분들과 같은 분들은 BitTorrent의 시스템 구조나 동작 원리에 대하여 궁금증을 가질 필요가 있다고 생각합니다. 

가장 먼저
분산 컴퓨팅 시스템에 대하여 간략히 알고 넘어가도록 하겠습니다. 분산 컴퓨팅 시스템의 정의는 다음과 같습니다. 


"분산 컴퓨팅(Distributed computing)은 인터넷에 연결된 여러 컴퓨터들의 처리 능력을 이용하여 거대한 계산 문제를 해결하려는 분산처리 모델이다." - 
Wikipedia - 

"인터넷 기반 분산컴퓨팅은 인터넷에 연결된 여러 컴퓨터들의 처리능력을 이용하여 거대한 계산문제를 해결하려는 분산처리 모델로, P2P 기술의 일부분이다." - 
Naver 지식백과 -


단일 시스템의 성능은 다양한 측면에서 제한적이지만, 동일한 성능의 여러 대의 컴퓨터를 네트워크로 서로 연결하여 어떤 문제를 해결한다고 가정한다면, 단일 시스템의 제한적인 성능을 훨씬 뛰어넘을 수 있습니다. 분산 컴퓨팅의 가장 대표적인 사례로
SETI@home 프로젝트가 있습니다. 


SETI@home

SETI@home 프로젝트는 우주에 거대한 생명체가 존재할 가능성이 높은 행성의 주파수 대역의 신호를 분석하여 특정한 반복 패턴을 보이는 인공적으로 만들어진 전파 신호를 가려내는 시스템인 SETI 프로젝트로부터 발전된 모델입니다. 광활한 우주로부터 입력되는 천문학적인 데이터를 성능이 뛰어난 슈퍼 컴퓨터로 처리하기 위해 시도하였지만 이를 감당하지 못 하였고,  결국 이를 해결하기 위해 SETI@home 프로젝트가 시작됩니다.
SETI@home은 인터넷으로 연결된 수 많은 개인 컴퓨터의 자원을 이용하여 데이터의 처리를 이들 가정 컴퓨터에 분산시켜 해결하고자 한 것입니다. 이를 통해 수천, 수만의 개인 컴퓨터 자원을 사용하여 데이터를 분석하고 이 결과를 중앙 컴퓨터로 전달하는 방식으로 구성되어 있습니다. 

그 외 은행 전산망 시스템(Electric Banking System)과 비행기 예약 시스템(Airline Reservation System), 그리고 우리가 다루어 볼 BitTorrent도 모두 분산 컴퓨팅 기법으로 개발된 시스템으로 볼 수 있습니다. 


이제 분산 컴퓨팅 시스템의 하나로 볼 수 있는 BitTorrent에 대하여 알아보도록 하겠습니다. 




BitTorrent의 구조를 말할 때 가장 핵심이 되는 키워드는 바로 방금까지 간략히 다루어보았던 ‘분산 컴퓨팅 시스템(Distributed Computing System)’입니다. 이 말은 BitTorrent가 하나의 단일 시스템으로 동작하는 것이 아니라 시스템이 여러 개로 분산되어 사용자(Client)들의 요청을 처리하며 동작한다는 것입니다. 


BitTorrent의 시스템 구조는 다음과 같습니다. 




BitTorrent의 구조는 각 노드에 해당하는 유저 컴퓨터들이 인접한 노드들과 연결되어 BitTorrent 시스템을 구성하는 구조인데 핵심 포인트는 모든 노드들이 서버와 클라이언트 역할을 겸하며 서로가 동등한 입장이라는 것입니다. 상반된 개념으로 전체 시스템을 감시하거나 제어하는 중앙 집중식 서버(Centralized Server) 모델이 있습니다. 하지만 BitTorrent의 경우 네트워크로 이루어진 커다란 시스템을 제어하는 서버가 없으므로 BitTorrent 네트워크에 가입한 모든 노드들이 서버이자 클라이언트 역할을 모두 수행한다는 것입니다. 

다만 BitTorrent의 경우 파일을 검색하는 과정에 Tracker라는 중개 서버가 존재하는데 이는 특정 파일을 가지고 있는 노드들의 주소를 가지고 있는 서버로 어떤 노드가 A라는 파일의 소유자들을 요청했을 때 Tracker는 그 노드에게 A를 가진 노드들의 주소 목록을 알려주는 방식입니다. 하지만 최근 Tracker 없이도 운영되는 방식으로 시스템이 변경되었다고 합니다.

과거 많은 사람들이 사용하였던 ‘소리바다’나 ‘냅스터(Napster)’의 경우, BitTorrent와 유사한 P2P 프로그램이었지만 BitTorrent와는 달리 중앙 집중식 서버 모델을 구성하였으므로 프로그램을 통해 공유되는 데이터들이 저작권으로부터 법적으로 자유롭지 못해 결국 시스템이 폐쇄되는 일이 벌어지기도 하였습니다. 하지만 BitTorrent의 경우, 공유되는 수많은 데이터들의 정보를 중앙 서버에 저장을 하는 구조가 아니기 때문에 시스템의 운영은 법적으로부터 어느 정도 자유롭다고 볼 수 있습니다. 게다가 최근 Tracker 없이도 서비스가 가능한 모델로 발전하면서 법으로부터 보다 자유로워졌습니다.

위와 같은 중앙 집중식 서버 모델의 경우 한 가지 큰 약점이 또 존재하는데, 그 것은 바로 서버가 Shutdown되면 모든 시스템이 멈춘다는 것입니다. 시스템을 유지하는 서버가 사라졌기 때문입니다. 하지만 BitTorrent의 경우 이러한 중앙 서버가 없기 때문에 누군가가 BitTorrent의 네트워크 전체를 Shutdown 시킨다는 것은 사실상 불가능하다고 볼 수 있습니다. 시스템이 분산되어 있기 때문입니다. 

이어서 BitTorrent의 동작 과정을 알아보도록 하겠습니다. 

위에서도 간략히 설명 하였듯이 BitTorrent 네트워크에 가입한 한 명의 사용자는 BitTorrent 전체 시스템에서 하나의 노드가 됩니다. 유저가 
한 파일을 받기 위해서 해당 파일을 가리키는 고유의 해시 값이 포함된 torrent 파일이 필요한데 이 파일로부터 해시 값을 읽어 트래커(Tracker)라는 서버에게 해시 값에 해당되는 파일을 가지고 있는 노드들의 주소를 요청하게 됩니다. 최근 Tracker 없이 파일을 요청할 수 있는 방식으로 변경되었는데 변경 이 후 Flooding 방식으로 파일의 소유자 주소를 요청하는 것이 아닐까하는 생각을 해봅니다. (이 정보는 직접 접한 것은 아니므로 트래커가 있는 시스템을 가정하고 설명을 이어나가겠습니다.) Flooding은 Gnutella가 채택하고 있는 검색 방식으로 인접한 노드(son)에 가장 먼저 검색 요청을 전달하고 다시 인접한 노드(son)의 인접한 노드(grandson)들로 다시 요청을 전달하는 방식입니다.

트래커로부터 파일을 가지고 있는 노드의 주소 목록을 받은 사용자는 각 노드와 소켓을 생성하여 상대측 노드들로부터 파일을 여러 조각으로 받게 됩니다. 여기서 중요한 점은 파일을 받은 이 후부터는 나 또한 다른 상대방에게 파일의 조각들을 공유할 수 있다는 점입니다. 

만약 BitTorrent가 분산된 시스템이 아닌 단일 시스템으로 구성된다면 어떨까요? 과연 수 많은 사용자들의 요청을 처리하거나 수 많은 파일들이 발생시키는 트래픽을 감당 할 수 있을까요? 
물론 BitTorrent 시스템이 이렇게 단순하지는 않습니다. 훨씬 복잡하게 설계되어 동작을 하고 있지만 이 포스팅의 핵심은 분산 컴퓨팅 시스템을 이해하는 것입니다. 지금도 다양한 분야에 분산 컴퓨팅 시스템이 적용되고 있고 앞으로도 보다 다양한 곳에 분산 컴퓨팅 기법이 적용될 것이라고 생각합니다. 여러분들도 그렇게 생각하시나요?

이상 분산 컴퓨팅 시스템과 BitTorrent에 대한 이야기를 마무리하겠습니다. 긴 글 읽어주셔서 감사합니다.