<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>프로그래밍 농장</title>
    <link>https://daily50.tistory.com/</link>
    <description>어제보다 나은 오늘의 나</description>
    <language>ko</language>
    <pubDate>Wed, 27 May 2026 22:49:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Tennessee201</managingEditor>
    <image>
      <title>프로그래밍 농장</title>
      <url>https://tistory1.daumcdn.net/tistory/3133664/attach/62c657ee84184a15bb312587b66cfbb1</url>
      <link>https://daily50.tistory.com</link>
    </image>
    <item>
      <title>5/7</title>
      <link>https://daily50.tistory.com/643</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/643</guid>
      <comments>https://daily50.tistory.com/643#entry643comment</comments>
      <pubDate>Thu, 7 May 2026 16:14:50 +0900</pubDate>
    </item>
    <item>
      <title>Trello 라인 봇 알림을 위한 API key/token 발급방법</title>
      <link>https://daily50.tistory.com/641</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;nbsp; Trello api key 발급을 위해 아래 링크접속 (작업자는 Admin 권한이 있어야함)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1155cc;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://trello.com/power-ups/admin/new&quot;&gt;https://trello.com/power-ups/admin/new&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 아래의 순서에 맞추어 입력&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;New Power-Up Integration name 입력 (ex. fnc_7sin ..)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Workspace 선택&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Email : 작업중인 admin 당사자의 email&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;support contact : 작업중인 admin 당사자의 email&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Author : 입력 (ex. f&amp;amp;c ..)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Iframe connector URL : 그대로 두기&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;create 클릭&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성된것 클릭하여 api key 확인가능&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;892&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UBLiN/dJMcac3EYeR/G9gv8vKOu8miVlVQp4VAvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UBLiN/dJMcac3EYeR/G9gv8vKOu8miVlVQp4VAvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UBLiN/dJMcac3EYeR/G9gv8vKOu8miVlVQp4VAvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUBLiN%2FdJMcac3EYeR%2FG9gv8vKOu8miVlVQp4VAvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;560&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Trello api token 발급을 위해 아래 링크접속&amp;nbsp; (작업자는 Admin 권한이 있어야함)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;링크 맨뒤의 ${key} 부분에 위에서 발급한 key 입력후 접속&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b6ec2;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://trello.com/1/authorize?expiration=never&amp;amp;scope=read,write,account&amp;amp;response_type=token&amp;amp;name=Server%20Token&amp;amp;key=$&quot;&gt;https://trello.com/1/authorize?expiration=never&amp;amp;scope=read,write,account&amp;amp;response_type=token&amp;amp;name=Server%20Token&amp;amp;key=$&lt;/a&gt;{key}&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXWj4/dJMcafF7q43/A1FdfUUEXK5suAQKuufpg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXWj4/dJMcafF7q43/A1FdfUUEXK5suAQKuufpg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXWj4/dJMcafF7q43/A1FdfUUEXK5suAQKuufpg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXWj4%2FdJMcafF7q43%2FA1FdfUUEXK5suAQKuufpg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;347&quot; height=&quot;768&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Trello Board id 조회를 위한 작업&amp;nbsp; (작업자는 Admin 권한이 있어야함)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우측상단의 눈 아이콘 클릭후 Board id 확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;415&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xHuxE/dJMcah40rcT/DBkO8Z4EHDdYFZSOsdvLvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xHuxE/dJMcah40rcT/DBkO8Z4EHDdYFZSOsdvLvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xHuxE/dJMcah40rcT/DBkO8Z4EHDdYFZSOsdvLvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxHuxE%2FdJMcah40rcT%2FDBkO8Z4EHDdYFZSOsdvLvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;415&quot; height=&quot;365&quot; data-origin-width=&quot;415&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위의 작업을 통해 총 아래 4개의 trello board 에 대한 api key / api token /&amp;nbsp; Board id 을 필요로 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+ 트렐로 플러그인 이슈 및 관련 포스트 참고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://daily50.tistory.com/617&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://daily50.tistory.com/617&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/641</guid>
      <comments>https://daily50.tistory.com/641#entry641comment</comments>
      <pubDate>Fri, 3 Apr 2026 12:10:33 +0900</pubDate>
    </item>
    <item>
      <title>svnadmin dump 시 리비전별 분할덤프</title>
      <link>https://daily50.tistory.com/640</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;svn 서버를 이관할때 기존 저장소의 데이터와 리비전 히스토리를 전부 이관하려면 svnadmin dump 를 사용하여야한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;통덤프를 진행한다면 그냥 아래와 같이 진행하면된다. &lt;b&gt;&lt;i&gt;dump(백업) / load(복구)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1774597175929&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;svnadmin dump WorkRepository &amp;gt; WorkRepository.dump&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 리비전 분할하여 이관하거나 최초이관후 추가로 덤프를 진행할때는 --incremental (증분) 옵션을 추가하여 덤프파일을 생성하고 load 하여야합니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;먼저, dump를 하기위해 기존의 Repository가 저장되어 있는 위치에서 다음의 명령어를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774597266125&quot; class=&quot;bash&quot; style=&quot;background-color: #f6f7f8; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;gt; svnadmin dump WorkRepository --incremental &amp;gt; WorkRepository.dump&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;WorkRepository는 저장되어있는 Repository의 경로 및 이름입니다. SVN 환경에 따라 다를 수 있으므로 확인해서 적절히 변경합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 명령어를 실행하면 모든 revision의 내용을 WorkRepository.dump 파일로 저장합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약, revision을 일정 범위만 하고자 한다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;-r&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파라메터를 추가하여 아래 명령어와 같이 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774597266125&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f6f7f8; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;&amp;gt; svnadmin dump WorkRepository -r 1:500 --incremental &amp;gt; WorkRepository_1_500.dump&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-r 1:500는 revision의 1부터 500까지 dump&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이어서 load를 하기위해, 먼저 이전하고자 하는 새 서버에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;빈 Repository를 생성&lt;/u&gt;해 주고, dump파일을 복사해 넣은 다음 아래의 명령어를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774597266126&quot; class=&quot;lua&quot; style=&quot;background-color: #f6f7f8; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;&amp;gt; svnadmin load WorkRepository &amp;lt; WorkRepository.dump&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;순서대로 load하게 되면 revision이 자연스럽게 이어집니다.&lt;/p&gt;
&lt;pre id=&quot;code_1774597266126&quot; class=&quot;lua&quot; style=&quot;background-color: #f6f7f8; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;&amp;gt; svnadmin load WorkRepository &amp;lt; WorkRepository_1_500.dump
&amp;gt; svnadmin load WorkRepository &amp;lt; WorkRepository_501_1000.dump&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/640</guid>
      <comments>https://daily50.tistory.com/640#entry640comment</comments>
      <pubDate>Fri, 27 Mar 2026 16:45:34 +0900</pubDate>
    </item>
    <item>
      <title>SCP: scp subsystem request failed on channel 0 에러 해결방법</title>
      <link>https://daily50.tistory.com/639</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;평소와 같이 scp 로 파일을 옮기는데 아래와 같은 에러가 발생하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별도의 방화벽이나 포트이슈도 아니고 같은 내부망이라 통신문제는 없었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;aa.png&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yE1N0/dJMcajn14Gc/U1J473mfK001O7pq3kzFGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yE1N0/dJMcajn14Gc/U1J473mfK001O7pq3kzFGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yE1N0/dJMcajn14Gc/U1J473mfK001O7pq3kzFGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyE1N0%2FdJMcajn14Gc%2FU1J473mfK001O7pq3kzFGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;779&quot; height=&quot;110&quot; data-filename=&quot;aa.png&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 에러로그를 구글링해보니 아래와 같이 -O 옵션을 추가해서 해결이 가능하다는것을 확인할수있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론은 -O 옵션을 사용하여 scp프로토콜을 강제로 사용하면 되는것이고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인은 SFTP 프로토콜이 클라이언트단 (SCP&amp;lt;-&amp;gt;SFTP (OpenSSH 9.0~))에서 호환성 이슈가 있어서 발생하는것이라고 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SCP는 기본적으로 SSH를 사용하여 파일을 복사한다.&lt;br /&gt;SFTP는 별도의 프로세스를 통해 파일을 전송하며, 보안성이 높다.&lt;br /&gt;OpenSSH 9.0 버전부터 SCP 명령어가 기본적으로 SFTP 프로토콜을 사용하기 시작했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;해당 에러의 근본적인 원인은&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;서버&amp;nbsp;측에서&amp;nbsp;SFTP&amp;nbsp;서브시스템&amp;nbsp;설정&amp;nbsp;문제&lt;br /&gt;2. 클라이언트 측에서 SFTP 프로토콜 사용 시 호환성 문제&lt;br /&gt;3.&amp;nbsp;네트워크&amp;nbsp;연결&amp;nbsp;문제&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;해결방법은&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. SCP 프로토콜 강제 사용:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;`scp -O` 옵션을 사용하여 SCP 프로토콜을 강제로 사용&lt;/p&gt;
&lt;pre id=&quot;code_1774510398303&quot; class=&quot;elixir&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;ex) scp -O username@host:path/to/file&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2. SSHD 구성 파일 확인:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;`/etc/ssh/sshd_config` 파일에서 SFTP 서브시스템 설정이 올바르게 되어있는지 확인&lt;br /&gt;3. SFTP 서버 파일 존재 여부 확인:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;`/usr/lib/openssh/sftp-server` 또는 `/usr/libexec/openssh/sftp-server` 파일이 존재하는지 확인&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처&lt;/p&gt;
&lt;figure id=&quot;og_1774510416247&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[SCP] subsystem request failed on channel 0 scp: Connection closed&quot; data-og-description=&quot;SCP/SFTP&amp;nbsp;프로토콜 SCP(Secure Copy Protocol)는 SSH를 기반으로 하는 파일 전송 프로토콜SFTP(SSH File Transfer Protocol)는 SCP와 동일하게 SSH를 기반으로 하는 프로토콜이지만 SCP보다 더 많은 기능을 가지고있다&quot; data-og-host=&quot;tuu-lx.tistory.com&quot; data-og-source-url=&quot;https://tuu-lx.tistory.com/18&quot; data-og-url=&quot;https://tuu-lx.tistory.com/18&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cemLlh/dJMb82MCNr1/Ht1RP8DvXM2MRaQ7krDHJ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ddjdCT/dJMb87f6a6x/QMyrrY9igZECRdHmCDnXFK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://tuu-lx.tistory.com/18&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tuu-lx.tistory.com/18&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cemLlh/dJMb82MCNr1/Ht1RP8DvXM2MRaQ7krDHJ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ddjdCT/dJMb87f6a6x/QMyrrY9igZECRdHmCDnXFK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[SCP] subsystem request failed on channel 0 scp: Connection closed&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SCP/SFTP&amp;nbsp;프로토콜 SCP(Secure Copy Protocol)는 SSH를 기반으로 하는 파일 전송 프로토콜SFTP(SSH File Transfer Protocol)는 SCP와 동일하게 SSH를 기반으로 하는 프로토콜이지만 SCP보다 더 많은 기능을 가지고있다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tuu-lx.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/639</guid>
      <comments>https://daily50.tistory.com/639#entry639comment</comments>
      <pubDate>Thu, 26 Mar 2026 16:35:31 +0900</pubDate>
    </item>
    <item>
      <title>퍼포스 리비전을 원하는대로 돌리고 빌드넣는법 (빌드머신에서 빌드성공한 형상으로 맞추는법)</title>
      <link>https://daily50.tistory.com/636</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;퍼포스&amp;nbsp;리비전을&amp;nbsp;원하는대로&amp;nbsp;돌리고&amp;nbsp;빌드넣는법&amp;nbsp;(빌드머신에서&amp;nbsp;빌드성공한&amp;nbsp;형상으로&amp;nbsp;맞추는법) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p4&amp;nbsp;sync&amp;nbsp;...@리비전 &lt;br /&gt;p4&amp;nbsp;clean&amp;nbsp;-a&amp;nbsp;-e&amp;nbsp;-d&amp;nbsp; &lt;br /&gt;&lt;br /&gt;clean&amp;nbsp;을&amp;nbsp;안해주면&amp;nbsp;없는파일을&amp;nbsp;찾으려고&amp;nbsp;해서&amp;nbsp;에러가&amp;nbsp;발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 clean 옵션들은 cli에서 동작시 recursive하게 돌게되고 불필요한 시간이 매우많이소요되기에 .. 필수적으로 넣어주어야한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;일단&amp;nbsp;퍼포스&amp;nbsp;리비전은&amp;nbsp;빌드시에&amp;nbsp;넣어주면&amp;nbsp;정상반영된다. &lt;br /&gt;&lt;br /&gt;위의&amp;nbsp;작업은&amp;nbsp;최초&amp;nbsp;한번만&amp;nbsp;해주면&amp;nbsp;문제가&amp;nbsp;없는듯하다&amp;nbsp;. &lt;br /&gt;&lt;br /&gt;플랫폼별로&amp;nbsp;변경이&amp;nbsp;있을때는,&amp;nbsp;에이전트에서 &lt;br /&gt;&lt;br /&gt;프로젝트/intermediate&amp;nbsp; &lt;br /&gt;프로젝트/binaries &lt;br /&gt;&lt;br /&gt;엔진/intermediate &lt;br /&gt;엔진/binaries&amp;nbsp; &lt;br /&gt;&lt;br /&gt;같이&amp;nbsp;캐시는&amp;nbsp;전부&amp;nbsp;삭제해주어야한다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;프로젝트&amp;nbsp;하위의&amp;nbsp;엔진폴더는&amp;nbsp;상관없다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;추가로&amp;nbsp;빌드&amp;nbsp;설명에&amp;nbsp;빌드내용을&amp;nbsp;남기는것도&amp;nbsp;생각해야한다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;추가로&amp;nbsp;플랫폼&amp;nbsp;빌드&amp;nbsp;사이에&amp;nbsp;무조건&amp;nbsp;p4&amp;nbsp;clean&amp;nbsp;-a&amp;nbsp;-e&amp;nbsp;-d&amp;nbsp;는&amp;nbsp;한번&amp;nbsp;해주는게&amp;nbsp;좋다.,&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;generate&amp;nbsp;할때&amp;nbsp;아래의&amp;nbsp;에러가&amp;nbsp;난다면,&amp;nbsp;장비에서&amp;nbsp;setup.bat&amp;nbsp;다시&amp;nbsp;돌려서&amp;nbsp;thirdparty&amp;nbsp;라이브러리를&amp;nbsp;다시&amp;nbsp;받고&amp;nbsp;generate&amp;nbsp;필요&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;안드로이드&amp;nbsp;빌드하고 &lt;br /&gt;windows&amp;nbsp;로&amp;nbsp;빌드할때는,&amp;nbsp;프로젝트/엔진&amp;nbsp;경로를&amp;nbsp;reset&amp;nbsp;--hard&amp;nbsp;HEAD&amp;nbsp;한번해주고,&amp;nbsp; &lt;br /&gt;&lt;br /&gt;SETUP.BAT&amp;nbsp;한번&amp;nbsp;실행해줘야지&amp;nbsp;generate&amp;nbsp;할때&amp;nbsp;에러안뜨고&amp;nbsp;넘어간다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;res&amp;nbsp;빌드하고&amp;nbsp;그냥&amp;nbsp;바로&amp;nbsp;bin&amp;nbsp;빌드해서&amp;nbsp;확인하는건지,&amp;nbsp;순서가&amp;nbsp;있는지&amp;nbsp;확인한다.&lt;/p&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/636</guid>
      <comments>https://daily50.tistory.com/636#entry636comment</comments>
      <pubDate>Tue, 17 Mar 2026 16:20:15 +0900</pubDate>
    </item>
    <item>
      <title>[git] You have divergent branches and need to specify how to reconcile them</title>
      <link>https://daily50.tistory.com/634</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;todo&lt;/p&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/634</guid>
      <comments>https://daily50.tistory.com/634#entry634comment</comments>
      <pubDate>Mon, 9 Mar 2026 12:22:06 +0900</pubDate>
    </item>
    <item>
      <title>[Perforce] Replica / Master server 에 대하여</title>
      <link>https://daily50.tistory.com/632</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;퍼포스 서버를 운용하며 여러 사용자가 마스터서버에 접근하게 되면 부하 및 지연이 발생할수있으며 퍼포스는 타 저장소와 다르게 이러한 이슈를 Replication 을 통하여 처리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레플리카서버는 로컬에 메인서버의 메타데이터를 가지기떄문에 이러한 동작이 가능합니다. 'jornal' 파일의 형식을 통하여 메인서버의 데이터를 Replication 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼포스 레플리카 서버의 &amp;amp; 마스터서버와의 구성 관계도&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;1065&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vn000/btsQIxsMrTc/L3UNcZ20TBykWivhUE7exK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vn000/btsQIxsMrTc/L3UNcZ20TBykWivhUE7exK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vn000/btsQIxsMrTc/L3UNcZ20TBykWivhUE7exK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVn000%2FbtsQIxsMrTc%2FL3UNcZ20TBykWivhUE7exK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;381&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;1065&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div&gt;- 레플리카서버 셋팅이후 Journal Sequence 번호 일치여부(정상설정여부) 확인 커맨드&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;p4&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;ndash;p&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;replica-&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;host:1666&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;pull&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;-lj&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;Current replica journaol states is :&amp;nbsp; &amp;nbsp; Journal 3,&amp;nbsp; &amp;nbsp; &amp;nbsp;Sequence 572.&lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt; &lt;span style=&quot;color: #4167c8; text-align: start;&quot;&gt;Current replica journaol states is :&amp;nbsp; &amp;nbsp; Journal 3,&amp;nbsp; &amp;nbsp; &amp;nbsp;Sequence 572.&amp;nbsp;&lt;/span&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Master DB Checksums 검증 (명령어 수행 후 server log 에서 확인가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;p4&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;master-&lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt;host:1666&lt;/span&gt;&lt;span style=&quot;color: #4167c8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;journaldbchecksums&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Perforce&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;info:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;db.config&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;checksums&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;match.&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;2019/12/05&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;00:57:36&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;1:&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #006fc0;&quot;&gt;expected&lt;/span&gt;&lt;span style=&quot;color: #006fc0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #006fc0;&quot;&gt;0x89C9ECE,&lt;/span&gt;&lt;span style=&quot;color: #006fc0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #006fc0;&quot;&gt;actual&lt;/span&gt;&lt;span style=&quot;color: #006fc0;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #006fc0;&quot;&gt;0x89C9ECE&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Perforce&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;info:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;db.configh&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;checksums&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; match.&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;2019/12/05&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;00:57:36&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;0:&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;expected&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;0x80E83973,&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;actual&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;0x80E83973.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Perforce&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;info:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;db.counters&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;checksums&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;match.&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;2019/12/05&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;00:57:36&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;1:&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;expected&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;0x977555C9,&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;actual&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;0x977555C9.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Perforce&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;info:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #162751;&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;db.nameval&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;checksums&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;empty.&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;2019/12/05&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;00:57:36&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;1:&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;expected&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;0x0,&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;actual&lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #162751;&quot;&gt;0x0&lt;/span&gt;&lt;/p&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/632</guid>
      <comments>https://daily50.tistory.com/632#entry632comment</comments>
      <pubDate>Mon, 22 Sep 2025 10:39:32 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] client_loop: send disconnect: Connection reset 발생이슈 해결법</title>
      <link>https://daily50.tistory.com/631</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;파이프라인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 빌드 중, 아래와 같은 에러로그가 발생하고 그대로 빌드가 실패해버리는 경우가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;+ 정확히 2시간 경과시 timeout 과 유사한 방식으로 에러를 내고 파이프라인 빌드를 종료했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;client_loop:&amp;nbsp;send&amp;nbsp;disconnect:&amp;nbsp;Connection&amp;nbsp;reset&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 로그 검색 시, 여러가지 원인이 나오는데, 가장 당연하지만 근접한 원인으로는 output 이 일정시간 없기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하여 아래 링크들과 같이 ssh 에서 여러가지 방법을 통하여 연결을 유지시키는 옵션들이 있다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1757928672662&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Fix SSH client_loop: send disconnect: Broken pipe&quot; data-og-description=&quot;Rezolva problema deconectarii subite SSH in Linux client_loop: send disconnect: Broken pipe . Tutorial pas cu pas pentru Linux si Mac.&quot; data-og-host=&quot;stealthsettings.com&quot; data-og-source-url=&quot;https://stealthsettings.com/en/fix-ssh-error-terminal-linux-client_loop-send-disconnect-broken-pipe.html&quot; data-og-url=&quot;https://stealthsettings.com/fix-ssh-error-terminal-linux-client_loop-send-disconnect-broken-pipe.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xkA1P/hyZJkQ3DCG/mNKRHYOZHkkKw6BIGauAt1/img.jpg?width=1200&amp;amp;height=677&amp;amp;face=0_0_1200_677&quot;&gt;&lt;a href=&quot;https://stealthsettings.com/en/fix-ssh-error-terminal-linux-client_loop-send-disconnect-broken-pipe.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stealthsettings.com/en/fix-ssh-error-terminal-linux-client_loop-send-disconnect-broken-pipe.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xkA1P/hyZJkQ3DCG/mNKRHYOZHkkKw6BIGauAt1/img.jpg?width=1200&amp;amp;height=677&amp;amp;face=0_0_1200_677');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Fix SSH client_loop: send disconnect: Broken pipe&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Rezolva problema deconectarii subite SSH in Linux client_loop: send disconnect: Broken pipe . Tutorial pas cu pas pentru Linux si Mac.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stealthsettings.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본인이 진행중인 프로젝트의 경우, 에이전트가 별도 실행파일을 통하여 로컬에서 자동으로 동작하도록 구성해두었기 때문에,&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;http.keepAlive 옵션을 추가하여 연결이 원하는 만큼 끊어지지 않도록 설정하였다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 이러한 셋팅은 특별한 경우가 아니라면 필수적인것은 아니기 때문에 고민을 해보아야 한다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1757928647363&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;HTTP Keep-Alive, 성능 최적화의 핵심일까? 쓸데없는 설정일까?&quot; data-og-description=&quot;웹 성능을 최적화할 때 자주 등장하는 개념 중 하나가 HTTP Keep-Alive다. Keep-Alive는 TCP 연결을 유지해 여러 개의 HTTP 요청을 처리할 수 있도록 도와주지만, 모든 환경에서 무조건 좋은 선택이 되는 &quot; data-og-host=&quot;bin-repository.tistory.com&quot; data-og-source-url=&quot;https://bin-repository.tistory.com/185&quot; data-og-url=&quot;https://bin-repository.tistory.com/185&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Syzuc/hyZIWYzaDs/2X2e6KvnVsl0GfOz7jPlo1/img.jpg?width=800&amp;amp;height=389&amp;amp;face=0_0_800_389,https://scrap.kakaocdn.net/dn/wtwvu/hyZJf4gieC/UgDDUSq0f5iPWn22UVDV1k/img.jpg?width=800&amp;amp;height=389&amp;amp;face=0_0_800_389,https://scrap.kakaocdn.net/dn/ebO0cV/hyZJjECVK3/KpQuWcaggXVD1tGVGNOVf1/img.png?width=2569&amp;amp;height=988&amp;amp;face=0_0_2569_988&quot;&gt;&lt;a href=&quot;https://bin-repository.tistory.com/185&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bin-repository.tistory.com/185&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Syzuc/hyZIWYzaDs/2X2e6KvnVsl0GfOz7jPlo1/img.jpg?width=800&amp;amp;height=389&amp;amp;face=0_0_800_389,https://scrap.kakaocdn.net/dn/wtwvu/hyZJf4gieC/UgDDUSq0f5iPWn22UVDV1k/img.jpg?width=800&amp;amp;height=389&amp;amp;face=0_0_800_389,https://scrap.kakaocdn.net/dn/ebO0cV/hyZJjECVK3/KpQuWcaggXVD1tGVGNOVf1/img.png?width=2569&amp;amp;height=988&amp;amp;face=0_0_2569_988');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;HTTP Keep-Alive, 성능 최적화의 핵심일까? 쓸데없는 설정일까?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;웹 성능을 최적화할 때 자주 등장하는 개념 중 하나가 HTTP Keep-Alive다. Keep-Alive는 TCP 연결을 유지해 여러 개의 HTTP 요청을 처리할 수 있도록 도와주지만, 모든 환경에서 무조건 좋은 선택이 되는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bin-repository.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/631</guid>
      <comments>https://daily50.tistory.com/631#entry631comment</comments>
      <pubDate>Mon, 15 Sep 2025 18:30:57 +0900</pubDate>
    </item>
    <item>
      <title>Perforce 기본개념 및 p4v 사용정리</title>
      <link>https://daily50.tistory.com/628</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;연초에 사내 프로젝트를 svn+git 에서 perforce 로 전환하면서 정리해두었던 기본개념을 간략하게 정리해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bicuwD/btsQd9AibNJ/B5nap37cjMrTLnemCz8DiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bicuwD/btsQd9AibNJ/B5nap37cjMrTLnemCz8DiK/img.png&quot; data-alt=&quot;p4v 기본구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bicuwD/btsQd9AibNJ/B5nap37cjMrTLnemCz8DiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbicuwD%2FbtsQd9AibNJ%2FB5nap37cjMrTLnemCz8DiK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;613&quot; height=&quot;218&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;p4v 기본구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 퍼포스는 git, svn,hg 와 같은 형상관리툴이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 git과 같은 저장소의 경우 중앙집중형 저장소로 로컬에서 작업시 모든 히스토리를 내려받아야 하였지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Perforce의 경우 메인서버의 저장소인 Depot 에 모든 데이터가 저장되기 때문에, 빠른 처리 및 서버 동기화가 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(예를 들어 특정 경로의 작업이 필요하다면 내 로컬의 작업공간으로서 해당경로 workspace를 생성 후 작업 -&amp;gt; 이후 서버 submit이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼포스의 경우 작업자외에는 cli 로 자동화하여 관리하는것이 좋습니다. 예를들어 빌드 전후로 clean sync 시 여러 옵션을 통하여 디폴트로 full 재귀로 도는 명령어들을 원하는 부분만 clean sync 하는등의 작업은 빌드구성시 필수적입니다.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;P4V는 퍼포스 cli를 gui 해놓은 툴이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;i&gt;- workspace 생성&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[(P4V) helix visual client]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상단 메뉴바 &amp;gt; Connection &amp;gt; new workspace&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. workspace 이름 , root 경로 설정후 매핑 진행&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DIBpk/btsQdsNrmYh/BRQ89YrqJdZ6VvVFnI3Ye0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DIBpk/btsQdsNrmYh/BRQ89YrqJdZ6VvVFnI3Ye0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DIBpk/btsQdsNrmYh/BRQ89YrqJdZ6VvVFnI3Ye0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDIBpk%2FbtsQdsNrmYh%2FBRQ89YrqJdZ6VvVFnI3Ye0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;330&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Get lastest로 최신 형상으로 sync&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;50&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6B1VI/btsQfhdbf5o/oPfdm68jC3a359xaDHnzT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6B1VI/btsQfhdbf5o/oPfdm68jC3a359xaDHnzT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6B1VI/btsQfhdbf5o/oPfdm68jC3a359xaDHnzT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6B1VI%2FbtsQfhdbf5o%2FoPfdm68jC3a359xaDHnzT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;50&quot; height=&quot;55&quot; data-origin-width=&quot;50&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp;-&amp;gt; 현재 로컬과 서버 파일의 형상이 동일함.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;55&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLf4wc/btsQhdt3M4U/YCSkznqT4VvNUgKEVH6UmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLf4wc/btsQhdt3M4U/YCSkznqT4VvNUgKEVH6UmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLf4wc/btsQhdt3M4U/YCSkznqT4VvNUgKEVH6UmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLf4wc%2FbtsQhdt3M4U%2FYCSkznqT4VvNUgKEVH6UmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;55&quot; height=&quot;52&quot; data-origin-width=&quot;55&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp;-&amp;gt; 현재 로컬과 서버 파일의 형상이 다름 : Get Latest Revision 필요&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;52&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tzB7Z/btsQfDGWXeH/vGgoBixr7vs5GwjzKVnJsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tzB7Z/btsQfDGWXeH/vGgoBixr7vs5GwjzKVnJsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tzB7Z/btsQfDGWXeH/vGgoBixr7vs5GwjzKVnJsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtzB7Z%2FbtsQfDGWXeH%2FvGgoBixr7vs5GwjzKVnJsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;50&quot; data-origin-width=&quot;52&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp;-&amp;gt; 현재 로컬에 수정사항이 생김 : 서버올리기(checkout&amp;gt;pending changlist&amp;gt;submit) / 되돌리기(revert)&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;자주사용하는 perforce cli command&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;command&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;p4 submit&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;변경리스트 제출&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;p4 diff [경로]&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;변경사항 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;p4 opened&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;workspace 파일 작업 이력 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;p4 revert [경로]&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;작업파일 복구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;p4 delete [경로]&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;작업파일 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;p4 add [~] [경로]&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;작업파일 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;p4 verify -q //...&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;무결성 체크 ( perforce 서버 Lock 등 확인필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존저장소에 대응되는 퍼포스의&amp;nbsp; cli 커맨드는 아래를 참고하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/commands.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/commands.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756707223028&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Commands&quot; data-og-description=&quot;| 2025.1 Commands Click a letter A | B | C | D | E | F | G | H | I | J | K | L | M | O | P | R | S | T | U | V | W | Z A p4 add p4 add (graph) p4 admin p4 aliases p4 annotate p4 archive p4 attribute B p4 bgtask p4 branch p4 branches C p4 cachepurge p4 chan&quot; data-og-host=&quot;help.perforce.com&quot; data-og-source-url=&quot;https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/commands.html&quot; data-og-url=&quot;https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/commands.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/commands.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/commands.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Commands&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;| 2025.1 Commands Click a letter A | B | C | D | E | F | G | H | I | J | K | L | M | O | P | R | S | T | U | V | W | Z A p4 add p4 add (graph) p4 admin p4 aliases p4 annotate p4 archive p4 attribute B p4 bgtask p4 branch p4 branches C p4 cachepurge p4 chan&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;help.perforce.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/628</guid>
      <comments>https://daily50.tistory.com/628#entry628comment</comments>
      <pubDate>Mon, 1 Sep 2025 15:20:53 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] 암호화된 Credentials 복호화</title>
      <link>https://daily50.tistory.com/626</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p style=&quot;color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Jenkins 빌드의 Credentials 값이 전부 Serect으로 처리되어 있으며, 백업본도 없다는 전제하에 해당 크리덴셜을 복호화하는 방법에 대해 포스팅한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;hudson.util.Secret.decrypt&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;Jenkins 스크립트 콘솔에서 hudson.util.Secret.decrypt 함수를 사용하면 암호화된 값을 복호화할 수 있다. 단, 암호화된 값을 알아내야 하는데, 개발자 모드를 사용하면 알아낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 암호문 알아내기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;값을 확인할 Credential로 접근한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwUFzp/btsP8A4dUxp/dGvM1QshEAEv3Vi3OFYa11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwUFzp/btsP8A4dUxp/dGvM1QshEAEv3Vi3OFYa11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwUFzp/btsP8A4dUxp/dGvM1QshEAEv3Vi3OFYa11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwUFzp%2FbtsP8A4dUxp%2FdGvM1QshEAEv3Vi3OFYa11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1424&quot; height=&quot;369&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;331&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이 페이지에서 Update 버튼을 클릭하면 값을 갱신할 수 있는 페이지로 이동하는데,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tUt1t/btsP5hyqD6t/mTudGIYbR8OJY8cQEWLAeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tUt1t/btsP5hyqD6t/mTudGIYbR8OJY8cQEWLAeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tUt1t/btsP5hyqD6t/mTudGIYbR8OJY8cQEWLAeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtUt1t%2FbtsP5hyqD6t%2FmTudGIYbR8OJY8cQEWLAeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1800&quot; height=&quot;695&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;494&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;보면 값에 해당하는 부분이 Concealed되어 있음을 알 수 있다. 여기서 Change Password 버튼을 클릭하면 아래와 같이 마스킹된 값을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rWRzd/btsP76hXvhA/IBIDEL5nF71wat5i5Dy5jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rWRzd/btsP76hXvhA/IBIDEL5nF71wat5i5Dy5jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rWRzd/btsP76hXvhA/IBIDEL5nF71wat5i5Dy5jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrWRzd%2FbtsP76hXvhA%2FIBIDEL5nF71wat5i5Dy5jk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1785&quot; height=&quot;730&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 상태에서 브라우저의 개발자 모드로 접근해 확인할 요소를 클릭하면 아래와 같이 선택한 요소의 HTML을 찾을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/85bOQ/btsP612R2x4/by6wKMKNNiLrkidPhvy5jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/85bOQ/btsP612R2x4/by6wKMKNNiLrkidPhvy5jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/85bOQ/btsP612R2x4/by6wKMKNNiLrkidPhvy5jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F85bOQ%2FbtsP612R2x4%2Fby6wKMKNNiLrkidPhvy5jK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3346&quot; height=&quot;775&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;찾은 tag 속성 중 value가 바로 Secret의 암호문에 해당한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 스크립트 콘솔에서 복호화&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 Jenkins 스크립트 콘솔로 접근하여 아래 코드를 실행시킨다.&lt;/p&gt;
&lt;pre id=&quot;code_1756202760334&quot; class=&quot;reasonml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;println hudson.util.Secret.decrypt(&quot;암호문&quot;)

# 예시
println hudson.util.Secret.decrypt(&quot;{AQAAABAAAAAQ9Db4FBoIVP6J7HBc2bhBlwjf56/tbk5wtWWQbgD2NC8=}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;865&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rGz0w/btsP57WKgQo/HdtOHL02H3Iyw7el0zh171/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rGz0w/btsP57WKgQo/HdtOHL02H3Iyw7el0zh171/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rGz0w/btsP57WKgQo/HdtOHL02H3Iyw7el0zh171/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrGz0w%2FbtsP57WKgQo%2FHdtOHL02H3Iyw7el0zh171%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1874&quot; height=&quot;1267&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;865&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;평문이 test라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1756202783259&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Accessing and dumping Jenkins credentials | Codurance&quot; data-og-description=&quot;Jenkins offers a credentials store where we can keep our secrets. Of someone stole your source code and dumped your databases, you might think it's game over, but that's not always true...&quot; data-og-host=&quot;www.codurance.com&quot; data-og-source-url=&quot;https://www.codurance.com/publications/2019/05/30/accessing-and-dumping-jenkins-credentials&quot; data-og-url=&quot;https://www.codurance.com/publications/2019/05/30/accessing-and-dumping-jenkins-credentials&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/s3EeO/hyZC8RQoS6/5hnaOMbVgVhKAGy33hEiqK/img.jpg?width=1200&amp;amp;height=797&amp;amp;face=466_298_544_384,https://scrap.kakaocdn.net/dn/VvtDf/hyZDZGIeV7/fqjIKzfUvBep6jpqoa5tVk/img.jpg?width=1200&amp;amp;height=797&amp;amp;face=466_298_544_384,https://scrap.kakaocdn.net/dn/bILplL/hyZC1kSVf2/o8D9EkJJHv1XwaK37lNfU1/img.png?width=1304&amp;amp;height=968&amp;amp;face=0_0_1304_968&quot;&gt;&lt;a href=&quot;https://www.codurance.com/publications/2019/05/30/accessing-and-dumping-jenkins-credentials&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codurance.com/publications/2019/05/30/accessing-and-dumping-jenkins-credentials&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/s3EeO/hyZC8RQoS6/5hnaOMbVgVhKAGy33hEiqK/img.jpg?width=1200&amp;amp;height=797&amp;amp;face=466_298_544_384,https://scrap.kakaocdn.net/dn/VvtDf/hyZDZGIeV7/fqjIKzfUvBep6jpqoa5tVk/img.jpg?width=1200&amp;amp;height=797&amp;amp;face=466_298_544_384,https://scrap.kakaocdn.net/dn/bILplL/hyZC1kSVf2/o8D9EkJJHv1XwaK37lNfU1/img.png?width=1304&amp;amp;height=968&amp;amp;face=0_0_1304_968');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Accessing and dumping Jenkins credentials | Codurance&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Jenkins offers a credentials store where we can keep our secrets. Of someone stole your source code and dumped your databases, you might think it's game over, but that's not always true...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codurance.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Devops</category>
      <author>Tennessee201</author>
      <guid isPermaLink="true">https://daily50.tistory.com/626</guid>
      <comments>https://daily50.tistory.com/626#entry626comment</comments>
      <pubDate>Tue, 26 Aug 2025 19:06:48 +0900</pubDate>
    </item>
  </channel>
</rss>