<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer on JU HEON's Blog</title><link>https://juheon.com/tags/developer/</link><description>Recent content in Developer on JU HEON's Blog</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><lastBuildDate>Mon, 20 Apr 2026 06:12:59 +0900</lastBuildDate><atom:link href="https://juheon.com/tags/developer/index.xml" rel="self" type="application/rss+xml"/><item><title>AI를 활용한 팀내 개발자 포탈</title><link>https://juheon.com/p/building-ai-portal-power-pages/</link><pubDate>Mon, 20 Apr 2026 05:09:59 +0900</pubDate><guid>https://juheon.com/p/building-ai-portal-power-pages/</guid><description>&lt;img src="https://juheon.com/" alt="Featured image of post AI를 활용한 팀내 개발자 포탈" /&gt;&lt;h1 id="power-pages를-호스팅처럼-이용하게-되면-겪는-일"&gt;Power Pages를 호스팅처럼 이용하게 되면 겪는 일
&lt;/h1&gt;&lt;p&gt;AI라는 미명 아래 이런저런 코딩을 하다보면, 그리고 M365 플랫폼을 쓰는 회사에 근무하다 보면 결국 Microsoft가 제공해주는 플랫폼 안에서 결과물을 보여줘야 한다.&lt;br&gt;총무팀에게 맘껏 개발하라고 &amp;lsquo;개발 서버&amp;rsquo;를 주는 회사는 없을 테니까&amp;hellip; 😇&lt;br&gt;급기야 대안을 찾아다 Power Platforms 안에 있는 Power Pages의 웹 리소스 기능을 마치 호스팅 서버 마냥 이용하게 되었다.&lt;br&gt;기본에 내가 만들었던 &lt;a class="link" href="https://juheon.com/p/smart-progress-management-page/" &gt;AI를 활용한 마스터플랜(Progress Tracker)&lt;/a&gt;, &lt;a class="link" href="https://juheon.com/p/ai-global-hotel-dashboard/" &gt;AI를 활용한 Global Hotel Dashboard&lt;/a&gt; 등 여러 프로젝트들도 모두 Power Pages에 업로드 되어 있다.&lt;br&gt;Power Pages를 활용했을 때 장점은 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;별도의 호스팅 서버 없이 회사 내부망(VDI 환경)에서 &lt;strong&gt;HTML, CSS, JS로 이뤄진 웹 리소스를 호스팅하고 테스트&lt;/strong&gt;할 수 있다.&lt;/li&gt;
&lt;li&gt;M365 회사 환경 기반이기 때문에 &lt;strong&gt;트래픽 제한도 없다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;외부에서 접속시 VPN 혹은 별도 소프트웨어로 가상환경 접속했을 때와 마찬가지로 &lt;strong&gt;회사 임직원임을 인증해야지만 접속이 가능하다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Dataverse를 이용할 수 있다면 원본 DB에 대한 접근 권한도 세부적으로 설정 가능하며, SharePoint를 대체 이용한다 해도 원본 DB에 대한 접근은 어느정도 차단이 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;한편, 단점도 있다. &lt;br&gt;이 부분은 사용자 입장에서 &amp;lsquo;권한&amp;rsquo;이 부족하기 때문에 발생하는 문제도 더러 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python은 호스팅 불가하므로 로컬 환경에서 테스트해야 한다. Streamlit으로 웹 페이를 구성했다면 HTML 기반으로 다시 제작해야 한다. 😇&lt;/li&gt;
&lt;li&gt;기본 사용자의 경우 업로드는 가능하지만 업로드한 파일의 수정은 불가능하기 때문에 &lt;strong&gt;코드가 업데이트 되면 매번 새로운 파일을 업로드해야 한다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;앞서 권한이 부족하기 때문에 VS Code Power Platforms 확장 등을 통해 개발자 환경을 구현할 수 없다.&lt;/li&gt;
&lt;li&gt;Power Pages 자체는 구글 드라이브나 원드라이브처럼 &lt;strong&gt;폴더 구조가 없기 때문에&lt;/strong&gt; 처음 접하는 사람들에게는 다소 생소하고 어렵다.&lt;br&gt;예를 들어, devportal/index/v0.1 이런식으로 파일명을 입력하고 업로드해야 폴더 구가 생성되는데, 해당 폴더 구조도 터미널에서 리소스 전체를 다운로드 받을 때나 압축파일 안에서 확인 가능한 구조다.&lt;br&gt;그래서 업로드 하고 나면 HTML 단일 파일 하나만 덩그러니 목록에 나타난다.
이렇다 보니 &amp;lsquo;총무팀&amp;rsquo;이라는 솔루션을 만들어 놓고 팀원들이 접속해서 나름의 개발(?)을 진행하고 있는데, 무수히 많은 HTML 파일들이 올라온다.&lt;br&gt;하지만, 어떤 파일이 최신 파일인지 누가 업로드했는지, 어떤 파일을 지울 수 있는지 당최 알 수가 없다. 그래서 만들었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="팀내-개발자-포탈"&gt;팀내 개발자 포탈
&lt;/h1&gt;&lt;p&gt;&lt;img alt="팀내 개발자 포탈 DEMO" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="531" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://juheon.com/p/building-ai-portal-power-pages/20260420053802.png" srcset="https://juheon.com/p/building-ai-portal-power-pages/20260420053802_hu_e4e20639bf7dbf55.png 800w, https://juheon.com/p/building-ai-portal-power-pages/20260420053802.png 885w" width="885"&gt;&lt;/p&gt;
&lt;p&gt;팀내 개발자 포탈에서는 본인이 &lt;strong&gt;개발중인 사이트 명칭과 목적, Power Pages상 업로드 후 부여된 URL, 주요 업데이트 내용, 권한(전체 임직원인지, 특정 팀만인지, 제한된 사용자인지) 등을 List-up&lt;/strong&gt; 한다.&lt;br&gt;특히, &lt;strong&gt;팀원 의견(기본적으로 익명)을 토대로 수정/보완해야 될 사항들을 피드백&lt;/strong&gt; 받는 간단한 구조의 시스템이다.&lt;br&gt;개발자 혼자서 아무리 테스트를 해봐도 다양한 클라이언트 환경에서 발생하는 문제를 알기도 어렵고, 매일 코드를 보다보면 띄어쓰기 하나, 오타 하나도 발견을 못하는 경우도 비일비재해서 실제 개발한 웹사이트(시스템)를 오픈하려면 무수히 많은 사람들의 테스트가 많은 도움이 된다.&lt;br&gt;&lt;br&gt;그런 측면을 포커싱 했고, SharePoint상 업로드된 DB(devportal.json)는 Power Automate의 흐름을 통해 Read/Write 하도록 설정했다.&lt;br&gt;사실 어떤면에서는 이렇게 코드를 짜고 업로드하는 것보다 &lt;strong&gt;Power Automate 흐름을 설정하는 게 더 어려울 수 있다.&lt;/strong&gt; &lt;br&gt;왜냐하면 이 흐름을 AI가 코드를 짜주지 않는데, 아니 짜줄 수가 없다. 😇&lt;br&gt;순서도처럼 사용자가 하나하나 이벤트를 설정해줘야 되다보니 그렇기도 하고, Copilot이 아직 제대로 성능을 내지 못하는 것도 그 이유 중 하나라 본다.&lt;br&gt;흐름만 다뤄도 분량이 만만치 않아서.. 흐름에 대한 포스팅은 다음을 기약해 보겠다.&lt;/p&gt;
&lt;p&gt;&lt;img alt="상세보기 화면" class="gallery-image" data-flex-basis="197px" data-flex-grow="82" height="1077" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://juheon.com/p/building-ai-portal-power-pages/20260420054204.png" srcset="https://juheon.com/p/building-ai-portal-power-pages/20260420054204_hu_8bce7426fc7de95a.png 800w, https://juheon.com/p/building-ai-portal-power-pages/20260420054204.png 886w" width="886"&gt;&lt;/p&gt;
&lt;p&gt;


&lt;details class="custom-details" open&gt;
 &lt;summary class="details-summary"&gt;
 &lt;span class="icon"&gt;&lt;/span&gt;
 &lt;span class="summary-title"&gt;JSON 파일 초기 구조(devportal.json)&lt;/span&gt;
 &lt;/summary&gt;
 &lt;div class="details-content"&gt;
 &lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;name&amp;#34;: &amp;#34;사이트 명칭&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;dev&amp;#34;: &amp;#34;개발자 이름&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;purpose&amp;#34;: &amp;#34;이용 목적&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;url&amp;#34;: &amp;#34;https://...&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;version&amp;#34;: &amp;#34;v1.0&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;update&amp;#34;: &amp;#34;주요 업데이트 내용&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;perm&amp;#34;: &amp;#34;팀&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;opinions&amp;#34;: []
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;/div&gt;
&lt;/details&gt;

&lt;style&gt;
.custom-details {
 margin: 1rem 0;
 padding: 0;
 border: 1px solid #e1e4e8;
 border-radius: 8px;
 background-color: #ffffff;
 overflow: hidden;
 transition: all 0.3s ease;
}

.details-summary {
 display: flex;
 align-items: center;
 padding: 12px 16px;
 background-color: #f8f9fa; 
 color: #203B8A; 
 font-weight: 600;
 cursor: pointer;
 list-style: none;
 border-bottom: 1px solid transparent;
}

.details-summary::-webkit-details-marker {
 display: none;
}

.custom-details[open] .details-summary {
 border-bottom: 1px solid #e1e4e8;
 background-color: #f1f3f9; 
}

.summary-title {
 margin-left: 10px;
}

 
.details-summary::before {
 content: '📁'; 
 margin-right: 8px;
 font-size: 1.1rem;
 transition: transform 0.2s ease;
 display: inline-block; 
}

.custom-details[open] .details-summary::before {
 content: '📂'; 
 transform: rotate(0deg); 
}

.details-content {
 padding: 16px;
 background-color: #fff;
}

 
.details-content pre {
 margin: 0;
}
&lt;/style&gt;
&lt;br&gt;&lt;/p&gt;



&lt;details class="custom-details" open&gt;
 &lt;summary class="details-summary"&gt;
 &lt;span class="icon"&gt;&lt;/span&gt;
 &lt;span class="summary-title"&gt;HTML 코드 내 Power Automate 설정&lt;/span&gt;
 &lt;/summary&gt;
 &lt;div class="details-content"&gt;
 &lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="o"&gt;===================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;⚙️&lt;/span&gt;  &lt;span class="err"&gt;설정&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="n"&gt;Power&lt;/span&gt; &lt;span class="n"&gt;Automate&lt;/span&gt; &lt;span class="n"&gt;Flow&lt;/span&gt; &lt;span class="n"&gt;URL을&lt;/span&gt; &lt;span class="err"&gt;여기에&lt;/span&gt; &lt;span class="err"&gt;입력하세요&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="o"&gt;===================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;CONFIG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;✅&lt;/span&gt; &lt;span class="n"&gt;Read&lt;/span&gt; &lt;span class="n"&gt;Flow&lt;/span&gt; &lt;span class="n"&gt;URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;트리거&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;When&lt;/span&gt; &lt;span class="n"&gt;HTTP&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Anyone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Get&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ne"&gt;File&lt;/span&gt; &lt;span class="n"&gt;Path에&lt;/span&gt; &lt;span class="n"&gt;triggerBody&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;사용&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Response&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Get_file_content_using_path&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="n"&gt;FLOW_READ_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;✅&lt;/span&gt; &lt;span class="n"&gt;Write&lt;/span&gt; &lt;span class="n"&gt;Flow&lt;/span&gt; &lt;span class="n"&gt;URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="n"&gt;FLOW_WRITE_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;✅&lt;/span&gt; &lt;span class="n"&gt;Flow&lt;/span&gt; &lt;span class="ne"&gt;File&lt;/span&gt; &lt;span class="n"&gt;Path의&lt;/span&gt; &lt;span class="n"&gt;triggerBody&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;로&lt;/span&gt; &lt;span class="err"&gt;전달할&lt;/span&gt; &lt;span class="err"&gt;파일명&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt;    &lt;span class="err"&gt;예시&lt;/span&gt; &lt;span class="ne"&gt;File&lt;/span&gt; &lt;span class="ne"&gt;Path&lt;/span&gt; &lt;span class="err"&gt;설정&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Shared&lt;/span&gt; &lt;span class="n"&gt;Documents&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;폴더명&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;triggerBody&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="n"&gt;FILE_NAME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;devportal.json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;데모&lt;/span&gt; &lt;span class="err"&gt;모드&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;true&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;샘플&lt;/span&gt; &lt;span class="err"&gt;데이터&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="bp"&gt;false&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;실제&lt;/span&gt; &lt;span class="n"&gt;Flow&lt;/span&gt; &lt;span class="err"&gt;연결&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="n"&gt;DEMO_MODE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;/div&gt;
&lt;/details&gt;

&lt;style&gt;
.custom-details {
 margin: 1rem 0;
 padding: 0;
 border: 1px solid #e1e4e8;
 border-radius: 8px;
 background-color: #ffffff;
 overflow: hidden;
 transition: all 0.3s ease;
}

.details-summary {
 display: flex;
 align-items: center;
 padding: 12px 16px;
 background-color: #f8f9fa; 
 color: #203B8A; 
 font-weight: 600;
 cursor: pointer;
 list-style: none;
 border-bottom: 1px solid transparent;
}

.details-summary::-webkit-details-marker {
 display: none;
}

.custom-details[open] .details-summary {
 border-bottom: 1px solid #e1e4e8;
 background-color: #f1f3f9; 
}

.summary-title {
 margin-left: 10px;
}

 
.details-summary::before {
 content: '📁'; 
 margin-right: 8px;
 font-size: 1.1rem;
 transition: transform 0.2s ease;
 display: inline-block; 
}

.custom-details[open] .details-summary::before {
 content: '📂'; 
 transform: rotate(0deg); 
}

.details-content {
 padding: 16px;
 background-color: #fff;
}

 
.details-content pre {
 margin: 0;
}
&lt;/style&gt;
&lt;blockquote class="alert alert-success"&gt;
 &lt;div class="alert-header"&gt;
 &lt;span class="alert-icon"&gt;&lt;/span&gt;
 &lt;span class="alert-title"&gt;&lt;strong&gt;팀내 개발자 포탈 공유&lt;/strong&gt;&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="alert-body"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://juheon.com/files/devportal.html" &gt;🌐 새 창에서 개발자 포탈 열기(Ctrl + 클릭)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/blockquote&gt;</description></item></channel></rss>