Sponsored By
















1. 위험 회피: 이 접근 방식은 상당한 손실이나 부정적인 결과를 초래할 수 있는 상황이나 투자를 피하는 것을 포함합니다. 위험 회피자는 수익을 추구하는 것보다 자본을 보존하고 잠재적 손실을 최소화하는 것을 우선시하는 경향이 있습니다.
예) 회사는 높은 불확실성과 잠재적 위험으로 인해 새로운 시장이나 프로젝트에 투자하는 것을 피하고 대신 위험 프로필이 낮은 기존 시장에 집중할 수 있습니다.

2. 위험 완화: 이 전략은 잠재적 위험의 가능성이나 영향을 줄이기 위한 조치를 취하는 것을 포함합니다. 위험 완화는 다각화, 헤지, 보험 또는 불확실성 관리에 도움이 되는 기타 조치를 통해 달성할 수 있습니다.
예) 농부는 기상 조건으로 인한 농작물 실패 위험을 완화하고 수확량에 관계없이 최소한의 소득을 보장하기 위해 농작물 보험에 가입할 수 있습니다.

3. 위험 내성(전가): 이 접근 방식은 비즈니스 또는 투자의 일환으로 특정 위험을 인정하고 받아들이는 것을 포함합니다. 위험 내성이 있는 개인이나 조직은 더 높은 수익률이나 성장 기회를 추구하기 위해 계산된 위험을 감수할 의향이 있습니다.
예) 스타트업은 실패의 위험에도 불구하고 경쟁 우위를 확보하고 성공할 경우 높은 보상을 받을 수 있도록 새로운 제품이나 서비스에 상당한 시간, 돈, 자원을 기꺼이 투자할 수 있습니다.

4. 위험 관리: 이 전략은 위험을 식별, 평가 및 우선순위를 정한 다음, 이러한 위험을 효과적으로 관리하기 위한 계획을 개발하고 실행하는 것을 포함합니다. 위험 관리에는 사전적(예측적) 접근 방식과 사후적(반응적) 접근 방식이 모두 포함될 수 있습니다.
예) 금융 기관은 잠재적인 사이버 위협을 중대한 위험으로 식별하고 이러한 공격을 감지하고 대응하기 위해 다양한 통제 및 절차를 구현하여 성공적인 침해의 영향을 최소화할 수 있습니다.

이 네 가지 위험 전략은 상호 배타적이지 않으며, 많은 조직이나 개인이 목표, 자원, 상황에 따라 다양한 접근 방식을 채택할 수 있습니다.

 

 

== 아래는 원문 ==

Question? (or 'quit' to stop): Let me know 4 types of risk strategy.

The Answer

: Here are four common types of risk strategies:

 

1. Risk Avoidance: This approach involves avoiding situations or investments that have the potential to result in significant losses or negative outcomes. Risk avoiders tend to prioritize preserving capital and minimizing potential losses over seeking returns.

Example: A company may choose to avoid investing in a new market or project due to high uncertainty and potential risks, instead focusing on established markets with lower risk profiles.

 

2. Risk Mitigation: This strategy involves taking steps to reduce the likelihood or impact of potential risks. Risk mitigation can be achieved through diversification, hedging, insurance, or other measures that help manage uncertainty.

Example: A farmer may purchase crop insurance to mitigate the risk of crop failure due to weather conditions, ensuring a minimum level of income regardless of harvest yields.

 

3. Risk Tolerance: This approach involves acknowledging and accepting certain risks as part of doing business or investing. Risk tolerant individuals or organizations are willing to take calculated risks in pursuit of higher returns or growth opportunities.

Example: A startup may be willing to invest significant time, money, and resources into a new product or service, despite the risk of failure, in order to gain a competitive advantage and potentially reap high rewards if successful.

 

4. Risk Management: This strategy involves identifying, assessing, and prioritizing risks, then developing and implementing plans to manage those risks effectively. Risk management can involve both proactive (predictive) and reactive (responsive) approaches.

Example: A financial institution may identify potential cyber threats as a significant risk and implement various controls and procedures to detect and respond to such attacks, minimizing the impact of any successful breaches.

These four risk strategies are not mutually exclusive, and many organizations or individuals may adopt a combination of approaches depending on their goals, resources, and circumstances.

 



ㅁ 원문) 
If you write internal audit report as an internal auditor, How could you write it down and fill in the contents and context?

 

ㅁ 결과)

Llama3 GPT4o
내부 감사인으로서 철저하고 효과적인 내부 감사 보고서를 작성하려면 체계적인 접근 방식이 필요합니다. 내부 감사 보고서를 작성하는 방법에 대한 일반적인 개요는 다음과 같습니다:

I. 소개
 - 감사 목표 및 범위에 대한 간략한 개요
 - 감사 대상 법인 또는 프로세스에 대한 배경 정보
 - 감사 팀원 및 역할

II. 감사 목표 및 범위
 - 감사의 구체적인 목표를 명확하게 명시합니다
 - 다음을 포함한 감사 범위를 설명합니다:
 - 감사 대상 기업, 프로세스 또는 활동
 - 감사 대상 기간
 - 범위에서 제한 또는 제외 사항

III. 위험 평가
 - 감사 대상 법인 또는 프로세스와 관련된 위험 식별
 - 이러한 위험의 가능성과 잠재적 영향 평가
 - 감사 과정에서 확인된 위험이 어떻게 평가되었는지 개요를 제공합니다

IV. 감사 절차 및 증거
 - 다음을 포함하여 수행되는 감사 절차를 설명합니다:
 - 트랜잭션, 잔액 또는 흐름 테스트
 - 관찰 및 인터뷰
 - 문서 및 데이터 분석
 - 감사 중에 발생한 중요한 결과 또는 문제를 강조 표시합니다
 - 감사 결과를 뒷받침하기 위해 수집된 증거에 대한 개요 제공

V. 결과 및 권장 사항
 - 감사 결과를 명확하고 간결하게 제시합니다
 - 다음을 포함한 각 결과를 문서화합니다:
 - 식별된 특정 문제 또는 문제
 - 문제의 근본 원인(해당되는 경우)
 - 해결되지 않을 경우 조직에 미칠 수 있는 잠재적 영향
 - 이 문제를 해결하기 위한 권장 조치
 - 결과의 중요성과 잠재적 영향에 따라 결과의 우선순위를 결정합니다

VI. 결론
 - 감사의 전반적인 결과와 주요 결과 요약
 - 감사 중에 발생한 중요한 관찰 사항이나 우려 사항 강조
 - 확인된 문제를 해결하기 위해 권장되는 조치에 대한 개요 제공

VII. 권장 사항 및 구현 계획
 - 다음을 포함한 각 권장 사항을 문서화합니다:
 - 문제 해결에 필요한 구체적인 조치
 - 작업이 구현되는 방식에 대한 설명
 - 목표 완료 날짜 또는 마일스톤
 - 구현을 위한 책임 있는 직원 또는 부서
 - 권장 조치를 구현하기 위한 계획 개요 제공

VIII. 부록
 - 다음과 같은 지원 문서를 포함합니다:
 - 감사 범위 및 목표
 - 감사 절차 및 증거
 - 감사 중에 사용된 추가 정보 또는 데이터
 - 관련 법률, 규정 또는 표준에 대한 참조

다음은 컨텍스트가 포함된 샘플 내부 감사 보고서 개요입니다:
**감사 보고서: 재무 보고 프로세스 소개**
이 감사의 목적은 조직의 재무 보고 프로세스의 효과를 평가하는 것이었습니다. 이 보고서는 감사 결과와 권고 사항을 요약합니다.
효과적인 내부 감사 보고서를 작성하려면 명확한 구조, 정확한 결과, 실행 가능한 권고 사항이 포함됩니다. 보고서 작성 가이드는 다음과 같습니다:

I. 커버 페이지
 - Title: 감사 항목에 "내부 감사 보고서"를 포함합니다(예: "조달 프로세스에 관한 내부 감사 보고서").
 - 보고 날짜: 보고서가 발행되는 시점.
 - 준비자: 감사인의 이름과 직함.
 - 배포 목록: 의도한 수신자의 이름으로, 승인된 사람만 보고서를 볼 수 있도록 합니다.

II. 실행 요약
 - 감사의 목표: 목적(예: "조달 프로세스의 효과와 규정 준수를 평가하기 위한 것")을 명시합니다.
 - Scope: 검토된 영역, 기간 또는 기능을 정의합니다(예: "2023년 1월 - 2023년 6월, 조달 부서 활동").
 - 주요 결과: 확인된 주요 문제를 요약하면 이상적으로 글머리 기호 또는 간략한 단락으로 요약할 수 있습니다.
 - 결론: 감사 결과에 대한 요약을 제공합니다(예: "전반적으로 조달에 대한 통제는 효과적이지만 공급업체 선정 및 승인 프로세스에서 개선될 수 있습니다.").

III. 배경
 - 감사 맥락: 이 감사가 수행된 이유를 간략하게 설명합니다(예: "조달 지출 증가로 인해").
 - 프로세스 및 시스템 감사: 검토 대상 개요(예: "벤더 선택, 계약 관리 및 결제 처리").
 - 감사 기준: 감사의 기준으로 사용되는 표준 또는 정책(예: "회사 조달 정책, 관련 법률 및 모범 사례")을 명시합니다.

IV. 감사 목표 및 범위
 - 목표: 감사가 달성하고자 하는 목표의 세부 목록(예: "공급업체 승인 및 결제 정확도에 대한 제어의 효과 평가").
 - Scope: 조사 대상 부서, 문서 및 데이터를 지정합니다.

V. 감사 방법론
 - 인터뷰, 데이터 분석, 대조군 테스트 또는 샘플 기반 검토와 같이 사용되는 방법을 설명합니다.

VI. 자세한 결과 및 권장 사항
각 주요 소견에 대해:
 - 제목 찾기: 짧고 설명적인 이름(예: "공급업체 실사 부족").
 - 설명 찾기: 문제의 원인, 결과 및 위반된 기준을 포함하여 명확하게 설명합니다.
 - 증거: 이 결과를 초래한 데이터, 샘플 또는 문서를 간략하게 요약합니다.
 - 위험/영향: 재무 손실 또는 규정 준수 위험과 같은 위험 또는 영향을 설명합니다.
 - 권장: 문제를 해결하기 위한 실행 가능한 단계를 제공합니다(예: "표준화된 공급업체 실사 체크리스트 구현").
 - 경영진 답변 (해당되는 경우): 경영진의 합의 또는 동의하지 않는 사항과 계획된 조치를 포함합니다.

VII. 결론
 - 감사의 전반적인 평가와 통제의 효과를 요약합니다.
 - 권장 사항 구현의 우선 순위 수준(예: 높음, 중간, 낮음)을 언급합니다.

VIII. 부속서
 - **용어 사전**: 전문 용어 또는 약어.
   






### 1. context 확인

kubectl config get-contexts




> Output : 






### 2. **context 변경**

kubectl config use-context [context_nm]




> Output : 







### 3. context 변경확인

kubectl config current-context





### 4. POD 확인

kubectl get pod -n [namespace] // 기본형
kubectl get pod -o wide -n [namespace] // 확장형(상세)




> Output for 확장형(상세): 







### 5. POD 로그확인

kubectl logs -f [pod_nm] -n [namespace]




> Output : 







### 6. POD 접속(sh)

kubectl exec -n [namespace] -it [pod_nm] -- sh




> Output : 







#### ※ 리스트명령어(ls -al)를 통해 접속됨을 확인 할 수 있다





※ 본 포스팅은 lourcode 님의 글을 참고하였습니다.(원본링크 : [https://lourcode.kr/posts/Jekyll-기반-Github-Pages와-Notion-Page-연동/](https://lourcode.kr/posts/Jekyll-%EA%B8%B0%EB%B0%98-Github-Pages%EC%99%80-Notion-Page-%EC%97%B0%EB%8F%99/))



### 1. API 키 설정


   1-1. 아래 주소 클릭
https://www.notion.so/my-integrations


   1-2. 새 API 통합 클릭






   1-3. 연결된 워크스페이스를 확인하고 이름을 만들어주고 '제출' 버튼 클릭






   1-4. 시크릿키가 생성되면 표시 → 복사 를 순서대로 클릭하여 키값을 복사한다.






※ 시크릿키값은 secret_* 의 형태로 되어있다.


 



## 2. 노션에서 사용/연동 할 데이터베이스 생성


   2-1. 아래와 같이 샘플용으로 만들어본다.(공유링크 : https://asteriskos.notion.site/Blog-DB-85109cf911b74a62a5041f6047d5792d?pvs=4)




   2-2. 테이블에 마우스를 가져가 되면 옆에 더보기(::)가 표시되는데 클릭한다.






   2-3. 링크복사를 누른다
https://www.notion.so/asteriskos/de2dcf74aff44030954dbd4d991c559b?v=1f7e542c866341c1a8d68c9c328c3faf&pvs=4


굵게 표시한 부분이 데이터베이스의 ID 이다. 기억해둔다.



## 3. 데이터베이스 페이지에 API연동


   3-1. 데이터베이스 생성한 페이지 우측상단에  더보기(…) 를 클릭하여 API를 연동한다.






   3-2. 연결할거냐는 팝업이뜨는데, '확인' 버튼을 눌러 연결됨을 확인하자.

 









## 4. 깃허브 파일 설정


   4-1. Settings → Secrets and variables → Actions 를 눌러 키를 생성해야한다.
       4-1-1. '1-4' 에서 확보한 노션토큰을 'NOTION_TOKEN'으로 저장한다.
       4-1-2. '2-3' 에서 확보한 DB ID를 'DATABASE_ID' 로 저장한다.       
       4-1-2. '깃허브 personalKey'를 'GH_TOKEN' 으로 저장한다. 




   4-2. root 폴더에 ‘_scripts’ 폴더를 생성하고, 생성한 폴더 안에 ‘**notion-import.js**’ 파일을 만들고 아래 내용을 입력한다.

const { Client } = require("@notionhq/client");
const { NotionToMarkdown } = require("notion-to-md");
const moment = require("moment");
const path = require("path");
const fs = require("fs");
const axios = require("axios");

const notion = new Client({
  auth: process.env.NOTION_TOKEN,
});

function escapeCodeBlock(body) {
  const regex = /```([\s\S]*?)```/g
  return body.replace(regex, function (match, htmlBlock) {
    return "{% raw %}\n```\n" + htmlBlock + "\n```\n{% endraw %}";
  })
}

function replaceTitleOutsideRawBlocks(body) {
  const rawBlocks = [];
  const placeholder = "%%RAW_BLOCK%%";
  body = body.replace(/{% raw %}[\s\S]*?{% endraw %}/g, (match) => {
    rawBlocks.push(match);
    return placeholder;
  });

  const regex = /\n#[^\n]+\n/g;
  body = body.replace(regex, function (match) {
    return "\n" + match.replace("\n#", "\n##");
  });

  rawBlocks.forEach(block => {
    body = body.replace(placeholder, block);
  });

  return body;
}

// passing notion client to the option
const n2m = new NotionToMarkdown({ notionClient: notion });

(async () => {
  // ensure directory exists
  const root = "_posts";
  fs.mkdirSync(root, { recursive: true });

  const databaseId = process.env.DATABASE_ID;
  let response = await notion.databases.query({
    database_id: databaseId,
    filter: {
      property: "배포",
      checkbox: {
        equals: true,
      },
    },
  });

  const pages = response.results;
  while (response.has_more) {
    const nextCursor = response.next_cursor;
    response = await notion.databases.query({
      database_id: databaseId,
      start_cursor: nextCursor,
      filter: {
        property: "배포",
        checkbox: {
          equals: true,
        },
      },
    });
    pages.push(...response.results);
  }

  for (const r of pages) {
    const id = r.id;
    // date
    let date = moment(r.created_time).format("YYYY-MM-DD");
    let pdate = r.properties?.["날짜"]?.["date"]?.["start"];
    if (pdate) {
      date = moment(pdate).format("YYYY-MM-DD");
    }
    // title
    let title = id;
    let ptitle = r.properties?.["게시물"]?.["title"];
    if (ptitle?.length > 0) {
      title = ptitle[0]?.["plain_text"];
    }
    // tags
    let tags = [];
    let ptags = r.properties?.["태그"]?.["multi_select"];
    for (const t of ptags) {
      const n = t?.["name"];
      if (n) {
        tags.push(n);
      }
    }
    // categories
    let cats = [];
    let pcats = r.properties?.["카테고리"]?.["multi_select"];
    for (const t of pcats) {
      const n = t?.["name"];
      if (n) {
        cats.push(n);
      }
    } 
    // frontmatter
    let fmtags = "";
    let fmcats = "";
    let fmassrtmnt = "";
    if (tags.length > 0) {
      fmtags += "[";
      for (const t of tags) {
        fmtags += t + ", ";
      }
      fmtags += "]";
    }

    if (assrtmnt.length > 0) {
      fmassrtmnt += "[";
      for (const t of assrtmnt) {
        fmassrtmnt += t ;
      }
      fmassrtmnt += "]";
    }
    const fm = `---
title: "${title}"
excerpt: ""
header: ""

categories:
    - ${fmcats}
tags:
    - ${fmtags}
last_modified_at: ${date}
---
<br><br>
`;
    const mdblocks = await n2m.pageToMarkdown(id);
    let body = n2m.toMarkdownString(mdblocks)["parent"];
    if (body === "") {
      continue;
    }
    body = escapeCodeBlock(body);
    body = replaceTitleOutsideRawBlocks(body);

    const ftitle = `${date}-${title.replaceAll(" ", "_")}.md`;

    let index = 0;
    let edited_md = body.replace(
      /!\[(.*?)\]\((.*?)\)/g,
      function (match, p1, p2, p3) {
        // const dirname = path.join("assets/img", ftitle);
        const dirname = path.join("upload", ftitle);
        if (!fs.existsSync(dirname)) {
          fs.mkdirSync(dirname, { recursive: true });
        }
        const filename = path.join(dirname, `${index}.png`);

        axios({
          method: "get",
          url: p2,
          responseType: "stream",
        })
          .then(function (response) {
            let file = fs.createWriteStream(`${filename}`);
            response.data.pipe(file);
          })
          .catch(function (error) {
            console.log(error);
          });

        let res;
        if (p1 === "") res = "";
        else res = `_${p1}_`;

        return `![${index++}](/${filename})${res}`;
      }
    );

    //writing to file
    fs.writeFile(path.join(root, ftitle), fm + edited_md, (err) => {
      if (err) {
        console.log(err);
      }
    });
  }
})();





   4-3. 위 JavaScript 파일(**notion-import.js**)에 대한 dependencies 설정을 위해 'package.json' 파일 하단에 아래 내용을 입력 해 준다.

## yaml

name: "Build and Deploy"
on:
  repository_dispatch:
    types: [RUN_WORKFLOW_DISPATCH]
      
permissions:
  contents: write
  pages: write
  id-token: write

# Allow one concurrent deployment
concurrency:
  group: "pages"
  cancel-in-progress: true

jobs:
  importer:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master      
      - uses: actions/setup-node@v3
        with:
          node-version: "17"

      - run: npm install

      - run: node _scripts/notion-import.js
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          DATABASE_ID: ${{ secrets.DATABASE_ID }}

      - uses: stefanzweifel/git-auto-commit-action@v4
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
        with:
          commit_message: "[BOT] Commit & Deploy from Notion"
          branch: main
          commit_user_name: morimin-bot 🤖
          commit_user_email: morimin@github.com
          commit_author: morimin-bot 🤖 <morimin@github.com>
 
  build:
    needs: importer
    runs-on: ubuntu-latest

    steps:           
      - name: Checkout
        uses: actions/checkout@v3
        with:
          ref: main
          fetch-depth: 1

      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v1

      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.1' # reads from a '.ruby-version' or '.tools-version' file if 'ruby-version' is omitted
          bundler-cache: true

      - name: Build site
        run: bundle exec jekyll b -d "_site${{ steps.pages.outputs.base_path }}"
        env:
          JEKYLL_ENV: "production"

      - name: Test site
        run: |
          bundle exec htmlproofer _site --disable-external --check-html --allow_hash_href

      - name: Upload site artifact
        uses: actions/upload-pages-artifact@v1
        with:
          path: "_site${{ steps.pages.outputs.base_path }}"

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v1




   4-4. root 폴더에 ‘.github’ 폴더를 생성하고, 생성한 폴더 안에 ‘workflows’ 폴더를 생성하고, 생성한 폴더 안에 ‘pages-deploy.yml’ 파일을 만들고 아래 내용을 입력한다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <style>
    .trigger-container {
      display: flex;
      flex-direction: column;
      align-items: center;
      text-align: center;
    }

    .trigger-button {
      display: inline-block;
      margin-bottom: 10px;
      padding: 10px 20px;
      background-color: #4c9aff;
      color: white;
      font-size: 16px;
      border: none;
      cursor: pointer;
      border-radius: 4px;
      box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1);
      transition: background-color 0.3s;
    }

    .trigger-button:hover {
      background-color: #2e86ff;
    }

    .message {
      font-size: 16px;
      color: #333;
    }
  </style>
</head>
<body>
  <div class="trigger-container">
    <button id="triggerButton" class="trigger-button">UPLOAD</button>
    <div id="message" class="message"></div>
  </div>

  <script>
  document.getElementById("triggerButton").addEventListener("click", function() {
    var messageElement = document.getElementById("message");
    messageElement.textContent = "요청 전송 중...";

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "https://api.github.com/repos/USERNAME/REPO_NAME/dispatches", true);
    xhr.setRequestHeader("Accept", "application/vnd.github.v3+json");
    xhr.setRequestHeader("Authorization", "Bearer GITHUB_ACCESS_TOKEN");
    xhr.setRequestHeader("Content-Type", "application/json");

    xhr.onload = function() {
      if (xhr.status === 204) {
        messageElement.textContent = "요청이 성공적으로 전송되었습니다." + xhr.status;
      } else {
        messageElement.textContent = "요청 전송에 실패했습니다.<br>상태 코드: " + xhr.status;
      }
    };

    xhr.onerror = function() {
      messageElement.textContent = "요청 전송 중 알 수 없는 오류가 발생했습니다.";
    };

    xhr.send(JSON.stringify({"event_type": "RUN_WORKFLOW_DISPATCH"}));
  });
</script>
</body>
</html>





   4-5. 배포버튼을 만들기 위해, 아래 링크 중 본인의 내용에 맞게 수정(아래 하이라이트 부분)한다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <style>
    .trigger-container {
      display: flex;
      flex-direction: column;
      align-items: center;
      text-align: center;
    }

    .trigger-button {
      display: inline-block;
      margin-bottom: 10px;
      padding: 10px 20px;
      background-color: #4c9aff;
      color: white;
      font-size: 16px;
      border: none;
      cursor: pointer;
      border-radius: 4px;
      box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1);
      transition: background-color 0.3s;
    }

    .trigger-button:hover {
      background-color: #2e86ff;
    }

    .message {
      font-size: 16px;
      color: #333;
    }
  </style>
</head>
<body>
  <div class="trigger-container">
    <button id="triggerButton" class="trigger-button">UPLOAD</button>
    <div id="message" class="message"></div>
  </div>

  <script>
  document.getElementById("triggerButton").addEventListener("click", function() {
    var messageElement = document.getElementById("message");
    messageElement.textContent = "요청 전송 중...";

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "https://api.github.com/repos/USERNAME/REPO_NAME/dispatches", true);
    xhr.setRequestHeader("Accept", "application/vnd.github.v3+json");
    xhr.setRequestHeader("Authorization", "Bearer GITHUB_ACCESS_TOKEN");
    xhr.setRequestHeader("Content-Type", "application/json");

    xhr.onload = function() {
      if (xhr.status === 204) {
        messageElement.textContent = "요청이 성공적으로 전송되었습니다." + xhr.status;
      } else {
        messageElement.textContent = "요청 전송에 실패했습니다.<br>상태 코드: " + xhr.status;
      }
    };

    xhr.onerror = function() {
      messageElement.textContent = "요청 전송 중 알 수 없는 오류가 발생했습니다.";
    };

    xhr.send(JSON.stringify({"event_type": "RUN_WORKFLOW_DISPATCH"}));
  });
</script>
</body>
</html>






   4-6. 배포 버튼을 링크로 만들기 위해 아래HTML블록생성 링크로 접속한다.
https://www.notion-tools.com/embeds/html






   4-7. 위 ‘4-5’에서 만든 코드를 넣고 링크를 생성한다.






   4-8. 노션에서 /embed 를 검색해서 임베드 블록을 생성한다.






   4-9. 위 ‘4-7’에서 생성한 링크를 임베드 해준다.






   4-10. 생성된 배포 버튼(임베디드된 링크)






   4-11. 업로드 버튼을 눌르면, 깃액션을 통해 봇으로 배포되는 것을 확인할 수 있다.









### 1. data 폴더로 들어간다.

cd /data





### 2. 명령어(du -ch)를 입력하여 디비 스키마별 용량을 확인하자.

du -ch

※ permission denied 가 뜨면 다음 명령어로 실행
sudo du -ch



ㅁ 결과 : 





Sponsored By















+ Recent posts