
  <!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>🌏 지구용 레터 구독하기 😆</title>
          
          <meta name="description" content="지구가 걱정되지만 뭘 어떻게 해야할지 막막한 당신을 위해! 

지구용 레터가 일상에서 바로, 가볍게 시작할 수 있는
그러나 깊고 확실한 변화를 만들어내는 
🍀지구 사랑의 방식을 전해드립니다. 
매주 화요일, 목요일 아침 8시 메일함에서 만나용 (🙆무료!)

✉️지구용과 협업 원해요!
use4us@sedaily.com로 제안 주세요.(언제든 환영!)

📫단체구독 방법은👇
이메일과 닉네임이 담긴 엑셀파일을 use4us@sedaily.com로 날려주세요

💾지구용 레터 아카이빙 페이지👇
https://page.stibee.com/archives/110917

📰지구용 콘텐츠 맛보기
📌플라스틱, 제가 한 번 먹어보겠습니다
(https://stib.ee/rzZ6)

📌놀라지 마세요 이게 합법입니다
(https://stib.ee/VdV6)

📌맛도 모양도 삶은 계란 그 잡채
(https://stib.ee/X7Q6)" />
	        <meta name="keywords" content="🌏 지구용 레터 구독하기 😆, 뉴스레터, newsletter" />
        
          <meta property="og:title" content="🌏 지구용 레터 구독하기 😆"/>
          <meta property="og:description" content="지구가 걱정되지만 뭘 어떻게 해야할지 막막한 당신을 위해! 

지구용 레터가 일상에서 바로, 가볍게 시작할 수 있는
그러나 깊고 확실한 변화를 만들어내는 
🍀지구 사랑의 방식을 전해드립니다. 
매주 화요일, 목요일 아침 8시 메일함에서 만나용 (🙆무료!)

✉️지구용과 협업 원해요!
use4us@sedaily.com로 제안 주세요.(언제든 환영!)

📫단체구독 방법은👇
이메일과 닉네임이 담긴 엑셀파일을 use4us@sedaily.com로 날려주세요

💾지구용 레터 아카이빙 페이지👇
https://page.stibee.com/archives/110917

📰지구용 콘텐츠 맛보기
📌플라스틱, 제가 한 번 먹어보겠습니다
(https://stib.ee/rzZ6)

📌놀라지 마세요 이게 합법입니다
(https://stib.ee/VdV6)

📌맛도 모양도 삶은 계란 그 잡채
(https://stib.ee/X7Q6)"/>
          <meta property="og:image" content="https://s3.ap-northeast-2.amazonaws.com/img.stibee.com/44554_list_110917_subscriptions_header_image.jpg?v=1618379017"/>
        
      <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/754.aabc2bc7.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>
      <script type="text/javascript">
      (function(e,t){var n=e.amplitude||{_q:[],_iq:{}};var r=t.createElement("script")
      ;r.type="text/javascript"
      ;r.integrity="sha384-tzcaaCH5+KXD4sGaDozev6oElQhsVfbJvdi3//c2YvbY02LrNlbpGdt3Wq4rWonS"
      ;r.crossOrigin="anonymous";r.async=true
      ;r.src="https://cdn.amplitude.com/libs/amplitude-8.5.0-min.gz.js"
      ;r.onload=function(){if(!e.amplitude.runQueuedFunctions){
      console.log("[Amplitude] Error: could not load SDK")}}
      ;var i=t.getElementsByTagName("script")[0];i.parentNode.insertBefore(r,i)
      ;function s(e,t){e.prototype[t]=function(){
      this._q.push([t].concat(Array.prototype.slice.call(arguments,0)));return this}}
      var o=function(){this._q=[];return this}
      ;var a=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove"]
      ;for(var c=0;c<a.length;c++){s(o,a[c])}n.Identify=o;var u=function(){this._q=[]
      ;return this}
      ;var l=["setProductId","setQuantity","setPrice","setRevenueType","setEventProperties"]
      ;for(var p=0;p<l.length;p++){s(u,l[p])}n.Revenue=u
      ;var d=["init","logEvent","logRevenue","setUserId","setUserProperties","setOptOut","setVersionName","setDomain","setDeviceId","enableTracking","setGlobalUserProperties","identify","clearUserProperties","setGroup","logRevenueV2","regenerateDeviceId","groupIdentify","onInit","logEventWithTimestamp","logEventWithGroups","setSessionId","resetSessionId"]
      ;function v(e){function t(t){e[t]=function(){
      e._q.push([t].concat(Array.prototype.slice.call(arguments,0)))}}
      for(var n=0;n<d.length;n++){t(d[n])}}v(n);n.getInstance=function(e){
      e=(!e||e.length===0?"$default_instance":e).toLowerCase()
      ;if(!Object.prototype.hasOwnProperty.call(n._iq,e)){n._iq[e]={_q:[]};v(n._iq[e])
      }return n._iq[e]};e.amplitude=n})(window,document);
    
      amplitude.getInstance().init("68e0f4aeb00264a3d062ebec0a627004", null, {
        saveEvents: true,
        includeUtm: true,
        includeReferrer: true,
        includegclid: true,
      });
    </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.220e5da9.js"></script>
    <script src="/static/js/754.chunk.js"></script>
    <script src="/static/js/main.055228a1.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>
  
  
  