Skip to content

아키텍처 ​

애플리케이션은 Go + MyGo 네이티브 UI를 사용합니다. VitePress는 별도의 문서 빌드이며 애플리케이션 프런트엔드로 포함되지 않습니다.

상태와 소유권 ​

main.go는 CLI 옵션을 해석하고 이름, 버전, 설정 경로 및 mygo.json에서 포함한 공개 업데이트 설정을 internal/app.Run에 전달합니다. app 패키지는 네이티브 수명 주기, 창, UI 테스트를 담당합니다. application은 환경 설정 저장소와 활성 창을 소유합니다. window는 연결, 전송 패널, 환경 설정, 저장된 위치, 명령 팔레트 상태와 함께 브라우저, 객체, Bucket, RAM, 메일, 업데이트의 기능별 상태를 묶습니다. 뷰는 상태를 선언적으로 읽고, commands()는 메뉴와 명령 팔레트 동작을 함께 정의합니다.

네이티브 언어 및 테마 API는 UI 스레드에서 실행됩니다. 환경 설정 변경을 백그라운드에서 저장한 뒤 UI 스냅샷, 언어, 화면 모드, 사용자 지정 메뉴를 함께 갱신합니다.

백그라운드 작업 ​

블로킹 작업은 window.run을 거칩니다. 작업 전에 사용자 입력을 복사하고 컨텍스트 취소를 지원하며 Window.Update로 결과를 반영합니다.

internal/tasks는 세대를 검사하여 늦은 진행률 또는 완료 콜백이 교체된 작업이나 닫힌 창을 갱신하지 못하게 합니다. 기반 계층은 설정과 탐색 동작을 직렬화합니다. internal/transfers.Queue는 대기 목록과 실행 수를 관리하는 별도 스케줄러로, 업로드와 다운로드 한도를 각각 적용하고 변경 작업에는 슬롯 하나를 제공합니다. 따라서 전송 중에도 탐색할 수 있습니다. AddBatch는 선택 항목을 모두 추가한 뒤 한 번만 스케줄링하고, 완료 시 대기열의 맨 앞만 확인합니다. 제거된 워커도 완료될 때까지 슬롯을 유지합니다. 완료하거나 건너뛴 작업은 작업 클로저를 해제하며, 이력 압축은 버려진 포인터를 지웁니다. 상태와 콜백은 UI가 소유하고, 워커는 복사된 파일 경로, 객체, 서비스 참조를 받습니다. 취소는 워커 컨텍스트에 전달되고 재시도는 워커가 멈춘 뒤 시작합니다. 연결을 끊으면 대기열 세대를 초기화하고 작업 클로저를 해제하므로 이전 세션 콜백이 새 전송에 영향을 주지 않습니다.

영속화 ​

config.Store는 스키마 버전, 언어, 화면 모드를 검증합니다. 뮤텍스가 스냅샷을 보호합니다. 임시 파일 쓰기, 동기화, 이름 변경을 사용하며 저장에 성공한 뒤에만 메모리를 변경합니다.

손상되었거나 지원하지 않는 설정은 자동으로 덮어쓰지 않습니다. 파일을 복구한 뒤 설정 다시 불러오기를 사용하세요. 이전 schema-v1 파일에 언어가 없으면 system을 상속합니다.

국제화 ​

internal/i18n/locales/*.json은 Go 바이너리에 포함됩니다. 의미 기반 키로 UI 코드가 특정 원문 언어에 의존하지 않게 합니다. 언어 결정과 대체 언어는 rivu와 같은 방식을 사용합니다.언어와 화면 모드를 참고하세요.

OSS 경계 ​

internal/ossclient는 Alibaba Cloud 공식 OSS Go SDK v2를 감싸 HTTPS Endpoint 검증, AccessKey/STS 서명, 리전별 클라이언트, 페이지 처리, 민감 정보를 제거한 오류를 제공합니다. internal/app에서 connection_actions.go는 로그인과 복구를 조정하고, browser_state.go는 탐색 이력, 목록 병합, 정렬 캐시를 소유하며, browser_actions.go는 탐색 요청을 조정합니다. 대응하는 뷰 파일이 Design v2 화면을 렌더링합니다. 미리 보기, 공유, 메타데이터, ACL 필드는 객체 대화상자 외곽과 분리되며 객체 변경에는 별도의 대기열 조정 로직이 있습니다. 전송 어댑터는 파일을 스트리밍하며 진행률과 명시적 충돌 정책을 제공하고, 가능하면 다운로드 ETag를 제한하며, 로컬 임시 파일을 확정하기 전에 크기와 CRC64를 검증합니다. SDK 전송 관리자는 멀티파트 및 체크포인트 복구를 제공합니다. 덮어쓰기 금지 헤더는 OSS Bucket 버전 관리 의미에 따릅니다. UI는 SDK를 직접 호출하거나 비밀 정보를 저장하면 안 됩니다.

설계 참조와 구현 마일스톤은 별도로 추적합니다. 실제 앱은 실제 OSS 요청을 사용하며 고정 데이터는 테스트에만 존재합니다. 계정 수준 목록 조회와 Bucket/접두사 직접 연결은 필요한 권한이 다릅니다. 연결 프로필에는 ID, Secret, Token을 저장하지 않습니다. 정렬은 불러온 페이지에만 적용하고 객체 접두사 검색은 서버에서 수행합니다.

영속 전송과 객체 작업 ​

internal/transfers.Record는 변경 불가능한 작업 설명 하나와 최근 결과를 JSON 파일 하나에 저장합니다. 실행 전후에 소유자만 접근할 수 있는 권한으로 파일을 원자적으로 교체합니다. 연결 프로필과 AccessKey ID를 해시하여 복구 디렉터리를 분리하며 비밀 정보와 서명 URL은 직렬화하지 않습니다. 복원된 미완료 항목은 정지 상태로 표시하고 명시적 재시도를 요구합니다. 유효한 미완료 기록과 파일별 진단을 함께 반환하며 손상된 기록은 디스크에 남고 다른 작업 복원을 막지 않습니다. SDK 체크포인트 디렉터리는 개별 작업에 속하며 동시 시도가 같은 체크포인트를 조작할 수 없습니다. 기록 임대는 워커 실행부터 마지막 저널 쓰기까지 유지됩니다. 명시적 제거는 삭제 표식을 기록하고 워커 종료 후 저널, 체크포인트, 비공개 다운로드 준비 디렉터리를 정리합니다. 종료 상태 기록은 7일간 유지하고 연결 시 정리합니다. 미완료 또는 손상 기록은 오래되었다는 이유로 삭제하지 않습니다. 정리 실패 데이터는 다음 정리 때 처리합니다.

업로드, 다운로드, 재귀 객체 계획은 MyGo와 독립적인 internal/transfers에 있습니다. 폴더 계획은 심볼릭 링크와 일반 파일이 아닌 입력을 거부하고 다운로드 디렉터리를 준비할 때 os.Root를 사용합니다. OSS 키는 경로 이탈, 예약 이름, 대소문자 충돌을 검사합니다. 전송 작업은 선택한 상대 트리를 보존합니다. 다운로드 SDK 체크포인트는 저장 범위를 검증한 뒤 재사용합니다. 취소 시 파트 데이터는 남으며, 원격 멀티파트 정리는 확인이 필요한 Bucket 멀티파트 대화상자에서 제공합니다.

internal/vault는 OS 자격 증명 저장소를 감쌉니다. 저장과 삭제에는 명시적인 UI 동작이 필요합니다. 로그인 유지는 이후 저장소 읽기를 허용하며 평문으로 대체하지 않습니다. 테스트는 메모리 내 저장소 제공자를 사용합니다. internal/ossclient는 UI 제어와 독립적으로 인증 코드 만료, 읽기 전용 제한, 루트 범위를 강제합니다.

객체 미리 보기는 디코딩 전에 상한을 적용합니다. 편집한 텍스트는 기본적으로 새 키에 저장합니다. 원본 교체는 명시적으로 선택하며 ETag를 사전 확인하고 헤더, 메타데이터, ACL, 태그, 스토리지 클래스를 보존합니다. 사전 확인과 PUT은 원자적이지 않습니다. 메타데이터 자기 복사는 원본 ETag를 제한하고 ACL과 콘텐츠 헤더를 보존합니다. 이동 재시도는 이미 성공한 복사를 기억하지만 삭제는 별도의 비원자적 OSS 작업입니다. 객체 변경 작업은 현재 세션에만 속하며 재시작 후 재실행하지 않습니다.

업데이트 확인은 internal/updates를 통해 설정된 MyGo 피드/서명 형식과 MyGo 설치 자격을 사용하며, 그렇지 않으면 고정 GitHub 저장소를 사용합니다. 자동 업데이트는 전체 아카이브를 준비하고 검증하기만 합니다. 명시적 설치 시 해당 바이트를 재검증하고 교체 실패 시 롤백을 지원한 뒤 별도의 MyGo 재시작 동작을 제공합니다. 델타 아카이브는 사용하지 않습니다. 미설정 개발 빌드는 수동 다운로드를 제공합니다. 업데이트, 썸네일, 객체 상세 작업은 취소 세대를 각각 관리합니다. 설정은 별도의 범주 대화상자에서 초안 검증과 저장에 디바운스를 적용합니다. RAM/STS는 서명된 OpenAPI 요청을 사용하고 SMTP는 TLS를 강제합니다. 크기가 제한된 진단 워커는 페이로드나 비밀 정보 없이 작업 상태와 오류 유형을 저장합니다.

프로토콜 참고: OSS Uploader, PutObject, CopyObject, 설계에 연결된 고정 버전 업스트림 OSS Browser 인증 코드 형식.

목록 및 렌더링 비용 ​

페이지 병합은 키 집합으로 선형 시간에 중복을 제거합니다. 새로 고침과 병합 시 목록 슬라이스를 교체하고 브라우저 상태는 목록 식별자, 정렬 순서, 검색 조건에 따라 정렬된 행을 캐시합니다. 전송 이력과 확인 목록은 ui.List로 보이는 행만 생성합니다. 이력 행은 작업 식별자를 키로 사용하므로 필터링과 삭제 후에도 올바른 동작을 유지합니다.

버전 경계 ​

internal/buildinfo.Version이 데스크톱 버전의 기준입니다. 루트 진입점은 이를 app.Run에 전달하고 tools/version은 mygo.json과 확인 또는 동기화합니다. CI, make check, Release 워크플로는 같은 검사를 실행합니다. 비공개 루트 npm 패키지 버전은 데스크톱 릴리스 버전을 나타내지 않습니다.

OSS Browser를 독립적으로 재구축한 프로젝트입니다.