월별 글 목록: 2014년 4월월

수익률 계산 – 2

수익률 계산에 대한 이론적인 부분은 단순수익률, 평잔수익률, 시간가중수익률, 금액가중수익률로 나누어 설명하였다.
그러면 펀드와 같은 포트폴리오의 수익률과 그 펀드 또는 포트폴리오의 구성 요소인 개별 종목의 수익률을 계산하는 방법은 어떻게 될까?
먼저 시간가중 수익률에 대해 다시 한번 설명하자면

(1+R1)*(1+R2)*(1+R3)* ... (1+Rn) - 1

로 설명이 되는데 이 때 수익률 측정 기간의 간격은 가장 짧은 측정 단위가 되어야 한다. 하지만 매분 매초 정확한 가격 측정과 수익률 측정이 불가능하므로 일반적으로(AIMR권고사항) 수익률을 일간 수익률의 시간가중수익률로 측정한다.
따라서 1년의 수익률을 계산한다면 매일 매일의 수익률을 계산하여 (1+R1)*(1+R2)… -1 의 방식으로 누적해 연간 수익률을 계산한다.

종목수익률
A라고 하는 종목을 100만원어치 사서 오늘 저녁에 110만원이 되었다면 수익률은 110만/100만 – 1 = 0.1 = 10%가 될 것이다. 다음날 저녁 다시 121만원이 되었다면 A종목의 이날 하루 수익률은 121만/110 – 1 = 0.1 = 10%이다. 이것을 시간 가중하면

(1+0.1)*(1+0.1) - 1 = 0.21 = 21%

가 된다. 그런데 이 때 A 종목을 중간에 사고 팔면 어떻게 계산을 해야 할까?
A종목을 셋째날 300만원어치 추가로 샀는데 저녁에는 전체 평가 금액이 442.05만원이 되었다면 이날의 수익률은

일간수익률 = (당일평가금액 + 당일매도금액 ) / (전일평가금액 + 당일매수금액) - 1
= (442.05 + 0 ) / (121 + 300 ) - 1 = 0.05 = 5%

시간가중수익률의 최소 단위가 일별계산이므로 당일매도, 당일매수를 적용한다.
그리고 누적수익률은 당연히

(1+0.1)*(1+0.1)*(1+0.05) - 1 = 0.2705 = 27.05%

펀드수익률
펀드의 수익률을 설명하기 위해서는 우선 기준가부터 알아야 한다. 기준가란 펀드의 기준이 되는 가격으로서 쉽게 말하면 펀드의 단가(?) 또는 가격 정도가 되겠다. 펀드를 개별 종목처럼 생각하여 매일 매일의 가격을 계산하는데 이것이 바로 기준가이다.
펀드는 하나의 펀드가 하나의 회사(Paper Company)로서 그 안에서 회계가 이루어지고 매일매일 결산을 하여 수익금과 비용을 계산하여 기준가를 산출한다. 이 때 전일 대비한 오늘의 기준가 비율이 바로 수익률이다.

펀드의 수익률 = 오늘의 펀드 NAV / 전일의 펀드 NAV - 1
= 오늘의 기준가 / 전일의 기준가 - 1

그런데 거꾸로 복수의 종목으로 이루어진 펀드의 기준가, 즉 전일대비 오늘의 수익률을 계산하고자 할 경우에는 펀드를 구성하는 모든 개별 종목의 수익률과 비중으로 수익을 구하고 비용을 빼서 펀드 전체의 수익률을 계산할 수 있다. 이 때 회계상 비용(펀드 운용보수, 판매보수)등은 계산하지 못한다 하더라도 개별종목의 수익률을 이용하여 전체의 대략적인 수익률은 다음과 같이 구할 수 있다.

펀드(포트폴리오)의 수익률 = ∑ (개별 종목의 수익률 * 개별종목의 비중)
단, ∑개별종목의 비중 = 1.0

개별종목의 비중
펀드 또는 포트폴리오의 수익률을 계산하기 위한 개별종목의 수익률과 포트폴리오 수익률 계산 방법을 살펴보았는데 실제 적용하기에 어려운 부분이 있다. 바로 개별 종목의 비중이다.
개별 종목의 비중은 당연히 (개별종목의 평가금액 / 전체 평가금액 )으로 간단히 생각 할 수 있는데 이 때 평가금액을 계산하는 시점에 따라 전일의 평가금액인지 당일(오늘)의 평가금액인지 애매할 수 있다.
일반적인 비중은 당연히 전일의 평가액을 기준으로 하는 전일의 비중이다. 왜냐하면 일간수익률을 계산하는 기준이 어제 대비하여 오늘까지의 수익률을 계산하므로 기점이 어제이기 때문이다. 그런데 이 때 매매가 문제가 될 수 있는데 매매가 오늘 발생하므로 전일의 종목 비중만 적용하면 수익률에 오차가 발생한다.
예를들어 어제 A 한종목 100만원어치를 가지고 있었는데 오늘 B한종목을 200만원어치 사서 오후 3시에는 결국 A종목 110만원, B종목 240만원이 되었다면 수익률은

펀드수익률 = (A종목수익률) 110만원/100만원 * (A종목비중) 100만원/100만원  ???? 
B종목의 수익률이 누락됨!!

즉, 전일 보유하지 않은 종목은 전일의 비중에 포함되지 않으므로 수익률 계산에 오류가 발생한다.
따라서 비중을 계산할 때는 다음을 사용한다.

비중 = (개별종목의 전일 평가금액 + 당일매수금액 ) / ∑(개별종목의 전일평가금액 + 당일매수금액)

따라서 전체 펀드의 수익률은 다음과 같이 계산된다.

펀드수익률 = A종목수익률 * A종목 비중 + B종목 수익률 * B종목 비중
= ((110+0)/(100+0)-1) * (100/300) + ((240+0)/(0+200)-1) * (200/300)

A종목수익률 = (당일평가금액:110 + 당일매도금액:0) / (전일평가금액:100 + 당일매수금액:0) - 1
A종목비중 = (전일A종목평가금액:100+당일매수금액:0) / (전일총평가금액:100+당일총매수금액:200)
B종목수익률 = (당일평가금액:240+당일매도금액:0) / (전일평가금액:0 + 당일매수금액:200) - 1
B종목비중 = (전일B종목평가금액:0+당일매수금액:200) / (전일총평가금액:100+당일총매수금액:200)

사실 개별 종목의 수익률과 비중을 곱하여 전체 수익률을 산출하는데에는 특별한 기술이 필요 없어보이긴 하다. 하지만 여기에도 교과서에 나오지 않는 실무적인 비밀이 숨겨져 있다. 그 비밀에 대해서는 별도로 살펴보기로 하자.
 

 

ftp passive모드와 포트번호

ftp의 passive모드에 대한 이해와 포트에 대한 오해가 많아 프로젝트에서 개발한 ftp 라이브러리가 회사 서버에 접속하지 못하는 문제를 네트웍관리자, 프로그래머도 해결하지 못하는 경우가 발생하여 ftp에 대해 잠시 분석을 해봤다.
ftp에 대한 기본적인 이해는 이미 알고 있었으나 passive모드에 대한 깨알같은 이해를 이번기회에 확실하게 정리를 하였다.

ftp란
ftp는 당연히 file transfer protocol의 약자로 파일 전송을 위한 기본적인 tcp/ip 프로토콜이다. 초기에 많은 오해가 있었는 부분이 “ftp는 udp 전송을 한다”라는 오해였는데 최근에는 더이상 udp와 tcp를 혼돈하는 경우는 없다.
ftp는 두개의 session을 사용하는데 기본적으로 명령어를 서로 주고 받기 위한 control session과 데이터를 송수신하기 위한 data session이 그것이다.

control session
control session은 흔히 알려진 대로 client쪽에서 server쪽으로 접속 요청을 하고 id와 password를 입력하여 명령을 내릴 준비단계가 된 session이다. 포트는 21번 포트를 사용하며 sftp 등을 사용할 때는 20번 포트 또는 다른 포트로 변경을 하여 사용한다. 그러나 ftp의 공식 포트번호는 21번 포트이다.
일단 접속을 하면 GET, CWD, RETR, LIST 등의 명령을 보내는 통로가 되며 server에서는 이에 대한 응답을 보낸다.

data session
data session은 서버에서 데이터를 보내기 위한 session으로 기본적으로 20번 포트를 사용한다. 20번 포트는 server측의 포트로 server에서 client로 접속하기 위한 기본 포트이다. 이 때 개념적인 server, client와 물리적인 server, client 때문에 많은 혼동이 생길 수 있는데 그 개념은 접어두고 일단 control을 위한 session과 data를 위한 session은 분리되어 있다는 것을 명심해야 한다.

acive모드와 passive모드
Active Mode는 data session을 맺을 때 server(client가 접속한 server)측에서 20번 포트로 client가 지정한 port로 접속을 요청한다 ( server port : 20, client port : client가 통보해주는 랜덤).
그리고 client측에서 control session을 통해 LIST, RETR 등의 명령을 내리면 그 결과를 data session으로 전송해 준다.
Passive Mode는 data session을 server에서 접속하는 것이 아니라 passive mode로 진입하겠다고 client가 통보하면 server에서 접속 가능한 data port 번호를 알려준다. 이 때 이 port 번호로 client가 다시 접속 시도를 해서 접속이 되면 이 data session을 통해 데이터를 받게 된다.

다음의 그림을 보면 명확하게 이해가 될 것이다.
ftp
(그림출처 : taeho’s life logger )

이 때 firewall의 정책이 각각의 ftp server 운영 정책에 따라 달라지는데 active mode의 경우 data session 20번 port의 outbound target을 ANY(*.*.*.*;*)로 open 해 주어야 하고 passive mode의 경우 server의 1024번 이상 포트 inbound ANY(*.*.*.*;*)를 열어주어야 한다.

passive mode port 번호 추출
passive mode로 진입하기 위해 서버에 명령을 전송하면 서버에서는

227 Entering Passive Mode ( 111,222,333,444,123,456)

와 같은 메시지가 전송되어 온다. 이 때 111,222,333,444는 서버의 주소이므로 현재 접속한 서버와 동일할 것이다. 문제는 뒤의 123, 456 위치에 있는 숫자인데 이 숫자가 서버에서 대기하고 있는 data session용 포트번호이다.
ftp를 구현하여 데이터 수신 프로그램을 작성하는 경우 client에서 이 포트번호를 추출하기 위해서는 다음과 같은 코딩을 하여 추출할 수 있다.

        char ip1[10], ip2[10], ip3[10], ip4[10];
        int  port1, port2;
...
중략
...
        if ( atoi(szBuffer) == 227 ) { /* passive mode ok */    
            sscanf(szBuffer, "%[^','],%[^','],%[^','],%[^','],%d,%d", ip1, ip2, ip3, ip4, &port1, &port2);
            nRetCode = port1 * 256 + port2;
        }

server의 port번호는 123 * 256 + 456 이다.

 

수익률 계산 – 1

금융자산에서 수익률은 그 용도에 따라 서로 다른 의미를 가진다. 일반적인 의미에서의 수익률은 투입한 자산 대비 발생한 수익을 의미하여 투자의 수익성을 의미한다. 그러나 많은 종류의 자산을 한가지 상품으로 매매하고 투자, 회수하며 차입이나 대여 등을 통한 레버리지를 일으키고 직접 투자 상품이나 간접투자(위탁) 등 다양한 투자 유형이 혼재되어 있는 경우 일반적인 의미의 수익률 계산으로는 의미상의 혼동과 금전적인 불일치를 초래할 수 도 있다.
따라서 수익률을 계산하는 방법에 대한 정확한 이해 없이는 금융상품에 대한 가치측정이나 금융거래에 문제를 일으킬 수 있다.

일반적인 수익률
1. 단순수익률
1월 1일 수익률 연 25%인 정기예금에 1600원을 가입하면 그 해 12월 31일에 얼마를 찾게될까? 계산은 1600×(1+0.25)=2000원 여기서 이자소득세를 떼고 받게된다. 거꾸로 1월 1일에 1600원을 투자하여 1년만에 400원의 이자(또는 소득)을 얻었다면 (2000-1600)/1600=0.25(25%), 2000/1600-1=0.25(25%)로 계산된다.
이제 1년 동안 아무때나 돈이 생길때마다(500원, 700원, 300원, 100원) 돈을 투자해서 연말에 돈이 2000원이 되었다면 어떻게 계간하면 될까? 간단한 방법을 생각하면 각 투자금을 다 더하고 수익금과 비교하는 방법이다.
2000/(500+700+300+100)-1=0.25=25%
두 계산은 동일한 결과들을 보여주지만 수익성이 더 좋은 쪽은 어느 쪽일까? 후자의 경우가 이론적으로는 더 좋은 투자를 보여주지만 현실적으로는 꼭 그렇지 않다.
전자의 경우에 투자할 경우 연초에 1600원을 투입하여 추가적인 투입이 불가능하지만 후자의 경우 연초에 이미 1600원을 가진 투자자는 500원만 투자하고 다음 투자할 때까지(700원을 투입할 때까지) 1100원을 다른데 투자하여 추가 수입을 올릴수 있다. 그러므로 당연히 후자의 경우가 더 좋은 투자이다.

2. 평잔수익률
평잔수익률은 평잔 즉 평균잔액에 대한 수익률을 측정한다. 평균 잔액이라 함은 여러가지가 있겠지만 대표적인 경우는 다음의 두가지로 정리할 수 있다.

수익금 / (( 기초금액 + 기말금액) /2) = 400 / (( 500 + 1600 ) /2) = 0.42 = 42%

그런데 꼭 최초 투자금액과 최종 평가금액의 평균이 적절하지 않을 수 있으므로 이를 일별로 나눌 수 도 있다.

수익금 / (일별투자금액의 합계/ 투자기간 ) = 수익금 / 평균일별투자금액

각각의 경우 수익률은 모두 다른 결과를 보여준다.

시간가중수익률
시간가중 수익률은 일별 수익률을 투자금이나 수익금에 대한 일별 가중치를 두지않고 동일한 비중의 수익률을 가중하는 방식이다. 즉, 일정한 주기동안의 수익률을 측정하여 이를 연속하여 연결(가중)하여 수익률을 계산하는 방식이다.

(1+R1)×(1+R2)×(1+R3)×…(1+Rn) – 1

이 방식은 투자금이 크고 작은 것과 상관없이 매 기간(주로 일별)의 수익률을 가중하여 측정하는 방식으로 개인적인 투자 수익률, 즉 수익 금액의 유불리(금액이 클 때 수익률이 좋을 수도 있고 금액이 적을 때 수익률이 좋을 수도 있다)를 떠나 투자금액과 상관없이 수익률 자체를 따지는 방법으로 펀드매니저의 능력을 측정하기위해 사용한다(당연히 펀드의 수익률에도 사용하며 일반적인 금융권의 수익률에 모두 사용한다).

하지만 개인의 입장에서는 이 수익률이 현실성이 없을 수 있다. 전체 기간동안 시간가중수익률은 10%이나 내가 돈을 5000원 투자한 기간 동안에는 수익률이 좋았고(30%정도?) 20000원 투자했을 때는 형편없는 수익률(-20%정도)을 기록하여 결과적으로는 원금을 손실보고 있다면 누가 이런 투자가 수익성이 좋다고 하겠는가?(공시 수익률 10%, 개인 수익률 -8%)

이런 경우 개인의 실질적인 투자금액과 수익을 고려한 수익률을 계산하고 싶을 것이다. 이 때 사용하는 수익률이 금액가중수익률이다.

금액가중수익률
금액가중 수익률을 측정하는 방법은 몇가지가 있을 수 있으나 가장 많이 사용되는 방식으로는 IRR(Internal Return Ratio:내부수익률)이 있다. IRR은 비정기적인 투자에의한 수익금 및 자금회수를 모두 만족하는 하나의 수익률이다. 즉, 비정기적인 투자와 회수가 있는 경우 각 투자금액과 중간자금 회수 및 최종 자금회수 금액을 일치시키는 수익률이다.
예를 들면 1월달에 펀드에 3000원을 투자하고 6월달에는 4000원 12월에는 2000원을 투자하였다가 연말에 모두 10,000원을 회수하였다면 내부 수익률은 약 19.37%이다.

3000×(1+0.1937×12/12)+4000×(1+0.1937×6/12)+2000×(1+0.1937×1/12) = 10,000

 

채권가격계산 library 개발-4

채권 가격 계산 라이브러 개발을 위해 일반 채권 중 가장 기본이 되는 할인채와 이표채에 대한 설명을 한데 이어 단리채와 복리채에 대한 설명을 하고자 한다.

단리채는 매년 채권의 표면 이자율로 계산한 이자를 누적하여 만기에 일시 상환하는 채권이다. 즉 매년 이자 얼마 ( 원금 X 표면이자율 )를 계산해서 만기에는 “원금 + 그동안의 누적이자” 로 지급한다.
복리채는 채권의 이자를 복리로 계산해서 만기일에 일시 상환하는 채권이다. 즉, 채권의 원금을 지급하는 만기에 이자까지 한꺼번에 지급하는데 이 때 첫 해부터 지급되는 이자가 복리로 계속 쌓인다는 조건이다. ( 복리라 함은 이자에도 이자가 붙는 개념 )

복리채의 로직은 크게 어려울 것이 없다. 단리채와 동일한데 이자를 누적해서 그 누적된 이자에도 이자 계산을 해서 다시 누적해 주어야 한다.

/*-----------------------------------------------------------------------------
 * fnSBCompoundBond : 복리채에 대한 가격 계산 함수
 *		Spot/YTM 모두 사용가능
 *		YTM의 갯수를 1개만 지정하는 경우 해당 YTM을 사용할 수 있으며,
 *		YTM의 갯수가 여러개인 경우 보간 하여 해당 YTM 사용
 *
 * total_coupon : total_year + days from issue to first coupon day
 *
 *---------------------------------------------------------------------------*/

UINT fnSBCompoundBond( DATETYPE dtPriceDay,     /* 계산일                           */
                       BONDINFO *pBondInfo,   /* Bond Info Structure              */
                       CURVE  *pCurve,        /* ytm/sport curve                  */
                       BONDPRICE *pBondPrice, /* Price Info Structure             */
                       INT    *error_code)
{
	DATETYPE	nextCouponDate;
	DATETYPE	prevCouponDate;
	UINT 		nTotalCoupon;
	UINT 		nResidueYear;
	UINT		nDaysToMaturity;
	DOUBLE		nBondPrice;
	DOUBLE		nDuration;
	DOUBLE		nMD;
	DOUBLE		nConvexity;
	DOUBLE		nFace;
	DOUBLE		nDiscountToday;
	DOUBLE		nIntRatio;
	UINT		nNextCouponRemDay;
	UINT		nCouponTermDay;

	nDuration  = 0.0;
	nMD        = 0.0;
	nConvexity = 0.0;

	nFace = 10000.0;
	nIntRatio  = pBondInfo->nIntMonth / 12.0;

	/*------------------------------------------------------
	 * cashflow = face * 만기상환율 + coupon / 횟수 * ( rem / term + N - 1 )
	 *-----------------------------------------------------*/

	nResidueYear = 0;

	prevCouponDate = pBondInfo->dtDueDay;
        while ( fnDatetoInt( prevCouponDate ) >= fnDatetoInt( dtPriceDay ) ) {
		nextCouponDate = prevCouponDate;
		prevCouponDate = fnAddDateInt( prevCouponDate, YEAR, -1 );
		nResidueYear++;
	}

	if ( nResidueYear > 0 ) nResidueYear--;
	nNextCouponRemDay = fnCountDate( dtPriceDay, nextCouponDate, DAY );
	nCouponTermDay    = fnCountDate( prevCouponDate, nextCouponDate, DAY ) ;
	nDiscountToday = (DOUBLE) nNextCouponRemDay / (DOUBLE) nCouponTermDay;

	nTotalCoupon = fnCountDate( pBondInfo->dtIssueDay, pBondInfo->dtDueDay, MONTH) / pBondInfo->nIntMonth;

	nBondPrice = 0.0;

	nDaysToMaturity = fnCountDate( dtPriceDay, pBondInfo->dtDueDay, DAY );

        /* 해당 수익률이 하나만 입력되는 경우 하나의 YTM을 이용 */
	if ( pCurve->nYieldCount == 1 )
	{
		pBondPrice->nYtm = pCurve->nYield[ 0 ];
	}
	else
	{
		/* 여러개의 YTM이 입력되는 경우 해당 잔존만기의 수익률을 선형보간으로 가져옴  */
		pBondPrice->nYtm = fnGetRate( pCurve, nDaysToMaturity , LINEAR );
	}
        /* Spot 커브에 대한 부분은 생략 */
	nBondPrice = nFace * pBondInfo->nReturnRate / 100.0 + nFace * pow( 1 + pBondInfo->nCouponRate * nIntRatio, nTotalCoupon ) - nFace;
	nBondPrice = floor(nBondPrice) / ( (1 + pBondPrice->nYtm * nDiscountToday ) * pow( 1.0 + pBondPrice->nYtm, nResidueYear  ) ); 

	nDuration = nDaysToMaturity / 365.0;
	nMD = Math_Round( nDuration / ( 1 + pBondPrice->nYtm ), 5 );
	nConvexity = Math_Round( ( Math_Round( nDuration, 6 ) * ( Math_Round( nDuration, 6 ) + 1 ) ) / pow( 1.0 + pBondPrice->nYtm * pBondInfo->nIntMonth /12.0, 2 ), 5 );

	pBondPrice->nPrice = nBondPrice;
	pBondPrice->nDuration = Math_Round( nDuration, 5 );
	pBondPrice->nMD = nMD;
	pBondPrice->nConvexity = nConvexity;

	return SUCCESS;
}

 

 
단리채는 채권 가격 계산 부분이 다음과 같이 변경되면 된다.


	nBondPrice = floor( nFace * ( pBondInfo->nReturnRate / 100.0 + pBondInfo->nCouponRate / nCouponPerYear * (nTotalYear * nCouponPerYear + nRemDay / nLastCouponTermDay ) ) );
	nBondPrice = nBondPrice / ( pow( 1.0 + pBondPrice->nYtm, nResidueYear ) * ( 1.0 + pBondPrice->nYtm * nDiscountToday ));

 

 

 

무료 DDNS 이용 – DNSEver

집에 웹서버나 NAS, FTP서버, 혹은 집안을 감시(?)하기위한 웹캠을 설치하기 위해 라즈베리파이 또는 구형 pc, 사양이 떨어지는 노트북, NAS서버용 임베디드 서버 등을 설치해 놓고 가정용 인터넷을 연결하는 경우가 많이 있다. 이런 경우 웹서버 또는 개인용 서버를 외부에서 접속하기 위해서는 당연히 인터넷 주소가 있어야 하는데 현재 서비스되는 대부분의 인터넷은 접속시 주소를 할당받는 (가끔은 접속중에 접속이 끊기고 새로운 주소가 할당되기도 하는) 방식이다 보니 내 서버의 인터넷 주소가 그 때 그 때 달라진다. 즉, 인터넷 서비스 제공업자가 할당받은 인터넷 주소를 다른 인터넷 사용자들과 공유하며 필요할 때 하나씩 받아서 쓰는 형태다.
그렇다보니 웹서버, FTP서버 등에서 필요한 주소가 확정적(Static)하지않고 동적으로 변(Dynamic)하여 외부에서 정상적인 접속을 하려면 고정 주소가 추가로 필요하다.(내 주소가 168.126.xx.xx라서 학교에서 그 주소로 접속했더니 그 새 그 주소를 다른 사람이 쓰고 있는 경우가 발생한다)
이 경우 인터넷 서비스제공업체에서 추가적인 비용을 받고, 또는 별도의 상품으로 고정 주소를 할당해 주기도 하는데 간단한 서비스 또는 시험적인 개인 용도의 웹서버, NAS서버에 돈을 더 내기는. .
이 때 이용할 수 있는 것이 DDNS이다. DDNS란 dynamic DNS로 인터넷 주소를 숫자형태가 아닌 이름 형태로 전환해 주는 네이밍 서비스(DNS:Domain Naming Service)를 동적으로 사용할 수 있도록 해 주는 서비스다.

DNS
원래 우리가 사용하는 인터넷 주소 서비스는 168.126.xx.xx 등과 같이 할당된 주소를 입력해야하는데 이 숫자로 된 주소를 모두 기억할 수 없어서 도메인 명과 호스트 명을 등록해 놓고 이름을 숫자로 전환해 주는 방식을 사용하고 있다.
예를 들어 jeus.fsquare.co.kr과 같이 주소창에 입력을 하면 이 주소는 내 인터넷에 등록된 네임서버 주소에 질의를 한다. 도대체 jeus.fsquare.co.kr이라는 이름의 서버는 주소가 몇번이지?하고. 그러면 내 네임서버는 이 정보가 있으면 바로 응답을 해 주고, 없으면 상위 네임서버(주로 최상위 도메인 관리 기관:루트 도메인서버)에 다시 질의를 하면 이 서버에서 대답해 주거나 이 서버에서 fsquare.co.kr이라는 도메인 서버의 주소를 확인하고 그 도메인 서버에 다시 질의를 던진다(fsquare.co.kr도메인 소유자는 이 도메인의 네임서버를 반드시 등록해야 한다). “어이, jeus.fsquare.co.kr의 주소는 몇번이지?”하고.
이 때 도메인 관리자가 도메인 서버를 운용하고 서버주소를 일일이 등록하고 관리해주었다면 바로 서버주소를 응답해 주어 서비스 접속자가 jeus.fsquare.co.kr의 주소를 알게되어(이 과정은 컴퓨터가 0.5초 내로 대신 수행해주어 사용자는 눈치채지 못한다) 그 주소로 웹 요청을 던진다. 만약 도메인서버를 관리하지 않거나 호스트를 등록해 두지 않았으면 그런서버는 없다는 대답을 토해낸다.

DDNS
그런데 다시 우리의 고민인 가정용 웹서버 구축으로 돌아간다면, 우리가 도메인 네임서버를 운용하고 별도의 관리도 해야 한다는 문제가 생긴다. 도대체 네임서버는 또 뭐고 어떻게 관리해? 거기다 집에서 접속할 때 마다 주소가 새로 바뀌는데 그럼 그걸 매번 관리해 주어야 해??
이 질문에 대한 대답이 DDNS(Dynamic Domain Naming Service) 이다. 동적으로 바뀌는 주소를 자동으로 등록하고 DNS를 유지, 관리해 주는 서비스다. 여기서 핵심은 동적으로 주소를 DNS에 업데이트해주고 관리하는 서비스란 점이다.
외국의 경우 일찌기 이런 서비스가 있어서 가정용 라우터에 등록하여 사용할 수있도록 해 주는 서비스가 있어왔다. 국내에도 CODNS나 DNSEVER 등의 서비스 등이 있으나 일부 서비스의 경우는 개인 도메인을 등록하기위해 비용을 지불해야 하는 경우가 있어 자세히 살펴보고 사용해야 한다.

필요한 서비스는?
단순히 주소 매핑이 필요한 경우 해당 서비스를 신청하면 JEUS.CODNS.COM, JEUS.DYNDNS.COM과 같이 서버명을 자기가 원하는 호스트명을 등록하고(도메인은 서비스 제공업체의 도메인을 사용) 프로그램을 설치하면 외부에서 집으로 접속할 때 간단히 이름 주소로 접속이 된다.
자기가 가진 도메인명까지 등록하고 사용하기 위해서는 별도의 비용을 지불하거나 dnsever의 서비스를 사용하면 된다. Dnsever도 무료로 제공하다가 현재는 유료로 전환하고 있으나 개인용 서버의 경우 아직 무료이다.(트래픽이 작은 경우, 배너를 걸어주는 경우 등의 프로모션을 통해)
사용 방법은 간단하다. Dnsever.com에 접속하여 프로그램을 다운 받아 이 프로그램이 서비스를 제공할 서버에서 계속 돌아가게 해 주기만 하면 된다. 추가 서버나 추가 서비스용 가상 호스트들은 dnsever의 웹에서 먼저 등록해 주고 내 Pc에서 추가 설정해 준다)
물론 환경 설정도 간단하다. 설치 프로그램이 계속 돌아가야 하는 이유는 내 서비스 제공 서버의 주소를 지속적으로 dnsever서버에 업데이트 해주기 위해서다.
즉 프로그램이 계속 dnsever서버에 내 서버 주소를 자동 업데이트 해주기 때문에 외부에서 내 웹서버에 이름 주소로 쉽게 접속이 가능한 것이다. UNIX(Linux)시스템에서는 crontab에 넣어주면 일정한 시간 마다 자동 실행된다.

유료화
사실 이런 서비스를하기위해서는 많은 서버(앞에서 말한 네임서버)를 유지해야하고 엄청난 트래픽을 감당할 네트웍을 유지해야 하기 때문에 무료 dns서비스를 제공하는 업체로서는 많은 비용이 발생한다. 따라서 당연히 비용을 지불하는 것이 옳지만 소규모 가정용, 개인용, 테스트용 등을 위해 단 몇천원이라도 지불해야한다면 주머니 사정이 가벼운 우리나라 영세 사업자나 학생들은 발길을 돌릴 것이다.
Dnsever는 사실 다른 사이트에 비해 정보업데이트도 빠른 편이며 웹서버의 정보 갱신도 잘 되는 편이라 추천할 만하다.
앞으로 fsquare와 형제 사이트에서 제공할 몇가지 서비스가 폭발적인 인기를 누린다면 당연히 비용을 지불하겠지만 아직은 때가 아니므로 무료로 계속 dnsever의 서비스를 사용할 계획이다.