<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://s3wiki.yonsei.ac.kr/index.php?action=history&amp;feed=atom&amp;title=%EB%8F%84%EC%9B%80%EB%A7%90%3AS3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC%2F%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D</id>
	<title>도움말:S3 연구 메모리/설치와 검증 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://s3wiki.yonsei.ac.kr/index.php?action=history&amp;feed=atom&amp;title=%EB%8F%84%EC%9B%80%EB%A7%90%3AS3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC%2F%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D"/>
	<link rel="alternate" type="text/html" href="https://s3wiki.yonsei.ac.kr/index.php?title=%EB%8F%84%EC%9B%80%EB%A7%90:S3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC/%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D&amp;action=history"/>
	<updated>2026-07-16T17:48:38Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://s3wiki.yonsei.ac.kr/index.php?title=%EB%8F%84%EC%9B%80%EB%A7%90:S3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC/%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D&amp;diff=199&amp;oldid=prev</id>
		<title>S3Admin: S3 연구 메모리 저장소 문서 동기화</title>
		<link rel="alternate" type="text/html" href="https://s3wiki.yonsei.ac.kr/index.php?title=%EB%8F%84%EC%9B%80%EB%A7%90:S3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC/%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D&amp;diff=199&amp;oldid=prev"/>
		<updated>2026-07-16T14:32:08Z</updated>

		<summary type="html">&lt;p&gt;S3 연구 메모리 저장소 문서 동기화&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026년 7월 16일 (목) 23:32 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l168&quot;&gt;168번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;168번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;COMPOSE_PROFILES&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;domain&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 넣으면 Caddy를 실행. 도메인 스크립트가 추가&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;COMPOSE_PROFILES&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;domain&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 넣으면 Caddy를 실행. 도메인 스크립트가 추가&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MAX_OUTPUT_BYTES&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;32768&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 도구 결과 제한 2048~65536바이트. 전체 JSON-RPC 응답은 별도 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;147456바이트 &lt;/del&gt;제한&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MAX_OUTPUT_BYTES&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;32768&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 도구 결과 제한 2048~65536바이트. 전체 JSON-RPC 응답은 별도 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;212992바이트 &lt;/ins&gt;제한&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_SEARCH_SCAN_LIMIT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;200&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 후보 스캔 제한 20~1000페이지&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_SEARCH_SCAN_LIMIT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;200&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 후보 스캔 제한 20~1000페이지&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key s3_research_memory:diff:1.41:old-192:rev-199:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>S3Admin</name></author>
	</entry>
	<entry>
		<id>https://s3wiki.yonsei.ac.kr/index.php?title=%EB%8F%84%EC%9B%80%EB%A7%90:S3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC/%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D&amp;diff=192&amp;oldid=prev</id>
		<title>S3Admin: S3 연구 메모리 저장소 문서 동기화</title>
		<link rel="alternate" type="text/html" href="https://s3wiki.yonsei.ac.kr/index.php?title=%EB%8F%84%EC%9B%80%EB%A7%90:S3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC/%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D&amp;diff=192&amp;oldid=prev"/>
		<updated>2026-07-16T13:12:14Z</updated>

		<summary type="html">&lt;p&gt;S3 연구 메모리 저장소 문서 동기화&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026년 7월 16일 (목) 22:12 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l30&quot;&gt;30번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;30번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이 클라이언트 버전만 출력하지 않고 Docker 데몬에도 연결되어야 합니다. 이 확인 전에 도메인 설정 스크립트를 실행하지 마세요. 첫 빌드에서는 이미지와 고정된 PHP·Python 의존성을 내려받으므로 인터넷 연결이 필요합니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이 클라이언트 버전만 출력하지 않고 Docker 데몬에도 연결되어야 합니다. 이 확인 전에 도메인 설정 스크립트를 실행하지 마세요. 첫 빌드에서는 이미지와 고정된 PHP·Python 의존성을 내려받으므로 인터넷 연결이 필요합니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;일반 운영 경로는 위 HTTPS 도메인 하나입니다. 읽기와 검색은 공개됩니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_WRITE_AUTH_MODE=token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이면 세 변경 도구에 공용 Bearer 토큰이 필요하고, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;open&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이면 인증 없이 사용할 수 있습니다. Caddy는 TLS를 종료하고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;를 좁은 &lt;/del&gt;MCP 서비스로 보냅니다. 나머지 경로는 MediaWiki로 보냅니다&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. 직접 포트 8080과 8765는 서버 진단용이며 별도 클라이언트 주소가 아닙니다&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;일반 운영 경로는 위 HTTPS 도메인 하나입니다. 읽기와 검색은 공개됩니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_WRITE_AUTH_MODE=token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이면 세 변경 도구에 공용 Bearer 토큰이 필요하고, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;open&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이면 인증 없이 사용할 수 있습니다&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;github&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 GitHub 로그인을 거쳐 MCP용 access·refresh token을 발급하며 이 모드에서는 MCP 연결 전체가 OAuth 인증 대상입니다&lt;/ins&gt;. Caddy는 TLS를 종료하고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;와 OAuth 경로를 &lt;/ins&gt;MCP 서비스로 보냅니다. 나머지 경로는 MediaWiki로 보냅니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;기본값은 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;입니다. 짧은 공개 시험에서만 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에 다음 값을 넣고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 다시 만드세요.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;기본값은 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;입니다. 짧은 공개 시험에서만 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에 다음 값을 넣고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 다시 만드세요.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l39&quot;&gt;39번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;39번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;다시 잠그려면 값을 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;으로 바꿉니다. 기존 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_TOKEN_SHA256&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;은 지우지 않아도 되며 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;open&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 모드에서는 사용하지 않습니다. 사용자 연결은 [[Help:S3 연구 메모리/Linux 연결|Linux]], [[Help:S3 연구 메모리/macOS 연결|macOS]], [[Help:S3 연구 메모리/Windows 연결|Windows]] 문서에 있고 제품별 제약은 [[Help:S3 연구 메모리/MCP 클라이언트|S3RM3]]에 있습니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;다시 잠그려면 값을 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;으로 바꿉니다. 기존 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_TOKEN_SHA256&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;은 지우지 않아도 되며 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;open&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 모드에서는 사용하지 않습니다. 사용자 연결은 [[Help:S3 연구 메모리/Linux 연결|Linux]], [[Help:S3 연구 메모리/macOS 연결|macOS]], [[Help:S3 연구 메모리/Windows 연결|Windows]] 문서에 있고 제품별 제약은 [[Help:S3 연구 메모리/MCP 클라이언트|S3RM3]]에 있습니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==== GitHub OAuth 모드 준비 ====&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;GitHub의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Settings → Developer settings → OAuth Apps&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에서 앱을 만들고 callback URL을 정확히 다음 값으로 등록합니다.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://s3wiki.yonsei.ac.kr/oauth/github/callback&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;그다음 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 설정합니다.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S3RM_MCP_WRITE_AUTH_MODE=github&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S3RM_GITHUB_CLIENT_ID=발급받은-client-id&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S3RM_GITHUB_CLIENT_SECRET=발급받은-client-secret&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S3RM_GITHUB_ALLOWED_USERS=허용할-github-사용자&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S3RM_GITHUB_ALLOWED_ORGS=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S3RM_GITHUB_ALLOW_ANY_USER=false&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;사용자 또는 조직 allowlist 중 하나는 설정해야 합니다. 정말 모든 GitHub 사용자를 허용할 때만 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_GITHUB_ALLOW_ANY_USER=true&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 사용하세요. GitHub 모드는 저장소 권한을 요청하지 않습니다. 조직 allowlist를 사용할 때만 조직 확인을 위해 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;read:org&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; scope를 요청합니다.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;현재 OAuth client와 token 상태는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 프로세스 메모리에만 있습니다. 서비스를 다시 만들면 기존 OAuth 연결이 무효가 되므로 ChatGPT 앱을 다시 인증하거나 다시 만들어야 합니다.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 환경 설정 ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 환경 설정 ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l113&quot;&gt;113번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;136번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_PUBLIC_URL&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || 클라이언트 주소 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://s3wiki.yonsei.ac.kr/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_PUBLIC_URL&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || 클라이언트 주소 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://s3wiki.yonsei.ac.kr/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_TOKEN_SHA256&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;예 &lt;/del&gt;|| 쓰기 토큰의 64자리 16진수 SHA-256 해시. 원문은 저장하지 않음&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_WRITE_AUTH_MODE&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;open&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;github&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 중 하나&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_TOKEN_SHA256&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 모드 &lt;/ins&gt;|| 쓰기 토큰의 64자리 16진수 SHA-256 해시. 원문은 저장하지 않음&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_GITHUB_CLIENT_ID&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;github&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 모드 || GitHub OAuth App의 client ID&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_GITHUB_CLIENT_SECRET&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;github&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 모드 || GitHub OAuth App의 client secret. 커밋하지 않음&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_GITHUB_ALLOWED_USERS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 선택 || 허용할 GitHub 사용자명. 쉼표로 구분&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_GITHUB_ALLOWED_ORGS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 선택 || 허용할 GitHub 조직명. 쉼표로 구분&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_GITHUB_ALLOW_ANY_USER&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;false&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;true&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;면 모든 GitHub 계정을 허용&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_BIND_ADDRESS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || 도메인 프로필에서는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;127.0.0.1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. 공개 진입점은 Caddy&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_BIND_ADDRESS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || 도메인 프로필에서는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;127.0.0.1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. 공개 진입점은 Caddy&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key s3_research_memory:diff:1.41:old-182:rev-192:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>S3Admin</name></author>
	</entry>
	<entry>
		<id>https://s3wiki.yonsei.ac.kr/index.php?title=%EB%8F%84%EC%9B%80%EB%A7%90:S3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC/%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D&amp;diff=182&amp;oldid=prev</id>
		<title>S3Admin: S3 연구 메모리 저장소 문서 게시</title>
		<link rel="alternate" type="text/html" href="https://s3wiki.yonsei.ac.kr/index.php?title=%EB%8F%84%EC%9B%80%EB%A7%90:S3_%EC%97%B0%EA%B5%AC_%EB%A9%94%EB%AA%A8%EB%A6%AC/%EC%84%A4%EC%B9%98%EC%99%80_%EA%B2%80%EC%A6%9D&amp;diff=182&amp;oldid=prev"/>
		<updated>2026-07-16T13:03:05Z</updated>

		<summary type="html">&lt;p&gt;S3 연구 메모리 저장소 문서 게시&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- S3RM managed repository document; edit the Markdown source, not this page. --&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;이 페이지는 저장소 문서에서 자동으로 동기화됩니다. 위키에서 직접 편집하지 마세요.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
한 대의 서버에서 위키와 공용 MCP를 함께 실행합니다. 브라우저는 [https://s3wiki.yonsei.ac.kr/]에 접속하고, 모든 에이전트는 [https://s3wiki.yonsei.ac.kr/mcp]에 연결합니다. 두 주소는 하나의 Semantic MediaWiki를 사용합니다. 클라이언트 PC에는 이 저장소, Docker 권한, MediaWiki 에이전트 비밀번호가 필요하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
데이터베이스, 생성된 위키 설정, 업로드 파일은 Docker 볼륨에 저장합니다. 저장소에는 데이터, 자격 증명, 생성된 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;LocalSettings.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 넣지 않습니다.&lt;br /&gt;
&lt;br /&gt;
=== 준비 사항 ===&lt;br /&gt;
&lt;br /&gt;
* Docker Engine 24 이상과 Docker Compose v2 플러그인 또는 최신 Docker Desktop&lt;br /&gt;
* Python 3.11 이상과 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;uv&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* 메모리 4 GiB 이상, 디스크 여유 공간 8 GiB 이상&lt;br /&gt;
* Bash, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;make&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;openssl&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* 백업·복원용 GNU/Linux 호스트: Bash 4 이상, GNU coreutils(&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;stat&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sha256sum&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;), GNU tar, gzip, 일반 파일 권한 지원&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;s3wiki.yonsei.ac.kr&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이 서버의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;165.132.118.220&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;으로 연결된 DNS&lt;br /&gt;
* 서버까지 들어오는 TCP 80, 443&lt;br /&gt;
macOS와 Windows의 Docker Desktop은 화면 확인에 사용할 수 있습니다. 백업·복원 스크립트는 이 Compose 프로젝트를 실행하는 Linux VM이나 Linux Docker 호스트에서 실행하세요. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;uv&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;가 없다면 [https://docs.astral.sh/uv/getting-started/installation/ 공식 설치 안내]를 따릅니다.&lt;br /&gt;
&lt;br /&gt;
필수 명령을 확인합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker version&lt;br /&gt;
docker compose version&lt;br /&gt;
make --version&lt;br /&gt;
bash --version&lt;br /&gt;
sha256sum --version&lt;br /&gt;
uv --version&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이 클라이언트 버전만 출력하지 않고 Docker 데몬에도 연결되어야 합니다. 이 확인 전에 도메인 설정 스크립트를 실행하지 마세요. 첫 빌드에서는 이미지와 고정된 PHP·Python 의존성을 내려받으므로 인터넷 연결이 필요합니다.&lt;br /&gt;
&lt;br /&gt;
일반 운영 경로는 위 HTTPS 도메인 하나입니다. 읽기와 검색은 공개됩니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_WRITE_AUTH_MODE=token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이면 세 변경 도구에 공용 Bearer 토큰이 필요하고, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;open&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이면 인증 없이 사용할 수 있습니다. Caddy는 TLS를 종료하고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 좁은 MCP 서비스로 보냅니다. 나머지 경로는 MediaWiki로 보냅니다. 직접 포트 8080과 8765는 서버 진단용이며 별도 클라이언트 주소가 아닙니다.&lt;br /&gt;
&lt;br /&gt;
기본값은 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;입니다. 짧은 공개 시험에서만 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에 다음 값을 넣고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 다시 만드세요.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
S3RM_MCP_WRITE_AUTH_MODE=open&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다시 잠그려면 값을 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;token&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;으로 바꿉니다. 기존 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_TOKEN_SHA256&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;은 지우지 않아도 되며 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;open&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 모드에서는 사용하지 않습니다. 사용자 연결은 [[Help:S3 연구 메모리/Linux 연결|Linux]], [[Help:S3 연구 메모리/macOS 연결|macOS]], [[Help:S3 연구 메모리/Windows 연결|Windows]] 문서에 있고 제품별 제약은 [[Help:S3 연구 메모리/MCP 클라이언트|S3RM3]]에 있습니다.&lt;br /&gt;
&lt;br /&gt;
=== 환경 설정 ===&lt;br /&gt;
&lt;br /&gt;
저장소 루트에서 실행합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
cp .env.example .env&lt;br /&gt;
chmod 600 .env&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
비밀번호의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;change-me&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 값을 모두 바꿉니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_TOKEN_SHA256=change-me-...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 다음 단계의 토큰 스크립트가 바꾸므로 그대로 둡니다. 비밀번호마다 새 값을 만드세요.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
openssl rand -base64 36&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 공용 MCP 설정 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;의 비밀번호를 바꾼 뒤 등록된 도메인을 설정합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
./scripts/configure-public-domain.sh s3wiki.yonsei.ac.kr \&lt;br /&gt;
  --expected-ip 165.132.118.220&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
스크립트는 DNS를 확인하고 위키 URL, MCP URL, loopback 바인딩, HTTPS 설정, Compose &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;domain&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 프로필을 맞춥니다. 공용 쓰기 토큰은 화면에 출력하지 않습니다. 서버의 mode &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0600&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에는 SHA-256 해시만 저장하고, 원문 토큰과 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_URL&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;은 mode &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0600&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;~/.config/s3-research-memory/client.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에 저장합니다. 두 파일의 값이 이미 일치하면 토큰을 바꾸지 않습니다.&lt;br /&gt;
&lt;br /&gt;
모든 클라이언트에 같은 MCP URL을 설정합니다. 검색만 할 때는 토큰이 필요하지 않습니다. 메모를 쓰거나 관계·근거를 추가할 에이전트에만 공용 토큰을 전달합니다. 이 토큰으로는 페이지 삭제나 위키 관리를 할 수 없습니다. 위키 관리자·DB 비밀번호를 토큰으로 재사용하지 마세요.&lt;br /&gt;
&lt;br /&gt;
서버에서 쓰기 연결을 시험할 때는 값을 출력하지 않고 불러옵니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
set -a&lt;br /&gt;
source &amp;quot;$HOME/.config/s3-research-memory/client.env&amp;quot;&lt;br /&gt;
set +a&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
원문 토큰은 필요한 사람에게 비공개 채널로 전달합니다. Git, 공개 이슈, 프롬프트, 스크린샷에는 넣지 마세요. 이 파일럿은 토큰 해시 하나만 받으므로 토큰을 바꾸면 모든 쓰기 클라이언트를 함께 갱신해야 합니다. 공개 조회에는 영향이 없습니다.&lt;br /&gt;
&lt;br /&gt;
Compose는 현재 프로젝트 디렉터리 또는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;--project-directory&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;가 가리키는 곳의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 읽습니다. 자세한 동작은 Docker의 [https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/ 환경 변수 보간 안내]를 참고하세요. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 추적하지 않습니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker compose config&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 비밀번호와 토큰 해시를 출력하므로 일반 확인에는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker compose config --quiet&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 사용합니다.&lt;br /&gt;
&lt;br /&gt;
==== 환경 변수 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 변수 !! 필수 !! 기본값·용도&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MARIADB_DATABASE&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;s3_research_memory&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 위키 데이터베이스 이름&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MARIADB_USER&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;s3wiki&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; MediaWiki DB 계정&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MARIADB_PASSWORD&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || 제한된 MediaWiki DB 계정 비밀번호&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MARIADB_ROOT_PASSWORD&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || 초기화·복구 때만 쓰는 MariaDB 관리자 비밀번호&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MW_SITE_NAME&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3 연구 메모리&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 브라우저에 표시할 이름&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MW_SERVER_URL&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://s3wiki.yonsei.ac.kr&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 끝에 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;가 없는 외부 주소&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MW_ADMIN_USERNAME&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3Admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 처음 만드는 관리자 계정 이름&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MW_ADMIN_PASSWORD&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || 처음 만드는 관리자 비밀번호&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_WIKI_USERNAME&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3ResearchAgent&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; MCP 전용 최소 권한 위키 계정&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_WIKI_PASSWORD&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || MCP 어댑터만 쓰는 위키 비밀번호&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_HTTP_PORT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;8080&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; MediaWiki 80번 포트에 연결한 호스트 진단 포트&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_WIKI_BIND_ADDRESS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;127.0.0.1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 진단 포트를 외부에 열지 않음&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_WIKI_DIRECT_URL&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || 비워 두면 직접 주소를 사용하지 않음. 외부 HTTP 화면을 명시적으로 열 때만 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://SERVER_IP:8080&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;처럼 전체 주소를 입력하고 bind를 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0.0.0.0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;으로 설정&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_PUBLIC_URL&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || 클라이언트 주소 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://s3wiki.yonsei.ac.kr/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_TOKEN_SHA256&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 예 || 쓰기 토큰의 64자리 16진수 SHA-256 해시. 원문은 저장하지 않음&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_BIND_ADDRESS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || 도메인 프로필에서는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;127.0.0.1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. 공개 진입점은 Caddy&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_HTTP_PORT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;8765&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; MCP 컨테이너 8000번 포트에 연결한 loopback 진단 포트&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_ALLOWED_HOSTS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || 쉼표로 나눈 추가 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Host&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 값. 공개 URL의 host는 자동 허용&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_ALLOWED_ORIGINS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || 쉼표로 나눈 추가 HTTP(S) Origin. 공개 URL의 origin은 자동 허용&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_ALLOW_INSECURE_HTTP&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;false&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 클라이언트 주소는 HTTPS만 사용&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_PUBLIC_HOST&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;s3wiki.yonsei.ac.kr&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; Caddy 주소&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_PUBLIC_HTTP_PORT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;80&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 리디렉션과 인증서 발급용 공개 HTTP 포트&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_PUBLIC_HTTPS_PORT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;443&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 공개 HTTPS 포트&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;COMPOSE_PROFILES&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;domain&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 넣으면 Caddy를 실행. 도메인 스크립트가 추가&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MAX_OUTPUT_BYTES&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;32768&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 도구 결과 제한 2048~65536바이트. 전체 JSON-RPC 응답은 별도 147456바이트 제한&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_SEARCH_SCAN_LIMIT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;200&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; 후보 스캔 제한 20~1000페이지&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_WIKI_TIMEOUT_SECONDS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || 아니요 || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;20&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;; MediaWiki 요청 제한 1~120초&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Compose의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 내부 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://mediawiki/api.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;만 사용합니다. 이 주소와 위키 비밀번호는 클라이언트에 전달하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
직접 HTTP 화면을 함께 열어야 한다면 다음 두 값을 같이 설정합니다. MediaWiki는 정확히 이 Host로 들어온 요청에만 직접 주소를 사용합니다. 임의의 Host 헤더를 신뢰하지 않으며 정식 주소와 MCP 주소는 HTTPS 도메인으로 유지합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
S3RM_WIKI_BIND_ADDRESS=0.0.0.0&lt;br /&gt;
S3RM_WIKI_DIRECT_URL=http://165.132.118.220:8080&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 설정은 Docker의 호스트 리스너만 엽니다. 학교 경계 보안정책에서 TCP 8080이 차단되어 있으면 외부 접속은 계속 timeout입니다. 직접 주소는 위키 화면에만 쓰며 MCP URL로 등록하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
진단 포트만 바꿀 때는 외부 브라우저 주소를 그대로 둡니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
S3RM_HTTP_PORT=8090&lt;br /&gt;
MW_SERVER_URL=https://s3wiki.yonsei.ac.kr&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 도메인과 Caddy 프로필 ====&lt;br /&gt;
&lt;br /&gt;
도메인 스크립트는 여러 번 실행해도 됩니다. Docker를 시작하지 않으며, 기존 토큰과 해시가 일치하면 토큰을 바꾸지 않습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
./scripts/configure-public-domain.sh s3wiki.yonsei.ac.kr \&lt;br /&gt;
  --expected-ip 165.132.118.220&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;domain&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 프로필은 Caddy 컨테이너 하나를 시작합니다. Caddy는 TLS 인증서를 발급·갱신하고, HTTP를 HTTPS로 돌립니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;와 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/mcp/*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;로 보내고 나머지 경로는 MediaWiki로 보냅니다. MCP 경로를 다시 쓰거나 Lesson을 저장하지 않습니다. 동작 원리는 Caddy의 [https://caddyserver.com/docs/automatic-https 자동 HTTPS 안내]와 [https://caddyserver.com/docs/quick-starts/reverse-proxy 리버스 프록시 안내]를 참고하세요.&lt;br /&gt;
&lt;br /&gt;
정적 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Authorization&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 헤더를 보낼 수 있는 클라이언트는 공용 Bearer 토큰으로 세 개 변경 도구를 사용할 수 있습니다. 호스팅형 ChatGPT와 Claude 커넥터는 같은 URL에서 공개 조회 도구를 사용할 수 있습니다. 이 제품에서 변경 도구를 쓰려면 OAuth 진입점이 추가로 필요합니다. OAuth를 붙이더라도 MCP나 위키를 하나 더 만들지 않습니다.&lt;br /&gt;
&lt;br /&gt;
=== 시작 ===&lt;br /&gt;
&lt;br /&gt;
필수 변수와 Compose 모델을 출력 없이 확인합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose config --quiet&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이미지를 빌드하고 서비스를 시작합니다. 아래 명령은 HTTPS 위키 API와 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;도 확인합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
make domain-up&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 확인은 명령을 실행한 서버 기준입니다. 학교 밖에서 80/443이 열렸는지는 다른 네트워크의 브라우저에서도 확인해야 합니다. 이미 실행 중인 서버의 HTTPS와 MCP만 다시 확인할 때는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;make verify-domain&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 사용합니다.&lt;br /&gt;
&lt;br /&gt;
서비스 역할은 다음과 같습니다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;db&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: MariaDB와 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;db_data&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 볼륨&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mediawiki&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: Apache/PHP, Semantic MediaWiki, Page Forms, 생성된 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;LocalSettings.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mediawiki_config&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;·&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mediawiki_images&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 볼륨&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;bootstrap&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: 스키마·양식 페이지를 맞추고 MCP 계정과 그룹을 만드는 일회성 작업&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: 공개 조회와 토큰 기반 변경을 제공하는 공용 Streamable HTTP 어댑터. Lesson DB나 영구 볼륨은 없음&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;caddy&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: 위키와 MCP의 공개 HTTPS 진입점&lt;br /&gt;
첫 시작 상태를 확인합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose ps -a&lt;br /&gt;
docker compose logs -f mediawiki bootstrap mcp-http caddy&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;db&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mediawiki&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;caddy&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;가 실행 또는 healthy 상태이고, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;bootstrap&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;이 코드 0으로 종료되면 정상입니다. Caddy 인증서도 발급되어야 합니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;bootstrap&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;은 일회성 작업이므로 종료 상태가 정상입니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker compose up -d&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 다시 실행해도 관리 스키마와 양식을 맞추며 일반 Lesson과 변경 이력은 보존합니다. 새 설치에는 Lesson 페이지가 없습니다. 첫 메모를 저장하기 전에는 최근 목록과 검색 결과가 비어 있어도 정상입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- Contract marker: There is no browser installation step. --&amp;amp;gt; 브라우저 설치 단계는 없습니다. 저장된 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;LocalSettings.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;가 없으면 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mediawiki&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; entrypoint가 Apache를 시작하기 전에 MediaWiki CLI 설치를 실행하고 DB 마이그레이션을 적용합니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/mw-config/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에 접속하거나, 브라우저 설치를 다시 시작하거나, 생성된 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;LocalSettings.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 컨테이너에 복사하지 마세요. 설치 화면이 나오거나 세션 만료 오류가 보이면 [[Help:S3 연구 메모리/문제 해결#브라우저에 설치 세션 만료가 표시됨|문제 해결 안내]]를 따릅니다.&lt;br /&gt;
&lt;br /&gt;
[https://s3wiki.yonsei.ac.kr/]를 엽니다. 읽기와 검색은 로그인 없이 할 수 있습니다. 작성과 편집에는 이름이 있는 위키 계정이 필요합니다.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/index.php/Special:Version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: Semantic MediaWiki, Page Forms, S3 Research Memory 확장 기능 확인&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/index.php/연구_메모리#create-a-lesson&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: 문서 ID를 정하고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Lesson:&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 메모 작성&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/index.php/Special:Search&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: MediaWiki 전문 검색&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/index.php/Special:AllPages?namespace=3000&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: 모든 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Lesson:&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 페이지&lt;br /&gt;
=== 브라우저 계정 만들기 ===&lt;br /&gt;
&lt;br /&gt;
자기 가입은 꺼져 있습니다. 설정에서 익명 그룹(&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;createaccount&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 권한을 제거했고, 관리자 그룹(&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sysop&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)만 계정을 만들 수 있습니다. 새 설치에서는 다음 순서로 일반 편집 계정을 만드세요.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MW_ADMIN_USERNAME&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;과 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MW_ADMIN_PASSWORD&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;로 로그인합니다.&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/index.php/Special:CreateAccount&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 엽니다.&lt;br /&gt;
# 사용할 사람의 이름을 알 수 있는 사용자 이름과 새 임시 비밀번호를 입력합니다.&lt;br /&gt;
# 계정을 만든 뒤 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/index.php/Special:ListUsers&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;에서 확인합니다.&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sysop&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;bureaucrat&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;agent&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 그룹은 추가하지 않습니다. 로그인한 일반 계정은 자동으로 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;user&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 권한을 받아 양식으로 메모를 작성·편집할 수 있습니다.&lt;br /&gt;
# 새 계정으로 로그인해 비밀번호를 바꾸고 메모 양식이 열리는지 확인합니다.&lt;br /&gt;
관리자 계정이나 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_WIKI_USERNAME&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 계정을 일상 편집에 함께 쓰지 마세요. 계정과 권한 기준은 [[Help:S3 연구 메모리/보안|S3RM1]]에 정리되어 있습니다.&lt;br /&gt;
&lt;br /&gt;
=== 설치 확인 ===&lt;br /&gt;
&lt;br /&gt;
로컬 테스트와 Compose 검사를 실행합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
make test&lt;br /&gt;
make check-compose&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;make test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 Compose 없이 메모리 내 위키 어댑터로 스키마, 에이전트 권한, 관계, 페이지네이션, 직렬화 출력 제한을 확인합니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;make check-compose&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;는 테스트용 필수 값을 넣은 뒤 Compose 배포 모델을 확인합니다.&lt;br /&gt;
&lt;br /&gt;
브라우저에서는 다음을 확인합니다.&lt;br /&gt;
&lt;br /&gt;
# 로그아웃 상태에서 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Special:Version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, 검색, Lesson 페이지가 열리고, 작성·편집은 로그인을 요구하는지 확인합니다.&lt;br /&gt;
# 새 설치라면 Lesson 네임스페이스의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Special:AllPages&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;가 비어 있어도 정상입니다.&lt;br /&gt;
# 로그인한 일반 계정으로 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/index.php/연구_메모리#create-a-lesson&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 열고 작성 양식이 보이는지 확인합니다. 확인용 가짜 메모는 저장하지 않습니다.&lt;br /&gt;
# 첫 실제 메모를 저장할 때 검색에 바로 나오는지, 필드와 근거 인용이 보이는지, &amp;#039;&amp;#039;&amp;#039;역사 보기&amp;#039;&amp;#039;&amp;#039;에 변경 이력이 생겼는지 확인합니다.&lt;br /&gt;
==== 클라이언트를 연결하기 전 공용 MCP 확인 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;의 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_PUBLIC_URL&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;과 같은 주소를 설정합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
export S3RM_MCP_URL=&amp;#039;https://s3wiki.yonsei.ac.kr/mcp&amp;#039;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
서버에서 프로세스 상태를 먼저 확인합니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_MCP_HTTP_PORT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 바꿨다면 8765도 같이 바꿉니다. 이 경로는 프로세스 상태만 반환하며 위키 데이터나 인증이 없습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
curl --fail --silent --show-error http://127.0.0.1:8765/healthz&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이어서 토큰 없이 MCP 초기화를 보냅니다. HTTP나 JSON 오류가 있으면 0이 아닌 코드로 끝납니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import json&lt;br /&gt;
import os&lt;br /&gt;
import urllib.request&lt;br /&gt;
&lt;br /&gt;
payload = json.dumps({&lt;br /&gt;
    &amp;quot;jsonrpc&amp;quot;: &amp;quot;2.0&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;initialize&amp;quot;,&lt;br /&gt;
    &amp;quot;params&amp;quot;: {&lt;br /&gt;
        &amp;quot;protocolVersion&amp;quot;: &amp;quot;2025-11-25&amp;quot;,&lt;br /&gt;
        &amp;quot;capabilities&amp;quot;: {},&lt;br /&gt;
        &amp;quot;clientInfo&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;s3rm-setup-smoke&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;1&amp;quot;},&lt;br /&gt;
    },&lt;br /&gt;
}).encode()&lt;br /&gt;
request = urllib.request.Request(&lt;br /&gt;
    os.environ[&amp;quot;S3RM_MCP_URL&amp;quot;],&lt;br /&gt;
    data=payload,&lt;br /&gt;
    headers={&lt;br /&gt;
        &amp;quot;Accept&amp;quot;: &amp;quot;application/json, text/event-stream&amp;quot;,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    method=&amp;quot;POST&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
with urllib.request.urlopen(request, timeout=20) as response:&lt;br /&gt;
    result = json.load(response)&lt;br /&gt;
assert result.get(&amp;quot;result&amp;quot;, {}).get(&amp;quot;serverInfo&amp;quot;, {}).get(&amp;quot;name&amp;quot;) == &amp;quot;S3 Research Memory&amp;quot;&lt;br /&gt;
print(&amp;quot;anonymous MCP initialize: ok&amp;quot;)&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
토큰이 없는 클라이언트도 초기화, 도구 목록, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;search_lessons&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get_lesson&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;find_related_lessons&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;find_analogies&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 사용할 수 있습니다. [[Help:S3 연구 메모리/MCP 클라이언트|S3RM4]]에 따라 연결하고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;search_lessons(limit=1)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 실행합니다. 다른 PC의 클라이언트에서도 같은 결과가 나오는지 확인하세요.&lt;br /&gt;
&lt;br /&gt;
메모 작성, 관계 연결, 근거 첨부가 필요한 클라이언트에는 플랫폼 설정으로 공용 토큰을 불러옵니다. 연결 확인만 하려고 가짜 메모를 만들지 않습니다. 쓰기 권한 경계는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;make test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;로 확인하고, 실제 첫 메모를 남길 때 MediaWiki 이력과 검색 결과를 확인합니다.&lt;br /&gt;
&lt;br /&gt;
=== 평소 시작과 종료 ===&lt;br /&gt;
&lt;br /&gt;
설치가 끝난 서비스를 시작합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose up -d&lt;br /&gt;
docker compose ps -a&lt;br /&gt;
make verify-domain&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
마지막 명령은 서버에서 본 HTTPS 위키와 MCP를 확인합니다. 다른 PC에서 접속되는지는 그 PC의 브라우저나 MCP 클라이언트로 따로 확인합니다.&lt;br /&gt;
&lt;br /&gt;
볼륨을 남기고 종료합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose down&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MediaWiki만 다시 시작합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose restart mediawiki&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
공용 MCP 프로세스만 다시 시작합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose restart mcp-http&lt;br /&gt;
docker compose ps mcp-http&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
의도적으로 설정을 바꾼 뒤 스키마·계정을 다시 맞춥니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose up -d --force-recreate bootstrap&lt;br /&gt;
docker compose logs bootstrap&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
일반 운영 중에는 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker compose down --volumes&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker volume rm&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, 수동 SQL 삭제를 실행하지 마세요. 위키의 기준 데이터가 사라집니다.&lt;br /&gt;
&lt;br /&gt;
=== 자격 증명 변경 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 값만 바꿔도 MariaDB나 MediaWiki에 이미 저장된 자격 증명은 바뀌지 않습니다. 해당 제품의 계정 관리 절차로 먼저 바꾸고, 같은 작업 시간에 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;와 관련 서비스를 함께 갱신합니다.&lt;br /&gt;
&lt;br /&gt;
* 공용 MCP 토큰: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;./scripts/configure-mcp-token.sh --rotate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 실행하고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 다시 만듭니다. 변경 경로를 확인한 뒤 새 handoff를 전달하고 클라이언트를 재연결합니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;--rotate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;가 없으면 일치하는 기존 토큰을 보존합니다. 공개 조회는 계속되지만 이전·새 쓰기 토큰을 동시에 받을 수는 없습니다.&lt;br /&gt;
* MCP 위키 계정: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;S3RM_WIKI_PASSWORD&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 바꾸고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;bootstrap&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 다시 실행한 뒤 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp-http&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 다시 만듭니다. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;bootstrap&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;은 전용 계정과 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;agent&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 그룹을 맞추고 높은 권한을 제거합니다.&lt;br /&gt;
* 일반 위키 계정: MediaWiki 화면에서 비밀번호를 바꿉니다. DB 테이블을 직접 편집하지 마세요.&lt;br /&gt;
* MariaDB 계정: MariaDB 공식 계정 관리 절차로 서버 계정을 바꾼 뒤, 같은 작업 시간에 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;.env&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 갱신합니다.&lt;br /&gt;
먼저 백업하고, 변경 뒤 조회를 확인합니다. 공용 토큰 절차는 [[Help:S3 연구 메모리/백업과 복원#공용 MCP 토큰 교체|S3RM0]]에 있습니다.&lt;br /&gt;
&lt;br /&gt;
=== 업데이트 ===&lt;br /&gt;
&lt;br /&gt;
MediaWiki 기본 이미지는 정확한 버전으로 고정되어 있습니다. PHP 의존성은 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker/mediawiki/composer.lock&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, Python 의존성은 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;mcp/uv.lock&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;을 사용합니다. MariaDB 이미지는 호환 태그를 사용합니다.&lt;br /&gt;
&lt;br /&gt;
# MediaWiki, Semantic MediaWiki, Page Forms, MariaDB, MCP 의존성의 릴리스 안내와 호환표를 확인합니다.&lt;br /&gt;
# [[Help:S3 연구 메모리/백업과 복원|S3RM0]]에 따라 전체 백업을 만들고 확인합니다.&lt;br /&gt;
# 버전 고정을 추적 가능한 커밋에서 바꿉니다. 실제 서버에서 검증하지 않은 floating 버전을 쓰지 마세요.&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;make test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;와 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;make check-compose&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;를 실행합니다.&lt;br /&gt;
# 별도 볼륨에 빌드하고 복원 시험을 합니다.&lt;br /&gt;
# 확인 뒤 실제 서버 이미지를 다시 만들고 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;bootstrap&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;의 마이그레이션·동기화를 완료합니다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
docker compose build --pull mediawiki mcp-http&lt;br /&gt;
docker compose up -d&lt;br /&gt;
docker compose logs mediawiki bootstrap mcp-http caddy&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
새 MediaWiki에서 만든 DB를 더 오래된 MediaWiki로 복원하지 마세요. 호환성은 [https://www.semantic-mediawiki.org/wiki/Help:Installation Semantic MediaWiki 설치 안내], [https://www.mediawiki.org/wiki/Extension:Page_Forms/Download_and_installation Page Forms 설치 안내], [https://www.mediawiki.org/wiki/Manual:Upgrading MediaWiki 업그레이드 안내]를 기준으로 확인합니다.&lt;/div&gt;</summary>
		<author><name>S3Admin</name></author>
	</entry>
</feed>