
  <!DOCTYPE html>
  <html lang="ko">
    <head>
      <meta charset="utf-8" />
      <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=yes,width=device-width,height=device-height" />
      <meta http-equiv="X-UA-Compatible" content="ie=edge">

      
          <title>알고 나면 든든한 뉴스레터 <THE FLEX></title>
          
          <meta name="description" content="<더 플렉스>는 <매경LUXMEN>이 만드는 뉴스레터입니다.
매주 금요일, 스마트 컨슈머를 위한 소비트렌드와 럭셔리 브랜드 정보 등 
‘상위 1%의 라이프스타일’로 소통할 예정입니다.

<더 플렉스>는 꼭 알고 있어야 할 소비트렌드를 보기 편하고 읽기 쉽게 담아냅니다. 
지금 관심 있는 브랜드, 갖고 싶은 아이템, 궁금한 장소 등 
가고 싶고 갖고 싶은 모든 것의 궁금증(ssalo@mk.co.kr)을 전해주시면 차근차근 취재해 조근조근 답해드립니다.

그럼 곧 웰컴레터로 인사드리겠습니다.

※ 구독 신청이 완료되면 웰컴 메일이 발송됩니다! 스팸함도 (꼭) 살펴봐주세요.

※ 이주의 트렌드가 스팸함에서 잠들지 않도록 <THE FLEX>를 주소록에 추가해 주세요." />
	        <meta name="keywords" content="알고 나면 든든한 뉴스레터 <THE FLEX>, 뉴스레터, newsletter" />
        
          <meta property="og:title" content="알고 나면 든든한 뉴스레터 <THE FLEX>"/>
          <meta property="og:description" content="<더 플렉스>는 <매경LUXMEN>이 만드는 뉴스레터입니다.
매주 금요일, 스마트 컨슈머를 위한 소비트렌드와 럭셔리 브랜드 정보 등 
‘상위 1%의 라이프스타일’로 소통할 예정입니다.

<더 플렉스>는 꼭 알고 있어야 할 소비트렌드를 보기 편하고 읽기 쉽게 담아냅니다. 
지금 관심 있는 브랜드, 갖고 싶은 아이템, 궁금한 장소 등 
가고 싶고 갖고 싶은 모든 것의 궁금증(ssalo@mk.co.kr)을 전해주시면 차근차근 취재해 조근조근 답해드립니다.

그럼 곧 웰컴레터로 인사드리겠습니다.

※ 구독 신청이 완료되면 웰컴 메일이 발송됩니다! 스팸함도 (꼭) 살펴봐주세요.

※ 이주의 트렌드가 스팸함에서 잠들지 않도록 <THE FLEX>를 주소록에 추가해 주세요."/>
          <meta property="og:image" content="https://img.stibee.com/603a8c76-6c24-4bcd-bfc4-c5270489df75.jpg"/>
        
      <meta name="twitter:card" content="summary">
      <link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png">
      <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png">
      <link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png">
      <meta name="msapplication-TileColor" content="#da532c">
      <meta name="theme-color" content="#ffffff">
      <link href="/static/css/763.e785920a.css" rel="stylesheet" />
      <meta name="naver-site-verification" content="72253dacb98f56ac73f44a8cf8b5f12db38bc861" />

      <script type="text/javascript">
        (function (f, b) { if (!b.__SV) { var e, g, i, h; window.mixpanel = b; b._i = []; b.init = function (e, f, c) { function g(a, d) { var b = d.split("."); 2 == b.length && ((a = a[b[0]]), (d = b[1])); a[d] = function () { a.push([d].concat(Array.prototype.slice.call(arguments, 0))); }; } var a = b; "undefined" !== typeof c ? (a = b[c] = []) : (c = "mixpanel"); a.people = a.people || []; a.toString = function (a) { var d = "mixpanel"; "mixpanel" !== c && (d += "." + c); a || (d += " (stub)"); return d; }; a.people.toString = function () { return a.toString(1) + ".people (stub)"; }; i = "disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split(" "); for (h = 0; h < i.length; h++) g(a, i[h]); var j = "set set_once union unset remove delete".split(" "); a.get_group = function () { function b(c) { d[c] = function () { call2_args = arguments; call2 = [c].concat(Array.prototype.slice.call(call2_args, 0)); a.push([e, call2]); }; } for (var d = {}, e = ["get_group"].concat(Array.prototype.slice.call(arguments, 0)), c = 0; c < j.length; c++) b(j[c]); return d; }; b._i.push([e, f, c]); }; b.__SV = 1.2; e = f.createElement("script"); e.type = "text/javascript"; e.async = !0; e.src = "undefined" !== typeof MIXPANEL_CUSTOM_LIB_URL ? MIXPANEL_CUSTOM_LIB_URL : "file:" === f.location.protocol && "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match("^\/\/") ? "https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js" : "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js"; g = f.getElementsByTagName("script")[0]; g.parentNode.insertBefore(e, g); } })(document, window.mixpanel || []);
        var isDevelopment = window.location.hostname.toLowerCase().search('qa-page.stibee.com') >= 0
        if (isDevelopment) {
          mixpanel.init('9e30c13fe764a85c5e64cd7c2b7b9cb0', { debug: true, persistence: 'localStorage' });
        } else {
          mixpanel.init('3fc318e90152de4748e8f6ed5b40a0a6', { debug: false, persistence: 'localStorage' });
        }
      </script>
      <!-- Facebook Pixel Code -->
      <script>
      !function(f,b,e,v,n,t,s)
      {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
      n.callMethod.apply(n,arguments):n.queue.push(arguments)};
      if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
      n.queue=[];t=b.createElement(e);t.async=!0;
      t.src=v;s=b.getElementsByTagName(e)[0];
      s.parentNode.insertBefore(t,s)}(window, document,'script',
      'https://connect.facebook.net/en_US/fbevents.js');
      fbq('init', '937128733822281');
      fbq('track', 'PageView');
      </script>
      <noscript><img height="1" width="1" style="display:none"
      src="https://www.facebook.com/tr?id=937128733822281&ev=PageView&noscript=1"
      /></noscript>
      <!-- End Facebook Pixel Code -->
        
      
    </head>
    <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root">
    
    </div>
    
    <script src="/static/js/runtime-main.72721c04.js"></script>
    <script src="/static/js/763.chunk.js"></script>
    <script src="/static/js/main.93e37582.js"></script>
    </body>
    <script src="https://nsp.pay.naver.com/sdk/js/naverpay.min.js"></script>
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js" ></script>
    <script type="text/javascript" src="https://cdn.iamport.kr/v1/iamport.js"></script>
    <script>
      IMP.init('imp27287957');
    </script>
    <noscript>
      <img src="https://c.paypal.com/v1/r/d/b/ns?f=RISK_SESSION_CORRELATION_ID&s=SOURCE_IDENTIFIER&js=0&r=1" />
    </noscript>
  </html>
  
  
  