옆방에 서류함이 있고, 서류가 필요할 때마다 관리인에게 쪽지를 보낸다고 해 봅시다. "저 왔어요"(연결), "제 사원증이에요"(로그인), "3번 서랍 열람 가능한가요?"(권한), "그 서류 1쪽부터 주세요"(읽기). 서류는 내 책상으로 한 묶음씩 배달됩니다.
네트워크 드라이브(SMB)의 파일 열기가 정확히 이 방식입니다. 탐색기의
Z:\photos\photo.jpg는 로컬 파일처럼 보이지만, 더블클릭하는 순간 PC와 NAS
사이에 요청·응답 메시지가 연달아 오갑니다.
더블클릭 뒤의 대화
- 연결 — 포트 445로 TCP 연결부터 맺습니다. 이 단계는 TCP 핸드셰이크 랩에서 본 그 세 번의 인사 위에서 일어납니다.
- 로그인(인증) — 계정을 증명하면 NAS가 세션을 열어 줍니다.
- 공유·파일 열기(인가) — 공유 폴더 접근 권한을 확인받고, 파일을 열면 번호표(핸들)를 받습니다.
- 조각으로 읽기 — 파일은 한 번에 오지 않습니다. 요청·응답을 오가며 조각으로 받아서, 앱이 모아 띄웁니다.
큰 파일이나 사진 수백 장이 든 폴더가 버벅이는 이유가 여기 있습니다. 왕복이 쌓이는 만큼 느려집니다.
로그인과 권한은 별개입니다
같은 계정으로 로그인에 성공해도, 권한 목록에 없는 공유 폴더는 연결 단계에서 ACCESS_DENIED로 잘립니다. 이때 파일 내용은 한 바이트도 PC로 오지 않습니다. 권한은 파일이 있는 쪽(NAS)이 지키는 것이라, PC 쪽 설정으로는 뚫을 수 없습니다. 공유 폴더 권한 관리를 NAS에서 계정별로 하는 이유입니다.
1편 RAID 랩이 "NAS 안에서 파일이 어떻게 살아남는가"였다면, 이번 편은 "그 파일이 내 PC까지 어떻게 오는가"입니다. RAID로도 못 막는 재해에서 살아남는 법은 3편 백업 3-2-1 랩에서 다룹니다.
큰 파일 하나보다 작은 파일 1,000개가 느립니다
"왕복이 쌓이는 만큼 느려진다"를 숫자로 보면 왜 그런지 분명해집니다.
파일 하나를 열려면 앞의 4단계 중 최소 몇 번의 요청·응답이 오갑니다. NAS까지 왕복이 1ms라고 해봅시다.
- 10GB 영화 한 편 — 여는 절차는 한 번뿐이고, 그다음은 큰 조각을 연달아 받습니다. 회선 속도가 그대로 나옵니다.
- 1MB 사진 1,000장 — 여는 절차를 1,000번 반복합니다. 왕복만 모아도 수 초가 그냥 사라집니다. 정작 데이터 양은 1GB밖에 안 되는데도요.
용량이 아니라 파일 개수가 체감 속도를 정하는 것입니다. 같은 폴더를 로컬 디스크에 복사할 때는 별로 티가 안 나던 차이가, 네트워크를 건너는 순간 크게 벌어집니다.
이 사실을 알면 대처도 단순해집니다. 사진 폴더를 통째로 옮길 때는 압축해서 파일 하나로 만든 뒤 보내는 편이 훨씬 빠릅니다. 왕복 횟수를 1,000번에서 한 번으로 줄이는 셈이니까요. 다만 이미 압축된 사진·영상은 파일 크기가 거의 줄지 않고 압축·해제 시간도 들기 때문에, 이 방법의 이점은 용량 감소보다 파일 열기 왕복 감소에 있습니다. 탐색기에서 사진 폴더를 열 때 썸네일이 느리게 뜨는 것도 같은 이유입니다.
회선을 늘려도 안 빨라질 때
기가비트 회선을 10기가로 바꿨는데 체감이 그대로인 경우가 있습니다. 위 계산을 보면 이유를 알 수 있습니다. 왕복 대기 시간은 회선 속도를 올려도 줄지 않습니다.
회선 속도가 결정하는 것은 "한 번에 얼마나 많이 보내느냐"이고, 왕복 시간이 결정하는 것은 "한 번 물어보고 답을 듣는 데 얼마나 걸리느냐"입니다. 작은 파일이 많은 작업은 후자에 묶여 있어서, 앞의 숫자를 키워도 달라지지 않습니다.
권한 없는 폴더로 바꿔 보세요
아래 파란 버튼만 누르세요
더블클릭 뒤에 오가는 메시지를 따라가세요
더블클릭하면 여기로 메시지가 오가요.
파일 조립 — photo.jpg
데이터 조각이 도착하면 여기가 채워져요.
지나온 기록
더블클릭하면 단계마다 기록이 쌓여요.
시나리오를 고르고 더블클릭을 누르세요. 로컬 파일처럼 보이는 더블클릭 뒤에서, PC와 NAS가 나누는 대화를 한 단계씩 보여드려요.
원리 세 가지만
네트워크 드라이브가 로컬과 다른 이유
탐색기에 보이는 건 목록일 뿐이에요. 열기·저장·복사 전부 SMB 요청으로 바뀌어 NAS에 전달되고, 실제 작업은 NAS가 해요.
연결 → 로그인(인증) → 공유 권한(인가) → 파일 핸들. 하나라도 통과하지 못하면 그 자리에서 거부돼요. 로그인과 권한은 별개예요.
큰 파일은 요청·응답을 여러 번 오가며 조각으로 받아요. 왕복이 쌓이는 만큼 느려지는 것 — 네트워크 드라이브가 잠깐 버벅이는 이유예요.
데모만 따로 보려면 전체 화면으로 열기.
- 파일 열기에서 더블클릭을 누르고, 연결 → 로그인 → 권한 → 핸들 → 조각 읽기 순서로 메시지가 쌓이는 것을 봅니다.
- 데이터 조각이 도착할 때마다 오른쪽 파일 조립 칸이 채워지는 것을 확인합니다.
- 권한 없는 폴더로 바꿔, 로그인은 성공하는데 공유 연결에서 거부되는 순간을 봅니다.
숫자로 보면 왜 그런지 분명해집니다
"작은 파일이 느리다"를 산수로 확인해 보겠습니다. 같은 1GiB를 두 가지 방법으로 옮긴다고 해 봅시다.
- 방법 A: 1GiB 파일 1개
- 방법 B: 1MiB 파일 1,000개
옮기는 총량은 같습니다. 그런데 파일 하나마다 열기·읽기·닫기·속성 확인 같은 대화가 붙습니다. 넉넉히 잡아 파일당 왕복 4번이라고 하고, 같은 랜 안이라 왕복이 1ms라고 해 봅시다.
| 왕복 횟수 | 대화에만 쓰는 시간 | |
|---|---|---|
| 1GiB 파일 1개 | 4회 | 4ms |
| 1MiB 파일 1,000개 | 4,000회 | 4,000ms = 4초 |
데이터를 옮기기도 전에 4초를 씁니다. 참고로 1Gbps 회선이 1GiB를 통째로 흘리는 데 걸리는 이론상 시간이 약 8.6초입니다. 즉 작은 파일 쪽은 전송 시간의 절반쯤을 대화로만 더 쓰는 셈입니다.
여기서 핵심은 4ms라는 왕복 값이 회선 속도와 거의 무관하다는 점입니다. 기가비트를 2.5기가비트로 올리면 1GiB 전송은 8.6초에서 3.4초로 줄지만, 4,000번의 왕복은 그대로 4초입니다. 회선을 올려도 작은 파일 복사가 기대만큼 안 빨라지는 이유입니다.
그래서 실무의 해법은 회선이 아니라 왕복 횟수를 줄이는 쪽입니다.
- 많은 파일은 압축해 하나로 묶어서 옮긴다
- 폴더 동기화 도구로 바뀐 것만 고른다
- 왕복이 긴 원격 구간에서는 특히 위 두 가지가 크게 작용한다
느려지는 지점만 다시
- 로컬 드라이브처럼 보여도 파일 열기는 요청과 응답의 연속입니다. 로그인에 성공했다고 그 폴더를 읽을 수 있는 건 아닙니다. 인증과 인가는 다른 단계입니다.
- 파일은 조각으로 나눠 오므로 왕복 횟수가 곧 체감 속도입니다. 회선 속도를 올려도 왕복 수가 그대로면 사진 1,000장은 여전히 느립니다.
권한은 두 군데에서 각각 검사합니다
로그인과 권한이 다른 단계라는 것까지 봤는데, 실제 NAS 에서는 권한 자체가 또 두 겹입니다. 이 구분을 모르면 설정을 고쳤는데도 여전히 막히는 상황을 만나게 됩니다.
첫 번째는 공유 폴더에 걸린 권한입니다. 네트워크로 접근할 때 그 폴더를 열 수 있는지 정하는 값이고, NAS 관리 화면의 공유 폴더 설정에서 다룹니다. 두 번째는 그 폴더가 실제로 놓여 있는 파일 시스템 자체의 권한입니다. 로컬에서든 네트워크에서든 그 파일에 접근할 수 있는지 정합니다.
접근이 허용되려면 둘 다 통과해야 합니다. 그래서 더 엄격한 쪽이 결과를 정합니다. 공유 설정에서 읽기·쓰기를 다 열어 줬는데도 파일이 안 써진다면, 그 아래 파일 시스템 권한이 읽기만 허용하고 있을 가능성이 큽니다. 반대로 파일 시스템에서 다 열어 줘도 공유 설정이 막고 있으면 역시 안 됩니다.
증상은 하나인데 고쳐야 할 곳이 둘이라, 한쪽만 보고 있으면 계속 헛돕니다. 이런 문제를 만나면 어느 쪽을 확인했는지 적어 가며 하나씩 좁히는 편이 빠릅니다.
이 데모가 줄인 것
데모는 SMB의 흐름을 원리 위주로 줄인 것으로, 실제로는 버전 협상과 서명·암호화, 잠금·캐시(oplock/lease) 같은 단계가 더 있습니다. 맥의 파인더와 스마트폰 파일 앱도 SMB를 지원하지만, NAS와 앱 설정에 따라 NFS·WebDAV나 제조사 전용 프로토콜을 사용할 수도 있습니다. 이 글의 단계는 SMB 공유를 고른 경우의 흐름입니다.