개인정보 처리방침
기준일: 2026년 10월 28일 · 적용 버전: 0.4.0
uniDock은 고려대학교와 공식 제휴 관계가 없는 비공식 학습 도우미입니다. 이 방침은 확장 프로그램의 데이터 처리에 적용됩니다.
처리하는 정보와 목적
사용자가 조회할 때 LMS의 과목명, 과제·마감·제출 상태, 일정·할 일, 녹화 강의 모듈·제목을 읽어 Side Panel에 표시합니다. 녹화 강의에는 LearningX 게시판 글에 포함된 KU 플레이어 영상의 글 제목·게시판 이름도 포함되며, 사용자가 열기를 누르면 해당 플레이어 페이지를 새 탭에서 엽니다. 내부 과목/항목 식별자와 플레이어 주소는 요청과 탭 열기 처리 중에만 사용합니다. 현재 탭의 주소는 허용 출처, 탭/문서 변경, 사용자가 선택한 강의 접근을 확인하는 데 사용합니다. 전체 방문 기록을 조회하거나 분석하지 않습니다.
자막 감지를 선택하면 현재 강의 탭 및 접근 가능한 프레임의 자막 목록을 우선 읽고, 없으면 KU 플레이어의 설정에 명시된 XML/VTT를 조회하여 한국어 자막을 우선 선택합니다. VTT가 없으면 플레이어에 이미 로드된 별도 TXT 스크립트도 읽습니다. 시간·문장·강의 URL·제목·추출 시각을 감지·표시·TXT/JSON 내보내기만을 위해 처리하며 일반 웹페이지 본문 전체를 수집하지 않습니다.
수업 자료 다운로드. 선택한 과목의 주차학습 모듈과 게시판·공지 첨부파일에서 PDF·PPTX·PPT 후보의 출처·자료 제목·파일명과 일회성 열기·다운로드 키를 처리합니다. 사용자가 다운로드를 누른 경우에만 브라우저가 기본 다운로드 폴더의 uniDock/과목/모듈/ 아래 파일을 저장합니다. 확장은 파일 내용을 fetch·파싱·업로드하지 않습니다. 완료 상태는 확장 자신의 다운로드 이벤트와 해당 ID의 파일명·출처·상태·MIME을 메모리에서 확인하며 전체 다운로드 기록은 조회하지 않습니다. 연결이 불확실하면 요청됨, 파일 형식과 MIME이 일치하지 않으면 확인 필요로 안내합니다. ChatGPT에서 질문하기를 선택하면 한국어 질문 템플릿을 클립보드에 복사하고 ChatGPT 시작 페이지를 엽니다. 파일 첨부·입력·제출은 사용자가 직접 수행하며 그때 해당 서비스의 방침이 적용됩니다.
선택적 순차 자동 재생
기본 비활성입니다. 사용자가 과목을 고르고 영상을 직접 체크한 뒤 ‘자동 재생’을 눌러야 시작하며, 체크한 영상만 체크한 순서대로 정상(1x) 속도로 재생합니다. 브라우저의 영상 종료(ended) 이벤트를 확인하면 다음 영상으로 넘어갑니다. 재생용 전용 탭이 화면에 보이는 상태여야 하며 숨겨진 탭이나 백그라운드에서는 재생하지 않습니다. 배속 재생, LMS 완료·출석 API 호출, 출석 위조, 무한 keepalive는 하지 않습니다. 시작·영상 전환 때와 재생 중 정해진 간격으로 현재 LMS 계정과 강의 접근 권한을 다시 확인하고, 로그인이 풀리면 재생을 멈춥니다. 다시 로그인한 뒤 사용자가 직접 재개해야 합니다. 영상을 재생하면 LMS·LTI 플레이어가 자체적으로 시청·진도·출석 기록을 남길 수 있으며, 이 기록은 해당 서비스에서 확인하세요. 이 기능은 외부 서버로 데이터를 보내지 않습니다.
chrome.storage.local의 unidock.playback.v2에 재생목록의 최소 과목·항목 식별자, 순서, 중단 여부와 전용 탭 복구 정보(탭 번호와 현재 항목)를, unidock.playback.salt에 계정 구분용 무작위 값을 저장합니다. 재생목록은 LMS 출처, 확인된 사용자 ID와 이 무작위 값을 해시한 계정 키로 구분하며 사용자 ID 자체는 저장하지 않습니다. 전용 탭 소유 여부는 브라우저를 닫으면 사라지는 chrome.storage.session의 unidock.playback.owned-tab으로 확인합니다. 강의 제목, 강의·LTI URL, 서명된 LTI 파라미터, 일회성 키, 쿠키, 토큰은 저장하지 않습니다. 재생목록은 완료·중지하거나 사용자가 삭제할 때까지 남으며, ‘로컬 데이터 모두 삭제’로 지울 수 있습니다.
선택적 AI 자막 생성
LMS나 KU 플레이어가 자막을 제공하지 않는 강의에서만 ‘AI 자막 생성’을 보여줍니다. 사용자가 설정의 ‘AI 자막 서버’에서 Google 계정으로 로그인하고, 보내기 전 확인 화면에서 ‘음성 보내기’를 누를 때만 동작합니다. 대상은 사용자가 지금 보고 있는 KU 플레이어 영상 하나이며 여러 강의를 한꺼번에 보내지 않습니다. 재생·탐색·속도는 바꾸지 않습니다.
‘음성 보내기’를 누르면 Chrome이 강의 영상 서버 (korea-cms-object.cdn.gov-ntruss.com) 접근 허용을 묻습니다. 허용하면 확장은 이 서버에서 영상을 제외한 음성 트랙 구간만 받아 메모리에서 .m4a로 분리하고, 개발자가 운영하는 자막 서버로 HTTPS 재개 업로드합니다. 자막 서버가 받는 정보는 음성, 음성 형식·크기와 길이·언어 정보, 로그인 세션, 같은 강의의 중복 요청을 막는 작업 키입니다. 작업 키는 KU 콘텐츠 ID를 이 설치에만 있는 무작위 값으로 HMAC-SHA256 처리한 값이라 자막 서버는 이 키로 어느 강의인지 알 수 없습니다. LMS 쿠키·토큰, 서명된 주소, LMS·강의 URL, 과목 ID, 강의 제목, KU 콘텐츠 ID, 영상 화면은 보내지 않습니다. 서버 연결 과정에서 IP 주소와 브라우저 통신 헤더가 전달될 수 있습니다. 음성과 영상은 기기에 파일로 저장하거나 사용자에게 내려받게 하지 않습니다.
Google 로그인은 자막 서버가 처리합니다. 확장은 Chrome 로그인 창에 자막 서버의 시작 페이지를 열 뿐이며 Google 비밀번호, Google 토큰, 인가 코드를 받지 않습니다. 로그인을 마치면 자막 서버가 1회용 연결 코드를 돌려주고, 확장은 이를 자막 서버의 자체 로그인 세션으로 바꿉니다. 자막 서버는 Google이 확인한 계정 식별자와 이메일 주소를 받아 계정별 사용 횟수 제한(주 7회, 매주 월요일 0시 KST 초기화)과 작업·자막의 소유 확인에 사용합니다. 작업은 계정에 연결되지만 어느 과목·강의인지는 자막 서버가 알 수 없습니다.
자막 서버는 음성을 자막 생성에 성공하면 즉시, 실패하면 24시간 안에 삭제합니다. 생성된 자막은 최초 생성일로부터 6개월 보관한 뒤 만료하며 연장하지 않습니다. 같은 음성으로 이미 만든 자막이 있으면 서버가 다시 생성하지 않고 그 자막을 연결합니다. 그래서 다른 사용자가 같은 강의를 요청하면 같은 자막을 받을 수 있고, 남은 보관 기간이 6개월보다 짧을 수 있습니다. 자막 서버는 개발자가 운영하는 Oracle Cloud 인스턴스와 개발자 소유 컴퓨터에서 음성을 처리하고, 자막은 Cloudflare R2 비공개 저장소에 보관합니다.
chrome.storage.local에 unidock.caption-session.v1(자막 서버가 발급한 로그인 세션 토큰과 표시용 이메일), unidock.caption-install-salt.v1(작업 키용 무작위 값), unidock.caption-active-job.v1(진행 중 작업 ID와 해당 강의의 작업 키)을 저장합니다. 이 저장소는 확장 화면과 백그라운드만 읽을 수 있으며 암호화되지 않습니다. 로그인 진행 정보는 브라우저를 닫으면 사라지는 chrome.storage.session에만 둡니다. Google 토큰과 음성은 저장하지 않습니다. 음성을 받는 동안에는 확장 자신의 강의 영상 서버 요청 하나에만 Referer를 KU 플레이어 주소로 지정하는 임시 세션 규칙을 두고, 작업이 끝나거나 패널이 닫히면 제거합니다. 탭의 일반 요청은 바꾸지 않습니다.
설정의 ‘로그아웃’은 이 기기의 세션을 지우고 자막 서버에 세션 폐기를 요청하며, ‘모든 기기에서 로그아웃’은 같은 계정의 모든 세션을 폐기합니다. ‘로컬 데이터 모두 삭제’는 세션, 작업 키용 무작위 값, 진행 중 작업 정보를 지우고 서버 세션 폐기를 요청합니다. 서버 폐기 요청이 실패해도 로컬 정보는 삭제됩니다. 로그아웃과 로컬 삭제는 이미 보낸 음성, 생성된 자막, 서버의 계정 기록을 지우지 않습니다.
선택적 LMS 팝업 자동 닫기
기본 비활성이며 설정 화면에서 사용자가 켠 경우에만 LMS 팝업의 지정된 닫기 버튼과 미참여 설문 안내의 ‘설문 나가기’ 버튼만 클릭합니다. 설문에는 참여하거나 제출하지 않으며 같은 화면의 ‘로그아웃’은 누르지 않습니다. LMS 포털(lms.korea.ac.kr)의 최상위 프레임에서만 실행하며, 유지되는 팝업 wrapper의 자식 추가를 관찰해 나중에 추가된 팝업도 닫습니다. ‘오늘 하루 보지 않기’ 체크박스와 페이지의 콘텐츠 저장소는 조작하지 않습니다. 팝업 내용·식별자를 저장·전송하거나 사용 통계로 수집하지 않으며 네트워크 API를 호출하지 않습니다. 포털(lms.korea.ac.kr) 접근 권한은 설치 시 요청하지 않는 선택 권한으로, 사용자가 이 기능을 켤 때만 Chrome이 허용 여부를 묻고 끄거나 로컬 데이터를 삭제하면 반납합니다. 이 권한은 이 기능에만 사용하며 LMS API 조회 허용 범위나 CSP는 넓히지 않습니다.
chrome.storage.local의 unidock.popup-auto-close.v1에 boolean 설정만 보관합니다. 이 저장소는 확장 화면과 백그라운드만 읽을 수 있으며, 포털 페이지에서 실행되는 스크립트는 백그라운드에 켜짐/꺼짐 값만 요청합니다. 설정이 바뀌면 백그라운드는 열려 있는 lms.korea.ac.kr 탭에 설정을 다시 확인하라는 신호만 보냅니다. 키가 없거나 값이 유효하지 않으면 false(비활성)로 처리합니다. 설정 화면의 ‘로컬 데이터 모두 삭제’는 이 설정도 지워 기본 비활성으로 되돌립니다.
인증과 통신
로그인은 기존 LMS/SSO 화면에서 사용자가 직접 진행합니다. 아이디·비밀번호 입력을 받지 않고 쿠키/토큰 값을 저장하지 않습니다. 같은 출처 HTTPS 요청에는 Chrome이 기존 로그인 세션을 자동 사용합니다. 단, LMS의 LearningX 게시판 첨부 자료와 게시판 영상을 조회할 때는 LearningX가 페이지에 둔 게시판 인증 토큰을 요청 순간에만 읽어 같은 LMS의 고정된 게시판 조회(GET) 요청에만 붙입니다. 이 토큰은 저장·기록하거나 패널·백그라운드·외부로 보내지 않습니다. LMS 조회는 필요한 GET 경로만 사용하며, 자막 파일 요청은 플레이어 설정/XML에 선언된 HTTPS XML/VTT로 제한하며 외부 출처 요청에는 인증 정보를 보내지 않습니다. AI 자막의 강의 영상 서버와 자막 서버 요청에도 LMS 쿠키를 붙이지 않습니다. API·자막 조회는 리다이렉트를 따라가지 않습니다. 사용자 요청 자료 다운로드는 Chrome이 LMS의 파일 리다이렉트를 처리할 수 있습니다.
개발자 서버, 외부 AI API, 광고 서버, 분석 서비스로 LMS 정보·자막·자료·질문을 자동 전송하지 않습니다. 예외는 두 가지입니다. 사용자가 AI 자막 생성을 직접 시작하면 위에 적은 대로 현재 강의 음성을 자막 서버로 보내고, 별도로 동의한 경우 아래의 최소 사용 통계를 PostHog에 전송합니다. 확장이 처리하는 LMS 정보를 판매하거나 광고·프로파일링·모델 학습에 사용하지 않습니다. 그 밖의 조회 요청은 해당 LMS/자막 제공 서버로만 전송됩니다. 사용자가 LTI 탭 또는 외부 LLM 사이트를 열고 직접 자료를 제출하면 해당 서비스의 인증·방문·콘텐츠 처리와 방침이 적용됩니다.
선택적 사용 통계 (PostHog)
기본값은 수집 안 함입니다. 설정 화면에서 수집 항목과 목적을 확인하고 ‘동의하고 통계 공유’를 누른 경우에만 무작위 설치 식별자를 생성·저장하고 전송을 시작합니다. 거절하거나 철회해도 모든 학습 기능을 사용할 수 있습니다. 동의 이전 활동을 보관하거나 나중에 소급 전송하지 않습니다.
기능 개선과 안정성 확인을 위해 패널 열기, 정해진 화면 이름, 버튼 동작 종류, 기능 성공·실패, 패널 표시 시간·활성 시간(초), 확장 버전, 이벤트 시각과 중복 구분용 이벤트 식별자를 수집합니다. 무작위 설치 식별자는 LMS 계정과 연결하지 않지만 같은 설치의 활동을 연결할 수 있는 가명 식별자입니다. 이를 통해 동의한 설치의 일간·주간·월간 이용 및 재방문을 집계합니다. 정확한 사람 수나 영상 시청 시간·출석을 측정하는 기능이 아닙니다.
수신 서비스는 PostHog(제공자: PostHog, Inc., EU 리전, https://eu.i.posthog.com)이며 HTTPS로 전송합니다. 서비스 제공 과정에서 IP 주소와 브라우저의 통신 헤더가 수신 서버에 전달될 수 있습니다. IP 저장 및 위치 보강을 제한하며 쿠키·LMS 인증 정보를 첨부하지 않습니다. LMS 내용, 과목·과제·영상·파일 이름과 식별자, 이름·이메일·학번·계정 식별자, URL·페이지 제목, 자막·파일 내용, 입력값, 원본 오류는 분석 데이터에 넣지 않습니다. 화면 녹화, 자동 DOM 수집, 히트맵, 광고 추적 및 원격 기능 설정을 사용하지 않습니다.
설정 화면의 ‘통계 공유 철회’는 이후 수집을 중단하고 로컬 설치 식별자를 삭제합니다. ‘로컬 데이터 모두 삭제’는 통계 동의와 식별자도 지우고 수집을 기본 비활성 상태로 되돌립니다. 확장 제거도 로컬 데이터를 삭제합니다. 네트워크 장애나 종료 때 전송되지 않은 이벤트는 재전송용으로 디스크에 저장하지 않습니다.
이미 수신된 사용 이벤트는 최대 90일 보관 후 삭제합니다. 동의 철회·로컬 데이터 삭제·확장 제거는 이미 전송된 이벤트를 소급 삭제하지 않습니다. 원격 통계 삭제를 요청하려면 철회 또는 로컬 삭제 전에 설정 화면의 ‘통계 삭제 요청용 식별자’를 복사하여 스토어 지원 연락처로 보내주세요. 이 식별자 외에 학번·LMS 계정 정보는 보내지 마세요. 운영자는 해당 설치의 원격 이벤트를 삭제합니다.
보관과 삭제
검증·투영된 과목 목록의 캐시 재사용 기한은 2분, 과제·마감·할 일·일정 목록은 30초입니다. 만료된 항목은 다시 표시하지 않고 다음 캐시 접근 또는 LMS 탭 이동·종료 때 content script 메모리에서 제거합니다. 캐시를 읽기 전 현재 LMS 계정을 다시 확인하고 계정 변경·로그인 만료 시 전체를 폐기하며, 사용자가 누른 새로고침은 캐시를 우회합니다. 원본 API 응답과 일회용 키가 포함된 녹화·자료 목록은 캐시하지 않습니다. 일회성 강의·자료 열기·다운로드 키는 content script 메모리에서 최대 5분 유지합니다. 다운로드 진행 상태는 패널 메모리에만 두며 패널 종료 시 사라집니다. 자막도 패널 메모리에 최대 5분 유지합니다. 쿠키, 토큰, 원본 API 응답 전체, 일회성 선택 키, 서명된 LTI URL, LTI 플레이어 원본 설정은 저장하지 않습니다. 사용자는 설정 화면에서 저장된 데이터를 삭제할 수 있습니다. 별도로 통계 공유 선택과 동의한 설치의 무작위 식별자와 팝업 자동 닫기 boolean 설정을 chrome.storage.local에 보관하고, 자동 재생과 AI 자막을 쓰면 위에 적은 재생 상태와 자막 서버 세션 정보도 보관합니다. IndexedDB 및 LMS 데이터 로그는 사용하지 않습니다. 사용자가 자막을 내보내면 현재 강의 URL(쿼리 포함)이 JSON에 저장됩니다. 자료는 다운로드를 누른 경우에만 브라우저가 파일로 저장합니다.
사용자가 TXT·JSON 다운로드를 누르면(AI 자막 포함) 시간과 문장을 TXT로, 강의 URL·제목·추출 시각·항목 수·시간·문장을 JSON으로 브라우저 다운로드 폴더의 output/ 아래 저장 요청합니다. 이 파일과 다운로드한 PDF는 암호화되지 않으며 사용자가 직접 관리·삭제합니다. 확장을 제거해도 이미 다운로드한 파일 및 Chrome/LMS 자체 기록은 삭제되지 않습니다.
권한
sidePanel은 화면 제공, 두 LMS 호스트 권한은 로그인된 LMS 조회, activeTab과 scripting은 사용자가 확장 아이콘을 누른 강의 탭의 자막과 허용된 플레이어 설정 읽기, 그리고 설치·업데이트 직후 열려 있는 LMS 탭에 확장에 포함된 LMS 연결 스크립트를 다시 넣는 데 필요합니다. KU 플레이어 호스트 권한은 해당 iframe 또는 게시판 영상으로 연 플레이어 탭의 자막 읽기와, 자동 재생 중 LMS·KU 플레이어(kucom.korea.ac.kr/em/) 프레임의 영상 재생·종료 확인에 사용합니다. alarms는 진행 중인 자동 재생의 제한 시간 확인에만 쓰며 예약 재생에는 쓰지 않습니다. AI 자막은 identity로 자막 서버의 Google 로그인 창을 열고, declarativeNetRequestWithHostAccess로 음성을 받는 동안 확장 자신의 요청에 Referer를 지정합니다. 강의 영상 서버 (korea-cms-object.cdn.gov-ntruss.com) 접근은 ‘음성 보내기’를 누를 때만 요청하는 선택 권한입니다. lms.korea.ac.kr 접근은 공지 자동 닫기를 켤 때만 요청하는 선택 권한이며, 이 기능과 설정 변경 시 열린 포털 탭에 알리는 데에만 사용합니다. downloads 권한은 output/ 하위 자막과 uniDock/ 하위 자료 저장 요청, 다운로드 폴더 열기 및 확장 자신의 자료 다운로드 상태 확인에 사용합니다. storage는 통계 공유 설정, 동의 후 생성한 설치 식별자, 팝업 자동 닫기 설정, 자동 재생 상태와 자막 서버 세션 저장에 사용합니다. cookies, history, tabs(광범위), debugger 권한이나 모든 사이트 상시 접근 권한은 요청하지 않습니다.
Limited Use
새 버전이 설치되면 도구 모음 아이콘에 표시를 남기고, 패널을 열 때 확장에 포함된 변경 사항 페이지로 가는 안내를 한 번 보여줍니다. 업데이트 확인용 외부 요청, 저장 데이터나 추가 식별자를 만들지 않습니다.
uniDock의 사용자 데이터 사용은 Chrome Web Store 사용자 데이터 정책 및 Limited Use 요구사항을 준수하도록 설계되었습니다. 데이터는 위에 명시한 사용자 요청 기능과 동의한 사용 통계를 통한 기능 개선·안정성 확인에만 사용합니다. 개발자는 LMS 정보를 서버에서 수집하지 않습니다. 자막 서버는 사용자가 직접 보낸 음성과 그 결과 자막을 AI 자막 제공에만 사용하며, 위에 적은 처리 위탁 외에 제3자에게 판매·공유하지 않습니다.
문의와 변경
개인정보 문의는 Chrome Web Store uniDock 등록 페이지에 표시된 배포자의 지원 연락처로 보내주세요. 문의에 비밀번호, 쿠키, 토큰, 실제 LMS 응답 또는 개인 자막을 첨부하지 마세요. 데이터 처리 방식이 바뀌면 이 방침과 스토어 고지를 함께 갱신합니다.