read-only 퍼미션 에러와 proc 폴더

기본

오늘 서버 모니터링 중, 서버 하나가 죽어있는 것을 확인하고 재시작 해보려고 했지만 log 파일을 쓸 수 없다는 에러가 났습니다.

하드 용량이나 로그 파일 크기가 너무 커져서 그런 것은 아니었고, 확인해 보니 touch 같은 명령어가 전혀 먹히질 않았습니다.

mount 명령어를 통해 봐도, 제대로 rw 권한이 잡혀있었기 때문에 왜 이런 현상이 발생하는지 의아해 하던 차에 팀장님이 proc 폴더를 알려주셨습니다.

리눅스 시스템에서 메모리가 사용되는 현황을 마치 파일 시스템처럼 볼 수 있게 만들어 둔 것이 proc 폴더라고 하는데, 여기에 있는 mounts 내용을 살펴보니 마운트 된 하드 하나가 ro라고 되있는 것을 볼 수 있었죠.

커널에서 write가 계속 실패할 경우 ro로 전환되기도 한다는 얘기를 들었습니다. 즉, 하드가 고장났을 수도 있다는 거죠.

다음에 좀 더 살펴봐야지 🙂

Advertisements

IE6 button 태그에서 preventDefault() 안됨

기본

IE6에서 jQuery로 <button> 태그에 이벤트 핸들러를 바인드 할 때, event.preventDefault() 를 사용하면 에러가 발생합니다.

그래서 다음과 같은 폴백으로 넘겼습니다:

if (event.preventDefault)

event.preventDefault();

else

event.returnValue = false;

jQuery Template 이슈 몇 가지

기본

프로젝트 진행 중에 플래시 <object> 태그 템플릿을 만들어 놓고 몇 가지 애트리뷰트를 바꿔치기 해야하는 이슈가 있었습니다. 이렇게 완성된 <object> 태그를 jQuery Dialog에 보여주면 사용자가 그걸 긁어서 다른 곳에 붙일 수 있게 하는 일이었죠. 대수롭지 않게 생각했었는데 그냥 붙이면 파싱돼서 다이얼로그 창에 플래시가 떠버리더라구요.

문자들을 이스케이프 하면 해결할 수 있는 일이었지만, 이걸 서버에서 해야하는지 아니면 뷰에서 해야하는지.. 고민을 하다가 간단한 템플릿이었기 때문에 뷰에서 하기로 마음 먹었습니다.

처음에는 <div> 태그 안에 살짝(?) 이스케이프 한 템플릿을 넣어 놓고 자바스크립트로 치환했었는데요. 최신 브라우저에선 문제 없이 잘 됐지만 IE에서는 <object> 태그 안에 템플릿에 없던 속성을 추가, 템플릿과 다른 값을 대입, 템플릿 바깥에 있는 태그(body, html 등)를 같이 가져오는 문제가 생겼습니다 😦

그러다가 발견한 게 jQuery Template.

구글링 하다보니 아대장님의 소개글도 찾을 수 있었습니다. 베타버전이고 현재 이 링크들에 걸려있는 템플릿 플러그인은 프로젝트가 중지된 상태입니다. 현재는 jQuery UI에서 작업이 진행중이라고 하는데 아직 공개되진 않은 것 같습니다.

이 beta API를 사용해서 결과적으로 IE와의 호환성 문제는 해결했지만 몇 가지 이슈가 있었습니다.

회사에서 NHN의 Jindo 프레임워크를 전사적으로 사용 중인데요. 진도에서도 $를 사용하기 때문에 jQuery와의 충돌을 막기 위해 다음과 같은 처리를 해줍니다:

var $J = jQuery.noConflict();

$J로 jQuery를 사용할 수 있죠. 문제는 jQuery 템플릿에서 치환되는 부분에 ${ } 문법을 사용한다는 것입니다. 저는 처음에 이 부분을 $J{ }로 해줘야 하나? 하고 생각했었는데 그건 아니었습니다. 그냥 ${ } 이런식으로 ㅋ

그리고 ${ } 이것은 EL과 같기 때문에 jsp를 사용하면 먼저 파싱돼버려서 템플릿이 바껴버립니다. 헐.. 그래서 \$ 이런식으로 $ 자체를 이스케이프 해버리면 { } 요것은 그냥 일반 문자가 돼버리기 때문에 템플릿의 ${ } 부분을 \${ } 부분으로 치환을 했었는데요. 이게 테스트 할 때는 문제가 전혀 없었는데 서버에 있는 구버전 Tomcat 5에서 \$를 처리하지 못하고 validation 에러를 내버리더라구요 ;ㅁ;

결국엔 아래와 같은 꽁수로 상황을 모면했습니다:

<c:set var=”S” value=”$”/>

<script id=”template” type=”text/x-jquery-tmpl”>

… ${S}{url} …

그리고 <object> 태그안에 들어있는 <, > 문자를  &lt;, &gt;로 바꿔줬더니 IE 호환성 문제도 해결이 되더라구요. 어쨌든 매력적인 플러그인임에는 틀림 없지만 시작을 마이크로소프트에서 해서 그런지 몰라도 EL과 같은 ${ } 사용은 차후 버전에서는 달라졌으면 하네요.