728x90
반응형

퇴사를 앞둔 직장인들이 가장 궁금해 하는 IRP형 계좌!!!

 

인터넷에 방대한 자료들과 내용들은 많지만, 당장 퇴사를 앞두고 있고, IRP에 관해 아무것도 모르는 직장인들은

몇날 몇일 자료만 찾아 헤매게 되는데 속시원히 알고싶은것만 알려주는 블로그 찾기도 힘들고~

주식엔 1도 관심없는데... 주식 관련 내용만 수두룩~~~

 

저 처럼 같은 고민을 하는 분들을 위해 정리해봤습니다. 

증권이 어떻고~ 주식이 어떻고~

 

이런 뻔한 내용 말고!!!

당장 내가 뭘 해야하고 뭘 알아야 하는건지 핵심만 알려달란말야~!!!

 

시작하기전에 먼저 ETF나 주식관련 정보가 필요하신분들은 뒤로가기를 꾹~~ 눌러주세요~ !!

(여러분들의 시간을 아껴드립니다.)

 

 

 

자!

이제 시작하겠습니다~!

 

 

 

 

첫번째 - IRP 계좌 개설하기전에 알아야할 수수료!!

 

퇴사를 앞두게 되면 퇴직금 300만원 이상부터는

퇴직금을 받을때 IRP 계좌를 신규 개설해서 회사에 계좌번호를 알려주셔야 합니다.

(퇴사할때 회사에서 먼저 요청이 올꺼예요~)

 

여기서

 

주식을 한번도 안해봤거나 나는 앞으로도 주식 할 생각이 없다 ~

하시는 분들은 계좌개설부터 망설여지실텐데

IRP 계좌를 만든다고 당장 하늘이 두쪽나고, 퇴직금이 날라갈 일은 없으니

걱정하지 마시고 계좌 개설을 하시면 됩니다~!!

 

IRP 계좌개설할때 처음 염두해두셔야 할 부분은 바로!!

 

퇴직금을 IRP로 받고 난 후에 계좌에 현금으로 방치했을 경우에도

은행 또는 증권사에서 정해놓은 수수료매년  꼬박 꼬박 나가게 됩니다. 

 

 하지만, 가입을 유도하는 증권사 계좌중에선 수수료가 0%로 나가지 않는 곳이 있으니 

미리 비교해보시고 계좌를 개설하시는것을 추천드립니다~!!

 

물론,

 

이미 개설하신 분들은 IRP 계좌를 하나 더 개설해서 자금이전 신청을 하시면 되는데,

주말엔 신규 계좌개설이 안되고~ 평일중에 각 은행마다 정해진 시간안에 IRP 계좌 개설을 해주신 후

자금 이전 신청을 하시면 됩니다.

비대면 계좌개설이 가능하고, 실제로 자금 이전하는 것이 맞는지 상담원 전화 한통이면 바로 이전 가능하니

걱정하지마세요~!!

 

은행은 대부분 수수료가 나가고, 증권사쪽 IRP 계좌 중에 수수료가 무료인 곳들이 많은데요~

 

 

 

'금융투자협회 전자공시서비스'를 인터넷에 검색하거나, 아래 링크된 주소로 들어가셔서

 

https://dis.kofia.or.kr/websquare/index.jsp?w2xPath=/wq/rtrpsn/DISRtrPsnCmsnRate.xml&divisionId=MDIS02009003000000&serviceId=SDIS02009003000

 

 

 

 

위 자료처럼 수수료율(%)이  0인 증권사중에 골라서

IRP 계좌를 처음부터 개설해주시면, 나중에 자금 이전을 번거롭게 다시 하실 필요가 없어집니다.

 

 

두번째 - IRP로 받은 퇴직금 은행예금 처럼 예금으로 굴리세요!

 

퇴사후 IRP 계좌로 받은 퇴직금을 절대로 방치하지 마세요~!!

그 이유는 바로 절세 혜택!!!

 

지금 당장 목돈이 필요한 상황이 아니고,

위험한 투자는 하고 싶지 않고,

퇴직금을 안전하게 노후자금으로 사용하고 싶은 경우라면??

 

제가 딱! 정해드립니다.

 

IRP 해지하지 마세요!!

 

IRP 안에서도 은행 적금, 예금 드는것 처럼 운용이 가능하다는 사실!!

 

아래 예시 이미지 처럼

예금 상품 페이지로 들어가면 다양한 종류의

개인형 IRP 정기예금 목록이 나오니까

금리가 높은 상품으로 골라서 예금으로 굴리시면 됩니다.

 

기존 은행에서 일반 계좌로 적금, 예금 굴리는 금액 보다

세금이 따로 나가지 않아서 훨씬 이득입니다!! 

 

여유 자금이 있으신 분들은 꼭 이렇게 활용해보세요~!!

 

 

세번째 -  IRP 중도해지 할 가능성이 높다면??

 

 IRP는 특별한 경우가 아니면 중도인출이 안되고, 전체 해지만 가능합니다.

이것은 장기적인 자산 증식의 목적을 위한 장치입니다.

 

IRP를 중도해지 하지 않고 연금으로 수령할 경우

퇴직소득세 감면, 운용수익에 대한 세금 절감, 건강보험료 부담 완화 등의 혜택이 제공됩니다.

 

만약, 법이 정한 특별한 사유없이 중도 해지할 경우 상당한 세금 부담이 발생할 수 있습니다.

퇴직소득세, 기타소득세 16.5%를 포함한 그동안 세액공제를 받았던 금액과 운용수익에 대한 세금도 추가로 부과됩니다.

 

각 은행사 또는 증권사별로 IRP 계좌를 각각 1개씩 개설이 가능하니

연말정산시 세금 혜택을 위한 IRP 계좌 1개와

퇴직금을 받기 위한 IRP 계좌 1개

이렇게 계좌 개설을 용도에 맞게 분리해서 관리하시면

필요한 경우 특정 계좌만 해지하여 리스크를 분산시킬 수 있습니다.

 

 

 

중도 해지보다는 중도 인출이 그나마 손해가 적으니

아래 참고 자료처럼 법적으로 정해진 특별한 사유에 해당하는지도 미리 확인해보시면 좋을 것 같네요~!!

아래에 해당하는 경우 연금 소득세(3.3~5.5%) 세금이 부과됩니다.

 

 

 

네번째 - IRP로 받은 퇴직금 연말정산 대상이 아닙니다.

 

퇴직금을 IRP 계좌로 받은 것은 개인 납입금에 해당하지 않으므로

연말정산 세액공제 대상이 되지 않습니다!!

 

IRP계좌를 만드는 가장 큰 이유중에 하나가 바로

연말정산 세액공제 혜택인데요~

 

퇴직연금, 퇴직금 IRP 등등 용어가 다 비스무리하고~

퇴사후 퇴직금을 말하는건지... 모호한 설명때문에 많은 분들이 헷깔릴 수 있는 부분입니다.

 

저역시도 계속 이곳저곳 찾아보지 않았다면;;;

연말정산할때까지 몰랐을지도;;

 

퇴직금으로 연말정산 혜택을 받고 싶다면, IRP를 해지후 다시 IRP 계좌에 가입해야하는데...

 

 

아래 표와 같이 각 금액별로 퇴직소득세가 발생하니, 세율이 높은경우에는

해지 하지말고, 그 안에서 예금상품으로 운용하는게 훨씬 이득이겠죠~!!

 

퇴직금에 대한 정확한 퇴직소득세를 알아보고 싶으시면,

해당 은행점을 찾아가서 물어보시거나 스마트폰 앱에서 해지시뮬레이션 항목을 클릭하면

현재 퇴직금 기준으로 IRP 계좌를 해지했을 경우 어느정도의 세금이 나가는지 확인하실 수 있습니다.

 

 

 

 

퇴직 금액별로 세금이 다르게 적용되고 있으니 이 부분 꼭 확인하시고,

해지할지 세금을 포함한 모든 금액을 예금으로 불릴지 결정하시면 좋을 것 같네요~

 

 

 

그래서 많은 분들이 IRP 계좌를 2개 이상 개설하라고 말하는겁니다~!!

 

연말정산 세액공제를 위한 개인 납입형 IRP 계좌 1개

퇴사했을때 받은 퇴직금을 관리하는 IRP 계좌 1개 

이렇게 따로 관리해야 손실을 줄일 수 있습니다.

 

 

 

다섯번째 - 연말정산시 최대 148만원을 돌려받을 수 있다!

 

 

아래 표 처럼 연금저축과  IRP 두개를 개설, 납입해서 저축과 함께 환급금을 각각 받을 수도 있고,

IRP계좌에만 900만원을 넣어서 연말정산 세액 공제를 받을 수도 있는데요~

 

연금저축이 중도 인출에 제한이 없기 때문에 두개를 동시에 개설해서 운영하시는분들도 많더라구요~

 

이때는 연금저축 600만원, IRP계좌 300만원 (총 900만원까지만 세액 공제됨) 이렇게 넣으시는게 좋습니다.

 

 

 

 

728x90
반응형
728x90
반응형

 

 

집에 오븐, 에어프라이어가 있으시면 꼭!!! 만들어 보세요~

북경오리 식당에서 사먹는 요리 못지않게 맛있습니다~!!

 

집에서 요리했을때의 장점은 베이징덕이 가격대비 양이 항상 적다고 느껴졌었는데,

이렇게 직접 요리하면 성인 4명이 배부르게 먹을 수 있는 양으로 충분히 즐길 수 있다는점!!!

 

베이징덕을 싸먹는 얇은 밀전병도 구매 가능하니까

베이징덕, 밀전병 함께 구매해서 손쉽게 집에서도 즐겨보세요~!!

 

춘장 소스는 이곳 저곳 레시피들을 모아서 비교해보고 테스트해본 결과

가장 맛있는 비율로 만들어 봤으니

참고해서 만들어 보세요~!!

너무 달지도 그렇다고 너무 짜지도 않은 계속 찍어 먹고 싶은 소스!!!

베이징덕 식당에서도 없는 맛!!!

 

직접 집에서 만들어 보세요~♥

 

 

 

쿠팡에서 새벽 배송으로 주문한 1.5kg 베이징덕입니다.

 

 

요즘은 배달 시스템이 잘 되어 있어서 복잡한 요리 과정이 필요한 재료들도 이렇게 

집에서도 쉽게 요리할 수 있게 패킹된것을 구매할 수 있습니다.

 

비닐을 벗겼을때 모습

 

비닐 장갑을 끼고 식용유를 골고루 발라줍니다. (겉 껍질이 바삭해지도록)

 

 

190도에서 앞, 뒷면을 각각 15분씩 요리해줍니다.

 

 

 

 

앞, 뒷면으로 15분씩 총 약 30분 정도 에어프라이어에 익혀주면 완성!!

 

 

여기서 팁!!! 베이징덕의 생명은 바삭하고 고소한 껍질~!!!

저는 베이징덕의 바삭한 껍질을 원하기 때문에

대략 5분 정도 껍질만 겉이 윗쪽을 향하게 해서 한번 더 돌려줍니다~!! 

 

 

과자처럼 바삭해진 껍질

 

 

완성된 베이징덕을 정갈하게 카빙해서 그릇에 담은 모습

 

 

베이징덕과 함께 싸 먹는 야채는 보통 식당에선 채썬 파, 오이 등을 주지만, 

집에 있는 다양한 채소들을 이렇게 준비해서 기호에 맞게 같이 싸서 먹어도 좋습니다~!! 

 

춘장 소스 만드는법

 

* 재료: 물, 춘장, 설탕, 매실액, 참기름, 다진마늘, 올리브유(선택)

보통 춘장 소스는 위 재료로 섞어서 만드는 경우가 많은데, 

 

 

1. 설탕이 잘 녹게 하기 위해서 후라이팬에 약한불로 물 적당량과 춘장을 넣어서 풀어주다가

    설탕(2큰술) 정도 넣고 녹여줍니다.

   

2. 소스가 식은 후에 매실액(2큰술), 참기름(1큰술), 다진마늘(약간), 올리브유(1큰술)(있으면 넣고 없으면 안넣어도 됨)를 넣어서 섞으면 소스 완성!!!

 

 

 

저는 맛 비교를 위해 마늘, 참기름을 넣은 소스 (왼쪽) / 넣지 않은 소스 (오른쪽)

두종류로 만들어봤는데요. 마늘의 풍미와 감칠맛이 느껴지는 왼쪽 소스가 더 맛있어서

결국 두 소스를 섞어서 먹었네요~

 

저처럼 마늘의 풍미를 느끼고 싶은 분들은 왼쪽 소스를~

매운걸 못드시는분들은 오른쪽 소스를 선택해서 만들어보시면 좋을 것 같네요~!!

728x90
반응형
728x90
반응형

에픽 게임즈가 언리얼 마켓플레이스 서비스를 대신할 팹(Fab)이라는 새로운 마켓 사이트를 공개했습니다.

 

2024년 10월 중순, 디지털 에셋 통합 플랫폼인 Fab을 공식적으로 출시하며,

기존의 언리얼 엔진 마켓플레이스와 퀵셀 Bridge를 통한 메가스캔 서비스를 종료하게됩니다.

 

메가스캔 에셋들은 2024년 말까지 무료로 제공되지만, 2025년부터는 대부분 유료화가 됩니다.

 

 

유저들은 올해 말까지 무료로 에셋을 다운로드할 수 있으며, 다운로드한 에셋영구적으로 사용할 수 있습니다.

 

참고로 에셋이 18000개가 넘어가는데, 자동으로 전부 구매하는 스크립트가 있으니 유료화가 되기전에 미리

구매해 놓으면 좋을 것 같습니다.

 

 

■ 메가스캔 에셋 자동으로 전부 구매하기

 

메가스캔  자동 구매하는 방법

 

1) https://quixel.com/ 에서 로그인 합니다.

 

 

2) https://quixel.com/megascans/collections 으로 이동합니다.

 

 

3) F12를 눌러 개발자 도구를 켭니다.

 

 

4) allow pasting직접 입력해준뒤 엔터를 눌러줍니다. (복사, 붙여넣기를 가능하게 해주는 명령어)

 

엔터를 치면, 다음과 같은 오류 메세지가 뜨면서 붙여넣기가 바로 안되는 현상이 있는데,

무시하고 allow pasting 을 다시 한번 입력해준 후 엔터를 눌러주세요!

 

5) 아래 스크립트를 모두 복사한뒤 엔터를 눌러줍니다.

(async (startPage = 0, autoClearConsole = true) => {
  const getCookie = (name) => {
    const value = `; ${document.cookie}`;
    const parts = value.split(`; ${name}=`);
    if (parts.length === 2) return parts.pop().split(';').shift();
  };

  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

  const fetchWithTimeout = (resource, options = {}) => {
    const { timeout = 10000 } = options;
    return Promise.race([
      fetch(resource, options),
      new Promise((_, reject) =>
        setTimeout(() => reject(new Error('Request timeout')), timeout)
      ),
    ]);
  };

  const callCacheApi = async (params = {}) => {
    const defaultParams = {
      page: 0,
      maxValuesPerFacet: 1000,
      hitsPerPage: 1000,
      attributesToRetrieve: ["id", "name"].join(","),
    };
    const fetchData = async () => {
      const response = await fetchWithTimeout("https://proxy-algolia-prod.quixel.com/algolia/cache", {
        headers: {
          "x-api-key": "2Zg8!d2WAHIUW?pCO28cVjfOt9seOWPx@2j",
        },
        body: JSON.stringify({
          url: "https://6UJ1I5A072-2.algolianet.com/1/indexes/assets/query?x-algolia-application-id=6UJ1I5A072&x-algolia-api-key=e93907f4f65fb1d9f813957bdc344892",
          params: new URLSearchParams({ ...defaultParams, ...params }).toString(),
        }),
        method: "POST",
      });

      if (!response.ok) {
        throw new Error(`Error fetching from Cache API: ${response.statusText}`);
      }

      return await response.json();
    };

    return await retryOperation(fetchData, 2000, 5);
  };

  const callAcl = async ({ id, name }) => {
    const fetchData = async () => {
      const response = await fetchWithTimeout("https://quixel.com/v1/acl", {
        headers: {
          authorization: "Bearer " + authToken,
          "content-type": "application/json;charset=UTF-8",
        },
        body: JSON.stringify({ assetID: id }),
        method: "POST",
      });

      if (!response.ok) {
        throw new Error(`Error adding item ${id} | ${name}: ${response.statusText}`);
      }

      const json = await response.json();
      if (json?.isError) {
        console.error(`  --> **Failed to add item** Item ${id} | ${name} (${json?.msg})`);
      } else {
        console.log(`  --> Added item ${id} | ${name}`);
      }
    };

    return await retryOperation(fetchData, 2000, 5);
  };

  const callAcquired = async () => {
    const fetchData = async () => {
      const response = await fetchWithTimeout("https://quixel.com/v1/assets/acquired", {
        headers: {
          authorization: "Bearer " + authToken,
          "content-type": "application/json;charset=UTF-8",
        },
        method: "GET",
      });

      if (!response.ok) {
        throw new Error(`Error fetching acquired items: ${response.statusText}`);
      }

      return await response.json();
    };

    return await retryOperation(fetchData, 2000, 5);
  };

  const retryOperation = async (operation, delay, retries) => {
    let lastError;
    for (let attempt = 1; attempt <= retries; attempt++) {
      try {
        return await operation();
      } catch (error) {
        lastError = error;
        console.warn(`Attempt ${attempt} failed (${error.message}). Retrying in ${delay}ms...`);
        await sleep(delay);
        delay *= 2; // Exponential backoff
      }
    }
    throw lastError;
  };

  let authToken = "";

  const initialize = async () => {
    console.log("-> Checking Auth API Token...");
    try {
      const authCookie = getCookie("auth") ?? "{}";
      authToken = JSON.parse(decodeURIComponent(authCookie))?.token;
      if (!authToken) {
        throw new Error("-> Error: Authentication token not found. Please log in again.");
      }
    } catch (_) {
      throw new Error("-> Error: Authentication token not found. Please log in again.");
    }

    console.log("-> Fetching acquired items...");
    acquiredItems = (await callAcquired()).map((a) => a.assetID);

    console.log("-> Fetching total number of pages...");
    const initialData = await callCacheApi();
    totalPages = initialData.nbPages;
    itemsPerPage = initialData.hitsPerPage;
    totalItems = initialData.nbHits;

    console.log("-> ==============================================");
    console.log(`-> Total items: ${totalItems}`);
    console.log(`-> ${totalPages} total pages with ${itemsPerPage} items per page`);
    console.log(`-> Total items to add: ${totalItems - acquiredItems.length}.`);
    console.log("-> ==============================================");

    if (!confirm(`Click OK to add ${totalItems - acquiredItems.length} items to your account.`)) {
      throw new Error("-> Process cancelled by user.");
    }
  };

  let acquiredItems = [];
  let totalPages = 0;
  let itemsPerPage = 0;
  let totalItems = 0;

  const MAX_CONCURRENT_REQUESTS = 5;

  const mainProcess = async () => {
    for (let pageIdx = startPage || 0; pageIdx < totalPages; pageIdx++) {
      console.log(`-> ======================= PAGE ${pageIdx + 1}/${totalPages} START =======================`);

      console.log("-> Fetching items from page " + (pageIdx + 1) + " ...");

      const pageData = await callCacheApi({ page: pageIdx });
      const items = pageData.hits;

      console.log("-> Adding unacquired items...");

      // Filter out already acquired items
      const unownedItems = items.filter((i) => !acquiredItems.includes(i.id));

      // Save current progress in localStorage
      localStorage.setItem('currentPage', pageIdx);

      // Limit concurrent requests
      const queue = [...unownedItems];
      const workers = Array.from({ length: MAX_CONCURRENT_REQUESTS }, async () => {
        while (queue.length > 0) {
          const item = queue.shift();
          try {
            await callAcl(item);
          } catch (error) {
            console.error(`Error with item ${item.id}: ${error.message}`);
          }
        }
      });

      await Promise.all(workers);

      console.log(`-> ======================= PAGE ${pageIdx + 1}/${totalPages} COMPLETED =======================`);
      if (autoClearConsole) console.clear();
    }
  };

  const finalize = async () => {
    console.log("-> Fetching new acquisition info...");
    const newAcquiredItems = await callAcquired();
    const newItemsAcquired = newAcquiredItems.length;
    const newTotalCount = (await callCacheApi()).nbHits;

    console.log(`-> Completed. Your account now has a total of ${newItemsAcquired} out of ${newTotalCount} items.`);

    alert(`-> Your account now has a total of ${newItemsAcquired} out of ${newTotalCount} items.\n\nIf you find some items missing, try refreshing the page and run the script again.`);
  };

  try {
    // Check if progress was saved
    const savedPage = localStorage.getItem('currentPage');
    if (savedPage !== null) {
      startPage = parseInt(savedPage, 10);
      console.log(`-> Resuming from page ${startPage + 1}`);
    }

    await initialize();
    await mainProcess();
    await finalize();

    // Clear progress
    localStorage.removeItem('currentPage');
  } catch (error) {
    console.error(error.message);
    console.log("-> The script could not be completed.");
  }
})();

 

6) 위에 복사했던 스크립트를 붙여넣기 한 뒤, 엔터를 누릅니다.

 

7) 그러면 내 계정에 약 18000개 가량의 에셋 라이센스를 추가하겠다는 알림 창이 뜨는데,

    확인을 눌러주면 됩니다.

 

8) 에셋 자동구매가 시작되고, Console 탭에서 진행상황을 확인할 수 있습니다.

    추가되는 에셋들 목록이 계속 올라옵니다.

 

 

9) 간혹 화면에 구매되고있는 에셋 목록이 표시 되지 않는 경우도 있는데, 이럴 경우엔 당황하지말고 아래 버튼을 열어서 숫자가 증가하는지만 확인해주면 됩니다. 에셋을 모두 구매하기까지 대략 빠르면 30분~ 1시간 내로 완료됨.

 

 

 

10) 다음과 같은 알림창이 뜨면서 완료 되었다고 나옵니다.

     (총 에셋은 18874갠데, 전체 에셋 보다 더 많게 뜨는 경우도 있다고함)

       

 

 

 

메가스캔 일괄 구매 완료!

 

전부 완료하면 Bridge에서 Purchased의 숫자가 늘어나 있는 걸 확인할 수 있습니다.

 

 

 

출처:

https://x.com/TJATOMICA/status/1836213808299467191

https://gist.github.com/jamiephan/0c04986c7f2e62d5c87c4e8c8ce115fc#file-run-js

728x90
반응형
728x90
반응형

728x90
반응형
728x90
반응형

https://extensions.blender.org

 

 

 

기본 에드온뿐만 아니라 다양한 종류의 편리한 기능들을 이곳에서 바로 3D 블렌더로 드래그해서 설치 가능합니다.

 

참~ 쉽죠? ^---^

728x90
반응형
728x90
반응형

728x90
반응형

+ Recent posts