'퍼담기' 카테고리의 다른 글
MS Internet Explorer 신규 원격코드실행 취약점 주의 (0) | 2011.01.19 |
---|---|
[로봇] 트렌스포머 커피머신 (0) | 2010.12.06 |
무한도전 비빔밥 광고 (0) | 2010.11.26 |
MS Internet Explorer 신규 원격코드실행 취약점 주의 (0) | 2011.01.19 |
---|---|
[로봇] 트렌스포머 커피머신 (0) | 2010.12.06 |
무한도전 비빔밥 광고 (0) | 2010.11.26 |
[무한도전] 유재석 1위 비결 (1) | 2011.01.11 |
---|---|
무한도전 비빔밥 광고 (0) | 2010.11.26 |
아이폰/아이패드/아이팟 터치용 모바일웹 개발팁 12개 (0) | 2010.10.28 |
[로봇] 트렌스포머 커피머신 (0) | 2010.12.06 |
---|---|
아이폰/아이패드/아이팟 터치용 모바일웹 개발팁 12개 (0) | 2010.10.28 |
sendmail (0) | 2010.08.16 |
/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications
<!--[if !IE]>-->
<link
rel="stylesheet"
href="small-screen.css"
type="text/css"
media="only screen and (max-device-width: 480px)"
/>
<!--<![endif]-->
<link>
요소는 최대 너비가 480픽셀인 기기를 타깃으로 지정한 media query를 사용하여 스타일시트를 로드합니다. 이 크기는 아이폰을 가로로 보았을 때의 크기입니다. IE 조건부 코멘트는 IE 버전 5.5 또는 이하 버전이 여기에 해당하며 이 브라우저들은 media query를 지원하지 않기 때문에 우회하도록 하기 위한 것입니다. 몇가지 예제를 살펴봅시다.@media
블럭을 사용하여 아이폰만을 위한 스타일을 추가 할 수 있습니다.@media only screen and (max-device-width: 480px) {
#test-block {
background: red;
}
}
@media
블럭 안에 박스의 배경을 빨간색으로 지정하는 코드를 발견할 수 있습니다.<meta>
요소<meta>
요소에 viewport
속성을 사용하여 바로 잡을 수 있습니다.<meta name="viewport" content="width=device-width" />
<meta>
요소에 viewport
속성을 사용하지 않은 기본 단락입니다. 여기에 사용된 문자는 거의 보이지 않습니다.<meta>
요소에 viewport
속성을 포함하고 있습니다. 기기의 가로 크기는 320픽셀로 문자를 보기가 더욱 편해졌습니다.device-width
에 지정하는 것입니다. 예를 들어, 당신의 블로그가 800 x 600픽셀 화면에 맞는 가로 750픽셀 레이아웃으로 고정되어있다고 가정해 봅시다. 예제 5에서는 부가적인 빈공간을 없애기 위해, 화면영역 <meta>
요소를 사용하여 가로 크기를 780픽셀로 지정하였습니다.<meta name="viewport" content="width=780" />
<meta>
요소에 viewport
속성을 가진 고정 레이아웃을 볼 수 있습니다.<meta>
요소의 viewport
속성 내용은 여러개의 콤마로 구분하여 기본 스케일 값, 줌 레벨, 스케일링 가능 여부 등을 기입할 수 있습니다. 일반적인 값들은 다음과 같습니다.<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
window.orientation
프로퍼티에 접근 할 수 있으며 아래와 같은 값을 가지고 있습니다.orientationchange
를 사용할 수 있습니다. 다음은 가로/세로 방향이 변할때마다 alert
을 실행하는 예제입니다.window.onorientationchange = function() {
alert(window.orientation);
}
alert
이 실행되기 위해서는 아이폰을 회전시켜야 합니다. 아이폰 시뮬레이터에서는 하드웨어 메뉴에서 기기를 회전하는 메뉴를 찾을 수 있습니다.<body>
요소에 클래스를 추가합니다.(예: portrait와 landscape)body.portrait
와 body.landscape
에 관련된 서로 다른 스타일을 지정합니다.<body>
요소의 클래스 값을 변경합니다.<body class="portrait">
body.portrait p {
color: red;
}
body.landscape p {
color: blue;
}
window.addEventListener('load', setOrientation, false);
window.addEventListener('orientationchange', setOrientation, false);
<body>
요소에 클래스명을 변경하기 위한 setOrientation
함수입니다.function setOrientation() {
var orient = Math.abs(window.orientation) === 90 ? 'landscape' : 'portrait';
var cl = document.body.className;
cl = cl.replace(/portrait|landscape/, orient);
document.body.className = cl;
}
window.scrollTo
메서드를 사용하여 1픽셀 아래로 페이지를 스크롤하여 해결할 수 있습니다.window.addEventListener('load', function(){
setTimeout(scrollTo, 0, 0, 1);
}, false);
<meta>
요소를 추가하세요. viewport
속성에 높이 값을 지정하여 페이지가 스크롤 될 수 있게 합니다.<meta name="viewport" content="height=device-height,width=device-width" />
-webkit-border-radius
CSS속성을 사용할 수 있고 비슷한 방법으로 파이어폭스에서도 -moz-border-radius
를 사용할 수 있습니다. 파이어폭스나 사파리에 border-radius CSS 속성을 사용하고 IE나 오페라일 때에는 보통 사각형으로 보이게 할 수도 있겠습니다..box {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
background: #ddd;
border: 1px solid #aaa;
}
<div>
요소의 가장자리를 둥글게 만들었습니다.touchstart
touchend
touchmove
touchcancel
(시스템이 터치한 것을 취소하는 경우)event
객체를 전달 받습니다. event 객체는 다음과 같은 중요한 프로퍼티를 가지고 있습니다.touches
: 복수로 화면에 터치되는 각 손가락들에 대한 터치 이벤트 모음들. 이 객체들은 페이지에 터치되는 좌표들의 값을 가지고 있습니다.targetTouches
: 터치할 때 발생합니다. 그러나 전체 페이지가 아닌 타깃 요소에만 반응합니다.touchmove
이벤트를 등록하여 손가락으로 움직일 때마다 박스의 포지션을 업데이트 합니다. window.addEventListener('load', function() {
var b = document.getElementById('box'),
xbox = b.offsetWidth / 2, // half the box width
ybox = b.offsetHeight / 2, // half the box height
bstyle = b.style; // cached access to the style object
b.addEventListener('touchmove', function(event) {
event.preventDefault(); // the default behaviour is scrolling
bstyle.left = event.targetTouches[0].pageX - xbox + 'px';
bstyle.top = event.targetTouches[0].pageY - ybox + 'px';
}, false);
}, false);
touchmove
이벤트 리스너는 최초 손가락 움직임에는 반응하지 않습니다. 이것은 모바일 사파리의 페이지를 스크롤 컨트롤과 중복되기 때문입니다. event.targetTouches
는 타깃 <div>
요소 위에 있는 각 손가락에 대한 데이터 목록들을 가지고 있습니다. 우리는 그중 하나에 대한 것만 필요하므로 event.targetTouches
을 사용합니다. pageX
는 손가락 위치의 x 좌표값입니다. 손가락이 박스의 중간에 위치할 수 있게 하기 위해 <div>
의 가로 크기의 반을 x 좌표값에서 뺐습니다.touches
와 targetTouches
이벤트에 관하여 우리는 이미 배웠습니다. 줌과 팬(파노라마)과 같은 제스쳐를 다루기 위해서도 위와 같은 이벤트들을 사용할 수 있지만, 조금 더 편리한 제스처 이벤트 들이 있습니다. 다음을 살펴 봅니다.gesturestart
gestureend
gesturechange
gesturechange
이벤트에 반응하고 WebKit 전용 CSS 스타일 프로퍼티인 webkitTransform
을 사용하여 div를 스케일링도 해보고 회전도 시켜볼 것입니다. 마찬가지로 이벤트 리스너는 이벤트 객체를 넘겨 받습니다. 이벤트 객체는 다음과 같은 프로퍼티를 가지고 있습니다.event.scale
: 값 1은 스케일링이 전혀 없습니다. 값이 1보다 작을 때는 줌-아웃(<div>
요소를 작게 만듦)이며 줌-인일때 1보다 값이 큽니다.event.rotate
- 이것은 회전 각도입니다.window.addEventListener('load', function() {
var b = document.getElementById('box'),
bstyle = b.style;
b.addEventListener('gesturechange', function(event) {
event.preventDefault();
bstyle.webkitTransform = 'scale(' + event.scale + ') ' +
'rotate('+ event.rotation + 'deg)';
}, false);
}, false);
<div>
요소를 스케일링하고 회전할 수 있습니다.tel:
스키마를 사용할 수 있습니다.<a href="tel:12345678900">Call me</a>
sms:
스키마를 사용하세요.<a href="sms:12345678900">Send me a text</a>
<link>
요소를 사용하여 그 아이콘의 파일 이름이나 위치를 변경할 수도 있습니다. CDN처럼 다른 웹서버에서 이미지를 호스트하는 경우라면 <link>
요소에 아이콘의 위치를 지정하기 위해 다음과 같이 작성하세요.<link rel="apple-touch-icon" href="http://www.example.com/my-filename.png" />
document.documentElement.innerHTML
를 사용하여 페이지의 소스를 출력할 수 있고 이러한 내용을 북마클릿으로 만들어 새 창으로 소스를 볼 수 있습니다. iPHoneWebDev에서는 이미 이런 소스보기 관련 북마클릿를 여럿 제공하고 있으며 이 밖에도 모바일 사파리의 디스플레이를 최적화 하는데 도움을 주는 다른 것들도 많습니다. 이 북마클릿을 사용하기 위해서는 데스크탑용 사파리에서 즐겨찾기에 추가하고 아이튠즈로 동기화하면 됩니다.console.log('Something');
console.error('Oops');
console.warning('Beware!');
무한도전 비빔밥 광고 (0) | 2010.11.26 |
---|---|
sendmail (0) | 2010.08.16 |
Pots Of Gold (0) | 2010.06.21 |
인터넷을 조금이라도 써 보신분은 sendmail이란 말을 들어보셨을 껍니다. 아니 요즘 같이 책들이 많이 나왔을때는 인터넷을 쓰지 않으셔도 sendmail이란 말은 들어보셨을 지도 모릅니다. 아마 대부분의 사람들은 과연 sendmail이 무엇이길래 사람들의 입에 오르내리는지?, 꼭 써야 하는건지? 라는 생각을 해 보셨을텐데요 여기에서는 sendmail이 무엇이며 어떻게 설치하고 sendmail에서 야기되는 몇가지 문제점들에 대해 이야기를 해 보도록 하겠습니다.
우선 sendmail은 인터넷에서 전자메일을 전송하기 위해 사용되는 프로그램이라고 생각하시면 됩니다. 그럼 이렇게 대답하시는 분들이 계실꺼예요. "어! 저는 전자메일을 보내고 받는데 Netscape Messanger를 쓰는데요! 그럼 sendmail은 몰라도 되겠네요!" 하지만 지금까지 모르셨을지 모르지만 Netscape Messanger같은 메일프로그램을 사용하시더라도 sendmail은 사용해 오셨을 겁니다. 전자메일 시스템에서 사용되는 용어중 Netscape Messanger와 같은 프로그램은 MUA(Mail User Agent)라고 부릅니다. 그에 비해 sendmail은 MTA(Mail Transfer Agent)라고 부릅니다.
우선 인터넷으로 편지를 보냈을때 어떤 경로로 전달되는지 알아보도록 하죠. 여기에서 메일서버로 taegu.ac.kr를 사용하는 whjang이라는 사용자가 kebi.com 컴퓨터에 있는 peach란 사용자에게 메일을 보낸다고 가정해보죠. 우선 사용하는 MUA(여기에서는 Netscape Messanger, 줄여서 NM이라고 부르겠습니다.)는 메일서버의 25번 포트에 접속을 합니다. 메일서버의 25번 포트에서는 MTA(여기에서 설명하는 sendmail이 해당됩니다. 이하 sendmail이라고 언급하겠습니다.)가 대기하고 있다가 NM이 보내고자 하는 메일을 받습니다. 그러면 sendmail은 스풀디렉토리(시스템 마다 조금씩 틀립니다. 제가 사용하는 Solaris 2.x에서는 /var/spool/mqueue를 사용합니다.)에 메일을 저장해 둔 후 kebi.com의 25번 포트로 접속합니다. kebi.com에도 sendmail이 25번 포트에서 대기하고 있겠죠. 정상적으로 접속을 한 후 taegu.ac.kr에 있는 sendmail은 kebi.com에 있는 sendmail에게 메일을 전송한 후 자신의 스풀에 저장된 메일을 삭제합니다. taegu.ac.kr에 있는 sendmail은 더이상 할 일이 없는거죠. 만일 kebi.com에 이상이 있어서 접속할 수 없다면 어떻게 될까요? taegu.ac.kr에 있는 sendmail은 메일을 스풀 디렉토리에 계속 가지고 있으며 수시로 접속을 시도합니다. 그러다가 며칠이 지나도 보낼 수 없다면 처음에 메일을 보낸 사람에게 메일을 보낼 수 없다고 되돌려 줍니다.
이제 메일을 받은 kebi.com에 있는 sendmail이 하는일을 차례대로 살펴보죠. 메일을 받은 sendmail은 메일의 도착지가 자신인지 확인을 합니다.(sendmail.cw파일 참조) 만일 도착지가 자신이 아니라면 도착지로 메일을 다시 전송합니다. (이 경우에는 아래에 설명드리겠지만 relay를 허용하는 호스트로만 전달할 수 있습니다. 그렇지 않은경우에는 에러를 출력합니다.) 만일 자신이 메일의 도착지라면 메일을 MDA(Mail Delivery Agent)에게 넘겨줍니다. MDA는 메일을 MTA로부터 받아서 메일박스등에 저장하거나 원하는 필터링을 할 수 있는 프로그램입니다. 보통 기본적으로 사용하는 MDA프로그램은 /bin/mail이며, 한글 처리를 위해 procmail을 이용하는 서버도 많이 있습니다. 메일을 받은 MDA는 필터링 과정을 거친 후 사용자의 메일박스에 저장합니다.
이제 메일의 전송은 완료되었습니다. 사용자는 mutt나 pine등의 MUA를 이용하여 메일을 확인할 수 있으며 외부에서 메일을 확인하는 경우 POP3나 IMAP프로토콜을 이용하여 메일박스를 가져갈 수 있습니다. POP3나 IMAP에 관한 내용은 본 글의 범위를 벗어나므로 설명은 하지 않겠습니다.
이상에서 보듯이 sendmail은 MTA의 역활을 합니다. 사용자로부터 메일을 전달받아 다른 컴퓨터의 MTA에게 넘겨주고, 다른 MTA로 부터 받은 메일을 MDA에게 넘겨주는 인터넷 전자메일의 가장 중심부에 위치하고 있습니다. 물론 MTA에는 다양한 프로그램이 있지만 sendmail은 카테고리 킬러(해당분야의 다른 프로그램들은 아예 잊혀져 버릴 만한 경쟁력을 갖추고 자신의 지위를 확고히 하는 최고 수준의 프로그램)가 될 수 있는 능력을 갖추었고, 현재 UNIX기반 메일서버의 거의 대부분이 MTA로 sendmail을 쓰고 있습니다.
http://www.sendmail.org에서 배포하는 sendmail의 배포판은 1998년 10월 31일 현재 8.9.1a이 최신입니다. (이는 sendmail 8.9.1과 8.9.1a로의 패치로 이루어져 있습니다.) 우선 파일을 다운로드 받아서 풀어둡니다.
temp $ gzip -dc sendmail.8.9.1.tar.gz | tar xvf - temp $ cd sendmail-8.9.1/src src $ patch < ../../sendmail.8.9.1a.patch
** Solaris등에 기본적으로 들어있는 patch를 사용하면 잘 되지 않습니다. GNU patch를 설치하셔서 사용하시기 바랍니다.
주의**) http://www.sendmail.org/compiling.html에서는 src디렉토리에서 직접 make를 이용해서 컴파일 하지 말도록 하고 있습니다. 이 대신 Build 쉘스크립트를 사용하도록 권하고 있습니다.
가장 쉬운 방법은 Build스크립트를 사용하는 것입니다. 단순히 sh Build 라고 치면 컴파일 작업을 수행합니다. (기존에 sendmail을 설치했던 사람들중에는 makesendmail 스크립트를 사용한 사람들이 많은데 이는 Build 스크립트와 동일한 프로그램을 가리키고 있으므로 Build를 사용해도 무방합니다. 따라서 makesendmail대신에 Build를 사용하기를 권합니다.)
sendmail 8.9.1 $ cd src src $ sh Build Configuration: os=SunOS, rel=5.6, rbase=5, rroot=5.6, arch=sun4, sfx= Using M4=/usr/ccs/bin/m4 Creating obj.SunOS.5.6.sun4 using ../BuildTools/OS/SunOS.5.6 Making dependencies in obj.SunOS.5.6.sun4 gcc -M -I. -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=20600 *.c >> Makefile Making in obj.SunOS.5.6.sun4 gcc -O -I. -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=20600 -c alias.c -o alias.o
위의 메시지를 잠시 살펴보면 현재 시스템이 사용하고 있는 운영체제(os)는 SunOS이며 release는 5.6임을 알 수 있습니다. 또한 시스템의 아키텍쳐는 sun4입니다. 나중에 sendmail.cf파일을 만들때 사용하는 m4는 /usr/ccs/bin/m4를 사용하고 현재 디렉토리 아래에 obj.SunOS.5.6.sun4 디렉토리에 바이너리 파일들을 생성하며 컴파일 때 사용하는 파일은 ../BuildTools/OS/SunOS.5.6 임을 알 수 있습니다.
우선 Makefile에 소스파일의 의존관계를 추가하고 본격적인 컴파일을 시작합니다. (의존관계의 생성에 관한 내용은 Makefile에 관련된 자료를 참고하기 바랍니다.)
sendmail은 다양한 설정을 가지는데 주로 매크로를 사용하여 설정합니다. 위에서 사용된 -DNBDM -DNIS -DNISPLUS -DMAP_REGEX등이 그것입니다. 이것 이외에도 많은 매크로가 있으며 여기에서는 그중에서 중요한것만 설명하겠습니다.
이 매크로들은 여러개를 한꺼번에 정의해서 사용할 수 있습니다. (심지어는 -DNEWDB와 -DNDBM도 한꺼번에 정의해서 사용할 수 있습니다. 물론 이 경우에는 처음에 NDBM으로 만들어진 alias파일을 읽어 Berkeley DB형태로 바꾸고 Berkeley DB형태로 계속 사용합니다.) 하지만 -DNDBM은 쓰지 말기를 필자는 추천합니다. 그리고 만일 -DNEWDB가 Build 스크립트에 의해서 자동적으로 추가되지 않았다면 직접 Makefile을 수정해서 추가하도록 합니다.
이렇게 Makefile을 수정한 경우 새로 컴파일 하는 것이 좋습니다. 만일 프로그램에 익숙하다면 필자가 직접 언급하지 않아도 잘 알겠지만, 그렇지 않은 경우 -DNEWDB와 같이 매크로를 수정했다면 모든 이진파일인 *.o와 sendmail바이너리를 삭제한 후 다시 Build를 실행하고, -ldb등으로 라이브러리를 추가했다면 sendmail바이너리만 삭제한 후 다시 Build를 실행하면 됩니다.
만일 Solaris 2.6을 사용한다면 -DNEWDB -DNIS -DNISPLUS -DMAP_REGEX를 MAPDEF에 정의하고, LIBS는 -lresolv -lsocket -lnsl -lkstat -ldb을 사용하는 것을 추천합니다. 필자는 Solaris 2.6에서 위와같이 설정한 후 잘 쓰고 있습니다. 물론 이 설정을 사용해서 컴파일 하려면 Berkeley DB가 이미 설치되어 있어야 합니다. 아직 Berkeley DB패키지를 설치하지 않았다면 우선 그것부터 설치하시기 바랍니다.
프로그램의 생성이 끝나면 obj.$os.$rel.$arch 디렉토리(예를들어 필자의 경우 SunOS.5.6.sun4)에 들어가서 수퍼유저의 권한으로 make install을 실행하면 매뉴얼등의 파일이 인스톨 됩니다. 기본적으로 sendmail 바이너리는 /usr/lib/ 디렉토리에 설치됩니다. 설치된 sendmail바이너리의 모드와 소유자등은 아래와 같아야 합니다.
/ $ ls -l /usr/lib/sendmail -r-sr-x--x 1 root bin 412896 6월 5일 18:04 /usr/lib/sendmail
만일 위와 다르다면 아래와 같이 입력하여 정확하게 만드시기 바랍니다.
/ $ chown root /usr/lib/sendmail / $ chgrp bin /usr/lib/sendmail / $ chmod 4555 /usr/lib/sendmail
** GNU groff가 없는 시스템에서는 메뉴얼을 만들때 에러가 납니다. GNU groff를 설치하면 깔끔하게(?) 해결이 되지만, 여의치 않을때는 메뉴얼을 설치하지 않고 sendmail바이너리를 수작업으로 설치하여도 상관이 없습니다.
이제 sendmail 바이너리 파일은 설치를 했으므로 sendmail.cf 파일을 만들어야 합니다. sendmail.cf파일은 직접 수정할 수 있으나 m4를 이용해서 생성하는게 쉽습니다. cf/cf 디렉토리에는 다양한 mc파일이 있으므로 자신의 시스템에 가장 적당한 mc파일을 선택합니다. 예를들어 필자의 경우는 Solaris 2.6이므로 genric-solaris2.mc 파일을 사용했습니다. 이 mc파일을 이용해서 sendmail.cf파일을 생성하는 방법은 아래와 같습니다.
sendmail $ cd cf/cf cf $ m4 ../m4/cf.m4 generic-solaris2.mc > sendmail.cf
이 sendmail.cf를 /etc/mail 에 복사한 후 /etc/sendmail.cf를 /etc/mail/sendmail.cf로 심볼릭 링크를 생성합니다. (ln -s /etc/mail/sendmail.cf /etc/sendmail.cf)
** Linux의 경우에는 mc파일이 없습니다. 이때는 다른 mc파일에서 OSTYPE만 linux로 변경한 후 생성하면 됩니다. Linux에서 local mailer로 procmail을 사용하는 시스템에서 일반적인 mc파일은 아래와 같습니다.
VERSIONID(`linux for smtp-only setup with procmail for korean mail`)dnl OSTYPE(linux)dnl FEATURE(nouucp)dnl FEATURE(local_procmail)dnl FEATURE(access_db)dnl MAILER(local)dnl MAILER(smtp)dnl
/etc/mail/sendmail.cw에 메일을 받을 수 있는 호스트 이름을 적습니다. 이곳에 적은 이름으로 메일이 들어오면 더 이상 다른곳으로 메일을 보내지 않고 MDA(Mail Delivery Agent, 메일을 MTA에게서 받아 메일박스에 저장하는 프로그램)로 전달합니다. 보통 FQDN(Fully Qualified Domain Name)을 적고 만일 여러개의 호스트 이름을 사용한다면 모두 적어줘야 합니다.
/ $ cd /etc/mail mail $ cat sendmail.cw hostname.domain.com hostname2.domain.com
sendmail 8.9.x 에서는 보안상 몇가지 디렉토리의 모드를 검사해서 적당하지 않다면 sendmail자체가 실행이 안됩니다. 따라서 아래와 같이 입력해 주어야 합니다. 자세한 내용은 DontBlameSendmail and Enhanced File Security를 참고하시기 바랍니다.
/ $ chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue / $ chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
이것 외에도 유저디렉토리에 그룹이 쓰기가능하거나, other가 쓰기 가능하다면 .forward가 작동하지 않습니다. 만일 일반 사용자의 .forward파일이 작동하지 않으면 그 사용자 홈 디렉토리의 모드를 확인하시기 바랍니다.
참고로 /etc/hosts 파일의 형태가 대부분 아래와 같이 되어있습니다.
/ $ cat /etc/hosts 127.0.0.1 localhost 155.230.28.125 khaki loghost 155.230.28.115 purple
하지만 이 파일을 아래와 같이 수정하시기 바랍니다. (차이점은 아시겠죠? ^^)
/ $ cat /etc/hosts 127.0.0.1 localhost 155.230.28.125 khaki.ce.kyungpook.ac.kr khaki loghost 155.230.28.115 purple.ce.kyungpook.ac.kr purple
이렇게 설정을 모두 마치셨다면 다음과 같이 해서 에러 메시지가 없는지를 확인해 보시기 바랍니다.
/ $ /usr/lib/sendmail -bi
이 때 에러 메시지가 없어야 합니다. 만일 에러 메시지가 났다면 /var/log/syslog 화일의 뒷부분을 보시기 바랍니다. 만일 별 문제가 없다면 이제 sendmail을 다시 띄우시면 됩니다.
/ $ /usr/lib/sendmail -bd -q1h
그리고 반드시 /var/log/syslog 를 확인하시고, 메일을 보내고 받는 테스트를 지금 바로 해 주세요. 그리고 /var/log/syslog 에 에러 메시지가 있는지도 살펴 보시기 바랍니다.
메일에서 사용되는 SMTP프로토콜은 기본적으로 7bit문자만을 기반으로 제작되었습니다. 하지만 한글의 경우 EUC-KR로 표현하면 8bit를 사용하기 때문에 문제가 생길 수 있습니다. 따라서 메일에서 사용하기 위해 한글의 7bit 표현방법인 ISO-2022-kr(RFC 1557)이 만들어 졌고 메일의 본문에 사용되었습니다(헤더에는 EUC-KR을 B나 Q인코딩 방법으로 인코딩해서 사용했습니다.). 하지만 대부분의 프로그램에서는 한글을 8bit표현방법인 EUC-KR을 사용했으므로 이 두 표현간의 변환을 해 주는 프로그램이 필요했습니다. 이 작업은 크게 MTA, MDA, MUA에서 해 줄 수 있습니다. MTA에서 변환을 해 주는 대표적인 프로그램이 sendmail 8.6.12h2입니다. 이 프로그램은 프로그램으로부터 8bit표현을 입력으로 받아서 다른 곳으로 전송할때 ISO-2022-kr로 변환한 후 전송을 하고, 네트웍을 통해 받은 ISO-2022-kr로 표현된 메일을 EUC-KR로 변환 후 메일박스에 저장하도록 만들어 졌습니다. 그래서 몇년전까지만 해도 대부분의 메일서버에서 sendmail 8.6.12h2를 사용했었습니다.
하지만 SMTP 프로토콜이 8bit문자를 지원하는 ESMTP 프로토콜로 변하면서 본문에서도 ISO-2022-kr대신에 EUC-KR을 사용하도록 표준이 바뀌었습니다. 하지만 이 안을 정식 표준으로 공표하지 않았고, 아직까지 인터넷에는 ISO-2022-kr 로 표현된 메일이 돌아다니기 때문에 이 메일을 EUC-KR로 변환해 주는 작업이 추가적으로 필요하게 되었습니다.
ISO-2022-kr을 EUC-KR로 변환해 주는 프로그램들은 UNIX환경에서는 많이 만들어 졌습니다. hconv와 hmconv가 대표적인 프로그램입니다. 이제 관리자가 해 줘야 하는일은 sendmail이 받은 메일을 메일박스로 저장하기 전에 이 프로그램을 통과하게 만들어서 ISO-2022-kr을 EUC-KR로 변환만 해 주면 되게 되었습니다. 이렇게 필터링을 가능하게 해 주는 대표적인 프로그램이 procmail입니다.
여기에서는 procmail을 이용하여 한글 메일을 처리하는 과정을 설명드리겠습니다. 여기에서 알아두셔야 할 내용중에 중요한 내용으로 MDA에 대한 이해입니다. MDA(Mail Delivery Agent)는 MTA(Mail Transfer Agent, 대표적인 예는 sendmail입니다.)가 받은 메일의 최종적인 도착지가 현재 호스트인경우(sendmail의 경우 sendmail.cw를 참고하여 결정합니다.) 메일을 MDA에게 넘겨줍니다. 보통 시스템의 기본적인 MDA는 /bin/mail입니다. procmail은 /bin/mail대신에 사용할 수 있는 프로그램으로 필터링 기능이 강력하여 한글처리에 이용할 수 있습니다.
또 잘못 이해하시는 분들중에 procmail자체가 한글 디코딩을 해준다고 알고 계신분들이 많습니다. 이것은 잘못된 것입니다. 실재로 procmail도 한글 디코딩을 위해 다른 프로그램(보통 hcode나 hmconv를 이용합니다.)을 이용합니다. procmail이 하는일은 단순히 어떤 헤더가 있을때 적당한 프로그램을 불러 한글 디코딩을 해 줍니다.
따라서 procmail뿐만 아니라 한글 디코딩을 위한 프로그램을 설치하셔야 합니다. 여기에서는 hcode를 사용하도록 하겠습니다.
hcode는 ftp://ftp.kaist.ac.kr/hangul/code/hcode/에서 구할 수 있습니다. 가져온 프로그램을 적당한 디렉토리에 풀고 소스 디렉토리에서 단순히 make를 입력하면 컴파일이 완료됩니다. 컴파일 결과로 생긴 hcode를 /usr/local/bin 에 복사해 둡니다.(다른 디렉토리도 상관없습니다.)
그다음 procmail을 설치합니다. procmail은 대부분의 ftp서버에서 구할 수 있습니다. (저의 경우 ftp://ftp.kreonet.re.kr/pub/tools/mail/procmail/에서 구했습니다.) 프로그램을 구한 후 디렉토리에서 make를 입력한 후 메시지에 나온대로 대답하면 설치할 수 있습니다. 만들어진 procmail을 역시 /usr/local/bin에 설치합니다.
그런다음 /etc/procmailrc를 아래와 같이 만들어 둡니다.
LOGFILE=/var/log/procmail VERBOSE=no PATH=/usr/local/bin:/usr/bin:/bin SHELL=/bin/sh :0 B *^.\$\)C { :0 fbw |hmconv -u :0 fhw * ^Content-Type: text/plain |formail -c -I "Content-Type: text/plain; charset=EUC-KR" -I \ "Content-Transfer-Encoding: 8bit" :0 Efhw * ^Content-Type: text/html |formail -c -I "Content-Type: text/html; charset=EUC-KR" -I \ "Content-Transfer-Encoding: 8bit" :0 Efhw * !^Content-Type: |formail -c -I "Content-Type: text/plain; charset=EUC-KR" -I \ "Content-Transfer-Encoding: 8bit" # Note that '-c' flag has been added to formail invocation. # It concatenates a header of multiple lines into a single line # so that a bug in 'hcode -dk -m' dealing with RFC 2047 encoded header # has less 'harmful' effect. :0 fhw | formail -A \ "X-Automatic-Korean-Mail-Conversion: iso-2022-kr to euc-kr" } DROPPRIVS=yes :0 fhw *Content-Type:.+; charset="?EUC-KR | formail -c | hcode -dk -m :0 Efhw *^(Subject|From|Cc):.*=\?EUC-KR\?(B|Q)\? | formail -c | hcode -dk -m
그다음 sendmail에서 MDA로 procmail을 사용할 수 있도록 sendmail.cf파일을 수정해 줘야 합니다. sendmail.cf파일에서 Mlocal부분을 찾아서 아래와 같이 수정하시면 됩니다.
Mlocal, P=/usr/local/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u
하지만 이 방법보다는 mc파일에 FEATURE(local_procmail)을 추가하여 sendmail.cf를 생성하는 방법이 좋습니다.
제가 여기에서는 간단하게 설명을 드렸지만 좀더 자세한 내용이 필요하신 분은 신정식님의 Sendmail 8.8.x 이후 판과 Procmail을 이용한 한글 메일 처리를 참고하시기 바랍니다.
이 작업이 귀찮게 느껴지신다면 위에서 하는작업과 동일한 일을 하는 한글 sendmail을 설치하시면 됩니다. 하지만 한글 sendmail은 영문 sendmail에 비해 버전도 낮고, 또다른 오류가 생길 확률이 높기때문에 위의 방법을 사용하시기 바랍니다.
sendmail프로그램은 그 자체로 매우 복잡한 프로그램입니다. 또한 프로그램의 설정파일인 sendmail.cf자체도 복잡하기 그지 없습니다. ^^ 이 프로그램에 대한 얘기는 여기에서 설명하기 힘드므로 (솔직히 기존의 글보다 더 잘 설명할 자신도 없습니다. ^^) 이상로님의 http://trade.chonbuk.ac.kr/~leesl/mail/를 참고하시거나 sendmail의 저자가 직접 저술한 책(책 제목이 금방 떠오르지 않네요. 그냥 sendmail이지 싶은데.. ^^)을 참고하시기 바랍니다.
복잡한 설정이 싫다면 위에서 만들었던 m4를 이용해서 만든 sendmail.cf를 그대로 이용하셔도 됩니다.
Third Party Relay란 간단하게 말해서 SMTP서버의 사용자가 아닌 사람(보통 스팸을 뿌리기 위한 악의로)이 SMTP서버를 이용하는 것입니다. 따라서 A 컴퓨터의 SMTP서버를 C 컴퓨터에 있는 사용자가 B 컴퓨터로 메일을 보내기 위해 이용하는경우를 말합니다. 좀더 자세한 설명은 What is Third-Party Mail Relay?를 참고하시기 바랍니다.
아직까지 많은 서버들이 Third Party Relay를 허용하고 있으며, 이때문에 자신이 관리하는 호스트가 스팸 사이트로 인식되는것도 모르고 있는 경우가 허다합니다. 우선 자신이 관리하는 호스트의 SMTP서버가 Third Party Relay를 허용하는지를 체크하려면 Is My Mailer Vulnerable?에서 하실 수 있습니다. 꼭 해보시기 바랍니다.
Third Party Relay를 막으려면 적어도 sendmail 8.8.x 가 되어야 합니다. 따라서 최신의 sendmail로 업그레이드를 하시기 바랍니다.
sendmail.cf에 아래와 같은 Rule set을 넣고 sendmail.cR파일에 relay를 허용하는 호스트의 FQDN이나 IP address를 입력하면 됩니다. ( http://www.sendmail.org/antispam.html에서는 IP address를 권하고 있습니다.)
FR-o /etc/sendmail.cR Scheck_rcpt # anything terminating locally is ok R< $+ @ $=w > $@ OK R< $+ @ $=R > $@ OK # anything originating locally is ok R$* $: $(dequote "" $&{client_name} $) R$=w $@ OK R$=R $@ OK R$@ $@ OK # anything else is bogus R$* $#error $: "550 Relaying Denied"
그리고 /etc/sendmail.cR의 설정은 아래와 유사하게 하시면 됩니다.
/ $ cat /etc/sendmail.cR 155.230.28.117 155.230.28.118
sendmail 8.9.x에서는 기본적으로 third party relay를 금지하고 있습니다. 만일 third party relay를 허용하려면 promiscuous_relay FEATURE를 mc파일에 추가하고 sendmail.cf를 생성하면 됩니다. (하지만 이렇게 할 사람이 있나요? ^^)
따라서 sendmail 8.9.x에서는 sendmail.cf에 특별한 수정없이 relay에 관한 파일만 수정하면 됩니다. 아래에서는 사용하고 있는 도메인 이름이 company.co.kr 이고, 호스트 이름이 myhost, ip address가 203.123.45.67 인 경우라고 가정합니다.
/etc/mail/access : 누가 이 메일 서버를 릴레이 서버로 지정해서 사용할 수 있는가, 어떤 주소에서 오는 메일은 거절할 것인가를 설정하는 파일입니다.
mail $ cat access 203.123.45 RELAY 209.1.2.3 RELAY cyberpromo.com REJECT
이렇게 설정한 경우 myhost와 같은 서브넷에 있는 컴퓨터들와 209.1.2.3을 사용하는 컴퓨터에서만 myhost.company.co.kr을 SMTP 서버로 지정해서 메일을 보낼 수 있습니다. 그리고 cyberpromo.com과 cyperpromo.com 도메인에 속하는 모든 호스트에서 오는 메일은 거절합니다. 일단 이 화일을 만드셨다면 이제는 DB 화일을 만드셔야 합니다.
/ $ cd /etc/mail mail $ makemap hash access < access
그리고 /etc/mail/access 화일을 수정을 할 때마다 반드시 이 작업을 해 주셔야 합니다. 하지만 이 작업을 후에 sendmail을 죽이고 다시 띄울 필요는 없습니다.
그리고 access파일을 사용할 경우에는 sendmail.cf를 생성할 때 mc파일에 FEATURE(access_db)를 추가해야 합니다.
또한 makemap의 버전이 낮은경우 작동을 하지 않는 경우가 있습니다. 이때는 sendmail 패키지와 함께 딸려나오는 makemap을 컴파일 한 후 시도해 보시기 바랍니다. makemap도 sendmail과 마찬가지로 -DNEWDB를 선택해 주셔야 합니다.
/etc/mail/relay-domains : 위의 /etc/mail/access에서 지정한 곳 외에서 메일 서버로 지정하는 경우에도, relay-domains 에 등록한 도메인의 호스트에 대해서는 허용합니다. relay-domains와 access파일의 큰 차이점의 하나는 access파일의 경우 수정후 sendmail을 다시 실행할 필요가 없지만 relay-domains파일은 수정후 sendmail을 다시 실행해야 바뀐 내용을 인식합니다. 편한 파일을 하나 정해서 사용하시면 됩니다. 저의 경우 access파일은 RELAY-FROM에 해당하는 호스트에 relay-domains는 RELAY-TO에 해당하는 호스트를 설정합니다.
mail $ cat relay-domains company.co.kr
이 경우 company.co.kr 도메인에서 오는 메일은 모두 중계를 허용합니다. 만일 이 메일 서버로만 오는 메일을 받고 싶다면(대부분의 경우가 여기에 속합니다) access 화일과 relay-domains 화일을 0바이트짜리 화일로 만들면 됩니다.
이렇게 설정한 후 SMTP서버가 third party relay를 허용하는지 테스트해 보시기 바랍니다.
인터넷이 생활 깊숙히 들어가면 갈수록 편해지는 점이 있는것처럼 가끔은 사람을 짜증나게(?) 만드는 일들이 있습니다. 메일도 마찬가지인데요. 그중에서 사람을 열받게(?) 만드는 대표적인 메일은 스팸메일입니다. 따라서 메일서버의 관리자라면 스패머(Spammer, 스팸메일을 보내는 사람)가 보내는 스팸메일을 차단할 수 있어야 합니다. 여기에서는 스팸메일이 무엇이고, 어떻게 막을것인가에 관한 얘기를 하고자 합니다.
가능한 빨리 추가할께요. 죄송 ^^
만일 님이 관리하고 있는 메일서버의 사용자한명이 info@cyberpromo.com 에서 계속 SPAM메일을 보낸다고 항의를 해 온다면 /etc/mail/access 에 아래와 같이 추가하고 makemap으로 access DB를 재 생성하세요.
info@cyberpromo.com REJECT
근데 좀 지나보니 info2@cyberpromo.com 으로 이름을 바꾸어서 SPAM메일을 계속 보내는군요. 열받아서 cyberpromo.com 에서 오는 메일을 모두 거부하고 싶다면 아래와 같이 추가하세요.
cyberpromo.com REJECT
좀 지나고 생각을 해 보니 그냥 거부만 하니까 너무 싱겁군요. 메시지를 하나 띄워주고 싶다면 아래와 같이 access파일을 만드세요.
cyberpromo.com 550 Spammers couldn't see sunlight here
이제 좀 시원하군요. ^^
다음과 같은 상황을 가정해 보죠. 갑은 현재 을과 병에게 호스트를 임대해 주고 있습니다. 한대의 유닉스 시스템에 각각 ul.co.kr과 byung.co.kr이라는 도메인을 할당해서 웹서비스와 메일서비스를 해 주고 있습니다. 현재 웹서비스는 apache서버의 가상 호스트기능을 이용해서 잘 서비스를 하고 있었는데 갑자기 을과 병이 webmaster라는 메일계정을 똑같이 요구했습니다. 즉 을은 webmaster@ul.co.kr을 병은 webmaster@byung.co.kr을 요구했죠. 갑은 고민을 합니다. 어떻게 할까? 만일 이글을 보고 계신분이 갑과 같은 상황이라면 어떻게 해결을 했을까요?
sendmail에서는 이와 같은 문제를 해결하기 위해 가상 호스트를 제공합니다. 자세한 내용은 Virtual Hosting with Sendmail을 참고하시기 바랍니다. 여기에서는 간단하게 설명을 드리겠습니다.
위와 같은경우 이미 Name Server에는 정상적으로 설정되어 있을것이므로 Name Server 설정방법은 생략하겠습니다. 우선 sendmail.cf를 다시 만들어야 합니다. 이미 만들었던 mc파일에 FEATURE(virtusertable, hash /etc/mail/virtusertable)을 추가하고 sendmail.cf를 다시 생성하시기 바랍니다.(이 글에서는 sendmail이 사용하는 DB는 Berkeley DB라고 가정합니다.)
이제 을이 사용하는 계정인 webul을 만듭니다.(이름은 상관이 없습니다. 여기에서는 편의상 제가 이렇게 지었습니다.) 그리고 병이 사용하는 webbyung을 만듭니다. 그다음 /etc/mail/virtusertable.src 파일을 아래와 같이 만듭니다.
webmaster@ul.co.kr webul webmaster@byung.co.kr webbyung
그다음 makemap으로 아래와 같이 DB파일을 만들면 됩니다.
makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable.src
이렇게 해 두면 webmaster@ul.co.kr으로 오는 메일은 을에게 webmaster@byung.ac.kr로 오는메일은 병에게 갈 수 있습니다. 어때요? 간단하죠? virtusertable을 이용하면 위와 같은 단순한 기능외에도 다양한 기능을 사용할 수 있습니다. 자세한 내용은 위에서 언급했던 Virtual Hosting with Sendmail을 참고하시기 바랍니다.
사용자명에 대문자가 들어있는경우 메일을 받으려면?
sendmail을 MTA로 사용하시는 경우에 sendmail.cf의 Mlocal로 시작하는 부분에 보시면 F=이라고 된 부분이 있습니다. 이곳에 u를 추가하면 대문자로 된 계정에서도 메일을 받아볼 수 있습니다. 하지만 계정에는 대문자를 안 쓰시는게 좋습니다. (특히 NIS+를 쓸경우 말썽을 많이 부립니다.)
.forward가 작동하지 않습니다.
Sendmail 8.9.x 부터는 sendmail이 읽어들이는 파일의 모드를 검사합니다. 예를들어 .forward가 있는 디렉토리(일반적으로 홈 디렉토리)의 모드가 그룹에게 쓰기가능하도록 설정되어 있으면 .forward파일자체를 읽지않습니다. 이때문에 .forward가 작동하지 않는다고 투덜대는 사람들이 많습니다. 지금 사용하고 계신 sendmail이 8.9.0이상이라면 자신의 홈디렉토리와 그 상위디렉토리가 그룹에게 쓰기가능하도록 되어있는지 확인해 보시기 바랍니다. 자세한 얘기는 DontBlameSendmail and Enhanced File Security를 참고하시기 바랍니다.
뉴스그룹에 김경욱님이 아래와 같은 글을 올려주셨습니다. 역시 .forward가 작동하지 않는경우를 설명하고 있습니다. 참고하세요.
sendmail.cf에서, .forward에 영향을 미치는 부분은 두군데입니다. # Forward file search path O ForwardPath=$z/.forward.$w:$z/.forward $z (/etc/passwd를 lookup 해서 얻은 유저 디렉토리의 path) 밑의 .forward가 ForwardPath로 잡혀 있습니다. 이 옵션을 disable(#)시키면 forwarding이 되지 않습니다. 다음, 여기서 $z 값을 얻기 위해서 Local delivery agent는 /etc/passwd를 lookup 합니다. 그러나 Mlocal에서 F=w flag가 없으면 Mlocal은 /etc/passwd 를 lookup 하지 않습니다. Mlocal, P=/usr/local/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/ 40, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u 위 두가지 사항을 확인해 보세요. -- 김경욱
access가 작동하지 않습니다.
일단 sendmail.cf를 만든 mc에 FEATURE(access_db, hash -o /etc/mail/access)를 추가하셨는지 검사해 보시고 만일 넣지 않았었다면 추가한 후 다시 sendmail을 생성해 보시기 바랍니다.
가끔 makemap의 버전이 낮아서 안되는 경우가 있습니다. 위와같이 했는경우에도 작동하지 않는다면 sendmail에 같이 들어있는 makemap을 컴파일해서 사용하시면 됩니다. (makemap에서도 사용할 DB등을 명시합니다. sendmail의 컴파일과 동일하게 하시면 됩니다.)
1. 이석찬님의 Solaris 2.5.1용 sendmail 8.9.0 패키지의 README파일
2. http://www.sendmail.org/compiling.html
3. 이상로님의 Sendmail and Hangul Code
4. 이상로님의 프락메일에 관하여(On procmail)
5. 신정식님의 Sendmail 8.8.x와 Procmail을 이용한 한글 메일 처리
출처 : http://blog.naver.com/nillwow?Redirect=Log&logNo=8161854
아이폰/아이패드/아이팟 터치용 모바일웹 개발팁 12개 (0) | 2010.10.28 |
---|---|
Pots Of Gold (0) | 2010.06.21 |
용영지운 이기이 안남재정 오정성 동기보영 강조형 승리! (0) | 2010.06.17 |
I don't wanna waste a lifetime chasing pots of gold
I don't wanna miss the sunshine standing in the cold
I don't wanna be the one who's left behind
I wanna catch a glimpse of life
C'mon darlin', now we've started something that we've both gotta want to see right through
But I know darlin' that I would rather give it up than waste these precious moments with you, baby that won't do
Cos I don't wanna waste a lifetime chasing pots of gold
I don't wanna miss the sunshine standing in the cold
I don't wanna be the one who's left behind
I wanna catch a glimpse of life
No i don't wanna be the one who lets you down
With you I couldn't bear to live without
sendmail (0) | 2010.08.16 |
---|---|
용영지운 이기이 안남재정 오정성 동기보영 강조형 승리! (0) | 2010.06.17 |
벅스뮤직 이벤트 아이패드 쏜대요~ (0) | 2010.06.10 |
Pots Of Gold (0) | 2010.06.21 |
---|---|
벅스뮤직 이벤트 아이패드 쏜대요~ (0) | 2010.06.10 |
[발상의전환] 마우스 패드의 새로운 보관방법 (0) | 2010.04.22 |
용영지운 이기이 안남재정 오정성 동기보영 강조형 승리! (0) | 2010.06.17 |
---|---|
[발상의전환] 마우스 패드의 새로운 보관방법 (0) | 2010.04.22 |
메신져 링크/파일전송 주의하세요 (0) | 2010.04.19 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
벅스뮤직 이벤트 아이패드 쏜대요~ (0) | 2010.06.10 |
---|---|
메신져 링크/파일전송 주의하세요 (0) | 2010.04.19 |
Database 암호화 (0) | 2010.03.25 |
[발상의전환] 마우스 패드의 새로운 보관방법 (0) | 2010.04.22 |
---|---|
Database 암호화 (0) | 2010.03.25 |
블루웹 도메인 가격 정책 변경 (0) | 2010.03.12 |
암호화와 OLTP 성능 보전 방안
해커에게 고객DB 털렸다면
데이터 암호화후 적절한 조치를 취하지 않을 경우 투명성 및 기능성을 확보하는데 어려움이 따를 수 있다. 적절한 조치를 취하지 않을 경우 발생하는 OLTP 업무 질의의 투명성 및 성능 저하를 살펴보고 이를 극복하기 위해 적용 가능한 방안을 논해 보고자 한다.
데이터베이스 관리자는 데이터가 암호화 된 이후에도 기존의 응용 프로그램을 수정하지 않기를 바라며(투명성), 또한 이러한 응용 프로그램의 성능이 저하되는 것을 원하지 않을 것이다(기능성). 하지만 간단한 데이터를 암호화 하더라도 암호화 값의 이진 속성에 따라 테이블의 정의까지 달라지는 경우가 발생하게 된다.
테이블의 암호화를 적용하고 난 이후에 발생하는 성능저하에 대해 많은 DBA들이 한번쯤 고민해 보았을 것이다. 데이터베이스에 암호화를 적용할 때 가장 먼저 거론되는 품질 요소는 성능 보존이라는 것이 많은 조사를 통해 알려진 바 있다. 이번에는 자주 사용되는 OLTP 업무 질의에 암호화를 적용할 경우 발생하는 성능 저하 현상을 살펴보고 이를 극복하기 위한 몇 가지 기법을 제시하고자 한다.
OLTP vs. OLAP
통상적으로 사용되는 ‘OLTP’의 의미는 대다수의 데이터베이스 관리자라면 어느 정도 파악하고 있으리라 믿는다. 하지만 이 기회에 이 둘 사이의 의미를 명확하게 짚고 넘어가는 것도 의미가 있을 것 같아 아래와 같이 정리해 보았다.
OLTP 질의
표 1에서 OLTP 시스템이 가지는 특성을 파악했다. 이런 특성 중에서 암호화와 가장 관련이 깊은 것으로 질의, 데이터 접근, 처리속도 등이 있다. 질의는 소수의 레코드를 반환하는 표준화되고 간단한 것, 데이터 접근은 인덱스를 통한 단일 접근 혹은 범위 스캔, 매우 빠른 처리 속도 등이 있다.
인덱스가 걸린 컬럼이 암호화될 경우 기존의 인덱스는 Drop되며 암호문을 사용하여 다시 생성되어야 한다. 또한 새롭게 생성된 인덱스를 사용하기 위해서는 질의문을 적절하게 변경해 주어야 한다.
OLTP 질의의 Where 조건에 암호화된 컬럼이 사용될 경우 인덱스에 미치는 영향으로 인해 성능에 나쁜 영향이 나타나게 된다. 다음에서는 암호화된 컬럼이 Where 조건에 사용될 경우에 적절한 조치를 취하지 않음으로써 발생하는 성능 저하를 살펴보고자 한다.
인덱스 컬럼의 암호화 및 OLTP 질의 성능
국내에서 암호화 요구가 가장 많이 발생하는 부분은 아무래도 주민등록번호가 아닐까 한다. 또한 주민등록번호를 Where 조건에 추가하여 수행하는 OLTP 업무 질의도 상당히 많은 실정이다.
이번 절에서는 이러한 상황을 재현하기 위한 테이블을 정의하고 이 테이블의 주민등록번호 컬럼을 암호화한다. 이렇게 암호화된 테이블에서 암호화된 주민등록번호를 Where 조건에 주고 질의를 실행함으로써 암호화가 OLTP 질의 성능에 어떤 영향을 끼치는지 살펴보고자 한다.
암호화 인덱스 및 질의 재작성을 통한 성능 보전
앞서 암호화를 적용한 이후에 현저히 저하되는 질의 성능을 확인한 바 있다(10ms -> 18.95s). 이번에는 암호화된 값을 사용하여 인덱스를 생성한 후 생성된 인덱스를 사용하도록 질의를 수정함으로써 성능저하를 방지하는 방법을 살펴보고자 한다. 이런 과정은 아래와 같은 두 개의 단계를 거쳐서 수행된다.
이렇게 질의를 수정하여 개선된 실행 계획은 그림 6과 같다. 또한 수행 성능도 그림 7과 같이 암호화 이전으로 회복된 것을 확인할 수 있다.
투명성을 보장하는 성능 보전
우리는 앞선 단원에서 암호화된 컬럼에 인덱스를 생성하고 이를 사용하도록 질의를 수정함으로써 OLTP 질의의 성능을 보전할 수 있음을 알았다.
하지만 이 방법을 적용하기 위해서는 질의 수정이 필요하므로 이러한 질의를 사용하는 응용 프로그램 투명성이 심각하게 훼손될 수 있다. 이러한 질의가 다양하고 그 수가 많을 수록 암호화 적용에 많은 시간과 노력이 필요하게 되며 DB 관리자 및 개발자에게 거부감을 주게 되어 결국 실패할 확률이 높아지게 된다.
이번에는 앞서 살펴본 성능 보전 기법의 효과를 살리면서도 응용 프로그램의 투명성을 보장할 수 있는 방안에 대해서 살펴본다.
● 확장 인덱싱 Framework
오라클의 경우에는 기본적으로 제공되는 B-Tree 인덱스 이외에도 사용자가 인덱스의 동작을 재정의하여 사용할 수 있는 확장 인덱싱 Framework를 제공한다. 확장 인덱스 Framework는 세부 내용이 많아 여기에서 모든 내용을 다룰 수는 없지만 중요한 개념을 정리하면 Indextype은 응용 프로그램이 정의한 인덱스 동작 유형을 구현하고 Operator는 적절한 인덱스 유형을 선택하고 인덱스 검색을 수행, 그리고 Domain Index는 indextype의 인스턴스로서 특정한 열에 대해 정의되며 질의 실행 시 Optimizer에 의해 선택된다.
다음 각 단계는 오라클 Optimzer에 의해 Domain Index가 선택되어 성능 향상을 가져오는 단계를 나타낸 것이다.
① 응용 프로그램 투명성 뷰에서 암호화가 적용된 컬럼을 Operator로 구성함.
② 오라클의 Optimizer는 Operator에 대해 Select List에 사용될 때 Functional Evaluation과 Where 조건에 사용될 때 Domain Index Evaluation 등 두 가지 방향으로 해석함.
③ 이에 따라 Operator는 Domain Index Evaluation으로 동작하며 오라클은 Indextype에 구현된 ODCIIndexStart() 함수를 호출함.
④ ODCIIndexStart() 함수 구현 내에서 ‘암호 컬럼’ = 암호화 함수(‘암호값’) 형식으로 수정된 질의를 사용함.
⑤ ODCIIndexFetch() 함수에서 ‘암호 컬럼’ = 암호화 함수(‘암호값’) 형식의 인덱스 Fetch 루틴을 연속적으로 호출함.
다음은 Domain Index 동작을 위한 Indextype 구현의 일부이다.
● 확장 인덱싱 Framework 적용 결과
그림 8, 9는 확장 인덱싱을 적용한 후 원본 질의의 실행 계획을 나타낸 것이다. 확장 인덱싱 적용 후 수행 성능이 암호화 이전으로 회복된 것을 볼 수 있다.
각 운영 환경에 맞도록 적용해야
지금까지 OLTP 환경의 정의 및 응용 프로그램 특성을 간단히 정의하고 암호화를 적용함에 따라 응용 프로그램 투명성 훼손, 질의 성능 저하 등이 발생함을 살펴보았다.
나아가 암호화 이후의 질의 성능 보전을 위한 방법을 살펴보았고 확장 인덱싱 Framework를 사용하여 응용 프로그램 투명성까지 제공할 수 있는 기법을 제시해 보았다.
다양한 데이터베이스 및 응용 프로그램 환경으로 인하여 실제의 암호화 적용은 그리 쉬운 것이 아니다.
위에서 제시한 방법들 이외에도 각각의 운영 환경에 맞는 적용 방법을 관련된 모든 사람들이 머리를 맞대고 고민할 때 잘 보호된 데이터베이스 시스템이 탄생할 수 있을 것이다.
출처 : 보안뉴스 (boannews.com)
메신져 링크/파일전송 주의하세요 (0) | 2010.04.19 |
---|---|
블루웹 도메인 가격 정책 변경 (0) | 2010.03.12 |
win7 (0) | 2010.03.05 |
Database 암호화 (0) | 2010.03.25 |
---|---|
win7 (0) | 2010.03.05 |
vmware7 으로 MAC OS X 설치 Leopard (0) | 2010.03.05 |
1. Vmware 설정
먼저 CPU는 인텔과 AMD에서도 쓸 수 있습니다. 과거 해킨토시는 AMD CPU에서 설치가 힘들었지만 지금은 잘 됩니다. 인텔 CPU의 경우 인텔 펜티엄 4가 기본이고 SSE2가 필수에다 SSE3을 지원해야 설치가 가능합니다. VMware 7을 실행한 다음 File → new → Virtual Machine을 선택하거나 왼쪽에 보이는 New Virtual Machine을 클릭합니다. New Virtual Machine Wizard 창이 띄면 Custom (advanced)으로 설정합니다. Custom 방식으로 설정을 해야 가상 머신이 갖게 될 메모리 크기, HDD 어댑터 방식 등을 사용자가 선택할 수 있습니다.
Hardware Compatibility을 낮추면 많은 제약이 따르므로 기본값인 Workstation 6.5-7.0 그대로 놔두고 Next 버튼을 눌러 진행합니다.
Vmware 6.5 버전 부터 OS를 설치할 DISK, ISO 이미지 여부를 물어봅니다. 세번째 항목을 선택하고 Next 버튼을 누릅니다.
가상 머신에 설치할 게스트 운영체제를 선택하는 화면으로 FreeBSD로 고르고 Next 버튼을 누릅니다.
가상 머신 이름과 저장될 경로를 지정합니다.
가상 머신이 갖게 될 가상 CPU 개수를 지정합니다. VMware의 가상 머신도 여러 개의 CPU 코어를 인식해 다수의 CPU를 가상 머신에 추가할 수 있는데, 작은 고려사항이 발생합니다. 가상 머신의 최대 성능을 발휘하기 위해서는 호스트 컴퓨터가 갖고 있는 CPU 개수만큼 게스트 컴퓨터도 그 수를 지정해주는 것이 좋습니다. 참고로 VMware 워크스테이션 6.5 버전은 최대 2개까지의 CPU를 지원하고 VMware 워크스테이션 7 버전은 최대 4개까지의 CPU를 지원해주므로 자신의 PC 상태에 맞춰 조절해가며 사용하기 바랍니다.
가상 머신이 다중 CPU를 사용했을 때의 이점을 따지자면 멀티 CPU 환경(SMP-Symmetric Multiprocessing)에서 개발 및 테스트를 할 때 유용하게 쓰일 수 있습니다.
가상 머신의 메모리 크기를 지정합니다. 여기서 말하는 메모리는 현재 호스트 운영체제가 갖고 있는 메모리 공간 중 일부를 VMware의 가상 머신이 가져가서 사용하는 것으로 최소 1GB 정도의 메모리를 할당해줘야 좋습니다. 가상 머신의 메모리 용량은 추후 언제든지 조절할 수 있으므로 부족하다 싶으면 더 많이 할당해주면 됩니다.
가상 머신을 위한 네트워크 형태를 지정합니다.
1) Use bridged networking
- 집이나 회사에서 공유기를 통해 192.168.x.x와 같은 Private IP 대역으로 인터넷을 사용하고 있다면 같은 대역으로 가상 머신의 게스트 운영체제에 대해 IP를 줄 수 있습니다. 만약 인터넷에서 사용되는 Public IP 주소를 게스트 운영체제에 부여하고 싶을 때에도 이 옵션을 사용할수 있습니다. 위 두 가지 경우 모두 호스트 컴퓨터와 가상 머신이 동등한 자격으로 네트워크를 사용하게 됩니다.
2) Use network address translation (NAT)
- 호스트 컴퓨터를 ADSL과 같은 초고속 인터넷에 1:1로 물려서 사용하거나 Public IP를 사용하지만 추가적인 IP 주소를 얻기 힘들 경우가 있습니다 .이때는 NAT 기능을 통해 가상의 공유기를 VMware를 통해 구동시켜서 게스트 운영체제가 IP 주소를 받고 인터넷을 할 수 있게 해줍니다.
간단히 공유기를 사용하고 있다면 Bridged Network를, 공유기가 없다면 NAT 방식을 선택하기 바랍니다. 둘 중 어떤 걸 선택할지에 대해 확실치 않다면 NAT 방식을 우선 선택하면 가상 머신에서의 네트워크 및 인터넷이 가능합니다.
가상 머신의 I/O 어댑터를 지정합니다. 추천하는 LSI Logic을 선택합니다.
가상 머신이 사용할 디스크 공간을 선택해줍니다. Create a new virtual disk를 선택합니다. 가상 머신이 사용하는 하드디스크 공간은 파일 형태로 호스트 컴퓨터의 하드디스크에 저장됩니다. 호스트 컴퓨터에 파일 형식으로 저장할 경우 호스트 운영체제의 파일 시스템을 한번 더 거치기 때문에 실제적으로 디스크 I/O 측면에서 성능 손실이 있는 것이 사실입니다. 이를 극복하기 위해 'Use a physical disk'를 선택해 물리적인 하드디스크를 통째로 가상 머신이 사용하도록 해 성능 향상을 꾀할 수 있습니다.
가상 머신에 탑재될 하드디스크의 타입으로 SCSI로 설정시 인식하지 못할때가 있기 때문에 IDE로 선택합니다.
가상 머신에 탑재될 하드디스크 공간을 지정합니다. 가상 디스크가 사용할 디스크 공간을 기가바이트 단위로 지정할 수 있습니다. 기본적으로 VMware 워크스테이션은 아무리 큰 크기의 가상 디스크를 만들어도 실제적으로 사용한 공간만큼만 차지하며, 사용량이 늘어나면 이 디스크 파일 사이즈도 점차적으로 늘어납니다.
위 방식은 호스트 컴퓨터의 디스크 공간을 아낄 수 있는 장점이 있지만 디스크 여유 공간이 부족할 경우 가상 머신이 더 이상 하드디스크에 데이터를 저장할 수가 없게 됩니다. 이 문제를 해결하고자 미리 전체 크기를 지정해두고 어떠한 상황에서든 가상 머신이 지정된 디스크 공간 모두를 사용하게 하고 싶다면 'Allocate all disk space now'를 선택할 수 있습니다.
'Split virtual into 2 GB files'의 경우 가상 디스크가 사용할 파일 크기를 2GB 단위로 쪼개서 호스트 컴퓨터에 생성하는 옵션입니다.
가상 디스크 파일(vmdk) 이름을 지정합니다.
Customize Hardware를 눌러 수정을 합니다. Finish 버튼을 눌렀다면 좌측의 Edit virtual machine settings 클릭하여 수정하면 됩니다.
불필요한 플로피 디스크 드라이브를 삭제하고 ISO 이미지를 넣습니다. 디스플레이 부분에서는 Accelerate 3D graphics 항목에 선택해주고 OK 버튼을 누릅니다. 이로써 맥 OS X를 위한 가상 머신 생성이 완료되었습니다.
2. 본격적인 맥 OS X 타이거 설치
가상 머신을 실행시킵니다.(Power on this virtual machine 클릭)
가상 머신과 호스트 운영체제 사이에 제어권 전환은 [Ctrl] + [Alt] 키를 이용하는 것을 잊지 말기 바랍니다.
- 가상 머신 제어하기: 화면클릭
- 가상 머신 제어권 풀기: [Ctrl] + [Alt]
위와 같은 설치 화면이 뜨면 8초가 다 지나가기 전에 ESC키를 눌러줘야 합니다. 가만히 놔두면 에러 메시지가 출력되어 다시 재부팅해야 합니다.
재부팅한 뒤 이제 ESC키를 눌러 계속 진행하면 위와 같이 로딩중인 화면을 볼 수 있습니다.
Mac OS X 설치 초기화면이 뜹니다. 만일 뜨지 않고 멈춘다면 CPU가 설치 ISO에서 지원하지 못한 경우입니다. '주 언어로 한글 사용'을 클릭하고 계속 진행합니다.
설치 준비 중...
계속 버튼을 누릅니다.
대상 볼륨이 아무것도 나오지 않아 당황하셨을 겁니다. 파티션 설정을 해줘야 합니다. 상단에 보이는 메뉴에 있는 유틸리티 - 디스크 유틸리티를 선택합니다.
처음에 만든 VMware 디스크를 선택한 다음 Partition을 선택하면 볼륨 설계에서 몇 개의 파티션으로 나눌지 선택하는 메뉴가 보입니다. 최대 16개의 파티션으로 분할할 수 있습니다. 파티션을 누르고「디스크를 파티션 분할하면 디스크에 있는 모든 정보가 삭제됩니다. "VMware Virtual IDE Drive" 디스크를 지우겠습니까?」물음에 파티션을 클릭합니다. 끝났으면 창의 빨간 버튼을 눌러 닫습니다.
화면에 보이는 대상 볼륨을 누르고 계속 버튼을 누릅니다. 사용자의 CPU에 맞게 체크하고 설치 버튼을 누르면 '설치 DVD 확인 중' 메시지가 나오는데 건너뜀해서 바로 설치에 들어갑니다.
시스템 사양에 따라 예상시간은 다릅니다. 커피 한 잔을 하며 인내심을 갖고 설치가 끝날 때까지 기다립니다. 제 PC는 1시간 20분 소요되었습니다.
설치 막바지. 시스템 성능 최적화 중입니다.
블루웹 도메인 가격 정책 변경 (0) | 2010.03.12 |
---|---|
vmware7 으로 MAC OS X 설치 Leopard (0) | 2010.03.05 |
Windows 7 edition (0) | 2009.10.28 |
얼마전에 검색을 통해 Mac OS X 설치할 수 있다는 정보를 접했습니다. 호기심으로 한번 설치해보고자 오래된 버전이긴 하지만 Mac OS X 10.4.8 버전 설치를 성공하였습니다. Mac 자체가 IBM 호환 PC와는 다르게 바이오스를 사용하지 않고 EFI라는 것을 사용하고 하드웨어적 문제로 인해 설치가 쉽지 않았지만, 지금은 해킨토시 이용자를 위한 패치가 이뤄져서 설치가 잘 되고 있습니다.
윈도우에서 쓰는 부트 로더가 맥 OS X를 인식하지 못해서 윈도우와 맥 OS X를 멀티 부팅으로 함께 쓸 수 없었지만 2006년 4월 애플은 부트 캠프(Boot Camp)를 내놓은 이후 해커들이 맥 OS X를 해킹한 해킨토시(Hacintosh)를 만들었습니다. 해킨토시는 맥 OS 를 해킹해 인텔 맥이 아닌 PC에서 애플 맥 OS를 깔아 쓰는 PC를 가리킵니다.
많은 분들이 이미 단일 설치 또는 윈도우와 맥 멀티부팅을 이용하거나 Vmware로 설치해서 사용하고 계실겁니다. 본인은 부담없는 Vmware를 통해 설치하는 방법을 설명하겠습니다. 여기서는 타이거(Tiger) 버전을 설치하지만 여러분은 레퍼드(Leopard) 버전 설치에 도전해 보시기 바랍니다.
1. Vmware 설정
먼저 CPU는 인텔과 AMD에서도 쓸 수 있습니다. 과거 해킨토시는 AMD CPU에서 설치가 힘들었지만 지금은 잘 됩니다. 인텔 CPU의 경우 인텔 펜티엄 4가 기본이고 SSE2가 필수에다 SSE3을 지원해야 설치가 가능합니다. VMware 7을 실행한 다음 File → new → Virtual Machine을 선택하거나 왼쪽에 보이는 New Virtual Machine을 클릭합니다. New Virtual Machine Wizard 창이 띄면 Custom (advanced)으로 설정합니다. Custom 방식으로 설정을 해야 가상 머신이 갖게 될 메모리 크기, HDD 어댑터 방식 등을 사용자가 선택할 수 있습니다.
Hardware Compatibility을 낮추면 많은 제약이 따르므로 기본값인 Workstation 6.5-7.0 그대로 놔두고 Next 버튼을 눌러 진행합니다.
Vmware 6.5 버전 부터 OS를 설치할 DISK, ISO 이미지 여부를 물어봅니다. 세번째 항목을 선택하고 Next 버튼을 누릅니다.
가상 머신에 설치할 게스트 운영체제를 선택하는 화면으로 FreeBSD로 고르고 Next 버튼을 누릅니다.
가상 머신 이름과 저장될 경로를 지정합니다.
가상 머신이 갖게 될 가상 CPU 개수를 지정합니다. VMware의 가상 머신도 여러 개의 CPU 코어를 인식해 다수의 CPU를 가상 머신에 추가할 수 있는데, 작은 고려사항이 발생합니다. 가상 머신의 최대 성능을 발휘하기 위해서는 호스트 컴퓨터가 갖고 있는 CPU 개수만큼 게스트 컴퓨터도 그 수를 지정해주는 것이 좋습니다. 참고로 VMware 워크스테이션 6.5 버전은 최대 2개까지의 CPU를 지원하고 VMware 워크스테이션 7 버전은 최대 4개까지의 CPU를 지원해주므로 자신의 PC 상태에 맞춰 조절해가며 사용하기 바랍니다.
가상 머신이 다중 CPU를 사용했을 때의 이점을 따지자면 멀티 CPU 환경(SMP-Symmetric Multiprocessing)에서 개발 및 테스트를 할 때 유용하게 쓰일 수 있습니다.
가상 머신의 메모리 크기를 지정합니다. 여기서 말하는 메모리는 현재 호스트 운영체제가 갖고 있는 메모리 공간 중 일부를 VMware의 가상 머신이 가져가서 사용하는 것으로 최소 1GB 정도의 메모리를 할당해줘야 좋습니다. 가상 머신의 메모리 용량은 추후 언제든지 조절할 수 있으므로 부족하다 싶으면 더 많이 할당해주면 됩니다.
가상 머신을 위한 네트워크 형태를 지정합니다.
1) Use bridged networking
- 집이나 회사에서 공유기를 통해 192.168.x.x와 같은 Private IP 대역으로 인터넷을 사용하고 있다면 같은 대역으로 가상 머신의 게스트 운영체제에 대해 IP를 줄 수 있습니다. 만약 인터넷에서 사용되는 Public IP 주소를 게스트 운영체제에 부여하고 싶을 때에도 이 옵션을 사용할수 있습니다. 위 두 가지 경우 모두 호스트 컴퓨터와 가상 머신이 동등한 자격으로 네트워크를 사용하게 됩니다.
2) Use network address translation (NAT)
- 호스트 컴퓨터를 ADSL과 같은 초고속 인터넷에 1:1로 물려서 사용하거나 Public IP를 사용하지만 추가적인 IP 주소를 얻기 힘들 경우가 있습니다 .이때는 NAT 기능을 통해 가상의 공유기를 VMware를 통해 구동시켜서 게스트 운영체제가 IP 주소를 받고 인터넷을 할 수 있게 해줍니다.
간단히 공유기를 사용하고 있다면 Bridged Network를, 공유기가 없다면 NAT 방식을 선택하기 바랍니다. 둘 중 어떤 걸 선택할지에 대해 확실치 않다면 NAT 방식을 우선 선택하면 가상 머신에서의 네트워크 및 인터넷이 가능합니다.
가상 머신의 I/O 어댑터를 지정합니다. 추천하는 LSI Logic을 선택합니다.
가상 머신이 사용할 디스크 공간을 선택해줍니다. Create a new virtual disk를 선택합니다. 가상 머신이 사용하는 하드디스크 공간은 파일 형태로 호스트 컴퓨터의 하드디스크에 저장됩니다. 호스트 컴퓨터에 파일 형식으로 저장할 경우 호스트 운영체제의 파일 시스템을 한번 더 거치기 때문에 실제적으로 디스크 I/O 측면에서 성능 손실이 있는 것이 사실입니다. 이를 극복하기 위해 'Use a physical disk'를 선택해 물리적인 하드디스크를 통째로 가상 머신이 사용하도록 해 성능 향상을 꾀할 수 있습니다.
가상 머신에 탑재될 하드디스크의 타입으로 SCSI로 설정시 인식하지 못할때가 있기 때문에 IDE로 선택합니다.
가상 머신에 탑재될 하드디스크 공간을 지정합니다. 가상 디스크가 사용할 디스크 공간을 기가바이트 단위로 지정할 수 있습니다. 기본적으로 VMware 워크스테이션은 아무리 큰 크기의 가상 디스크를 만들어도 실제적으로 사용한 공간만큼만 차지하며, 사용량이 늘어나면 이 디스크 파일 사이즈도 점차적으로 늘어납니다.
위 방식은 호스트 컴퓨터의 디스크 공간을 아낄 수 있는 장점이 있지만 디스크 여유 공간이 부족할 경우 가상 머신이 더 이상 하드디스크에 데이터를 저장할 수가 없게 됩니다. 이 문제를 해결하고자 미리 전체 크기를 지정해두고 어떠한 상황에서든 가상 머신이 지정된 디스크 공간 모두를 사용하게 하고 싶다면 'Allocate all disk space now'를 선택할 수 있습니다.
'Split virtual into 2 GB files'의 경우 가상 디스크가 사용할 파일 크기를 2GB 단위로 쪼개서 호스트 컴퓨터에 생성하는 옵션입니다.
가상 디스크 파일(vmdk) 이름을 지정합니다.
Customize Hardware를 눌러 수정을 합니다. Finish 버튼을 눌렀다면 좌측의 Edit virtual machine settings 클릭하여 수정하면 됩니다.
불필요한 플로피 디스크 드라이브를 삭제하고 ISO 이미지를 넣습니다. 디스플레이 부분에서는 Accelerate 3D graphics 항목에 선택해주고 OK 버튼을 누릅니다. 이로써 맥 OS X를 위한 가상 머신 생성이 완료되었습니다.
2. 본격적인 맥 OS X 타이거 설치
가상 머신을 실행시킵니다.(Power on this virtual machine 클릭)
가상 머신과 호스트 운영체제 사이에 제어권 전환은 [Ctrl] + [Alt] 키를 이용하는 것을 잊지 말기 바랍니다.
- 가상 머신 제어하기: 화면클릭
- 가상 머신 제어권 풀기: [Ctrl] + [Alt]
위와 같은 설치 화면이 뜨면 8초가 다 지나가기 전에 ESC키를 눌러줘야 합니다. 가만히 놔두면 에러 메시지가 출력되어 다시 재부팅해야 합니다.
재부팅한 뒤 이제 ESC키를 눌러 계속 진행하면 위와 같이 로딩중인 화면을 볼 수 있습니다.
Mac OS X 설치 초기화면이 뜹니다. 만일 뜨지 않고 멈춘다면 CPU가 설치 ISO에서 지원하지 못한 경우입니다. '주 언어로 한글 사용'을 클릭하고 계속 진행합니다.
설치 준비 중...
계속 버튼을 누릅니다.
대상 볼륨이 아무것도 나오지 않아 당황하셨을 겁니다. 파티션 설정을 해줘야 합니다. 상단에 보이는 메뉴에 있는 유틸리티 - 디스크 유틸리티를 선택합니다.
처음에 만든 VMware 디스크를 선택한 다음 Partition을 선택하면 볼륨 설계에서 몇 개의 파티션으로 나눌지 선택하는 메뉴가 보입니다. 최대 16개의 파티션으로 분할할 수 있습니다. 파티션을 누르고「디스크를 파티션 분할하면 디스크에 있는 모든 정보가 삭제됩니다. "VMware Virtual IDE Drive" 디스크를 지우겠습니까?」물음에 파티션을 클릭합니다. 끝났으면 창의 빨간 버튼을 눌러 닫습니다.
화면에 보이는 대상 볼륨을 누르고 계속 버튼을 누릅니다. 사용자의 CPU에 맞게 체크하고 설치 버튼을 누르면 '설치 DVD 확인 중' 메시지가 나오는데 건너뜀해서 바로 설치에 들어갑니다.
시스템 사양에 따라 예상시간은 다릅니다. 커피 한 잔을 하며 인내심을 갖고 설치가 끝날 때까지 기다립니다. 제 PC는 1시간 20분 소요되었습니다.
설치 막바지. 시스템 성능 최적화 중입니다.
맥 OS X 부팅 화면.
짜잔~ 드디어 설치가 끝났습니다. 맥 OS X의 부팅화면을 보니 감탄이 절로 나옵니다. 여러분도 맥 OS X 설치를 성공해서 맥 OS X만의 편리함을 느껴보시기 바랍니다. 여기에 맥 OS X v10.5.5 레퍼드 설치 성공한 스크린샷이 있습닌다.
win7 (0) | 2010.03.05 |
---|---|
Windows 7 edition (0) | 2009.10.28 |
'폴라리스' 로봇과 휴대전화가 하나가 되다 (0) | 2009.09.15 |
|
vmware7 으로 MAC OS X 설치 Leopard (0) | 2010.03.05 |
---|---|
'폴라리스' 로봇과 휴대전화가 하나가 되다 (0) | 2009.09.15 |
신종인플루엔자A(H1N1) 인체감염증 진단 기준 (0) | 2009.08.31 |
Windows 7 edition (0) | 2009.10.28 |
---|---|
신종인플루엔자A(H1N1) 인체감염증 진단 기준 (0) | 2009.08.31 |
신종 플루 바로 알기 Q&A (0) | 2009.08.31 |
◎ 사례 정의 · real-time RT-PCR · 바이러스 배양 ㅁ추정 환자 - 급성호흡기질환이 있으면서 인플루엔자 A는 확인이 되었으나, 기존 사람인플루엔자 H1과 H3 음성 ㅁ 의심 사례 - 급성열성호흡기질환이 있으면서 다음의 역학적 연관성이 있는 경우 ·증상발현 7일 이내 추정 또는 확진환자와 접촉자이거나 ·증상발현 7일 이내 확진환자 발생지역에 체류 또는 방문 후 귀국한 경우 - 65세 미만의 건강한 사람이 중증의 급성열성호흡기 질환으로 입원한 경우 *현재 의심사례에 부합되지 않지만 "학교, 합숙소 등 단체 생활자(10명 이상)중 2명 이상 급성열성호흡기 질환이 7일 이내에 있는 경우"는 5건까지 검사시행 필요 (지역사회 집단 발생시 조치 사항 참조) ◎ 급성열성호흡기질환(Acute febrile respiratory illness) - 7일 이내 37.8℃ 이상의 발열과 더불어 다음의 증상 중 1개 이상의 증상이 있는 경우 · 콧물 혹은 코막힘 · 인후통 · 기침 ※ 단, 최근 12시간 이내 해열제 또는 감기약(해열성분 포함)을 복용한 발열 증상으로 인정함 ![]() ![]() |
'폴라리스' 로봇과 휴대전화가 하나가 되다 (0) | 2009.09.15 |
---|---|
신종 플루 바로 알기 Q&A (0) | 2009.08.31 |
심장이 없어 (0) | 2009.08.28 |
발병 3개월이 지나도록 잠잠하던 신종플루(인플루엔자A·H1N1). 하지만 국내에서도 2명의 사망자가 나오면서 국민들의 불안감이 커지고 있습니다. 정부는 신종플루 확산 방지에 총력 대응키로 했습니다.
신종플루 검사는 어디에서 어떻게 받을 수 있는지, 항바이러스제를 투약받으려면 어떻게 해야하는지 등 궁금하신 분들 많을텐데요, <정책공감>은 이런 궁금증을 모아서 Q&A로 정리, 소개합니다.
Q1. 신종인플루엔자 A(H1N1) 일반적인 증상은 어떤가요?
- 일반적으로 계절 독감 증상과 크게 다르지 않습니다.
- 발열(37.8℃이상)이 있고 기침을 하거나 콧물이 나거나 또는 목이 아프거나 하는 호흡기 증상이 주로 발생합니다.
- 다만, 사람들에 따라서는 오심, 무력감, 식욕부진, 설사와 구토 증상이 함께 나타나기도 합니다.
Q2. 신종인플루엔자에 걸렸을 때 합병증을 유발할 가능성이 큰 위험집단은 ?
65세 이상 노인
만성질환자
-폐질환 : 만성폐쇄성페질환(만성기간지염,페기종), 기관지확장증, 진폐증,기관지폐형성이상, 천식 등
-만성 심혈관 질환:선천성심장질환, 만성심부전, 허혈성심질환등(※ 단순 고혈합 제외)
-당뇨 : 인슐린이나 경구 혈당강하제를 필요로 하는 당뇨병
-신장질환 : 신증후군, 만선신부전증, 신장이식환자 등
-만성간질환 : 간경변 등
-악성종양
-면역저하자 : 무비장증, 비장기능이상, HIV 감염자, 화학요법치료로 면역저하유발, 스테로이드 등 면역억제제 한 달 이상 복용, 기타 면역억제 치료자
임산부
59개월 이하 소아
Q3. 신종인플루엔자 위험집단에 해당하는 사람은 어떻게 하여야 하나요?
- 만약 신종인플루엔자 의심 증상이 나타났거나 환자와 가까이 접촉한 후에는 즉시 의료기관에서 진료 받으시고 의사의 판단에 따라서 항바이러스제(타미플루, 리렌자)를 복용하십시오.
- 항바이러스제 복용은, 증상이 시작 후 48시간 내에 복용하는 것이 가장 좋습니다.
Q4. 위험집단에 해당되지 않는 건강한 성인의 경우는 어떻게 하여야 하나요?
- 신종인플루엔자 바이러스는 대개 가벼운 병을 유발하기 때문에 굳이 항바이러스제를 복용할 필요는 없습니다.
- 증상들이 사라질 때 까지 집에서 쉬면서 진통제를 드시고, 많은 양의 수분을 섭취하십시오.
Q5. 신종플루 검사는 어디에서 어떻게 받을 수 있습니까?
- 뚜렷한 인플루엔자 증상(37.8℃ 이상의 발열과 기침 콧물 인후통 등)이 없는 한 검사는 권장되지 않으며, 경증인 경우 대증적인 치료를 통해 쉽게 호전될 수 있습니다.
- 그러나 평소에 건강하였으나 폐렴 등 호흡기 질환으로 인하여 중증(입원)으로 진전된 경우 우선적으로 신종플루 감염에 검사를 권장합니다.
- 검사는 민간의료기관에서 받으실 수 있으며 검사 가능한 의료기관은 질병관리본부 홈페이지(http://cdc.go.kr) 를 통해 확인하실 수 있습니다.
Q6. 신종플루가 의심됩니다. 항바이러스제를 투약받을 수 있나요? 또 항바이러스제를 투약받으려면 어느병원을 방문하여야 하나요?
- 신종플루 감염이 의심되는 모든 분들이 항바이러스제를 투약할 필요는 없으며, 증상이 경미하신 분들은 의사의 처방에 따라 대증적인 치료를 받으시면 쉽게 회복할 수 있습니다
- 항바이러스제는 중증환자, 항바이러제 처방을 받지 않으면 심각한 이상을 초래할 수 있는 질환을 가지신 분들에게 우선 투약됩니다. 항바이러스제 처방은 전국 의료기관에서 가능합니다. 단 전국 보건소 및 거점의료기관은 의약분업 예외로서 원내 처방이 가능합니다
Q7. 신종인플루엔자 A(H1N1)를 예방을 위해서는 어떻게 해야 하나요?
- 외출 후에는 반드시 흐르는 물에 비누를 사용하여 손을 깨끗하게 씻으시기 바랍니다.
- 재채기나 기침을 할 경우에는 화장지로 입과 코를 가리고, 화장지를 버린 후 손을 깨끗하게 씻으십시오.
- 손을 자주 씻고, 손으로 눈, 코, 입을 만지는 것을 피하십시오.
- 발열이나 호흡기 증상 등이 있는 사람과는 접촉을 피하고 마스크를 착용하십시요
Q8. 해외여행을 계획하고 있는데 어떻게 하여야 하나요?
- 현재 질병이 있는 사람들은 회복될 때까지 국제 여행을 미뤄야 합니다.
- 기업이나 학교 등에서 신종인플루엔자 위험집단에 해당하는 직원들은 해외출장을 자제하여야 합니다.
Q9. 신종인플루엔자 예방접종은 언제 접종받을 수 있습니까?
- 현재 생산능력을 갖춘 유수의 제약사들이 신종인플루엔자 예방접종 백신 개발에 노력하고 있습니다.
- 국내에서는 유행 시기 이전에 신속하고 안전하게 우선 접종자에 대해서 예방접종이 이루어지도록 현재 최선을 다하여 준비하고 있습니다.
Q10. 신종인플루엔자 예방접종은 안전할까요?
- 모든 백신은 일단 백신 검정 과정에서 안전성에 대한 검증이 이루어지고 출하되며 또 가장 안전하게 접종이 이루어지게 될 것입니다.
Q11. 임산부인 경우 신종 인플루엔자 증상이 의심되면 어떻게 해야 하나요?
- 발열과 호흡기 증상이 있으면 평소 다니던 산부인과 보다는 시도에서 지정한 치료거점병원에서 진료 받도록 합니다.
- 임산부는 고위험군에 속하여 중증으로 진행될 수 있으니 더욱 주의가 필요합니다.
- 의심단계가 되면 실험실 최종 진단 이전이라도 바로 항바이러스제를 투약하여야 합니다.
신종인플루엔자A(H1N1) 인체감염증 진단 기준 (0) | 2009.08.31 |
---|---|
심장이 없어 (0) | 2009.08.28 |
STARCRAFT2 (0) | 2009.08.17 |
신종 플루 바로 알기 Q&A (0) | 2009.08.31 |
---|---|
STARCRAFT2 (0) | 2009.08.17 |
[긴급] DDos 악성코드 전용백신 (0) | 2009.07.09 |
심장이 없어 (0) | 2009.08.28 |
---|---|
[긴급] DDos 악성코드 전용백신 (0) | 2009.07.09 |
Marry Me (0) | 2008.12.29 |