태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

javascript에서 $가 포함된 String을 replace 할때 주의점

아래 코드가 IE를 제외한 모든 브라우저에서 동일한 현상이 발행한다.

기이한현상.. 왜그럴까요? -_-;

이유는 replace가 뒤에오는 string을 정규식으로 해석을 하려고 해서 발생한 문제다.

replace(/abc(d)ef/, "$1"); 의 경우 abcdef 가 d로 바뀌는데 이건 괄호안에 문제를 대치하겟다는 의미가 된다. 그래서 해당 경우도 $를 같은 형태로 해석해서 발생하는 문제로 사료된다.

하지만, 테스트 케이스의 경우엔 앞의 문제가 정규식도 아닌 string이었음에도 뒤에 $를 특수코드로 인지하는건 버그에 속하는게 아닌가 생각이 든다. 딱히 이것은 모두 string이다라고 하는 메서드를 따로 제공하거나 옵션을 줄수 있도록 지원해야 맞을것 같다.

아래 $가 들어간 정규식의 의미를 보자. replace를 쓸땐 아래 코드들을 피해야가야할 것이다.

http://www.regular-expressions.info/refreplace.html


IE에서만 발생하는 javascript 오류, 잘못된 인수입니다.

IE에서만 발생하는 javascript 오류입니다. 여러가지가 있는데, 그 오류들을 하나씩 정리 하겟습니다.

오류 : 잘못된 인수입니다.   코드를 보시면 아시겠지만, height는 음수값이 들어갈수 없기때문에 발생한 버그입니다. 하지만 IE에서만 이를 문제로 삼으며, 다른 브라우저 (FF,safary,chrome)에서는 음수값을 넣은 라인을 무시하여, 오류를 발생시키지는 않습니다.

이 문제는 오히려 IE가 javascript를 옳바르게 해석하는것 같네요. 라인을 무시하고 erorr를 뱉지 않으면 라인이 무시되었는지 알수가 없지요.

javascript replaceall의 방법에 따른 처리 속도 비교

필자가 아는 replaceall(string to string) 할 수 있는 방법은 아래 3가자로 추려 볼 수 있다. 아래 방법중 가장 빠른 처리 속도를 내는 방법은 무었을까? 브라우저 별로 조사해 보았다.

방법 1 ) split&join을 이용하는 방법

방법 2 ) 정규식을 이용한 방법

방법 3 ) 루프문을 이용한 방법


비교 방법은 5,655,000 개의 문자열을 두개의 다른 문자로 치환하는 방법으로 했다. 3가지 방법 모두를 IE6, Safari, FF3, Chrome 에서 조사 했다.

비교 결과 (단위,Millisecond)

비교 결과 (단위,Millisecond)


결과를 보면,

방법 3의 while 문을 이용한 방법은 모든 부라우저에서 테스트 할수 없었다. 모두 다운 되버렸다. FF의 firebug에서는 out of memory라는 오류 메시지를 뿌려주었다. 그러므로 쓰면 안되는 방법인것이다.

방법2의 정규식을 이용한 방법은 특이하게 IE에서만 좋은 성능을 발휘했다. IE외에 브라우저 특히 Safari 에서는 성능이 확연하게 떨어졌다. 파이어폭스만 그나마 나은 성능을 보여주고 있다.

방법1은 IE를 제외한 브라우저에서 모두 최고의 성능을 발휘했다. 특히 Chrome 의 경우는 다른 브라우저들에 비해 최고의 빠른 속도를 보여줬다. 

필자의 결론, 

위 각 브라우저의 성능을 테스트해본 결과 방법 1의 split&join을 이용하는 방법이 정규식을 이용한 치환방법보다 좋으나, IE의 서비스 점유율을 볼때 IE에서 최적의 성능을 보이는 방법 2의 정규식을 이용한 방법을 무시 할수는 없다.

그러므로, 개발자가 할수 있는 가장 좋은 방법은 IE때만 정규식을 치환하는 방법을 사용하고 나머지는 모두 split&join을 이용하는 방법으로 구현하는것이 최선의 방법이 아닐까 한다.
저작자 표시

우리나라는 IE6의 비율은 여전히 높다.

W3Counter (http://www.w3counter.com/globalstats.php) 에서 공개한 Web Browser의 사용율을 보면, IE7이 근소차이로 IE6을 앞선 것을 볼 수 있다. 강제 배포가 이루 어지기 전인 2008년 초보다 많은 차이를 보이고 있는 것은 MS의 IE7 배포 전략이 먹혀 들었다고 볼 수 있다.

W3Counter

W3Counter


물론, Firefox가 27%에 육박한다는 점을 볼때, 블로그와 같은 웹 사이트 위주로 배포되고 있는 것 같고, 블로그를 운영하는 유저는 아주 평이한 사용자로는 보기 힘들며 어느정도 고급 사용자들의 수치라는 점을 고려하자. 그리고 리서치 대상도 미국이 26%임으로 이것이 세계적인 추세라고 100% 말하기엔 무리가 있고 어느 정도는 이런 추세로 가고 있다고 봐야겠다.

이제 세계적으로는 IE7의 사용 비율이 높아 지고 있는 시점에 우리나라는 과연 어느정도 일까? 본인이 맏고 있는 서비스의 브라우저 이용 비율을 알아봤다. IE7이 아닌 IE의 비율이 62%이다. 본인이 알기론, 연초 강제 업데이트로 부터 많은 사용자가 IE7로 갈아 탔지만, 아직까지는 IE6의 사용자는 아직 절대적으로 많은 수치다.

웹인사이드

필자가 맡은 서비스 비율

이 IE6의 점유율로만 볼때는, 우리가 아무리 웹표준을 지향하고 외치고 있지만, IE6브라우저 자체가 웹표준을 지향하지 않기때문에 웹표준의 의미 자체도 의미가 모호하게 된다.

그럼 여기서 왜 우리나라는 MS의 노력에도 불구하고 유독 IE7의 비율이 낮은 이유를 알아보자. 이유는 아래 두가지로 함축해 볼 수 있다.


1. IE7는 업그레이드 할만한 메리트가 없다.

좀 더 웹표준에 가까운 브라우저로 업그레이드 되었지만, 이건 어디까지나 개발자의 시점에 불과 하고, 사용자가 볼때는 그저 외관이 한 층 세련되게 변했고 탭 브라우징이 추가되었다는 것 뿐이다. 게다가, IE6보다 좀 무겁고 렌더링 속도 또 한 느린 IE7은 일반 사용자라도 쉽게 체감할 수 있는 수준이 었다.

더욱이 우리나라 환경에서는 IE6로도 인터넷을 접하는데는 아무런 장애요소가 없다. 굳이 무겁고 느린 브라우저로 업데이트 할 필요는 없던 것이다.

2. IE7 강제적으로 인스톨 되지 않는다

MS에서는 IE7를 강제 업데이트를 통해서 보급할것이라 했지만, 사실 이 '강제'라는 말은 정확한 표현은 아니다. 통상, 자동 업데이트를 유효하게 하고 있으면, 마이크로소프트가 공개한 보안 업데이트 프로그램 등은, 백그라운드에서 다운로드 및 인스톨 한다. 사용자가 의식 할 것은 없다. 이것은 어찌보면, 강제 업데이트에 속한다고 볼 수 있다.

그렇지만, IE7는 자동 업데이트를 유효하게 하고 있어도, 모르는 사이에 인스톨 되지 않는다. 자동적으로 진행되는 것은, IE7의 다운로드까지일 뿐이다. 백그라운드에서의 다운로드가 종료하면, 데스크탑의 왼쪽하단에 「업데이트의 준비를 할 수 있습니다」라는 메세지가 표시고 이 메세지를 클릭하면, IE7를 인스톨 할지 묻는 윈도우가 표시된다. 이때 사용자는 설치 하지 않음을 클릭하면 설치되지 않는다.

이 두가지 요소로 볼때, 비교적 얼리어답터(early adoptor) 가 많은 우리나라는 성능이 떨어지는 IE7임을 알고 설치 여부를 묻는 질문에 설치를 선택하지 않았을 것이고, 더구나 MS는 프로그램 추가/삭제를 통해서 IE6로 복귀하는 메뉴를 두어서 좀 써보고 무겁다고 판단한 사용자들은 다시 IE6로 회귀했을 가능성이 높다.

몇몇의 사이트를 보면 IE6 이하 브라우저는 아예 지원하지 않는다는 문구를 넣은 사이트도 보이지만, 이는 방문자의 60%에게 서비스를 하지 않는다고 선포한 것과 다름이 없다. 우리의 직업은 웹사이트로 돈을 버는 직업인데, 사용자의 60%를 포기할 수 없음은 당연하고, 절대적으로 IE6를 고려하지 않을 수 없다.

본인이 개발자 입장에서 가장 비표준인 IE6에서 그나마 좀 표준을 지향한 IE7로 업그레이드 하고 싶지만, 그러지 못하는 이유도 거기에 있다.

여담으로 더 한가지 고려할점은, 아직도 1024 * 768 의 해상도를 이용하는 사용자가 많다는 것이다. 최소, 1280 * 1024의 비율은 사용할것 같은데, W3Counter 에서 공개한 차트에서도 그렇고 본인이 맡은 사이트에서도 42%의 비율이 나왔다. 본인은 집과 사무실 모두 24인치의 1920 * 1200 을 쓰는데 좀 놀라운 수치가 아닐 수 없다.
 

url 파라메터를 javascript로 받기

url prameter 를 javascript 의 json (object)형태로 리턴한다. 간혹 url의 ?로 표시된 prameter를 파싱해서 사용해야할때가 있는데, 이경우 이 function을 이용하면된다. 아래 코드를 살펴보면 알겠지만, url파싱은 처음 호출시에만 하며 이후는 파싱된 object 만을 리턴한다. 이는 개발시 개발되어 테스트된 버전은 아니고, 그냥 생각나서 만들어 본 것으로 이후 버그 발견시 수정될수 있다.


사용방법은 아래와 같다. 존재하지 않는 파라메터를 콜 할경우엔 당연히 undifined를 리턴한다. 적절히 붙여 사용하면 유용하겠다.


Download

간단한 javascript 페이징 처리

아래와 같은 간단한 페이징 처리를 위한 소스다. ul 태그의 li 태그를 모두 display:none; 시킨 다음에 해당 페이지의 li 태그만 노출시키는 구조이다. 일단 마크없을 다 뿌리기때문에 10페이지 내의 간단한 페이징 처리에 용이하다.

사용자 삽입 이미지
소스코드


파일 다운로드

롤링 스크립트

대게 실시간 검색어를 표시하는 용도로 쓰이는 롤링 스크립트이다.
DIV 블럭으로 쌓은 UL 태그로 마크업을 작성한 후에 script 를 호출하면, 한줄로 롤링되는 전광판 형태로 구현이 가능하다.

자 일단 demo 페이지를 열어보자. (ctrl + 링크클릭)

Demo

사용방법

javascript 로 구현한 한글 자소 분리

java 로 짜여진 한글 자소 분리 소스를 발췌해서 javascript 로 바꾸었다. (찾아보니 javascript로된 소스는 없었다.)


사용 방법은 아래와 같다.
array 형태로 리턴되며, string 으로 변환하고 싶으면 join() 메서드를 이용하여 변환하면 된다.
hangulToJaso("한글자소분리");

위 코드 실행시, 리턴값은 아래와 같다.

ㅎ,ㅏ,ㄴ,ㄱ,ㅡ,ㄹ,ㅈ,ㅏ,ㅅ,ㅗ,ㅂ,ㅜ,ㄴ,ㄹ,ㅣ

소스 다운 받기



운영체제와 브라우저 체크

운영체제와 브라우저의 정보를 리턴해준다.

Station.os() 의 리턴값이  WINDOW, MAC, UNIX, LINUX 로 나올 수 있다.
Station.Browser () 의 리턴값이    IE6 , IE7, FF, NETSCAPE, OPERA 로 나올 수 있다.

특징으로는, Station.os 처음 호출시에만 비교연산하고 생성된 리턴값으로 자기 자신을 오버라이팅하여, 이후 다시 비교 연산 작업을 하지 않는다.

Demo




Syntax

크로스 브라우징을 위한 function 코드 작성시 팁

예를 들자면, 현재 element의 상위 element를 호출한다고 한다면, ff의 경우는 parentNode 메서드를 이용해야하고 ie의 경우엔 parentElement 를 이용해야 한다. 이 경우 보통 코드를 아래와 같이 작성할것이다.


그러나 이 이코드의 단점은 해당 function 을 호출할때 마다 매번 if문을 거처야 한다는 것이다. 그래서 아래와 같이 바꾸면 해결할 수 있다.


위 코드는 처음 한번만 if문을 거친후에 자기 자신을 오버라이딩해서 그에 맞는 메서드를 리턴하도록 되어 있다.

어플리케이션 내장 IE의 웹개발시 border값 제거

기본적으로 body에는 border값이 들어가 있다. 웹브라우저로 볼때는 보이지 않지만, 다른색(회색또는흰색이 아닌)으로 치장된 어플리케이션에 넣어서보면 선명한 라인을 볼 수 있다. 이를 없애기 위해서는 body에 border:none; 의 CSS를 넣어주면된다.

그러나 DTD를 선언한 페이지에서는  html, body, 에 똑같이 border:none; 옵션을 적용해주어야 사라진다.

javascript의 relaceAll 을 대체할만한 split 와 join

javascript 의 relaceAll 메서드는 정규식을 이용한 치환밖에 되지 않는다. 보통 문자 치환은 String대 String 으로 하는데, 정규식을 이용해야하는 relaseAll 메서드를 이용할수 없다. 그래서 여러 개발자들은 해당 문자가 있는지 여부를 조사하는 indexOf메서드를 사용해 루프문을 돌아 relace시키는 function 을 만들어 사용한다.

하지만, replaceAll을 대체할만한 아래 아주 기발한 아이디어 하나가 있다. 별다른 펑션을 만들지 않고도 아래 한줄이면 간단히 구현된다.

spilt이라는 메서드는 "OLDSTRING"이라는 구분자로 구분해 Array변수로 변환한다. 그리고 다시 join이라는 메서드로 "NEWSTRING"이라는 구분자를 생성해 하나의 String으로 변환한다.

참재미있지 아니한가~ :)

javascript로 브라우저 중앙에 레이어 뛰우기

아래는 브라우저 중앙에 div 구조로된 레이어를 뛰울때, 좌표값을 구하는 방법이다.


document.documentElement.clientWidth : 현재 브라우저의 document 넓이를 반환.

300 : 뛰울 레이어의 가로 사이즈.

document.documentElement.scrollLeft : 브라우저의 document의 스크롤이 이동한 넓이.


※ 전체 크기에서 레이어 사이즈를 뺀것을 반으로 나누고, 스크롤 한 길이만큼을 더해준것이다.

document.body 대신에 document.documentElement 를 사용한 이유는 DTD 타입을 선언한 페이지에서는 document.body 의 값을 내뱉지 못한다. body에서 얻지 못한값은  documentElement 로 얻을수 있다.

자바스크립트로 구현한 튤팁(Tooltip)

tag속성중에 title 속성을 그대로 javascript로 구현했다. 이유는 title 속성은 레이어가 뜨는데 약간의 델리이 타임이 있다. 그 딜레이 타임을 없애 달라는 요구에서다. 당연히 css나 속성값으로 딜레이타임을 조정할수 없어서 javascript로 구현했다.

/* 튤팁 박스
   by junsung park */
var bTooltip =
{
 tip_id : "btooltip",
 makeLayer : function (str)
 {  
  var tip_obj = document.getElementById(this.tip_id);
  if (tip_obj==undefined)
  {
   var tip = document.createElement("div");
   tip.id = this.tip_id;
   tip.style.backgroundColor= "#FFFFE1";
   tip.style.fontFamily= "돋움";
   tip.style.fontSize= "12px";
   tip.style.padding= "2px";
   tip.style.color= "#000";
   tip.style.border= "1px solid #000";
   tip.style.position= "absolute";
   tip.style.zIndex= "99999";
   tip.style.display= "none";
 
   document.body.appendChild(tip);
   tip.appendChild(document.createTextNode(str));
  }
 },
 moveLayer : function (e)
 {
  var xp = 0, yp = 0;
  if (document.all) 
  {
   xp = event.clientX + document.documentElement.scrollLeft;
   yp = event.clientY + document.documentElement.scrollTop;
  }else
  {
   xp = e.pageX;
   yp = e.pageY;
  }
  xp += 10;
  yp += 10;
  var tip_obj = document.getElementById(this.tip_id);
  if (tip_obj!=undefined)
  {
   tip_obj.style.top = yp + "px";
   tip_obj.style.left = xp + "px";
   tip_obj.style.display= "block";
  }
 },
 hiddenLyaer : function (e)
 {
  var to = e?e.relatedTarget:event.toElement;
  var to_id = null;  
  try
  {
   to_id = to.id;
  }
  catch (e)
  {
   to_id = null;
  }
  if (this.tip_id==to_id)
  return;
  if (document.all)
  {
   try
   {
    document.getElementById(this.tip_id).removeNode(true);
   }
   catch (e){}  
  }else
  {
   try
   {
    document.body.removeChild(document.getElementById(this.tip_id));
   }
   catch (e){}
  }
 },
 on : function (tg)
 {
  var str = tg.title;
  tg.title= "";
  bTooltip.makeLayer(str);
  tg.onmouseover = new Function("bTooltip.makeLayer('" + str + "')");
  tg.onmousemove = new Function("bTooltip.moveLayer(arguments[0])");
  tg.onmouseout = new Function("bTooltip.hiddenLyaer(arguments[0])");
 }
}

아래처럼 최대한 사용하기 편하게 되어 있다. 예외처리도 다 했다. 다만, 튤팁에 들어갈 내용에 따옴표가 들어간다면 서블릿단에서 이미 처리되어 뿌려줘야 겠다. 이부분은 어쩔수 없는 부분 같다.

사용법

<img src="http://cfs.flvs.daum.net/files/15/57/65/50/6122988/thumb.jpg" onmouseover="bTooltip.on(this)", title="어쩌고">
<a href="" onmouseover="bTooltip.on(this)" title="어쩌고">에이링크</a>

Ajax 호출시 JSON 으로 리턴 받기

Ajax 호출시 리턴 형태는 xml과 text가 있다. Data를 text로 받는데, 그 text 가 javascript object 배열(JSON)인 것이다. 이 JSON이라고 하는것이 배열 표현 방법의 하나인것이다.

Ajax가 호출하는 페이지의 결과값을 아래처럼 JSON형태로 출력하게 한다. 이때 주의 할점은 배열의 Object 명을 명시 하지 않는다.

{
 list :
 [
   {  
    img_url : ".../20070806_164500_ban_superstar.gif" ,
    link_url : "/superstar/Top.htm" ,
    link_target : "_self"
   },  
   {  
    img_url : ".../20070806_164500_ban_superstar.gif" ,
    link_url : "/superstar/Top.htm" ,
    link_target : "_self"
   }
 ]
}

responseText 로 리턴 받은 text값을 이제 javascript 의 object 배열로 변경 시켜주면된다. 변경시켜주는 방법에는 여러가지가 있는데, 필자는 아래와 같은 방법을 선호한다. 가장 간단한 방법인 듯 하다.

  var logobanner = null;  
  try {
   logobanner= eval('(' + obj + ')'); 
  }catch(e){}

responseText 로 리턴 받은 text 값의 parameter명이 obj라고 할때, 이 obj를  eval함수로 괄호와 함께 묶어주면 logobanner 이라는 이름으로 object배열이 선언 된다. try cath문으로 묶은 이유는 이 obj가 배열 object형태로 리턴되지 않는 예외경우를 대처하기 위한 구문이다.

실제 사용해보니 xml보다 간편했다. 장단점이 있지만, 굳이 xml을 사용하지 않아도 된다면 JSON형태로의 개발을 추천한다.

java냐 javascript이냐?

2000년 대학교 시절에 교수님이 이런말을 했었다.

"자바스크립트가 자바보다 더 발전할 수 있다."
나는 그때 당시 이 말을 그냥 흘려 들었다. 사실 난 자바스크립트는 쉽고, 자바는 어렵다 정도 그정도 지식에 머물러 있었기 때문이다. 하지만, 지금에서야 그말이 선겸지명이 있는 말이었고, 그 의미를 알 것 같다.

1. 개인의 PC 사양은 날이 갈수록 높아지고 있다. 그래서 PC에서 처리 할 수 있는 데이터의 양이 증가해도 문제가 없다는 것이다. 그것은 사업자가 서비스 프로그램의 데이터 처리를 PC에서 처리하면 효율적이다 라는 것과 같다. 그만큼 서버의 부담을 덜을 수 있지 않겠는가?

2. 예전에는 웹서비스의 중요한 기술적인 목표가, 속도나 안전성이었다고 한다면, 요즘은 UI(user interface)다. 디자인이 훌륭해야하고 사용성이 편리 해야 한다는것이다. 그것은 웹서비스뿐만이 아니라 IT전체적인 트렌드가 아닐까 한다.

3. 웹 기술에서  '동기식 통신' 방식의 페이지 리로드는 리소스 낭비다. 불필요한 페이지나 이미지가 리로드가 되지 않는 Ajax나, Flex등 진보한 클라이언트 기반 기술들이 쏟아지고 있다. 이런, UI를 해치지 않고 백단에서 Data처리를 하는 '비동기식 통신'방식은 요즘 웹기술의 트렌드라 할수 있다.

위의 근거로, 앞으로의 서비스 기술들은, javascript 와 flex 또는 실버라이트 같은 클라이언트 기술들의 싸움이 될것이다. 그에 따라 이 기술을 보유한 개발자가 곽광 받을것이다.

물론, java를 모르고 javascript를 잘 개발할 수 있다고 생각하지 않는다. javascript 기술을 보유한 개발자도 java 를 해야하지만, java개발자도  java만 하도록 그 트렌드가 내버려 두지 않을것 이다.

'Web > Client' 카테고리의 다른 글

자바스크립트로 구현한 튤팁(Tooltip)  (0) 2007/08/20
Ajax 호출시 JSON 으로 리턴 받기  (0) 2007/08/06
java냐 javascript이냐?  (0) 2007/07/31
javascript include 클래스  (0) 2007/02/23
iframe 과 같은 object 태그  (0) 2007/02/08
javascript 오류 보고에 대한 발상?  (0) 2007/02/06

집의 PC로 서버 꾸미기

사용자 삽입 이미지

싱크대의 PC

수많은 호스팅 업체가 있지만, 서버를 임대하지 않는 이상 권한이 제한적이다. 각종 어플리케이션을 설치한다거나, 각종config파일들을 임위로 설정한다거나 하는 작업은 불가능하다. 서버를 두고 여러 가지(?) 장난을 치고 싶다면, 집에서 놀고 있는 저사양의 pc를 서버로 활용하는 것도 나쁘지 않다.

필요한 하드웨어로는 요즘은 거의 쓰지 않는 펜티엄3 CPU와 512MB 메모리를 가지고 있 PC와 네트웍 을 공유하기 위한 공유기 그리고 적당한 길이의 LAN케이블이다.

컴퓨터의 소음을 피하기 위해 베란다에 두는게 최고 이다. 나는 베란다가 없어서 주방에 있는 싱크대 하단에 넣었다. 처음엔 윈도우서버를 설치했었으나, 이유없이 이상하게 다운 현상이 발생했다. 리눅스로 교체하니200~300일동안 스스로 다운되는일은 없었다. 역시 리눅스가 안정된 OS라는것을 새삼 느끼었다.

케이블 모뎀을 사용할때는 8080포트를 사용해야만 했었는데, 광랜으로 교체하면서 80포트마저 개방되었다. 그리고 Upload 속도마저 보장되니 서버를 꾸미기 위한 환경은 안성 맞춤이다.

도메인 구입

나는 byuli.com이라는 도메인을 구입해 사용하고 있다. 보통 1년에 1만원 내외 이다. 도메인 종류와 또 판매처가 어디냐에 따라 가격이 다르다. 지식검색등을 활용하여 저렴한 곳에서 구입하면 된다. 나는 http://gagadomain.com 에서 구입했는데, 현재는 .com도메인이 다른 등록업체보다 비싸다.; 별로 추천 하지 않는다.

PC에 리눅스 설치 및 서버 네트웍 구성

기본적인 설치 환경인 APM 과 Tomcat을 추가로 설치 했다. 내가 java개발을 했었기에 tomcat은 필수 였고, php는 태터툴즈나 제로보드등을 설치하기 위해서였다. 기본적은 ssh나 ftp서버등은 linux설치 시 addon방식으로 설치했다. 레드헷 9.0을 설치를 했는데, 마치 윈도우 설치같이 추가 프로그램들을 추가 설치 할수 있었다.

자세한, linux 서버 셋팅에 관련해서는 아래를 참조하자.
http://blog.empas.com/pizza7/read.html?a=11641231


SSH 설정 관련은 아래를 참조하자
http://blog.daum.net/byuli/?_top_blogtop=go2myblog

Apache나 Tomcat에의한 버추얼 호스트(VirtualHost) 등록을 추천한다. 그렇게 하면 dnsever에서 생성한 2차도메인을 사용할수 있다. 예를들어서 byuli.com 도메인을 구입했을 경우에, aaa.byuli.com 이나 bbb.byuli.com 의 도메인을 따로 사용할수 있다.

외부에서 접속 가능하도록하는 공유기 설정

공유기를 통해서 서버가 외부로 나감으로, 공유기에서 별도의 셋팅이 필요하다. 그러니까 외부에서 80포트로 요청이 들어왔을 경우에 내부의 해당 linux pc를 호출해주는 역활을 해주어야 한다. 왠만 한 공유기라면, dmz 호스트 설정이라는 옵션을 볼 수 있다. 그 설정의 의미는 임위의 포트로 외부에 서 요청이 들어오면 지정된 내부의 pc를 호출해주는 역활을 한다. 그 부분만 설정해주면된다. 이 부 분은 각각의 공유기 설명서를 참조하면 쉽게 파악할수 있다.

Dnsever 등록 및 설정

dnsever.co.kr은 나처럼 집에서 서버를 돌리는 사용자들을 위한 서비스같다. 요즘은 tistory를 이용 하기 위한 용도로도 많이 쓰이는거 같다. 이 dnsever의 역활은 도메인과 집의 유동 아이피를 매칭해 주는 역활을 한다. 뿐만아니라 서브 도메인도 생성할수 있고 메일 포워딩 서비스 까지 제공을 한다. 정말 이런 서비스를 무료로 이용할 수 있다는것은 정말 감사할 따름이다. 집의 유동적인 ip를 linux서버에서 cron 설정등으로 일정 시간간격으로 dnsever 서버로 보내면 된다. 그러면 dnsever에 등록된 도메인은 해당 ip주소를 가르키게 된다.

dnsever 서비스를 아래 링크를 통해 들어가 직접 서비스를 이용해보자.
http://www.dnsever.com/

'Web > Server' 카테고리의 다른 글

집의 PC로 서버 꾸미기  (0) 2007/07/11
웹서비스가 가능한 광랜  (2) 2007/06/21
tag dnsever

웹서비스가 가능한 광랜

사실 예전에, adsl은 80포트가 오픈 되었던것으로 생각된다. 그러나 네트웍 상태가 불안해서 그것으로 내 개인 홈페이지를 돌리는것도 불안했었다. 이후 케이블로 바꾸면서 80포트가 제한되었고 할수 없이.. 다른 포트로 바꾸면서 간간히 개인홈피를 돌렸었다.

그러나 광랜으로 바꾸면서 상황이 달라젔다. 80포트가 오픈되어 있을뿐만 아니라 upload속도 또한 보장된다. 그리고 요즘은 공유기가 잘나와서 pc를 한쪽 구석에 박아놓고 linux돌리면 그만이다. 그리고, 예전엔 없었던 dnsever.com 에서 도메인 관리를 무료로 해준다. 이곳에서 서브도메인 생성및 포트포워딩 메일포워딩까지 다 관리할수 있다. 무료로 말이다. 정말 pc로 서버 돌리를 사람들을 위한 서비스가 아닐까 한다.

여기서 뭐.. 굳이 전기세를 들여가면서 pc를 돌려 자기 홈페이지를 운영할 필요가 있나 하는 분들도 있겠다. 하지만 자신이 서버를 가지고 있으면서 쓰다보면, 호스팅 받을때의 제약 사항들이 없기때문에 여러가지 재미 있는 장난도 칠수도 있고 여러 어플리케이션도 설치 할수 있다. 머 나름 스터디도 되고, 유용하게 써먹을때도 있다는거다.

암튼 난 pc로 서버를 돌리기에 알맞은 환경은 구축된셈이다. 개인 홈페이지도 운영하고, 이런저런 어플도 깔아보고 있지만. 좀 부족하다. 무었을해야 재미 있을까? 하는 생각을 자꾸 하게 된다.

음.. 암튼 결론은 "이 pc서버로 무었을 해야 재미 있을까?"

'Web > Server' 카테고리의 다른 글

집의 PC로 서버 꾸미기  (0) 2007/07/11
웹서비스가 가능한 광랜  (2) 2007/06/21

javascript include 클래스

여러개의 클래스을 각각의 *.js 파일로 만들어 놓고, 사용되는 클래스들만 import하여 쓸수 있게 하는 class를 만들었다. (회사 지인의 아이디어이고 코드만 만들어봤다.)

/**
Include class blog.byuli.com
2007 03 23
*/
var Byuli= {
 default_path: null,
 setPath: function(url){
  this.default_path= url;
 },
 include: function()
 {
  var jsList= this.include.arguments;
  for ( var i=0; i<jsList.length; i++ )
  {
   var tag= "<script languge=\"javascript\"";
   tag+= "src=\"" + this.default_path + jsList[i] + ".js?ver=1.1\"></script>";
   document.write(tag);
  }
 }
}

보면 알겠지만, document.write로  코드를 써준다. 아래처럼 javascript로 element를 생성할수도 있지만 head가 onload된 상태에서만 동작하기때문에 쓸수가 없다.

   var el = document.createElement('script');
   el.src = url;
   document.getElementsByTagName('head')[0].appendChild(el);

위 클래스를 쓰는 방법은 아래와 같다. 먼저 javascript 파일이 존재하는 절대 경로를 입력하고 아래에 각 js파일을 인자로 넘기면 된다.

Byuli.setPath("/script/");
Byuli.include(
 "/byuli/util.js",
 "/byuli/ajax.js",
 "/byuli/string.js"
);

어려운 코드가 아니나, java처럼 class 단위로 분리한 javascript 파일을 효율적으로 import 할수 있는 방법으로써 좋은 아이디어라고 생각된다.

'Web > Client' 카테고리의 다른 글

자바스크립트로 구현한 튤팁(Tooltip)  (0) 2007/08/20
Ajax 호출시 JSON 으로 리턴 받기  (0) 2007/08/06
java냐 javascript이냐?  (0) 2007/07/31
javascript include 클래스  (0) 2007/02/23
iframe 과 같은 object 태그  (0) 2007/02/08
javascript 오류 보고에 대한 발상?  (0) 2007/02/06

iframe 과 같은 object 태그

서핑 하다가 우연히 발견 했는데요. "이렇게도 되는구나" 라고 생각했습니다.
이유는 ie 7에서만 되더라구요 -_-;; 전혀 쓸일은 없다는거저...
다들 "이렇게도 되는구나" 라고 생각하시어요 =ㅁ=

<object width="300" height="300" type="text/x-scriptlet">
 <param name="url" value="http://daum.net">
 <param name="selectablecontent" value="0">
 <param name="scrollbar" value="1">
</object>

'Web > Client' 카테고리의 다른 글

자바스크립트로 구현한 튤팁(Tooltip)  (0) 2007/08/20
Ajax 호출시 JSON 으로 리턴 받기  (0) 2007/08/06
java냐 javascript이냐?  (0) 2007/07/31
javascript include 클래스  (0) 2007/02/23
iframe 과 같은 object 태그  (0) 2007/02/08
javascript 오류 보고에 대한 발상?  (0) 2007/02/06
tag HTML