개인정보 처리 안내
이 웹사이트
이 웹사이트의 대부분은 정적인 페이지입니다. 쿠키, 분석 도구, 광고, 추적 스크립트가 없습니다.
계정
Shadowing Player 확장 프로그램은 계정 없이 쓸 수 있고, 로그인하지 않는다면 이 절의 내용은 해당하지 않습니다.
이 웹사이트에서 로그인하면 다음을 저장합니다.
- 이메일 주소. 이메일로 받은 코드로 로그인합니다. 비밀번호는 받지도 저장하지도 않습니다.
- 계정을 만든 시각과 마지막으로 사용한 시각, 그리고 계정의 역할(학습자, 선생님).
- 로그인 세션. 로그인 상태를 유지하기 위해 브라우저의 로컬 저장소에 세션 토큰을 둡니다. 로그아웃하면 지워집니다.
계정과 그 데이터는 데이터베이스·로그인 제공자인 Supabase에 저장됩니다. 로그인 코드 메일은 Resend를 통해 발송되며, Resend는 메일을 전달하기 위해 이메일 주소를 받습니다. 이 웹사이트는 Cloudflare를 통해 제공됩니다. 이 회사들은 저희를 대신해 이 데이터를 처리합니다.
Teacher Studio
Teacher Studio를 켜고 레슨을 공개하면, 거기에 넣은 내용도 저장합니다.
- 선생님 프로필: 표시 이름, 선생님 ID, 그리고 입력한 경우 짧은 소개, YouTube 채널 주소, 웹사이트.
- 레슨: YouTube 영상의 ID, 제목과 설명, 그리고 올린 레슨 파일의 모든 내용(문장, 번역, 시간, 그룹, 퀴즈 문제와 답). 올린 레슨은 저희 서버에 저장됩니다. 공개한 레슨은 누구나 읽을 수 있습니다.
- 권리 확인 기록: 레슨을 공개해도 된다고 확인했다는 사실, 어떤 레슨의 어떤 리비전인지, 그리고 그 시각.
영상이나 그 소리는 저장하지도, 내려받지도, 복사하지도 않습니다. 재생은 YouTube가 합니다.
이것은 확장 프로그램과 다릅니다. 확장 프로그램에 직접 불러온 자막·레슨 파일은 브라우저 안에만 있고 저희에게 전송되지 않습니다. 레슨이 저희 서버에 있는 경우는 Teacher Studio에서 직접 올렸을 때뿐입니다.
보관과 삭제
공개한 레슨은 언제든 보관할 수 있고, 보관하면 공개 상태에서 내려갑니다. 한 번도 공개하지 않은 초안은 삭제할 수 있습니다. 공개된 리비전과 권리 확인 기록은 보관한 뒤에도 기록으로 남습니다. 계정과 그에 딸린 데이터를 삭제하려면 [email protected]로 연락해 주세요.
아래 내용은 Shadowing Player Chrome 확장 프로그램에 대한 것입니다.
Shadowing Player, 버전 0.1.0
Shadowing Player는 사용자의 브라우저 안에서 동작합니다. 불러온 파일과 연습한 내용은 모두 그 안에 있습니다. Shadowing Player 서비스에 연결하는 경우는 선생님 레슨 하나뿐이며, 이 기능은 선택 사항이고 직접 켜기 전에는 꺼져 있습니다.
수집하지 않는 것
- 확장 프로그램에는 계정이 없습니다. 가입이나 로그인을 요구하지 않으며, 이 웹사이트에 계정이 있는지도 알지 못합니다.
- 선생님 레슨이 꺼져 있으면(처음 상태) 확장 프로그램의 코드는 네트워크 요청을 전혀 보내지 않습니다.
- 선생님 레슨을 켜면 보내는 것은 지금 보고 있는 YouTube 영상의 ID뿐입니다(아래 선생님 레슨 참고). 불러온 파일, 진행도, 설정은 전송하지 않습니다.
- 분석 도구, 광고, 추적 코드가 없습니다.
- 자막 파일을 어디에도 업로드하지 않습니다.
- 방문 기록과 시청 기록을 수집하지 않습니다.
- YouTube의 자막을 수집하거나 내려받지 않습니다.
- 마이크를 쓰지 않고 음성 인식도 하지 않습니다. 사용자가 말한 내용을 녹음하거나 분석하지 않습니다.
선생님 레슨 (선택 사항, 기본값 꺼짐)
선생님은 자신의 YouTube 영상에 대한 레슨을 공개할 수 있습니다. 선생님 레슨은 지금 보는 영상에 그런 레슨이 있는지 확장 프로그램이 찾아보게 하는 기능입니다.
- 직접 켜기 전에는 꺼져 있습니다. 꺼져 있는 동안에는 아무것도 찾지 않고 요청을 보내지 않습니다. 영상을 열 때도, 영상 사이를 이동할 때도, 재생할 때도, 패널을 열 때도 마찬가지입니다.
- 켜져 있으면, YouTube 영상 페이지를 열 때마다 그 영상의 ID를 Shadowing Player 서비스로 보내 어떤 선생님 레슨이 있는지 묻습니다. 레슨 사용을 누르면 그 레슨을 내려받기 위해 그 레슨의 ID를 보냅니다.
- 그 밖의 것은 보내지 않습니다. 페이지 주소나 제목, 방문 기록이나 다른 탭, 불러온 자막·레슨 파일, 진행도·즐겨찾기·설정은 전송하지 않습니다. 확장 프로그램에는 계정이 없으므로 보낼 로그인 정보도 없습니다.
- 인터넷의 모든 요청과 마찬가지로, 서비스를 호스팅하는 업체가 응답을 위해 요청이 온 네트워크 주소(IP 주소)를 처리합니다. 어떤 주소가 어떤 영상을 물었는지에 대한 기록은 남기지 않으며, 서비스의 로그에는 요청의 종류와 결과만 남고 영상 ID는 남지 않습니다.
- 영상 ID는 그 순간 어떤 영상을 보고 있었는지를 알려 줍니다. 방문 기록 전체는 아니지만 무엇을 보는지에 관한 정보이므로, 이 기능을 쓸지는 사용자가 정합니다.
- 끄면 그 즉시 조회가 멈춥니다. 이미 고른 선생님 레슨은 기기에 남아 계속 쓸 수 있습니다.
- 내 파일을 쓰는 데는 선생님 레슨이 켜져 있든 꺼져 있든 서비스가 전혀 관여하지 않습니다.
- "선생님 레슨"은 누군가 선생님으로서 공개한 레슨이라는 뜻입니다. 확장 프로그램은 그 선생님이 누구인지, 그 영상의 주인인지 확인하지 않습니다.
- 서비스 주소가 들어 있지 않아 이런 요청을 아예 보낼 수 없는 빌드도 있습니다. 그런 빌드에는 선생님 레슨 설정이 나타나지 않습니다.
브라우저에 저장하는 것
다음 세 가지를 Chrome의 확장 프로그램 로컬 저장소(chrome.storage.local)에 저장합니다. 이 데이터는 사용 중인 브라우저 프로필 밖으로 나가지 않습니다.
1. 불러온 자막
불러온 자막 파일을 분석한 내용을 저장합니다. 문장마다 시작·끝 시간, 영어 문장, 한국어 문장을 저장하고, 파일에 들어 있다면 제목, 언어 표시, 영상 ID, 메모도 함께 저장합니다. 같은 영상을 다시 열었을 때 자동으로 불러오기 위해서입니다. 원본 파일 자체는 저장하지 않습니다. 함께 저장하는 정보는 다음과 같습니다.
- 파일을 불러올 때 보고 있던 YouTube 영상의 ID
- 파일 이름과 형식(JSON, SRT, VTT)
- 레슨 파일인 경우: 문장 ID, 영상이 말하는 언어, 퀴즈 문제와 보기의 문구(퀴즈 연습에 사용), 작성자가 넣은 음성 안내 문구(저장만 하고 아직 사용하지 않음). 레슨 파일에는 소리, 영상, 이미지를 담을 수 없고, 그런 내용은 불러올 때 버려집니다
- 불러온 날짜와 시각
영상 ID는 저장된 자막을 해당 영상에 연결하는 데만 씁니다. 자막을 불러온 영상에 대해서만 저장합니다. 자막을 불러오지 않고 본 영상에 대해서는 아무것도 저장하지 않습니다.
2. 설정
재생 속도, 반복 횟수, 연습 순서(순차 또는 랜덤), 쉐도잉·회상 연습·퀴즈 사용 여부, 퀴즈 문제 완료 후 동작, 말하기 시간, 문장 완료 후 동작, 회상 연습 설정(문제 음성, 음성 속도, 카운트다운, 음성 안내, 효과음), 학습 언어, 표시할 언어, 영상 자막 설정(켜기·끄기, 크기, 위치, YouTube 자막을 숨길지 여부)을 저장합니다.
재생 위치나 반복 진행 상태 같은 일시적인 재생 상태는 저장하지 않습니다.
선생님 레슨 사본과 선택한 레슨
선생님 레슨을 고르면, 연결 없이도 연습할 수 있도록 그 레슨의 사본(문장, 번역, 시간, 퀴즈 내용, 선생님의 표시 이름, 어떤 리비전인지)을 브라우저에 저장합니다. 영상마다 어떤 레슨을 골랐는지도 기억합니다. 저장하는 것은 직접 고른 레슨뿐이며, 찾은 목록은 저장하지 않습니다. 더 보기 → 선생님 레슨 캐시 비우기로 사본을 지울 수 있고, 진행도는 지워지지 않습니다.
3. 학습 진행도
연습한 레슨마다, 그 문장들로 무엇을 했는지를 저장합니다. 즐겨찾기, 마스터, 학습 기록을 다음에도 볼 수 있게 하기 위해서입니다. 내 파일의 진행도와 각 선생님 레슨의 진행도는 따로 보관하며, 어디로도 전송하지 않습니다.
- 즐겨찾기로 표시한 문장과 마스터로 표시한 문장
- 문장마다 연습을 끝까지 마친 횟수(그중 쉐도잉과 회상 연습 횟수), 마지막으로 연습한 시각
- 정답이 있는 퀴즈 문제에 대해: 답한 횟수와 맞힌 횟수
- 그 영상에서 마지막으로 고른 학습 범위
문장은 짧은 키로만 구분합니다. 레슨 파일이 붙인 ID이거나, 자막 파일이면 문장의 순서와 시간입니다. 문장 내용은 여기에 저장하지 않습니다. 표시하거나 연습한 적이 없는 문장에 대해서는 아무것도 저장하지 않습니다. 이 데이터는 영상 ID 아래에 저장되고, 다른 모든 것과 마찬가지로 이 브라우저 프로필 안에만 있으며, 다른 브라우저나 기기와 동기화하지 않고 어디로도 보내지 않습니다. 계정이 없습니다.
퀴즈 답과 점수 (메모리에만)
퀴즈 연습에서 어떤 보기를 골랐는지와 이번 진행의 점수("점수 2 / 3")는 열려 있는 탭의 메모리에만 있습니다. 저장소에는 "학습 진행도"에 적은 합계만 기록하고 어디로도 보내지 않으며, 다른 레슨을 불러오거나, 다른 영상을 열거나, 퀴즈를 처음부터 다시 하거나, 탭을 새로고침하면 사라집니다.
안내 음성 (번들된 녹음)
앱 자체의 고정 문구("정답을 선택하세요.", "정답입니다.")는 확장 프로그램 안에 들어 있는 짧은 오디오 파일로 재생할 수 있습니다. 이 파일은 개발자가 미리 만들어 둔 것이고 모든 사용자에게 같습니다. 재생할 때 확장 프로그램 자신의 파일을 읽을 뿐이며, 네트워크 요청이 없고 사용자에 관한 정보가 관여하지 않습니다. 확장 프로그램에는 음성 합성 모델이 들어 있지 않고 내려받지도 않습니다. 이번 버전에는 영어 인터페이스용 녹음만 들어 있습니다. 한국어 인터페이스에서는, 그리고 녹음을 재생할 수 없는 문구는, 아래에서 설명하는 브라우저 음성 합성이 읽습니다.
문제 음성 (브라우저 음성 합성)
회상 연습에서 확장 프로그램은 문제를 소리 내어 읽어 줄 수 있습니다. 이때 브라우저에 내장된 음성 합성(Web Speech API)을 사용합니다. 확인할 수 있는 범위에서 밝히면 다음과 같습니다.
- Shadowing Player는 음성 합성 서비스를 운영하지 않고, API 키가 없으며, 확장 프로그램이 직접 문제 문장을 어떤 서버로도 보내지 않습니다. (위에서 설명한 선생님 레슨이 보내는 것은 영상 ID이며 글자는 보내지 않습니다.)
- 문제 음성이 켜져 있으면 문제 언어로 된 자막 한 문장이 브라우저의 음성 합성에 전달됩니다. 음성 안내가 켜져 있고 그 문구의 번들 녹음이 없으면, 그 고정 문구("영어로 말해 보세요.", "정답입니다." 등)도 전달됩니다. 퀴즈의 문제와 보기는 읽어 주지 않습니다.
- 브라우저가 그 글을 어떻게 소리로 바꾸는지는 확장 프로그램이 정하지 않습니다. 브라우저, 운영체제, 사용되는 음성에 따라 기기 안에서 만들어질 수도 있고, 브라우저나 운영체제 제공자의 서비스에서 만들어질 수도 있습니다. 후자의 경우 글이 그 제공자의 약관에 따라 제공자에게 전송됩니다. 확장 프로그램은 어느 쪽인지 알 수도 정할 수도 없으므로, 음성이 오프라인으로 만들어진다고 약속하지 않습니다.
- 확장 프로그램은 언어만 보고 음성을 고릅니다(예: 한국어 문제에는 한국어 음성). 음성 목록이나 어떤 음성을 썼는지는 저장하지 않습니다.
- 음성은 사용자가 시작한 연습 안에서만 나옵니다. 페이지를 열거나 새로고침하는 것만으로는 말하지 않습니다.
- 음성 합성을 전혀 쓰지 않고 회상 연습을 하려면 문제 음성(회상 연습 설정에 있음)과 음성 안내(음성과 효과음에 있음)를 끄면 됩니다.
카운트다운 틱 소리와 정답 직전의 알림음은 확장 프로그램이 브라우저 안에서 만들어 내는 소리입니다. 녹음된 파일이 아니고 네트워크를 쓰지 않습니다.
진단 정보 (메모리에만 있음)
문제의 원인을 찾을 수 있도록, 확장 프로그램은 최근 내부 동작 50개(예: "세션 시작", "문장 끝")의 목록을 열려 있는 탭의 메모리에 보관합니다. 각 항목에는 숫자와 상태 이름만 들어 있습니다. 영상 ID, 재생 시간, 문장 번호, 현재 설정입니다. 자막 내용, 문제 문장, 페이지 주소는 들어 있지 않습니다. 음성에 대해서는 음성이 시작됐는지, 끝났는지, 쓸 수 없었는지와 언어만 기록합니다. 이 목록은 저장소에 기록하지 않고, 어디로도 전송하지 않으며, 탭을 새로고침하거나 닫으면 사라집니다. 탭 밖으로 나가는 경우는 사용자가 진단 정보 복사를 눌렀을 때뿐이고, 그때 클립보드에 복사되어 사용자가 원하는 곳에 붙여 넣을 수 있습니다. 복사되는 내용에는 요약 한 줄도 들어 있습니다. 확장 프로그램 버전, 인터페이스 언어, 전체 화면 여부, 플레이어와 전체 화면 요소의 태그·ID·클래스 이름, 플레이어와 창의 크기, 확장 프로그램의 오버레이 개수와 그것이 들어 있는 요소, 그리고 이 영상에 대해 저장된 설정·자막·학습 진행도가 있는지와 저장된 대략의 바이트 수입니다. 자막 내용, 퀴즈 내용, 페이지 주소는 들어 있지 않습니다.
저장된 데이터 지우기
- 패널의 더 보기 → 이 영상의 자막 삭제로 현재 영상에 저장된 자막을 지웁니다.
- 더 보기 → 저장된 자막 모두 삭제로 모든 영상의 저장 자막을 지웁니다.
- 패널의 콘텐츠 → 이 범위의 진행도 초기화는 선택한 범위의 학습 진행도를, 이 영상의 진행도 모두 초기화는 영상 전체의 학습 진행도를 지웁니다. 저장된 자막을 삭제해도 학습 진행도는 지워지지 않습니다.
- 확장 프로그램을 제거하면 저장된 자막, 설정, 학습 진행도가 모두 삭제됩니다.
권한
| 권한 | 이유 |
|---|---|
storage | 위에서 설명한 자막과 설정을 브라우저에 저장하기 위해 |
youtube.com 페이지 접근 | YouTube 영상 페이지에 연습 패널을 표시하고 영상의 위치·재생·정지·속도를 제어하기 위해 |
| Shadowing Player 서비스 주소 접근 (선생님 레슨이 들어 있는 빌드에만) | 확장 프로그램의 백그라운드 워커가 영상에 어떤 선생님 레슨이 있는지 서비스에 묻고, 고른 레슨을 내려받기 위해. 주소 하나뿐이며 그보다 넓지 않고, 선생님 레슨이 켜져 있을 때만 사용 |
확장 프로그램의 스크립트는 youtube.com 페이지에서 로드되고, 패널은 일반 영상 페이지에서만 표시됩니다. 그 페이지에서 읽는 것은 페이지 주소(영상 ID 확인용), 영상 요소, 페이지가 다크 모드인지 여부, 광고가 재생 중인지 알려 주는 플레이어 요소의 상태입니다. 페이지에 추가하는 것은 두 가지입니다. 연습 패널과, 영상 플레이어 안에 불러온 자막을 보여 주는 오버레이입니다. 이 오버레이를 쓰는 동안에는 YouTube 자체 자막 표시를 화면에서 가릴 수 있습니다. 이는 페이지가 보이는 모습만 바꾸는 것이고, 오버레이를 끄면 원래대로 돌아가며, YouTube 설정은 바꾸지 않습니다. YouTube의 자막, 페이지의 다른 내용, 계정 정보는 읽지 않습니다.
변경
기능이 바뀌어 이 내용이 달라지면(예: 계정이나 서버 추가) 이 페이지를 먼저 고치겠습니다.