. 로컬 네트워크

요즘 네트워크에 붙어 있지 않은 컴퓨터는 무척 드물다. 사무실에서는 워크그룹에 가입되어 있어 같은 사무실내의 컴퓨터들과 모두 연결되어 있고 집에서는 인터넷으로 연결되어 있어 사실상 세계의 모든 컴퓨터와 연결되어 있다. 그래서 이제 네트워크 지원은 더 이상 특별하다고 할 수 없는 일반적인 기능이 되어 버려 권한만 있다면 지구상의 어떤 파일이라도 볼 수 있고 편집할 수 있게 되었다.

그렇다면 당근도 당연히 네트워크를 지원해야 하는데 먼저 로컬 네트워크, 즉 같은 서브넷에 속한 컴퓨터의 파일을 읽어 오는 기능부터 작성해보자. 이 기능은 이미 완벽하게 작성되어 있기 때문에 더 이상 코드를 추가할 필요가 없으며 잘 동작하는지 확인만 해보면 된다. 당근을 실행한 후 파일/열기 항목을 선택하면 파일열기 대화상자가 열릴 것이다. 여기서 네트워크 환경을 선택하면 로컬 네트워크에 접속하여 파일을 선택할 수 있다.

네트워크에 있는 파일을 읽을 수 있으며 편집 후 저장하는 것도 가능하다. 물론 이렇게 되려면 네트워크의 파일이 공유되어 있어야 하고 쓰기 권한이 주어져 있어야 한다. MRU도 잘 지원되므로 전에 읽었던 네트워크 상의 파일을 다시 읽어 올 수도 있다.

이런 네트워크 지원이 한 줄의 코딩도 없이 공짜로 구현되는 이유는 운영체제가 로컬 네트워크상의 파일을 내 컴퓨터에 있는 파일과 동등하게 취급하기 때문이다. 먼저 파일열기 공통 대화상자는 네트워크 환경으로 들어가 같은 워크그룹 또는 도메인에 속한 컴퓨터의 목록을 보여주고 이 컴퓨터의 공유폴더와 그 속의 파일을 선택할 수 있도록 한다. 선택된 파일의 경로는 UNC(Universal Naming Convention)로 전달된다. UNC는 네트워크상의 모든 리소스를 유일하게 구분할 수 있는 이름이며 다음과 같은 형식의 문자열이다.

 

\\컴퓨터이름\공유명\폴더\파일

 

UNC에는 어떤 컴퓨터의 어떤 공유폴더에 이 파일이 있는지, 그리고 파일의 이름은 무엇인지에 대한 정보가 모두 들어 있다. 예를 들어 Babo라는 컴퓨터의 재미있는 파일 공유폴더에 들어 있는 cowmadam.avi 파일의 UNC \\Babo\재미있는 파일\cowmadam.avi가 된다.

UNC로 표현된 파일을 곧바로 읽을 수 있는 이유는 CreateFile 함수가 UNC를 해석할 수 있기 때문이다. 열고자 하는 파일의 위치와 이름을 정확하게 해석하여 네트워크 상의 파일을 열어주고 그 핸들을 리턴한다. 이 핸들로 ReadFile, WriteFile 함수를 호출하면 로컬 네트워크의 파일을 마음대로 입출력할 수 있다.

그래서 당근은 단 한 줄의 코드도 작성하지 않고 UNC와 운영체제의 지원 덕분에 로컬 네트워크의 파일을 읽고 쓸 수 있다.