모질라에서 환경 설정이 어떻게 작동하는지 이해하기(번역)

목 차

들어가기

파이어폭스나 썬더보드와 같은 응용 프로그램들은 환경설정시스템에 의해서 설정되도록 고도로 구성되어있다. 새로운 기능을 개발하거나 현존하는 코드의 버그를 수정하는 것은 이미 여러 환경설정에서 표현된 것 처럼 사용자의 요구를 인식하고 이를 존중하는 것을 의미한다. 만약 자바스크립트나 C++로 된 코드로 작업 중인 경우에는 런타임 (run-time)에서 그 환경설정 값이 어떻게 결정되는지 알아야 한다 .

여기서 논의될 내용은 파이어폭스 코드로부터 가져온 실례를 적용하여 실제로 사용자가 환경설정 값에 어떻게 접근하는지, UI의 측면에서 어떻게 구현되는지, 런타임 동작이 어떻게 결정되는지를 보여줄 것이다. 아래의 코드들은 모두 mozilla-central 버전에서 가져온 것들이다: http://hg.mozilla.org/mozilla-central/file/0cd41f599080/

모질라 환경변수

브라우져는 언제 닫히는가? 여러 개의 저장된 세션들로 된 여러 개인정보들에서 어떤 일이 벌어지는가? 쿠키나 또 다른 개인정보들이 남겨지는가?

이런 것들은 모두 컴파일 시간에 결정되는 것이 아니라 환경설정이라는 것이 있어서 사용자에 의해서 결정된다.

이러한 작동내용을 변경시키는 가장 손쉬운 방법은 파이어폭스 환경설정 대화창(Tools > Options on Windows, Firefox > Preferences on Mac)을 열고 개인정보 보호 판넬로 이동하는 것이다. 아마 아래의 체크박스를 보게될 것이다.:

Always clear my private data when I close Firefox

이제 UI 문자열을 얻을 수 있고 이를 통해서 실제의 사용자환경변수와 그것이 다루어지는 코드를 보게된다.

환경설정변수 찿기

MXR를 이용하여 이러한 UI 문자열을 검색할 수 있으며 , 모질라에서 현지어로 번역된 문자열이 정의된 DTD 파일을 찾을 수 있다 . 한번의 빠른 검색에서 privacy.dtd 파일에 있는 다음과 같은 엔터티도 볼 수 있다:

44 <!ENTITY alwaysClear.label “Always clear my private data when I close &brandShortName;”>

이제 우리는 현지화된 번역에 대응된 엔터티이름 (i.e., alwaysClear.label)을 확보하게 되며 이것으로 XUL code 코드를 검색할 수 있다. privacy.xul 파일에서 한번 더 검색을 하면 이 엔터티가 사용된 내용을 볼 수 있게 된다.:

178 <checkbox id=”alwaysClear” flex=”1″179           preference=”privacy.sanitize.sanitizeOnShutdown”180           label=”&alwaysClear.label;”181           accesskey=”&alwaysClear.accesskey;”/>

이것이 우리가 체크박스에서 보게 되는 UI의 내용이다. 또한 우라가 한번 더 검색해야하는 환경설정 그자체의 이름에 관한 정보도 알 수 있다.:

179           preference=”privacy.sanitize.sanitizeOnShutdown”

환경설정변수는 도트 표기법을 이용해서 이름지어져 있다. 이것을 트리구조. (그 아래에 많은 관련된 자식을 가질 수 있다는 것을 의미한다. ) 라고 부른다. 이제 브라우저 자체를 이용해 이름지어진 환경설정변수 값을 들여다 보자. 주소 창에 아래의 값을 입력해보라.:

about:config

그러면 브라우져에서 현재 구동되고 있는 환경설정변수 값 전체를 볼 수 있다. 분명한 것은 현재의 환경설정 대화창에서 볼 수 있는 것보다 훨씬 더 많은 수의 값을 볼 수있으며 마우스 우측클릭하여 New 를 선택하면 환경설정변수 값을 간단하게 입력할 수도 있다.

값을 변경하고자 한다면 대상되는 환경설정 값의 이름 (privacy.sanitize.sanitizeOnShutdown.) 위에 마우스를 위치시키고: 두번 클릭한다.

코드에서 환경설정 값에 접근하기

코드 내에서 사용자들에 대한 환경변수를 들여다보면 몇가지 흥미로운 점을 알수 있다. 첫째, firefox.js 파일에서 설정된 기본값을 볼 수 있다.:

411 pref(“privacy.sanitize.sanitizeOnShutdown”, false);

또한 nsNavHistoryExpire::OnQuit() 내부에서는 환경설정변수가 브라우져가 꺼질때 발생되는 현상에 어떤 영향을 미치는지 알 수 있다.:

91 // Sanitization preferences92 #define PREF_SANITIZE_ON_SHUTDOWN   “privacy.sanitize.sanitizeOnShutdown”…213   nsCOMPtr<nsIPrefBranch> prefs(do_GetService(“@mozilla.org/preferences-service;1”));214   PRBool sanitizeOnShutdown, sanitizeHistory;215   prefs->GetBoolPref(PREF_SANITIZE_ON_SHUTDOWN, &sanitizeOnShutdown);216   prefs->GetBoolPref(PREF_SANITIZE_ITEM_HISTORY, &sanitizeHistory);217   if (sanitizeHistory && sanitizeOnShutdown)218     return;

이것은 모질라 소스 전역에 걸처서 볼 수 있는 일반적인 형태이다. 이것은 환경변수의 이름을 정의하는 것에서 시작해서 바라는 값을 얻기 위해 nsIPrefBranch 에 의해 사용될 것이다.

그 다음으로는 , nsIPrefBranch interface를 이용해서 사용자환경변수 서비스를 가져오는 코드인 XPCOM 를 볼 수 있다. nsIPrefBranch’의 GetBoolPref 메소드를 이용하면, PRBool에 필요한 값이 채워진다.

기타 자료들

환경변수에 관련된 주제들에 대하여 더 읽어보기를 원한다먄 아래 링크를 참고하기바란다.:

또한 위에서 보여준 것 같이 소스코드는 아주 훌륭한 예제 사례들로 채워져 있다는 것을 잊지 말자..

소셜댓글

Loading Facebook Comments ...
Loading Disqus Comments ...

No Trackbacks.