Dev Blog

스크립트 & 소스코드 공유

실무에서 유용하게 쓰는 스크립트와 코드 조각을 블로그 게시판으로 저장하고 공유합니다.

108건의 글

사이트맵과 RSS생성

사이트맵(Sitemap)과 RSS 피드는 검색 엔진이 사이트의 구조와 새로운 콘텐츠를 빠르게 파악하도록 돕는 중요한 도구입니다. 요청하신 http://box-story.com/ 사이트의 구조를 바탕으로 표준 형식의 파일을 구성해 드립니다.

사이트맵(Sitemap)과 RSS 피드는 검색 엔진이 사이트의 구조와 새로운 콘텐츠를 빠르게 파악하도록 돕는 중요한 도구입니다. 요청하신 http://box-story.com/ 사이트의 구조를 바탕으로 표준 형식의 파일을 구성해 드립니다.

1. 사이트맵 (sitemap.xml)

사이트맵은 웹사이트의 모든 페이지 목록을 담은 XML 파일입니다. 아래 코드를 복사하여 sitemap.xml이라는 이름의 파일로 저장한 뒤, 웹사이트의 최상위 경로(루트 디렉토리)에 업로드하세요.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <!-- 메인 페이지 -->
  <url>
    <loc>http://box-story.com/</loc>
    <lastmod>2026-08-20</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <!-- 회사 소개 -->
  <url>
    <loc>http://box-story.com/company</loc>
    <lastmod>2026-08-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- 포트폴리오/제품소개 -->
  <url>
    <loc>http://box-story.com/portfolio</loc>
    <lastmod>2026-08-20</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <!-- 견적 문의 -->
  <url>
    <loc>http://box-story.com/contact</loc>
    <lastmod>2026-08-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
</urlset>

2. RSS 피드 (rss.xml)

RSS는 사이트의 최신 업데이트 정보를 배포하는 형식입니다. 아래 내용을 rss.xml 파일로 만들어 루트 디렉토리에 업로드하시면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>박스스토리 (Box Story)</title>
    <link>http://box-story.com/</link>
    <description>단상자, 칼라박스, 패키지 제작 전문 박스스토리입니다.</description>
    <language>ko-kr</language>
    <pubDate>Thu, 20 Aug 2026 09:12:39 +0900</pubDate>

    <item>
      <title>박스스토리 홈페이지 오픈</title>
      <link>http://box-story.com/</link>
      <description>맞춤형 패키지 제작 서비스를 시작합니다.</description>
      <pubDate>Thu, 20 Aug 2026 09:12:39 +0900</pubDate>
    </item>
  </channel>
</rss>

네이버 서치어드바이저 등록 방법

파일을 만드신 후에는 반드시 네이버 검색 엔진에 알려주어야 효과가 나타납니다.

  1. 파일 업로드: 위에서 만든 두 파일을 홈페이지 서버의 메인 폴더(index 파일이 있는 곳)에 올립니다.
  2. 서치어드바이저 접속: 네이버 서치어드바이저에 로그인합니다.
  3. 사이트 선택: 등록된 http://box-story.com/ 사이트 관리 화면으로 들어갑니다.
  4. 요청 > 사이트맵 제출: sitemap.xml 경로를 입력하고 확인을 누릅니다.
  5. 요청 > RSS 제출: rss.xml 경로를 입력하고 확인을 누릅니다.

이 과정을 마치면 네이버 로봇이 사이트의 메뉴 구조를 더 정확하게 수집하게 되며, 시간이 지나면 검색 결과에 서브링크(메뉴)가 나타날 가능성이 높아집니다.

ComfyUI 0.25.0 업데이트 후 이미지가 검게 나올 때 해결 방법

ComfyUI 업데이트 후 생성 이미지가 시커멓게 나오는 문제의 해결 방법이다. attention.py에서 optimized_attention = attention_sage를 attention_pytorch로 바꿔 PyTorch Attention을 강제로 사용하거나, Sage Attention을 2.x로 업그레이드하고, 绘世启动器 설정에서 sage attention을 끄는 방법을 단계별로 정리했다.

제공해주신 ComfyUI Sage Attention 충돌 해결 방안을 마크다운 형식으로 정리해 드립니다. 나중에 참고하시거나 다른 분들과 공유하실 때 활용하시기 바랍니다.


ComfyUI Sage Attention 충돌 및 해결 방법 가이드

Z-Image 계열 모델 사용 시 발생하는 Sage Attention 충돌 문제를 해결하기 위한 가이드입니다. 업데이트 시 패치가 초기화될 수 있으므로 상황에 맞는 방법을 선택하세요.

수정 대상 파일

  • 경로: E:\ComfyUI-aki-v3\ComfyUI\comfy\ldm\modules\attention.py

방법 1. 소스 코드 직접 수정 (임시 패치)

Sage Attention 옵션이 켜져 있어도 실제로는 PyTorch Attention을 사용하도록 강제로 우회하는 방법입니다.

  1. 메모장이나 코드 에디터로 위 경로의 attention.py 파일을 엽니다.
  2. 734번째 줄 근처에서 "Using sage attention" 문구를 찾습니다.
  3. 아래와 같이 코드를 수정합니다.

[변경 전]

logging.info("Using sage attention")
optimized_attention = attention_sage

[변경 후]

logging.info("Using sage attention (forced pytorch fallback)")
optimized_attention = attention_pytorch
  1. 저장 후 ComfyUI를 재시작합니다.

방법 2. Sage Attention 라이브러리 업그레이드

충돌의 원인인 구버전(v1.0.6 등)을 최신 버전으로 업데이트하여 근본적인 문제를 해결합니다.

  • 실행 명령 (터미널/CMD):
    "E:\ComfyUI-aki-v3\python\python.exe" -m pip install sageattention --upgrade

방법 3. 绘世(Aki) 런처에서 옵션 해제 (가장 권장)

업데이트 시마다 패치가 날아가는 번거로움을 피하기 위해 아예 기능을 끄는 방법입니다.

  1. 绘世启动器(Aki Launcher) 실행
  2. 설정(톱니바퀴 아이콘) 클릭
  3. 시작 파라미터(启动参数) 또는 고급 설정(高级设置) 진입
  4. --use-sage-attention 항목을 찾아 체크 해제

**

Nginx+PHP-FPM에서 .html 파일에서 PHP 코드 실행하기

Nginx 환경에서 .html·.htm 파일에서도 PHP 코드가 실행되도록 설정하는 방법이다. /www/server/nginx/conf의 enable-php-74.conf에서 location 정규식 매칭에 html·htm을 추가하고, /www/server/php/74/etc/php-fpm.conf의 security.limit_extensions에 .html·.htm 확장자를 등록한 뒤 저장하면 된다.

第一步:修改 Nginx 引用文件 (针对 7.4)​

由于你换了版本,Nginx 现在引用的应该是 enable-php-74.conf

  1. 进入目录:/www/server/nginx/conf/
  2. 找到并打开文件:enable-php-74.conf
  3. 将其内容修改为(注意第一行加入了 htmlhtm):
location ~ [^/]\.(php|php5|html|htm)(/|$)
    {
        try_files $uri =404;
        fastcgi_pass  unix:/tmp/php-cgi-74.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
        include pathinfo.conf;
    }
第二步:修改 PHP-7.4 的安全后缀限制
  1. 进入宝塔面板 -> 文件。
  2. 直接进入这个路径:/www/server/php/74/etc/
  3. 找到文件:php-fpm.conf 并双击打开。
  4. 在这个文件里搜索 [www](通常就在文件开头或中部)。
  5. 在 [www] 下方添加: security.limit_extensions = .php .php3 .php4 .php5 .php7 .html .htm
  6. 保存。

Markdown 사용법 - 기본 문법 완전 정리

Markdown의 기본 문법을 예제와 함께 정리한 글이다. 제목(h1~h6), 굵게·기울임·삭제선, 순서·비순서 목록, 링크와 이미지, 인용구, 인라인 코드와 코드 블록, 표, 분할선, LaTeX 수식까지 설명하고, marked.js 라이브러리로 HTML 페이지에서 Markdown을 렌더링하는 방법도 소개한다.

<!DOCTYPE html>
<html>
<head>
<title>Markdown 网页演示</title>
<!-- 引入解析库 -->
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
</head>
<body>
<!-- 存放转换后内容的容器 -->
<div id="content"></div>

<script>
const mdText = "# 这是一个标题\n\n这是来自 **Markdown** 的内容!";
// 执行转换并插入页面
document.getElementById('content').innerHTML = marked.parse(mdText);
</script>
</body>
</html><span style="font-family: 나눔고딕, Dotum, Helvetica, sans-serif;"><span style="white-space: normal;">
</span></span>

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构精美的 HTML。由于其简洁性和跨平台性,它已成为程序员、作家和笔记爱好者的首选工具。

以下是 Markdown 常用语法的详细讲解:

标题(Headings)

Markdown 支持六级标题,通过在行首插入 1 到 6 个 # 符号来表示。


# 一级标题

## 二级标题

### 三级标题

#### 四级标题

##### 五级标题

###### 六级标题

文本格式化

用于强调文本或改变其视觉表现。

  • 加粗:在文字前后分别加上两个星号 ** 或下划线 __。例如:**加粗文字**

  • 斜体:在文字前后分别加上一个星号 * 或下划线 _。例如:*斜体文字*

  • 加粗并斜体:在文字前后分别加上三个星号 ***

  • 删除线:在文字前后分别加上两个波浪号 ~~。例如:~~删除的内容~~

列表(Lists)

无序列表

使用星号 *、加粗 + 或减号 - 作为列表标记,后面紧跟一个空格。


- 项目一

- 项目二

- 子项目(缩进两个空格)

有序列表

使用数字外加一个英文句点 .,后面紧跟一个空格。


1. 第一步

2. 第二步

3. 第三步

链接与图片

这是 Markdown 中最常用的功能之一,注意括号的使用。

  • 超链接:语法为 [链接文字](URL)。例如:[Tabbit 官网]([https://tabbit-ai.com)。](https://tabbit-ai.com)`。)

  • 图片:语法为 ![替代文字](图片URL)。比链接多了一个感叹号。

引用(Blockquotes)

在段落的第一行前添加一个右尖括号 >

这是一个引用示例。

引用可以嵌套,也可以包含其他 Markdown 语法。

代码(Code)

  • 行内代码:使用反引号 ` 包裹代码。例如:使用printf()函数

  • 代码块:使用三个反引号 ``` 包裹,并可以指定语言名称以实现语法高亮。

def hello_world():

print("Hello, Markdown!")


### **表格(Tables)**

使用竖线 `|` 分隔单元格,使用连字符 `-` 分隔表头和其他行。

| 姓名 | 职业 | 技能 |

| :--- | :----: | ---: |

| Tabbit | AI 浏览器 | 网页自动化 |

| 开发者 | 工程师 | Python/JS |

*注:在连字符行中使用冒号可以控制对齐方式(左对齐 `:---`、居中 `:---:`、右对齐 `---:`)。*

### **分割线**

在一行中使用三个或更多的星号 `*`、减号 `-` 或底线 `_` 来建立分隔线,行内不能有其他内容。

---

### **数学公式(LaTeX)**

虽然不是标准 Markdown 的一部分,但大多数现代编辑器(如 Tabbit)都支持 LaTeX 语法:

- **行内公式**:使用单个 `$` 包裹。例如:$E = mc^2$。

- **独立公式块**:使用双 `$$` 包裹。

$$

\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

$$

掌握了以上这些基础语法,你就可以撰写出排版专业且美观的文档了。

Python 외부 관리 환경(PEP 668) 오류 - 가상환경 활성화 방법

Python 패키지 설치 시 "externally managed environment"(PEP 668) 오류가 발생할 때의 해결 방법이다. python -m venv로 가상환경을 만들고 Windows CMD·PowerShell, macOS/Linux에서 활성화하는 명령을 단계별로 안내한다. uv 패키지 매니저 사용법과 --break-system-packages로 강제 설치할 때의 위험성도 함께 설명한다.

你再次遇到了“externally-managed-environment”错误,并且它建议你查看 PEP 668 和使用 --break-system-packages 来强制安装。使用这个选项可以临时绕过限制,但可能会对环境稳定性造成风险。为了安全起见,我建议你考虑以下更稳妥的解决方案:

推荐解决方案

创建虚拟环境
使用虚拟环境是比较安全且推荐的处理方式,它允许你在不影响系统环境的情况下安装和管理 Python 包:

python -m venv myenv 

激活虚拟环境:
Windows(CMD):

myenv\Scripts\activate 

Windows(PowerShell):

.\myenv\Scripts\Activate.ps1 

macOS/Linux:

source myenv/bin/activate 

激活之后,就可以尝试再次执行:

python -m pip install --upgrade pip python -m pip install -r requirements.txt 

了解 uv 提供的包管理方式
如果因为某些原因你不能或不想使用虚拟环境,你可以查看 uv 管理器的文档,看看是否有提供专门的命令来管理 Python 包。

如果决定使用 --break-system-packages

在极端情况下,如果你确实需要在 uv 管理的系统环境中安装包,并且你已经考虑过可能的风险,可以执行以下命令:

python -m pip install --break-system-packages -r requirements.txt 

请谨慎使用这个选项,并确保你有能力恢复环境或者安全备份重要文件。

如果需要更多指导,请随时告诉我!



Let's create something great together.

프로젝트 문의 및 견적 요청은 언제든 환영합니다.