Sogon 아키텍처 — 층과 호출 방향

Sogon 아키텍처 — 층과 호출 방향 An architecture diagram generated by Archify. SogonAppDelegate · 표면 소유 · 배선 · Architecture component SogonAppDelegate 표면 소유 · 배선 Views · 팝오버 · 설정 · Voice Bar · 글리프 · Architecture component Views 팝오버 · 설정 · Voice Bar · 글리프 AppState · @MainActor 중앙 상태 · Architecture component AppState @MainActor 중앙 상태 RecordingCoordinator · 단일 오케스트레이터 · Architecture component RecordingCoordinator 단일 오케스트레이터 Audio · 공유 마이크 · 세그먼트 · Services — 순서는 모른다 Audio 공유 마이크 · 세그먼트 STT · LLM · 프로토콜로 교체 · Services — 순서는 모른다 STT · LLM 프로토콜로 교체 Recording · 세션 · 조립 · 화자 · Services — 순서는 모른다 Recording 세션 · 조립 · 화자 TextInsertion · 접근성 · 컨텍스트 복원 · Services — 순서는 모른다 TextInsertion 접근성 · 컨텍스트 복원 Models · 순수 판정 · 부수 효과 없음 · Architecture component Models 순수 판정 · 부수 효과 없음 관찰 배선 상태 투사 판정 위임 Services — 순서는 모른다 Legend Frontend Backend Database Security External

원칙 셋

  • • 상태는 AppState 한 곳에 모으고 모든 표면이 관찰한다 — 뷰는 읽고 부수 효과는 주입된 클로저로 위임한다
  • • 파이프라인 순서는 RecordingCoordinator만 안다 — 서비스는 자기 일 안의 저장소·정책은 직접 부르지만 다음 단계가 무엇인지는 모른다
  • • 교체 가능한 지점은 프로토콜로 둔다 — 테스트가 같은 프로토콜에 mock을 끼운다

격리 규칙

  • • 전부 @MainActor가 기본이다
  • • 오디오 콜백처럼 실시간 스레드에서 도는 코드만 nonisolated static 순수 함수로 뺀다
  • • 설정 변경은 직전 값과 비교하지 말고 매번 목표 상태를 그대로 적용한다 — 알림이 합쳐지면 비교가 실제 변경을 놓친다

순수 모델이 담는 것

  • • SpeakerAlignment — 닻 맞추기 · 문장 단위 화자 · 쉼 단위 줄 나눔
  • • SpeakerAttributionResult — 화자 이름 대응(세션 안에서만 유효)
  • • TextChunking — 긴 텍스트를 줄 단위로 쪼갠다
  • • UpdateCheckSchedule — 타이머가 아니라 마지막 확인 시각으로 판정한다
  • • AppSettings — UserDefaults에 영속하고 AppState가 전파한다