본문 바로가기
C.W.K.
Stream
Lesson 01 of 04 · published

주소를 안다고 연결된 건 아니야

~12 min · saved-endpoint, mount-truth, projection

Level 0Finder 에서 헤매는 중
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'서버가 어디 있는지 안다' 와 '지금 연결돼 있다' 는 완전히 다른 얘기야. 둘을 헷갈리면 사이드바가 거짓말을 해."

사람들이 뭉뚱그리는 두 가지

네트워크 공유에 연결하면 두 가지가 따로 벌어져. 하나, Waygate 가 그 공유가 어디 있는지 기억할 수 있어. 나중에 다시 연결할 주소로. 둘, macOS 가 실제로 볼륨을 붙여서 파일에 닿을 수 있게 해. 순진한 앱은 저장해 둔 주소를 연결 상태인 것처럼 다뤄. 주소만 있으면 사이드바에 공유를 쓸 수 있는 것처럼 띄우는 거지. 네트워크가 끊기는 순간 그건 거짓말이 돼.

주소는 그냥 주소야

Waygate 가 기억하는 네트워크 위치는 정리한 주소야. 방식(smb), 호스트, 공유 이름, 그리고 보여줄 이름. 그게 다야. 저장해둔 연락처 주소 같은 거지. 주소를 안다고 그 사람이 집에 있는 건 아니잖아. 주소가 있으니 '다시 연결' 을 띄울 수 있고, 그건 macOS 한테 연결 흐름을 부탁하는 거야. 혼자서 공유가 붙어 있고 파일이 거기 있다고 주장하진 않아.

연결 상태는 시스템이 알려줘

진짜 궁금한 것 — 이 볼륨이 지금 붙어 있나 — 은 macOS 의 마운트·언마운트 알림을 보고 판단해. 그게 사실이야. 저장해 뒀지만 지금 안 붙어 있는 주소는 사이드바에서 들어갈 수 있는 폴더가 아니라 연결 끊김으로 보여. 사이드바가 안 붙어 있는 공유를 살아 있는 것처럼 보여준다면 그건 화면 오류야. 시스템의 상태 대신 자기가 저장한 주소를 믿은 거지.

저장해 둔 주소는 정리한 주소일 뿐이지 연결돼 있다는 주장이 아니야. Waygate 는 방식과 호스트와 공유와 보여줄 이름을 담고, 연결은 macOS 에 부탁하고, 붙었는지 떨어졌는지는 시스템 알림으로 판단해. 안 붙었는데 붙은 것처럼 보이는 사이드바는 앱이 주장할 수 있는 사실이 아니라 화면 오류야.
Track 2 의 규율을 볼륨에 적용한 거야. 마운트도 파일과 똑같아. 진짜로 거기 있는지는 시스템이 알고, Waygate 는 알림에 맞춰 다시 확인해야 하는 화면을 보여줄 뿐이지. 파일 한 줄을 정직하게 지키는 그 규율이 네트워크 공유도 정직하게 지켜. 주소는 참조고 연결 상태가 사실이고, 둘은 절대 안 섞여.

Code

주소는 정리해서, 연결 상태는 시스템에서·swift
struct SavedNetworkLocation {
    let scheme: String       // "smb"
    let host: String         // "fileserver.local"
    let share: String        // "projects"
    let displayName: String  // "Projects (Office)"
    // NOTE: no username, no password, no cached file list. Just an address.
}

// The REAL mount truth comes from macOS, not from having a saved endpoint:
func observeMounts() {
    let nc = NSWorkspace.shared.notificationCenter
    nc.addObserver(forName: NSWorkspace.didMountNotification, object: nil, queue: nil) { note in
        self.markOnline(volume: note.mountedVolumeURL)     // now it's really there
    }
    nc.addObserver(forName: NSWorkspace.didUnmountNotification, object: nil, queue: nil) { note in
        self.markOffline(volume: note.unmountedVolumeURL)  // gone -- update the projection
    }
}

External links

Exercise

네트워크 공유에 연결한 다음 꺼내기 없이 네트워크를 끊어봐. 앱마다 사이드바가 어떻게 되는지 보고. 어떤 건 계속 쓸 수 있는 것처럼 두고, 어떤 건 바로 연결 끊김으로 바꿔. 계속 보여주는 쪽에서 파일을 열면 뭐가 벌어질지 예상해봐. 그다음 정직한 앱과 거짓말하는 앱을 가르는 규칙을 말해봐.
Hint
저장한 주소를 사실로 믿는 앱은 공유를 살아 있는 것처럼 두고, 파일을 누르면 무지개 커서가 돌거나(Track 6) 알 수 없는 오류가 나. 마운트 알림을 보는 앱은 바로 연결 끊김으로 바꾸고. 가르는 규칙은 이거야. 연결 상태는 시스템 알림에서 와야지, 한때 주소를 저장했다는 사실에서 넘겨짚으면 안 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.