1. 소개
사람들은 사용자 에이전트를 통해 웹을 경험합니다: 사용자를 대신하여 웹 콘텐츠를 가져오고, 표시하며, 이에 따라 동작하는 소프트웨어입니다. 웹 브라우저가 가장 익숙한 예이지만, 다양한 다른 소프트웨어도 동일한 역할을 수행합니다. "에이전트"라는 단어는 우연히 사용된 것이 아닙니다: 사용자 에이전트는 사용자를 위해 작동하며, 사용자의 이익이 다른 당사자의 이익과 충돌할 때에는, 사용자를 우선합니다.
이 문서는 소프트웨어를 "사용자 에이전트"로 만드는 요소와, 사용자 에이전트가 사용자에게 지는 의무를 설명합니다: 보호, 정직, 충실입니다. 이러한 의무는 독립적인 요구사항으로 존재하기보다는, 커뮤니티 논의를 통해 확립되고 사용자 에이전트가 구현하는 표준에 구체화되도록 의도되었습니다.
이 문서는 다음 독자를 대상으로 한다:
-
자신의 명세 또는 문서에서 이러한 개념을 재사용하거나 참조하려는 기술 문서 작성자.
-
사용자를 우선시하는 설계 및 개인정보 보호 원칙에 맞춰 구현하려는 사용자 에이전트 개발자.
-
사용자 에이전트가 개발자의 편의성을 포함한 다른 이해관계보다 사용자 개인정보 보호와 보안을 우선시하는 이유를 이해하려는 웹 개발자.
-
사용자 에이전트의 동작을 이끄는 의무, 원칙 및 기대 사항을 이해하려는 규제 기관 및 정책 입안자.
2. 사용자 에이전트란 무엇인가
사용자 에이전트는 사용자 자신을 대신하여 소프트웨어 엔터티 자체 외부의 웹사이트와 상호작용하는 모든 소프트웨어 엔터티를 의미하며, 웹사이트의 콘텐츠를 단순히 렌더링하거나 사용자가 요청하거나 인가한 동작을 수행하는 것도 포함됩니다. 공개 웹에서 임의의 콘텐츠를 로드할 수 있는 제품은 사용자 에이전트입니다. 한 사람은 일상에서 여러 종류의 사용자 에이전트를 사용할 수 있습니다.
다른 맥락에서 "사용자 에이전트"라는 용어는 사용자가 작업을 수행하도록 돕는 소프트웨어 엔터티를 가리키는 데 사용됩니다. 특히 이메일 클라이언트는 적어도 1980년대 후반부터 "메일 사용자 에이전트"라고 불려 왔습니다. [RFC1123] 운영체제, PDF·전자책·이미지 뷰어, 디지털 지갑을 포함한 자격 증명 관리자, 그리고 그 밖의 다양한 종류의 소프트웨어도 사용자 에이전트로 볼 수 있습니다. 그러나 본 문서와 웹 명세에서 이 용어를 사용할 때는 사용자를 대신하여 웹사이트와 상호작용하는 소프트웨어를 구체적으로 가리킵니다.
웹의 맥락에서 가장 일반적인 사용자 에이전트 유형은 웹 브라우저이며, 여기에는 교차 사이트 링크를 따라갈 수 있는 인앱 브라우저도 포함됩니다. 그러나 사용자 에이전트에는 검색 엔진, 음성 기반 어시스턴트, 생성형 AI 시스템과 같은 다른 도구도 포함되며, 이들은 웹사이트 콘텐츠의 일부나 요약을 제공하고, 사람들이 웹사이트를 탐색하고 상호작용하도록 돕거나, 사용자를 대신하여 자동화된 작업을 수행합니다.
사용자 에이전트의 동작은 웹 표준이나 더 일반적인 기술 명세만으로 완전히 정의되지 않습니다. 특히, 사용자 에이전트는 어떤 기능을 구현할지, 그리고 각 기능을 어느 정도까지 노출할지 선택하여 사용자에게 최선의 서비스를 제공합니다. 실제로 구현하는 기능을 둘러싸고 독자적인 사용자 인터페이스와 기타 동작을 구현합니다. 예를 들어 권한 요청, 오류 메시지, 개인정보 보호 표시기에 사용하는 문구와 아이콘은 사용자 에이전트마다 다른 경우가 많습니다. 사용자 에이전트는 또한 어떤 명세에서도 요구하지 않는 기능을 추가합니다. 북마크, 읽기 모드, 개발자 도구 등이 그 예입니다.
2.1. 소프트웨어 구성요소로서의 사용자 에이전트
소프트웨어 구성 요소로서 사용자 에이전트는 더 큰 애플리케이션의 일부가 될 수 있으며 웹 플랫폼 또는 그 일부를 구현하는 라이브러리를 호출할 수 있습니다.
애플리케이션이 사용자 에이전트인 부분과 그렇지 않은 부분을 명확하게 구분한다면, 사용자 에이전트 자체 외부의 콘텐츠를 탐색하는 사용자 에이전트 부분만 사용자 에이전트의 의무를 준수하면 됩니다. 애플리케이션 자체의 콘텐츠만 표시하는 것이 명확한 부분은 애플리케이션 자체를 위해 동작할 수 있지만, 애플리케이션은 여전히 사용자에게 애플리케이션의 서로 다른 부분에서 어떤 동작을 예상할 수 있는지 명확히 알려야 합니다. 내부 콘텐츠와 외부 콘텐츠의 구분이 너무 미미한 경우—예를 들어 애플리케이션이 외부 콘텐츠를 탐색할 때 주소 표시줄이나 콘텐츠 출처를 나타내는 다른 표시기를 보여 주지 않는 경우— 애플리케이션은 자체 콘텐츠를 표시할 때도 사용자 에이전트의 의무를 준수해야 합니다.
마찬가지로, 웹 플랫폼을 구현하는 라이브러리가
완전한 사용자 에이전트인지 여부는 해당 라이브러리가 무엇을
하는지에 따라 달라집니다.
SFSafariViewController
및 Android Custom Tabs와 같은 일부 라이브러리는
사용자 에이전트의 의무를 구현하고
자신이 탐색하는 외부 콘텐츠와
이를 임베드한 애플리케이션이 제어하는 콘텐츠를 명확히 구분할 책임을 맡습니다.
이러한 라이브러리는 사용자 에이전트입니다.
그 밖의 라이브러리인 Android, iOS, 및 Windows WebView 라이브러리는 여러 종류의 애플리케이션을 지원하도록 설계되었습니다. 이러한 애플리케이션 중 일부는 자체 콘텐츠만 포함하므로, WebView 라이브러리는 그 자체로 사용자 에이전트가 되도록 만들어진 것이 아니며, 사용자 에이전트의 의무를 구현하지 않습니다.
궁극적으로 WebView를 임베드하는 애플리케이션은 자신 또는 자신의 일부가 사용자 에이전트로 동작한다면 사용자 에이전트의 의무를 준수할 책임이 있습니다. 애플리케이션이 외부 콘텐츠를 사용자 에이전트 라이브러리를 통해서만 탐색한다면 이는 간단할 수 있습니다. 개발자는 비-사용자 에이전트 WebView를 사용하여 인앱 브라우저를 구현할 때 사용자 에이전트의 의무를 준수하도록 각별히 주의해야 합니다 .
3. 사용자 에이전트의 의무
각 사용자 에이전트는 자신의 사용자를 위해 동작하며(인터넷은 최종 사용자를 위한 것입니다), 다른 어떤 이해관계자를 위해서도 동작하지 않습니다. 사용자 에이전트는 자신의 사용자에게 여러 의무를 지며, 이러한 의무는 공동 논의를 통해 정립되고 사용자 에이전트가 구현하는 다양한 표준에 반영됩니다.
3.1. 보호
웹 페이지는 안전하게 방문할 수 있어야 합니다. 페이지를 방문하는 것만으로는 해당 페이지가 소프트웨어를 설치하거나 하드웨어에 접근하는 등의 방식으로 사용자의 컴퓨터나 환경을 변경할 수 없습니다.
사이트나 다른 관찰자에게 공개되는 모든 데이터는 사용자의 선호에 부합하며 데이터 최소화 원칙을 따릅니다. 특히 사용자 에이전트는 사이트가 사용자 활동을 추적할 가능성을 제한하도록 동작합니다 [unsanctioned-tracking].
사용자는 양식을 작성하거나 권한을 부여하는 등의 방식으로 더 많은 정보를 공유하도록 선택할 수 있습니다. 그러한 경우에도 사용자 에이전트는 사용자가 기만을 피하도록 돕고 페이지가 상향된 접근 권한을 얻으려고 할 때 이를 명확하게 알립니다.
페이지가 여러 권한을 요청할 때, 충분한 정보를 바탕으로 한 동의를 가능하게 하려면, 사용자 에이전트는 사용자가 요청된 권한의 일부를 부여할 수 있도록 보장하고 사용자가 자신이 부여하는 전체 권한 집합을 인지하도록 해야 합니다.
사용자 에이전트는 사이트의 악성 코드가 사용자 에이전트 밖으로 탈출하여 사용자의 컴퓨터를 수정하거나 다른 origin 에 접근하지 못하도록 막아야 합니다. 샌드박스 사용, 메모리 안전 언어 사용, 보안 팀을 운영하여 취약점 대응 등으로 보호 의무를 이행할 수 있습니다. 이러한 방어는 새로운 위협에 맞춰 지속적으로 진화해야 합니다.
서로 관련 없는 웹사이트를 사용자가 방문할 때, iframe에 공유 식별 쿠키를 보내지 않는 것이 가능합니다. 이러한 쿠키를 보내는 브라우저는 보호 의무를 위반한 것입니다. 단, 고정 IP 주소 노출은 현재로서는 피할 수 없으므로 위반이 아닙니다.
사용자 에이전트는 사용자가 직접 선택하거나 열지 않는 한, 페이지가 로컬 파일에 접근하지 못하도록 해야 합니다. 이에 따라 아래와 같은 동작이 유도됩니다:
-
각
file:URL에 고유한 origin 부여 -
<input type=file>업로드에서 경로 정보 삭제 -
@font-face 규칙에서 사용 가능한 로컬 폰트 제한
단, 파일 업로드/다운로드 등을 통해 사용자가 파일을 공유하는 것은 여전히 가능합니다. File System Access 같은 API도 사용자가 주체적으로 결정할 수 있는 도구만 있다면 보호 의무를 위반하는 것이 아닙니다.
사용자 에이전트는 방문자를 공격하는 페이지를 식별하려고 시도해야 합니다. 사용자가 이러한 페이지를 방문하기 시작하면, 사용자 에이전트는 예를 들어 접근을 차단하거나 사용자에게 경고하여 피해를 방지하려고 시도할 수 있습니다.
3.2. 정직
사용자 에이전트는 웹과 사용자 사이를 중재하며, 무슨 일이 일어나고 있는지 사용자가 이해할 수 있는 형태로 설명합니다. 사용자 에이전트가 자동으로 또는 사용자를 대신하여 동작을 수행할 때는 다음을 명확히 전달합니다: 해당 동작과 그 결과. 사용자 에이전트가 콘텐츠를 변환하거나 사용자를 대신하여 동작을 수행하는 방식을 사용자가 쉽게 관찰할 수 없다면, 다음에 대한 의미 있는 가시성을 제공합니다: 자신이 의존한 출처, 수행한 동작 및 해당 동작의 결과.
사용자 에이전트는 설명을 위해 다음을 포함한 여러 접근 방식을 사용할 수 있습니다: 텍스트, 권한 요청, 표시기, 미리보기 및 기타 인터페이스 요소입니다. 이러한 요소의 배치와 강조할 필요가 있는 항목이 있는지를 고려합니다.
대표적인 예로 사용자 에이전트가 웹사이트가 암호화된 연결을 통해 제공되었는지를 표시하는 경우가 있습니다. 이는 시간이 지나면서 안전하지 않은 사이트에 깨진 자물쇠 아이콘을 표시하는 방식에서, 일부 사용자 에이전트가 URL 표시줄에 "안전하지 않음"이라는 텍스트를 명시적으로 표시하는 방식으로 발전해 왔습니다.
미디어 캡처 및 스트림과 같은 명세에는 사용자 에이전트가 특정 종류의 웹사이트 동작을 설명하도록 요구하는 개인정보 보호 표시기 요구사항이 포함되어 있지만, 명세에서 해당 동작을 구체적으로 언급하지 않더라도 사용자가 다른 동작에 대해 알아야 할 때 사용자 에이전트는 동일한 기법을 사용할 것으로 기대됩니다.
정직한 사용자 에이전트는 사용자에게 진실을 제시하기 위해 적극적으로 노력합니다. 단순히 거짓말을 피하는 데 그치지 않습니다. 그 설명은 현재 상태와 예상되는 결과를 명확하게 나타내고, 완곡한 표현이나 모호함을 피하며, 민감한 활동이 발생하고 있을 때 이를 분명히 알 수 있게 합니다.
사용자 에이전트는 이러한 설명을 언제 얼마나 자주 표시할지를 선택하여, 설명이 도움이 되는 시점에 제공되고 주의를 산만하게 하기보다 정보를 전달하도록 합니다. 사용자 에이전트는 사용자가 결정을 내릴지 여부와 그 시점을 제어할 수 있도록 보장합니다.
웹사이트가 위치 정보나 오디오 녹음과 같이 장기간 유지되는 권한을 사용하고 있는 경우, 사용자 에이전트는 URL 표시줄에 표시기 아이콘을 표시하여 무슨 일이 일어나고 있는지를 설명할 수 있습니다.
사용자가 특정 사이트가 아니라 브라우저에 계정 정보를 제공하도록 유도한 사용자 에이전트가 이후 해당 정보를 추적이나 광고 타기팅과 같은 다른 목적으로 사용하도록 조용히 기본 설정한다면 정직하게 행동하는 것이 아닙니다. 사용자 에이전트는 상충 관계가 있는 부분을 명확하게 전달해야 합니다.
3.3. 충성
사용자 에이전트는 구현자의 이익이나 다른 당사자의 이익보다 사용자의 이익을 우선합니다.
충실 의무는 다음과 같은 경우에도 적용됩니다. 사용자 에이전트를 제공하는 조직이 사용자 에이전트의 기능을 형성하는 의사결정에 참여하거나 향후 사용자의 선택을 제한하는 의사결정에 참여하는 경우입니다. 이러한 의사결정에서 사용자의 입장이 충분히 대변되지 않을 수 있으므로, 충실 의무에 따라 해당 조직은 합리적인 조치를 취하여 사용자의 다양한 이익을 파악하고 대변해야 하며, 스스로를 사용자의 유일한 대표자로 간주해서는 안 됩니다.
사용자 에이전트는 사용자가 페이지에 신뢰할 수 있는 약속을 하도록 도울 수도 있습니다. 신뢰할 수 있는 약속이란 사용자의 향후 선택지를 의도적으로 제한하는 것으로, 페이지가 서비스를 제공하기 전에 요구하는 것입니다. 서비스를 받은 후 그 약속을 유지하는 것은 사용자에 대한 충실성에 어긋나지 않습니다. 사용자에게 충실한 약속은 해당 서비스의 이용만 제한하며, 사용자의 다른 데이터, 설정 또는 선택은 제한하지 않습니다. 사용자는 여전히 서비스를 포기하고 자신의 데이터를 삭제할 수 있으며, 그로 인해 추가적인 불이익을 받지 않습니다.
2012년 무렵, 사용자 에이전트 공급업체와 W3C는 저작권자가 미디어의 추가 복사본을 만드는 일을 기술적으로 어렵게 하기 위해 DRM을 사용할 수 있는 비웹 플랫폼에서만 사용자가 미디어를 재생하도록 허용할 것을 우려하게 되었습니다. 약속만으로는 신뢰성을 확보할 수 없습니다. 단순한 디지털 파일의 경우 복사를 막는 것은 아무것도 없기 때문입니다.
사용자 에이전트 공급업체와 다른 W3C 회원들은 사실상 저작권자 및 그 대리인들과 집단 협상 절차에 들어갔습니다. 결국 브라우저들은 DRM 시스템을 탑재하는 데 동의했습니다. 그 시스템은 암호화된 미디어 확장 (EME)으로 알려져 있으며, 그 대가로 다음을 얻었습니다.
-
사용자가 웹을 통해 해당 미디어에 접근할 수 있게 하는 것과
-
제한된 권한으로 실행되고 웹사이트에 영구적인 기기 식별자를 제공하지 않도록 하는 등, DRM의 작동 방식에 사용자에게 이로운 몇 가지 제한을 두는 것입니다.
EME에서 개별 사용자는 명시적인 약속을 하지 않습니다. 대신 사용자 에이전트가 표준화된 합의를 구현하며, 사용자가 제한된 미디어를 재생하기로 결정하면 자동으로 그 미디어의 복사 제한을 따르게 됩니다. 사용자 에이전트가 파일을 받은 뒤 사용자의 복사를 돕기를 거부하는 것은 충실 의무를 위반하는 것으로 보일 수 있습니다. 그러나 이 약속은 사용자가 받기로 선택한 미디어만 제한하며, 사용자의 다른 데이터, 설정, 선택을 제한하지는 않습니다. 또한 이러한 약속이 없었다면 사용자는 해당 미디어를 아예 받지 못했을 수도 있습니다.
어떤 약속이 사용자에게 도움이 되는지 평가하려면 사용자가 얻는 이익과 부과되는 제한을 비교해야 합니다. 그 균형은 맥락에 따라 달라지지만, 사용자의 이익이 진정으로 그 평가를 이끌 때만 그러한 약속이 충실성을 반영한다고 할 수 있습니다.
많은 사람들은 EME가 실수였다고 생각합니다 (예: [EFF-Defending-Interoperability]). 예를 들어 EME는
-
사람들이 저작권의 "공정 이용" 및 "공정 취급" 예외를 활용하지 못하게 합니다.
-
시청자가 더 쉽게 접근할 수 있도록 미디어를 변경하는 것을 막습니다.
-
미디어를 구매한 서버를 사용할 수 없게 되면 구매한 미디어에 대한 접근을 차단합니다.
-
저작권이 만료된 후에도 접근을 차단합니다.
-
새 브라우저에 널리 채택된 콘텐츠 복호화 모듈의 라이선스를 취득할 것을 사실상 요구합니다.
-
기술적 보호조치 우회 금지법의 부당한 사용을 막지 못합니다.
그럼에도 사용자 에이전트가 사용자를 위한 협상에서 실수하더라도, 사용자를 최우선에 두지 않았을 때에만 충실 의무를 위반한 것입니다.
사용자 에이전트는 충실성을 저해하지 않으면서 서비스에 대한 대가를 받을 수 있습니다. 대가를 받는다고 해서 충실 의무의 대상이 달라지는 것은 아니며, 사용자가 예를 들어 사전 설치된 기본값과 같은 방식을 수동적으로 받아들였더라도 마찬가지입니다: 사용자 에이전트는 대가를 지불하는 당사자가 아니라 사용자에게 충실해야 합니다.
사용자 에이전트는 사용자가 다른 사용자 에이전트로 전환하는 것을 방해하지 않습니다.
사용자 에이전트는 이동성을 방해하는 방식으로 사용자 데이터에 대한 접근이나 내보내기를 차단하거나 이를 저장하지 않습니다. 여기에는 신원 정보, 북마크, 기록, 비밀번호 및 패스키와 같은 자격 증명이 포함됩니다. 사용자 에이전트가 자격 증명을 저장하기 위해 기반 OS에 의존하는 경우, 사용자가 다른 사용자 에이전트가 해당 자격 증명에 접근하도록 허용할 수 있는 방법이 있어야 합니다.
4. 감사의 글
Infra Standard 에 사용자 에이전트의 초기 정의를 제공해 준 점과, Privacy Principles 에 이 의무의 초기 버전을 제공해 준 점에 감사드립니다.