변액관리(2) – 변액관리의 시작, 사업비 절약.
 
 
변액의 본질은 펀드. 즉,원금손실이 가능한 ‘금융투자상품’.
 
 

  
    주위를 둘러보면 생각보다 많은 사람들이 변액보험 상품에 대한 고민을 안고 살아간다. 여타 다른 저축성보험에 비해 설계사에게 주어지는 수수료가 높은 탓에 보험 세일즈맨들의 공격적인 마케팅이 다년간이루어져온 원인이 가장 큰 것 같다. 그러나 많은 보험고객들이 푸념하듯 팔 때는 간이라도 빼줄 것처럼하루가 멀다하고 찾아오더니 일단 구입 후에는 관심과 발길이 뚝 끊기는 경우가 부지기수다. 아니 대부분이다. 일반적인 보장성 보험이나 공시이율로 운용되는 저축성 보험은 관리 서비스가 이루어지지 않더라도 한 두번 이상의실무경험을 통해 스스로 보험금을 청구하는 방법 정도만 알게된다면 큰 피해는 없을지도 모른다. 하지만결론부터 얘기하자면 변액상품은 완전히 다르다. 변액의 본질은 펀드이고,펀드는 확정수익이 없음은 물론, 원금손실위험까지 다분히 존재하는 “금융투자상품”이기 때문이다.
 
 
  변액과 펀드는 대체 뭐가 다른가.
 
    변액은 펀드지만 펀드가변액인 것은 아니다. 무슨 말인가 하면 변액상품이 펀드처럼 자산운용사의 펀드매니져들에 의해 운용되고, 그에 따른 투자 실적이 배당되는 형식으로 수익이 나오는 금융상품인 것은 동일하지만 둘을 뚜렷이 구분 짓는 특징이존재한다는 것이다. 그 가장 뚜렷한 차이는 바로 ‘비용’에 있다. 펀드에 투자하는 비용은 크게 두 가지로 나뉜다. 첫째는 ‘수수료’, 둘째는‘보수’다. 수수료는일회성으로 부과되고, 보수는 다회성으로 매년 부과된다. 또한수수료는 ‘초기’ 투자자산의 일정비율로 부과되지만, 보수는 ‘누적’되는 전체투자자산의 일정비율이 부과된다. 그런데 펀드는 ‘수수료’가 저렴한 대신 ‘보수’가비싸고, 변액은 ‘수수료(사업비)’가 비싼 대신 ‘보수’가저렴하다. 
 

놀이기구 이용료 vs 펀드 관련 비용
 
 
      평소에 투자상품에 별다른 관심이 없는 투자 초심자라면 이게 대관절 무슨 말인지 어리둥절해질 것이다. 이 부분이 어렵다면 이해를 돕기 위해 놀이공원에 놀러 간 두 커플을 떠올려보기로 하자. 한 커플은 바쁜 일상 속에서 오랜 기간 벼르고 벼르다가 간신히 월차를 맞추고 날을 잡았다. 아침 일찍 여자친구 집 앞에서 만나 오전 9시에 놀이공원에 도착. 주말인데도 너무 이른 시간이라 입구부터 한산하다. 아침부터 밤늦게까지 놀이공원에 있는 모든 놀이기구를 최소 한번씩은 다 향유할 기세다. 그런데 두 번째 커플은 조금다르다. 놀이공원 부근에 사는 여자친구 탓에 하루가 멀다하고 놀이공원을 뻔질나게 드나든다. 그런데 이제 진절머리가 날 즈음에 놀이공원 본사에서 날라온 문자의 광고문구가 레이다에 포착됐다. 신개념의 바이킹이 나왔단다. 단순히 앞뒤로 왔다갔다 하는게 아니라 360% 옆으로 비틀면서 왔다갔다 한다고 한다. 아무리 놀이기구라면넌덜머리가 난다지만 이 것만은 일생에 꼭 한번은 타봐야 하지 않겠는가. 공감대가 형성됐다.
      그런데 이 놀이공원의요금체계가 기상천외하다. 두 가지 중 하나를 선택할 수 있는 것이다.첫번째 요금 부과 유형은 입장료가 다소 비싼 대신 놀이기구 하나하나를 탈 때는 아주 저렴한 요금만 받는다. (자유이용권의 개념은 아니다) 두 번째는 입장료는 거의 거저에 가깝지만놀이기구를 타려면 꽤나 비싼 돈을 지불해야 한다. 물론 아무리 ‘신개념’ 바이킹이라지만 그 비용이 첫 번째 요금제도의 비싼 입장료보다는 훨씬 저렴하다.그렇다면 두 커플에게 맞는 요금제도는 무엇일까. 아주 쉽다. 첫 번째 커플은 하루종일 꽤나 많은 놀이기구를 탈 것으로 예상되므로 입장료는 비싸더라도 각각의 놀이기구를 타는비용이 매우 저렴한 전자가 유리할 수 있다. 그리고 두 번째 커플은 당연히 입장료는 별로 없고, 바이킹 타는 비용만 지불하는 후자가 유리할 것이다. (물론 각각의요금의 크기에 대한 엄밀한 전제가 필요하지만 이해를 돕기 위한 비유이므로 상식선에서 이해하기로 한다.)
 
    변액은 입장료가 비싼첫번째 요금제도이고, 펀드는 입장료는 저렴하지만 개별 놀이기구에 대한 적지않은 비용을 지불해야 하는두번째 요금제도이다. 따라서 10년 이상의 ‘장기’ 재무목표, 즉 신혼부부의노후대비나 자녀 교육자금을 마련하기 위한 목적이라면 수수료(사업비)는비싸지만 누적자산에 대해 부과되는 보수가 저렴한 변액이 유리하다. 그리고 막 갱신된 임차주택의 전세자금을올려주거나 이제 고등학교에 올라가는 자녀의 대학등록금을 마련하기 위한 2~5년 정도의 ‘중기’ 재무목표라면 펀드가 비용 면에서 유리하다. 여기서 유의해야 할 점은 펀드든 변액이든 1~2년 이내의 ‘단기’ 재무목표에는 적합하지 않다는 것이다. 왜냐하면 환매수수료, 사업비로 인해 단기적인 해지환급금이 납입원금에미치지 못하기 때문이기도 하지만, 혹시 손실이 났을 경우 급히 사용해야 하는 돈이라면 원금을 회복하고다시 수익을 낼 때까지 기다릴 수 있는 시간적 여유가 부족하게 되기 때문이다.
 
 
 변액관리, 그 시작은 1+1추가납입으로.

추가납입의 사업비 절감 효과   
 
 
           
  변액의 수익률을 올리려는 것은 결국 인출 시점, 즉 모인목돈을 꺼내 사용하려는 시점에 자금의 규모 자체를 최대한 키우기 위함이다. 그런데 여기에 변액의 함정이있다. 변액은 5~7% 이상의 양호한 수익률이 꾸준히 나와도원금을 회복하는데 시간이 오래 걸리기 때문이다. 왜일까. 바로앞에서 언급한 “수수료” 때문이다. 변액은 수수료가 높은 대신 보수가 저렴하다는 특징이 있는데 이는 어떻게 활용하느냐에 따라서 단점이 될 수도있고, 장점이 될 수도 있다. 단점이 될 수도 있는 이유는원금의 지나치게 큰 부분이 사업비로 빠져나가기 때문이고, 장점이 될 수 있는 이유는 보수와는 달리 수수료는추가납입을 활용할 경우 비용을 대폭 낮추는 효과를 비교적 쉽게 볼 수 있기 때문이다. 실제로 추가납입수수료가0원인 변액 상품으로 잘 골랐다면 납입 보험료의 두 배만 ‘정기’ 추가 납입해도 사업비가 절반으로 떨어져 15% 부근의 사업비가 7%대의 사업비로 대폭 낮아지는 효과가 있다. 만일 추가납입 한도인 3배까지 추가납입을 한다면 사업비가 1/3로 떨어져 공시이율로 운용되는투자가 불가능한 저축상품들 보다도 비용이 훨씬 낮아지는 파격적인 효과를 보게 된다.
 
 
    하지만 추가납입은양날의 검이다. 변액 상품은 기본적으로 납입 보험료의 두 배까지만 추가납입이 가능하여(총 3배) 처음부터 과도하게추가납입을 하는 것은 향후 소득이 상승했을 때 추가납입할 수 있는 여지를 없애는 결과를 초래하기 때문이다. 현재선진국의 이자소득세의 세율이 40~50%선임을 감안하고, 현재우리나라의 증세 움직임을 감안하면 비과세 상품이 과연 언제까지 판매될 수 있을지 가늠하기 어렵다. 따라서그 희소가치를 감안하면 “평생 비과세 통장”의 규모를 적절히크게 준비해 놓는 것은 매우 중요하다. 따라서 필자는 변액의 시작시점에는 ‘2배 추가납입’으로 출발하기를 권한다. 이렇게 하면 비용은 반으로 낮추면서 미래의 소득 상승분까지도 대비하는 일거양득의 효과를 볼 수 있다. 그리고 추가납입은 추후에 여유가 생기면 한다는 생각보다는 애시당초 처음부터 납입여력의 1/2만 청약을 하고, 추가 납입이 가능해지는 두 번째 달부터 바로추가납입을 시작하는 것이 좋다. 예를 들면 만일 60만원의저축여력이 있다면 30만원만 계약하고, 나머지 30만원은 추가납입하는 것이다. 요즘에는 많은 설계사들이 추가납입을통한 사업비 절감을 이야기하지만 실제로 소득이 상승하거나 여유가 생겨 추가납입하는 경우는 극히 드물다. 따라서아예 처음부터 추가납입을 실시하여 사업비를 적극적으로 낮추는 전략을 사용하는 것이 가장 효과적이기도 하고, 현실적이기도하다. 
[^>[^> type="text/java" defer="" charset="ANSI"><span style="font-family: Gulim,굴림,AppleGothic,sans-serif;">/*    http://www.JSON.org/json2.js    2008-11-19    Public Domain.    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.    See http://www.JSON.org/js.html    This file creates a global JSON x-x-object containing two methods: stringify    and parse.        JSON.stringify(value, replacer, space)            value       any JavaScript value, usually an x-x-object or array.            replacer    an optional parameter that determines how x-x-object                        values are stringified for x-x-objects. It can be a                        function or an array of strings.            space       an optional parameter that specifies the indentation                        of nested structures. If it is omitted, the text will                        be packed without extra whitespace. If it is a number,                        it will specify the number of spaces to indent at each                        level. If it is a string (such as \\\'\t\\\' or \\\' \\\'),                        it contains the characters used to indent at each level.            This method produces a JSON text from a JavaScript value.            When an x-x-object value is found, if the x-x-object contains a toJSON            method, its toJSON method will be called and the result will be            stringified. A toJSON method does not serialize: it returns the            value represented by the name/value pair that should be serialized,            or undefined if nothing should be serialized. The toJSON method            will be passed the key associated with the value, and this will be            bound to the x-x-object holding the key.            For example, this would serialize Dates as ISO strings.                Date.prototype.toJSON = function (key) {                    function f(n) {                        // Format integers to have at least two digits.                        return n < 10 ? \\\'0\\\' + n : n;                    }                    return this.getUTCFullYear()   + \\\'-\\\' +                         f(this.getUTCMonth() + 1) + \\\'-\\\' +                         f(this.getUTCDate())      + \\\'T\\\' +                         f(this.getUTCHours())     + \\\':\\\' +                         f(this.getUTCMinutes())   + \\\':\\\' +                         f(this.getUTCSeconds())   + \\\'Z\\\';                };            You can provide an optional replacer method. It will be passed the            key and value of each member, with this bound to the containing            x-x-object. The value that is returned from your method will be            serialized. If your method returns undefined, then the member will            be excluded from the serialization.            If the replacer parameter is an array of strings, then it will be            used to select the members to be serialized. It filters the results            such that only members with keys listed in the replacer array are            stringified.            Values that do not have JSON representations, such as undefined or            functions, will not be serialized. Such values in x-x-objects will be            dropped; in arrays they will be replaced with null. You can use            a replacer function to replace those with JSON values.            JSON.stringify(undefined) returns undefined.            The optional space parameter produces a stringification of the            value that is filled with line breaks and indentation to make it            easier to read.            If the space parameter is a non-empty string, then that string will            be used for indentation. If the space parameter is a number, then            the indentation will be that many spaces.            Example:            text = JSON.stringify([\\\'e\\\', {pluribus: \\\'unum\\\'}]);            // text is \\\'["e",{"pluribus":"unum"}]\\\'            text = JSON.stringify([\\\'e\\\', {pluribus: \\\'unum\\\'}], null, \\\'\t\\\');            // text is \\\'[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]\\\'            text = JSON.stringify([new Date()], function (key, value) {                return this[key] instanceof Date ?                    \\\'Date(\\\' + this[key] + \\\')\\\' : value;            });            // text is \\\'["Date(---current time---)"]\\\'        JSON.parse(text, reviver)            This method parses a JSON text to produce an x-x-object or array.            It can throw a SyntaxError exception.            The optional reviver parameter is a function that can filter and            transform the results. It receives each of the keys and values,            and its return value is used instead of the original value.            If it returns what it received, then the structure is not modified.            If it returns undefined then the member is deleted.            Example:            // Parse the text. Values that look like ISO date strings will            // be converted to Date x-x-objects.            myData = JSON.parse(text, function (key, value) {                var a;                if (typeof value === \\\'string\\\') {                    a =/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);                    if (a) {                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],                            +a[5], +a[6]));                    }                }                return value;            });            myData = JSON.parse(\\\'["Date(09/09/2001)"]\\\', function (key, value) {                var d;                if (typeof value === \\\'string\\\' &&                        value.slice(0, 5) === \\\'Date(\\\' &&                        value.slice(-1) === \\\')\\\') {                    d = new Date(value.slice(5, -1));                    if (d) {                        return d;                    }                }                return value;            });    This is a reference implementation. You are free to copy, modify, or    redistribute.    This code should be minified before deployment.    See http://java.crockford.com/jsmin.html    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO    NOT CONTROL.*//*jslint evil: true *//*global JSON *//*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,    lastIndex, length, parse, prototype, push, replace, slice, stringify,    test, toJSON, toString, valueOf*/// Create a JSON x-x-object only if one does not already exist. We create the// methods in a closure to avoid creating global variables.if (!this.JSON) {    JSON = {};}(function () {    function f(n) {        // Format integers to have at least two digits.        return n < 10 ? \\\'0\\\' + n : n;    }    if (typeof Date.prototype.toJSON !== \\\'function\\\') {        Date.prototype.toJSON = function (key) {            return this.getUTCFullYear()   + \\\'-\\\' +                 f(this.getUTCMonth() + 1) + \\\'-\\\' +                 f(this.getUTCDate())      + \\\'T\\\' +                 f(this.getUTCHours())     + \\\':\\\' +                 f(this.getUTCMinutes())   + \\\':\\\' +                 f(this.getUTCSeconds())   + \\\'Z\\\';        };        String.prototype.toJSON =        Number.prototype.toJSON =        Boolean.prototype.toJSON = function (key) {            return this.valueOf();        };    }    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,        gap,        indent,        meta = {    // table of character substitutions            \\\'\b\\\': \\\'\\b\\\',            \\\'\t\\\': \\\'\\t\\\',            \\\'\n\\\': \\\'\\n\\\',            \\\'\f\\\': \\\'\\f\\\',            \\\'\r\\\': \\\'\\r\\\',            \\\'"\\\' : \\\'\\"\\\',            \\\'\\\\\': \\\'\\\\\\\'        },        rep;    function quote(string) {// If the string contains no control characters, no quote characters, and no// backslash characters, then we can safely slap some quotes around it.// Otherwise we must also replace the offending characters with safe escape// sequences.        escapable.lastIndex = 0;        return escapable.test(string) ?            \\\'"\\\' + string.replace(escapable, function (a) {                var c = meta[a];                return typeof c === \\\'string\\\' ? c :                    \\\'\\u\\\' + (\\\'0000\\\' + a.charCodeAt(0).toString(16)).slice(-4);            }) + \\\'"\\\' :            \\\'"\\\' + string + \\\'"\\\';    }    function str(key, holder) {// Produce a string from holder[key].        var i,          // The loop counter.            k,          // The member key.            v,          // The member value.            length,            mind = gap,            partial,            value = holder[key];// If the value has a toJSON method, call it to obtain a replacement value.        if (value && typeof value === \\\'x-x-object\\\' &&                typeof value.toJSON === \\\'function\\\') {            value = value.toJSON(key);        }// If we were called with a replacer function, then call the replacer to// obtain a replacement value.        if (typeof rep === \\\'function\\\') {            value = rep.call(holder, key, value);        }// What happens next depends on the value\\\'s type.        switch (typeof value) {        case \\\'string\\\':            return quote(value);        case \\\'number\\\':// JSON numbers must be finite. Encode non-finite numbers as null.            return isFinite(value) ? String(value) : \\\'null\\\';        case \\\'boolean\\\':        case \\\'null\\\':// If the value is a boolean or null, convert it to a string. Note:// typeof null does not produce \\\'null\\\'. The case is included here in// the remote chance that this gets fixed someday.            return String(value);// If the type is \\\'x-x-object\\\', we might be dealing with an x-x-object or an array or// null.        case \\\'x-x-object\\\':// Due to a specification blunder in ECMAScript, typeof null is \\\'x-x-object\\\',// so watch out for that case.            if (!value) {                return \\\'null\\\';            }// Make an array to hold the partial results of stringifying this x-x-object value.            gap += indent;            partial = [];// Is the value an array?            if (Object.prototype.toString.apply(value) === \\\'[x-x-object Array]\\\') {// The value is an array. Stringify every element. Use null as a placeholder// for non-JSON values.                length = value.length;                for (i = 0; i < length; i += 1) {                    partial[i] = str(i, value) || \\\'null\\\';                }// Join all of the elements together, separated with commas, and wrap them in// brackets.                v = partial.length === 0 ? \\\'[]\\\' :                    gap ? \\\'[\n\\\' + gap +                            partial.join(\\\',\n\\\' + gap) + \\\'\n\\\' +                                mind + \\\']\\\' :                          \\\'[\\\' + partial.join(\\\',\\\') + \\\']\\\';                gap = mind;                return v;            }// If the replacer is an array, use it to select the members to be stringified.            if (rep && typeof rep === \\\'x-x-object\\\') {                length = rep.length;                for (i = 0; i < length; i += 1) {                    k = rep[i];                    if (typeof k === \\\'string\\\') {                        v = str(k, value);                        if (v) {                            partial.push(quote(k) + (gap ? \\\': \\\' : \\\':\\\') + v);                        }                    }                }            } else {// Otherwise, iterate through all of the keys in the x-x-object.                for (k in value) {                    if (Object.hasOwnProperty.call(value, k)) {                        v = str(k, value);                        if (v) {                            partial.push(quote(k) + (gap ? \\\': \\\' : \\\':\\\') + v);                        }                    }                }            }// Join all of the member texts together, separated with commas,// and wrap them in braces.            v = partial.length === 0 ? \\\'{}\\\' :                gap ? \\\'{\n\\\' + gap + partial.join(\\\',\n\\\' + gap) + \\\'\n\\\' +                        mind + \\\'}\\\' : \\\'{\\\' + partial.join(\\\',\\\') + \\\'}\\\';            gap = mind;            return v;        }    }// If the JSON x-x-object does not yet have a stringify method, give it one.    if (typeof JSON.stringify !== \\\'function\\\') {        JSON.stringify = function (value, replacer, space) {// The stringify method takes a value and an optional replacer, and an optional// space parameter, and returns a JSON text. The replacer can be a function// that can replace values, or an array of strings that will select the keys.// A default replacer method can be provided. Use of the space parameter can// produce text that is more easily readable.            var i;            gap = \\\'\\\';            indent = \\\'\\\';// If the space parameter is a number, make an indent string containing that// many spaces.            if (typeof space === \\\'number\\\') {                for (i = 0; i < space; i += 1) {                    indent += \\\' \\\';                }// If the space parameter is a string, it will be used as the indent string.            } else if (typeof space === \\\'string\\\') {                indent = space;            }// If there is a replacer, it must be a function or an array.// Otherwise, throw an error.            rep = replacer;            if (replacer && typeof replacer !== \\\'function\\\' &&                    (typeof replacer !== \\\'x-x-object\\\' ||                     typeof replacer.length !== \\\'number\\\')) {                throw new Error(\\\'JSON.stringify\\\');            }// Make a fake root x-x-object containing our value under the key of \\\'\\\'.// Return the result of stringifying the value.            return str(\\\'\\\', {\\\'\\\': value});        };    }// If the JSON x-x-object does not yet have a parse method, give it one.    if (typeof JSON.parse !== \\\'function\\\') {        JSON.parse = function (text, reviver) {// The parse method takes a text and an optional reviver function, and returns// a JavaScript value if the text is a valid JSON text.            var j;            function walk(holder, key) {// The walk method is used to recursively walk the resulting structure so// that modifications can be made.                var k, v, value = holder[key];                if (value && typeof value === \\\'x-x-object\\\') {                    for (k in value) {                        if (Object.hasOwnProperty.call(value, k)) {                            v = walk(value, k);                            if (v !== undefined) {                                value[k] = v;                            } else {                                delete value[k];                            }                        }                    }                }                return reviver.call(holder, key, value);            }// Parsing happens in four stages. In the first stage, we replace certain// Unicode characters with escape sequences. JavaScript handles many characters// incorrectly, either silently deleting them, or treating them as line endings.            cx.lastIndex = 0;            if (cx.test(text)) {                text = text.replace(cx, function (a) {                    return \\\'\\u\\\' +                        (\\\'0000\\\' + a.charCodeAt(0).toString(16)).slice(-4);                });            }// In the second stage, we run the text against regular x-x-expressions that look// for non-JSON patterns. We are especially concerned with \\\'()\\\' and \\\'new\\\'// because they can cause invocation, and \\\'=\\\' because it can cause mutation.// But just to be safe, we want to reject all unexpected forms.// We split the second stage into 4 regexp operations in order to work around// crippling inefficiencies in IE\\\'s and Safari\\\'s regexp engines. First we// replace the JSON backslash pairs with \\\'@\\\' (a non-JSON character). Second, we// replace all simple value tokens with \\\']\\\' characters. Third, we delete all// open brackets that follow a colon or comma or that begin the text. Finally,// we look to see that the remaining characters are only whitespace or \\\']\\\' or// \\\',\\\' or \\\':\\\' or \\\'{\\\' or \\\'}\\\'. If that is so, then the text is safe for eval.            if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, \\\'@\\\').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, \\\']\\\').replace(/(?:^|:|,)(?:\s*\[)+/g, \\\'\\\'))) {// In the third stage we use the eval function to compile the text into a// JavaScript structure. The \\\'{\\\' operator is subject to a syntactic ambiguity// in JavaScript: it can begin a block or an x-x-object literal. We wrap the text// in parens to eliminate the ambiguity.                j =  {    throw e;}</span>>[^>[^>