<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>맛난호빵</title>
    <link>https://steamb23.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 26 May 2026 15:11:08 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>맛난호빵</managingEditor>
    <image>
      <title>맛난호빵</title>
      <url>https://tistory1.daumcdn.net/tistory/3200407/attach/370a520959ff4d14b2ab7bcda7e08984</url>
      <link>https://steamb23.tistory.com</link>
    </image>
    <item>
      <title>챗봇 명령어 매개변수 파싱 코드</title>
      <link>https://steamb23.tistory.com/7</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;만들다가 따옴표와 쌍따옴표로 구분되는 매개변수 파싱이 필요해서 파서를 만들었다. (띄어쓰기가 들어간 문자열을 받아야했다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규 표현식을 사용해도 됬지만... 괜히 잡스럽게 내부 코드가 덕지덕지 붙어 돌아갈 것 같아서 IndexOf와 Substring을 활용해서 경량 파서를 직접 구현했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따옴표가 없을 땐 그냥 특정 문자를 대상으로 Split 함수를 사용하거나 IndexOf와 Substring을 활용하더라도 간단하게 구현되는 것과 다르게 따옴표라는 추가 제약 조건 하나가 등장함으로써 여러가지 예외를 처리해주어야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 직접 구현한 파서 코드다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/steamb23/4800a18dd3dc82799a13b4a8800fe5cc.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로.. 패턴 매칭 구문을 사람들이 많이 경험해봤으면 좋겠다. 코드가 확실히 엄청나게 짧아지고 읽기도 편하다.&lt;/p&gt;</description>
      <category>프로그래밍/자체 연구</category>
      <author>맛난호빵</author>
      <guid isPermaLink="true">https://steamb23.tistory.com/7</guid>
      <comments>https://steamb23.tistory.com/7#entry7comment</comments>
      <pubDate>Sat, 26 Aug 2023 14:49:05 +0900</pubDate>
    </item>
    <item>
      <title>tar의 유래와 자주 쓰이는 옵션</title>
      <link>https://steamb23.tistory.com/6</link>
      <description>&lt;pre id=&quot;code_1685992559874&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tar [&amp;lt;옵션&amp;gt;...] [&amp;lt;파일&amp;gt;]...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tar 파일은 유닉스와 리눅스의 오래된 아카이브 포맷으로 유닉스 시스템 간 파일을 주고받을 때는 tar 파일로 주고받는 것이 일반적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우에서 흔하게 쓰이는 zip 포맷을 쓰기도 하지만 잘 쓰지 않는 이유는 일반적으로 zip 포맷이 처음 설계될 때 파일 시스템에 권한 등의 세부적인 메타데이터가 포함되는 유닉스 계열 시스템과 달리, DOS에서 시작된 포맷이기 때문에 비교적 세부 정보가 덜 기록된다. (압축 프로그램마다 다르지만 추가적으로 파일시스템의 메타데이터를 기록하는 경우도 있긴 하다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tar 파일은 애초에 권한이 포함된 유닉스 파일을 테이프에 담을 수 있도록 만든 포맷이기 때문에 파일 시스템의 권한 정보까지 보존되도록 설계되었다(&lt;u&gt;&lt;b&gt;T&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;ape&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;u&gt;Ar&lt;/u&gt;&lt;/b&gt;chiver). 따라서 유닉스를 비롯해서 리눅스 진영에서는 tar를 이용해서 파일을 주고받거나 백업을 하는 등의 용도로 사용되고 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;옵션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;주의: 이 표에서는 tar의 모든 옵션을 나열하지 않는다. 이 글은 파일을 묶고 압축하고 다시 푸는 것만 집중해서 요약한 글이다.&lt;/i&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 242px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;단축형 옵션&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;전체 옵션&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;-c&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;--create&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;새 아카이브 만들기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;-r&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;--append&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;아카이브에 파일 추가 (아카이브 끝에 추가)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 34px;&quot;&gt;-A&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 34px;&quot;&gt;--catenate&lt;br /&gt;--concatenate&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 34px;&quot;&gt;tar 파일 병합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;-v&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;--verbose&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;처리된 파일 목록 보기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 42px;&quot;&gt;-f&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 42px;&quot;&gt;--file=&amp;lt;아카이브 파일 이름&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 42px;&quot;&gt;입출력 대상 아카이브 파일 혹은 장치&lt;br /&gt;(참고로 리눅스는 모든게 파일로 표현됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;-p&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;--preserve-permissions&lt;br /&gt;--same-permissions&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;퍼미션 보존&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 51px;&quot;&gt;-z&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 51px;&quot;&gt;--gzip&lt;br /&gt;--gunzip&lt;br /&gt;--ungzip&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 51px;&quot;&gt;gzip 기반으로 tar 압축 (tar.gz)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;-J&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;--xz&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;xz 기반으로 tar 압축 (tar.xz)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 10px;&quot;&gt;-I&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 10px;&quot;&gt;--use-compress-program=&amp;lt;프로그램&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 10px;&quot;&gt;압축 프로그램 지정,&lt;br /&gt;멀티스레딩을 사용하려면 이를 이용해서 옵션을 주거나 다른 프로그램을 사용하는 것이 권장됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;압축&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tar는 파일을 묶을 뿐, 자체적으로 압축을 하지 않기 때문에 다른 압축 소프트웨어의 힘을 빌어 압축하도록 되어 있다. tar와 같이 가장 많이 쓰이는 압축 포맷으로는 zip처럼 평균적인 압축 성능을 보여주는 DEFLATE 알고리즘을 사용하는 gzip, 7z처럼 강력한 압축 성능을 보여주는 LZMA2 알고리즘을 사용하는 xz 등이 있다. (bzip2 등도 있지만 사실 쓰이는 건 못 봤다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축 옵션을 주고 tar를 실행해 보면 싱글 스레드만을 이용해서 압축이 진행된다는 것을 확인할 수 있다. gzip의 경우, 멀티코어 옵션이 전무하고, xz의 경우 최근의 경우 멀티코어 옵션을 제공하지만 tar의 단축 옵션으로 지정이 불가능하기 때문에 명시적으로 압축 프로그램을 지정해 주는 옵션을 사용해야 비로소 멀티코어를 온전히 활용하도록 옵션을 줄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gzip의 경우 'pigz'라는 추가적인 소프트웨어를 설치해서 병렬 압축을 진행할 수 있고, xz의 경우 '-T0'라고 옵션을 주어 병렬 압축을 진행할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1685998900528&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tar -I pigz ...
tar -I 'xz -T0' ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 xz 압축은 정말 압축 효율이 좋지만 (평균적으로 gzip의 1/2 크기로 압축됨) 그만큼 오래 걸리는 편(거의 두 배)이기 때문에 개인적으로 gzip 기반으로 압축하는 것을 선호하는 편이다... 상황과 기호에 따라 선택해서 쓰자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백업 용도로 한정 지어 말하자면... 다른 시스템으로 옮기는 등의 잠깐 백업을 하는 경우 gzip을 사용하고, 장기적으로 보관해야 하는 경우에는 xz 압축을 사용하는 것이 좋겠다...&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자주 쓰일 옵션 조합&lt;/h3&gt;
&lt;pre id=&quot;code_1685999338971&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#gzip 압축
tar -I pigz -cvf &amp;lt;아카이브&amp;gt; &amp;lt;대상 폴더&amp;gt;

#gzip 해제
tar -I pigz -xvf &amp;lt;아카이브&amp;gt;

#xz 압축
tar -I 'xz -T0' -cvf &amp;lt;아카이브&amp;gt; &amp;lt;대상폴더&amp;gt;

#xz 해제
tar -I 'xz -T0' -xvf &amp;lt;아카이브&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 리눅스에서 &amp;lt;아카이브&amp;gt;에 파일 경로 대신 - 를 입력하면 stdin 스트림에 출력하며 이를 다시 파일이나 네트워크로 송수신하는데 이용할 수 있음을 참고하자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;백업을 위한 원격 tar 압축&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh와 결합해서 원격의 파일을 tar로 묶어서 로컬로 가져오는 테크닉이 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1686024598285&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh [&amp;lt;옵션&amp;gt;...] &amp;lt;접속 정보&amp;gt; 'tar -I pigz -cvf - &amp;lt;대상 경로&amp;gt;' &amp;gt; &amp;lt;아카이브 파일&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 원격의 파일이 tar로 묶이며 stdin에 파일 내용이 출력되게 된다. '&amp;gt;'기호를 사용해서 stdin 스트림을 아카이브 파일에 리디렉션 해주면 ssh를 통해 넘어온 stdin이 아카이브 파일에 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 로컬의 tar 파일을 원격에 넘겨서 푸는 상황을 상정해보자면...&lt;/p&gt;
&lt;pre id=&quot;code_1686026415206&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;lt;아카이브 파일&amp;gt; | ssh [&amp;lt;옵션&amp;gt;...] &amp;lt;접속 정보&amp;gt; 'tar -I pigz -xvf - &amp;lt;대상 경로&amp;gt;'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 로컬에서 cat으로 읽혀진 파일이 stdout에 출력되며 파이프를 뜻하는 '|'기호를 통해 ssh에 stdin으로 전달된다. 전달된 stdin을 원격에서 해제하면 덧씌워지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이런식으로 진행할때 sudo를 사용하기 어렵다는 문제점이 있다... 이 문제는 아에 ssh로 접속 후 역으로 PC로 보내는 방식을 쓰거나 파일로 저장한 후 scp 명령을 통해 가져오는 방식을 쓰는게 보안상 이로울 것 같다. 비밀번호를 sudo에 stdin으로 보내는 방법이 있겠지만... 비밀번호가 bash 히스토리에 기록되서 유출될 수도 있기 때문에 굳이 한다면 sh 스크립트를 작성하는 것에 응용하는 방향으로 쓰는게 좋을 듯 하다...&lt;/p&gt;</description>
      <category>우분투 or 리눅스/공부</category>
      <category>sh</category>
      <category>tar</category>
      <category>리눅스</category>
      <author>맛난호빵</author>
      <guid isPermaLink="true">https://steamb23.tistory.com/6</guid>
      <comments>https://steamb23.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 6 Jun 2023 14:44:30 +0900</pubDate>
    </item>
    <item>
      <title>Unity3D에서의 부드러운 씬 스트리밍</title>
      <link>https://steamb23.tistory.com/5</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://80.lv/articles/smooth-scene-streaming-with-unity3d/&quot;&gt;Smooth Scene Streaming with Unity3D (80.lv)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자: Dimitar Popov, 게임 개발자&lt;/p&gt;
&lt;figure id=&quot;og_1637777021094&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;Smooth Scene Streaming with Unity3D&quot; data-og-description=&quot;The Co-Founder of The Sixth Hammer Dimitar Popov has returned to tell us about designing a big seamless 2D world without loading screens in Unity.&quot; data-og-host=&quot;80.lv&quot; data-og-source-url=&quot;https://80.lv/articles/smooth-scene-streaming-with-unity3d/&quot; data-og-url=&quot;https://80.lv/articles/smooth-scene-streaming-with-unity3d/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbKBEn/hyMtv57lMF/2bGVqXaAc03mkkf3k0iZ4k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://80.lv/articles/smooth-scene-streaming-with-unity3d/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://80.lv/articles/smooth-scene-streaming-with-unity3d/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbKBEn/hyMtv57lMF/2bGVqXaAc03mkkf3k0iZ4k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;Smooth Scene Streaming with Unity3D&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Co-Founder of The Sixth Hammer Dimitar Popov has returned to tell us about designing a big seamless 2D world without loading screens in Unity.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;80.lv&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&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/kqAa5iWO3uU&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;개요&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 불가리아의 소규모 독립 게임 스튜디오인 Sixth Hammer의 Dimitar입니다. 현재 Unity3D 엔진을 사용한 2D 게임 개발에 주력하고 있습니다. 저희의 가장 큰 게임인 Moo Lander는 일반적으로 더 복잡한 게임에서 발생하는 많은 어려운 문제에 대한 창의적인 솔루션을 찾아야 했습니다. 저희는 Moo Lander가 로딩 화면을 포함하지 않고 대신 하나의 거대한 열린 2D 세계가 되기를 원했습니다. 그래서 저희는 게임 플레이 중에 콘텐츠를 성능 좋게 스트리밍 하는 문제에 대한 해결책을 찾아야 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity에는 씬(Scene)이라는 개념이 있으니 게이머가 게임을 플레이하는 동안 백그라운드에서 해당 씬을 로드하는 방법을 찾아야 했습니다. 충분히 간단해 보이죠? 아닙니다!&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;씬을 언제 언로드 하는지? 예를 들어 멀리 떨어진 배경 물체가 보이지 않고 씬에서 더 이상 필요하지 않다면?&lt;/li&gt;
&lt;li&gt;여러 플레이어가 게임 세계의 다른 위치에 있을 수 있는 경우 로드해야 하는 씬을 추적하는 방법은?&lt;/li&gt;
&lt;li&gt;성능 스파이크 없이 백그라운드에서 씬을 로드 및 언로드 하는 방법은?&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 이 글에서 제가 답하고자 하는 몇 가지 질문입니다. 자, 이 주제에 자세히 알아봅시다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Unity가 제공하는 현재 즉시 사용 가능한 기능&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity의&amp;nbsp;씬을&amp;nbsp;게임&amp;nbsp;개체의&amp;nbsp;&quot;묶음&quot;으로&amp;nbsp;생각할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;Unity는&amp;nbsp;씬&amp;nbsp;로드의&amp;nbsp;두 가지&amp;nbsp;유형인&amp;nbsp;&lt;b&gt;가산형[Additively]&lt;/b&gt;과&amp;nbsp;&lt;b&gt;비가산형[Non-Additively]&lt;/b&gt;을 제공합니다. 비가산적 로딩은 현재 씬을 로드될 씬으로 대체하는 반면에, 가산적 로딩은 이미 로드된 씬을 유지합니다. 이 경우에는 가산적 로딩이 필요했죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한&amp;nbsp;Unity는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;유형의&amp;nbsp;로딩&amp;nbsp;방법을&amp;nbsp;제공하는데&amp;nbsp;각각&amp;nbsp;&lt;b&gt;동기[Synchronously]&lt;/b&gt;&amp;nbsp;(기본적으로&amp;nbsp;로드가&amp;nbsp;완료될&amp;nbsp;때&amp;nbsp;까지&amp;nbsp;다른&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;일시&amp;nbsp;중지함.)와&amp;nbsp;&lt;b&gt;비동기[Asynchronously]&lt;/b&gt; (백그라운드에서)가&amp;nbsp;있습니다.&amp;nbsp;우리&amp;nbsp;게임의&amp;nbsp;경우&amp;nbsp;가산적&amp;nbsp;비동기&amp;nbsp;로딩(Additive Asynchronous loading)을 사용했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.jpg&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;855&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WqxFs/btrl5wDTqJM/YRP0eL11RVKP5OsZ6OleJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WqxFs/btrl5wDTqJM/YRP0eL11RVKP5OsZ6OleJk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WqxFs/btrl5wDTqJM/YRP0eL11RVKP5OsZ6OleJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWqxFs%2Fbtrl5wDTqJM%2FYRP0eL11RVKP5OsZ6OleJk%2Fimg.jpg&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;958&quot; height=&quot;855&quot; data-filename=&quot;img.jpg&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;855&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;저희의 솔루션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희는 개발 중에 발생한 앞서 언급한 문제를 해결하기 위해 장면 로딩을 위한 게임 오브젝트 및 헬퍼 클래스 전체 시스템을 구축해야 했습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;씬 전환기&lt;/h2&gt;
&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;무엇인지&amp;nbsp;오랫동안&amp;nbsp;고민했습니다(액션이&amp;nbsp;최소화될&amp;nbsp;때,&amp;nbsp;장면&amp;nbsp;자체가&amp;nbsp;보이지&amp;nbsp;않을&amp;nbsp;때,&amp;nbsp;장면이&amp;nbsp;다른&amp;nbsp;곳에서&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;필요하지&amp;nbsp;않을&amp;nbsp;때&amp;nbsp;등).&amp;nbsp;결국&amp;nbsp;저희는&amp;nbsp;&lt;b&gt;씬 전환기[Scene Switcher]&lt;/b&gt;에&amp;nbsp;대한&amp;nbsp;아이디어를&amp;nbsp;생각해&amp;nbsp;냈습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각&amp;nbsp;씬&amp;nbsp;전환기는&amp;nbsp;자식으로&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;&quot;게이트&quot;&amp;nbsp;게임&amp;nbsp;오브젝트를&amp;nbsp;보유합니다.&amp;nbsp;각각에&amp;nbsp;2D&amp;nbsp;물리적&amp;nbsp;트리거&amp;nbsp;콜라이더가&amp;nbsp;있습니다(일반적으로&amp;nbsp;직사각형이지만&amp;nbsp;장면&amp;nbsp;레이아웃에&amp;nbsp;맞게&amp;nbsp;필요한&amp;nbsp;경우&amp;nbsp;어떤&amp;nbsp;식으로든&amp;nbsp;모양이&amp;nbsp;지정될&amp;nbsp;수&amp;nbsp;있음).&amp;nbsp;씬&amp;nbsp;전환기에는&amp;nbsp;로드&amp;nbsp;및&amp;nbsp;언로드&amp;nbsp;해야 하는&amp;nbsp;&lt;b&gt;씬&amp;nbsp;이름&lt;/b&gt;&amp;nbsp;필드도&amp;nbsp;있습니다.&amp;nbsp;그런&amp;nbsp;다음에&amp;nbsp;게이트와의&amp;nbsp;상호작용을&amp;nbsp;추적합니다.&amp;nbsp;1&amp;nbsp;=&amp;gt;&amp;nbsp;2&amp;nbsp;방식의&amp;nbsp;플레이어와의&amp;nbsp;상호작용은&amp;nbsp;씬을&amp;nbsp;&amp;nbsp;로드&amp;nbsp;해야하고&amp;nbsp;2&amp;nbsp;=&amp;gt;&amp;nbsp;1의&amp;nbsp;상호작용은&amp;nbsp;장면을&amp;nbsp;언로드해야&amp;nbsp;합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;61232faf58f5c.jpg&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eEjsSx/btrl01L9YFp/SvVunnF6notkVkTGje0PnK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eEjsSx/btrl01L9YFp/SvVunnF6notkVkTGje0PnK/img.jpg&quot; data-alt=&quot;작은 &amp;quot;1&amp;quot; 및 &amp;quot;2&amp;quot; 텍스트가 있는 흰색 직사각형은 장면 전환기입니다. (역주: 문자가 길게 늘어나 있습니다.)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eEjsSx/btrl01L9YFp/SvVunnF6notkVkTGje0PnK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeEjsSx%2Fbtrl01L9YFp%2FSvVunnF6notkVkTGje0PnK%2Fimg.jpg&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;1240&quot; height=&quot;842&quot; data-filename=&quot;61232faf58f5c.jpg&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;작은 &quot;1&quot; 및 &quot;2&quot; 텍스트가 있는 흰색 직사각형은 장면 전환기입니다. (역주: 문자가 길게 늘어나 있습니다.)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;씬 시스템&lt;/h2&gt;
&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;수&amp;nbsp;있습니다.&amp;nbsp;그러나&amp;nbsp;저희는&amp;nbsp;씬을&amp;nbsp;로드하는&amp;nbsp;실제&amp;nbsp;프로세스를&amp;nbsp;다른&amp;nbsp;싱글톤&amp;nbsp;시스템&amp;nbsp;클래스로&amp;nbsp;분리하여&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;이것은 다음과 같은 몇 가지 작업을 수행합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;씬 이름&lt;/b&gt;과 씬이 필요한 &lt;b&gt;플레이어의 목록&lt;/b&gt;이 &lt;b&gt;키&lt;/b&gt;와 &lt;b&gt;값&lt;/b&gt;인 &lt;b&gt;필요한 씬&lt;/b&gt;이 포함된 &lt;b&gt;딕셔너리(Dictionary)를 저장&lt;/b&gt;합니다. 그런 다음 딕셔너리를 갱신하기 위해&amp;nbsp;&lt;b&gt;UpdateGameObjectNeededScenes(GameObject GO, string sceneName, bool shouldLoad)&lt;/b&gt; 메서드를 제공합니다.&lt;/li&gt;
&lt;li&gt;Unity&amp;nbsp;내장&amp;nbsp;씬&amp;nbsp;관리&amp;nbsp;이벤트를&amp;nbsp;구독하여&amp;nbsp;최신&amp;nbsp;상태로&amp;nbsp;유지하는&amp;nbsp;현재&amp;nbsp;&lt;b&gt;로드된&amp;nbsp;씬&lt;/b&gt;(&lt;b&gt;씬&amp;nbsp;이름&lt;/b&gt;과&amp;nbsp;&lt;b&gt;로드&amp;nbsp;상태&lt;/b&gt;를&amp;nbsp;키와&amp;nbsp;값으로)이&amp;nbsp;포함된&amp;nbsp;딕셔너리를&amp;nbsp;저장합니다.&lt;/li&gt;
&lt;li&gt;게임의 &lt;b&gt;업데이트 루프&lt;/b&gt;에서 &lt;b&gt;로드된 씬&lt;/b&gt;과 &lt;b&gt;현재 필요한 씬&lt;/b&gt;이 일치하는지 확인하는 &lt;b&gt;기능&lt;/b&gt;을 실행하고, &lt;b&gt;일치하지 않으면&lt;/b&gt; 씬의 &lt;b&gt;로드 및 언로드를 시작&lt;/b&gt;합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 실제 구현에는 수십 개의 헬퍼 함수와 기타 변수가 포함되지만 어쨌든 이것이 핵심입니다. 이 아키텍처를 사용하여 처음 두 가지의 문제(이 글의 시작 부분에 언급됨)를 정상적으로 해결하고 있습니다.&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;6123313945195.jpg&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0FFWt/btrl4AtvIXg/h5qyCsWEcIVCIPIsYiPotk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0FFWt/btrl4AtvIXg/h5qyCsWEcIVCIPIsYiPotk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0FFWt/btrl4AtvIXg/h5qyCsWEcIVCIPIsYiPotk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0FFWt%2Fbtrl4AtvIXg%2Fh5qyCsWEcIVCIPIsYiPotk%2Fimg.jpg&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;1628&quot; height=&quot;389&quot; data-filename=&quot;6123313945195.jpg&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;가산적 로딩 성능 개선&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity가 백그라운드에서 씬을 로드하는 방식은 씬이 로드되는 동안 잘 작동합니다. 그러나 마지막 프레임에서 Unity는 모든 게임 개체를 생성하고 활성화합니다(엔진이 개체 간의 종속성을 알 수 없기 때문에 정상적인 동작). 이로 인해 상당한 지연[Rag]이 발생하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지연의 심각성은 주로 다음 두 가지 사항에 따라 달라집니다.&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;각각 사용된 에셋 및 리소스 수와 씬의 &lt;b&gt;게임 오브젝트 수&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;연결된&amp;nbsp;&lt;b&gt;MonoBehaviour&amp;nbsp;컴포넌트의&amp;nbsp;수&lt;/b&gt;(특히&amp;nbsp;Awake&amp;nbsp;혹은&amp;nbsp;Start&amp;nbsp;메서드에서&amp;nbsp;실행되는&amp;nbsp;논리가&amp;nbsp;있는&amp;nbsp;경우에&amp;nbsp;해당됨)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 저희는 이를 기반으로 성능을 개선하기 위한 몇 가지 다른 접근 방식이 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;씬을 더 작게 만듭니다. 예를 들면 그 안에 있는 게임 오브젝트의 수를 줄이면 성능이 향상될 수 있습니다. 하지만 전체 게임에서 &lt;b&gt;씬&amp;nbsp;전환&lt;/b&gt;&amp;nbsp;및&amp;nbsp;로딩이&amp;nbsp;더&amp;nbsp;자주&amp;nbsp;발생해서&amp;nbsp;게임의&amp;nbsp;관리가&amp;nbsp;훨씬&amp;nbsp;더&amp;nbsp;어려워집니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MonoBehaviour&lt;/b&gt;의&amp;nbsp;수를&amp;nbsp;줄입니다.&amp;nbsp;이는&amp;nbsp;성능&amp;nbsp;향상을&amp;nbsp;위한&amp;nbsp;유효한&amp;nbsp;접근&amp;nbsp;방식입니다.&amp;nbsp;하지만&amp;nbsp;저희의&amp;nbsp;경우에는&amp;nbsp;Moo&amp;nbsp;Lander에&amp;nbsp;있는&amp;nbsp;대부분의&amp;nbsp;게임&amp;nbsp;오브젝트가&amp;nbsp;수행하는&amp;nbsp;복잡한&amp;nbsp;동작 때문에&amp;nbsp;쉽지&amp;nbsp;않았습니다.&lt;/li&gt;
&lt;li&gt;어떻게든&amp;nbsp;씬의&amp;nbsp;모든&amp;nbsp;게임&amp;nbsp;오브젝트를&amp;nbsp;동시에&amp;nbsp;활성화하지&amp;nbsp;않는&amp;nbsp;방법을&amp;nbsp;찾습니다.&amp;nbsp;그렇게&amp;nbsp;하면&amp;nbsp;복잡성을&amp;nbsp;줄일&amp;nbsp;필요도&amp;nbsp;없었고&amp;nbsp;엄청난&amp;nbsp;성능&amp;nbsp;향상을&amp;nbsp;달성했기&amp;nbsp;때문에&amp;nbsp;이것이&amp;nbsp;우리에게&amp;nbsp;가장&amp;nbsp;좋은&amp;nbsp;접근&amp;nbsp;방식이었습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;게임 개체의 지연된 활성화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 하려면 먼저 Unity가 씬 로드 시 자동으로 이 작업을 수행하지 않도록 해야 합니다. 불행스럽게도 저희는 그렇게 할 수 있는 내장된 방법이 없었기 때문에 그냥 진행했고 다음 작업을 수행해야만 했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;씬의 모든 게임 오브젝트를 하나의 &lt;b&gt;씬&lt;/b&gt; 게임 오브젝트의 자식으로 만들었습니다.&lt;/li&gt;
&lt;li&gt;모든 물리적 상호 작용 가능한 게임 오브젝트는 씬 게임 오브젝트의 직계 자식인 Interactables 게임 오브젝트로 이동시켰습니다.&lt;/li&gt;
&lt;li&gt;게임&amp;nbsp;빌드를&amp;nbsp;만들&amp;nbsp;때&amp;nbsp;모든&amp;nbsp;씬&amp;nbsp;게임&amp;nbsp;오브젝트를&amp;nbsp;비활성화하는&amp;nbsp;툴을 만들었습니다.&amp;nbsp;이렇게&amp;nbsp;하면&amp;nbsp;Unity가&amp;nbsp;씬을&amp;nbsp;로드할&amp;nbsp;때&amp;nbsp;비활성화된&amp;nbsp;상태로&amp;nbsp;로드됩니다.&lt;/li&gt;
&lt;/ul&gt;
&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;로드&amp;nbsp;및&amp;nbsp;언로드를&amp;nbsp;담당하는&amp;nbsp;씬&amp;nbsp;시스템을&amp;nbsp;확장했습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로드된 장면의 맨 위에 비활성화된 씬 오브젝트가 있는지 먼저 확인합니다.&lt;/li&gt;
&lt;li&gt;하나가 있으면 하위 게임 개체의 지연된 활성화를 수행하려는 것을 의미하므로 모든 다중 수준 하위를 반복하고 하나씩 비활성화합니다.&lt;/li&gt;
&lt;li&gt;상위 씬 오브젝트를 다시 활성화합니다. 이 시점에서는 모든 하위 항목이 비활성화되어 있기 때문에 아무것도 표시되지 않습니다.&lt;/li&gt;
&lt;li&gt;모든&amp;nbsp;자식을&amp;nbsp;순회하는&amp;nbsp;코루틴을&amp;nbsp;시작하고&amp;nbsp;프레임마다&amp;nbsp;일정량씩&amp;nbsp;활성화합니다.&amp;nbsp;매우&amp;nbsp;중요한&amp;nbsp;점은&amp;nbsp;이&amp;nbsp;코루틴&amp;nbsp;루프가&amp;nbsp;&lt;b&gt;Interactables&lt;/b&gt; 홀더를&amp;nbsp;건너뛰어야&amp;nbsp;한다는&amp;nbsp;것입니다.&amp;nbsp;시간이&amp;nbsp;지남에&amp;nbsp;따라&amp;nbsp;물리&amp;nbsp;오브젝트를&amp;nbsp;활성화하면&amp;nbsp;잠재적으로&amp;nbsp;잘못된&amp;nbsp;동작이&amp;nbsp;발생할&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문입니다(땅보다 먼저 적을 활성화하면 적을 떨어뜨리는 것처럼).&lt;/li&gt;
&lt;li&gt;그런 다음 모든 Interactable 게임 오브젝트를 한 번에 활성화합니다(여전히 약간의 성능 지연이 발생하지만 처음과 같이 수 천 개의 오브젝트 대신에 수 십 개만 활성화하기 때문에 훨씬 더 작음).&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 저희는 Unity로 씬을 추가 및 비동기식으로 로드할 때 불쾌한 성능 스파이크를 제거하여 플레이어 경혐의 품질을 개선했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보너스 팁 - 씬을 언로드해도 실제로 씬에서 사용된 텍스쳐 및 기타 에셋이 모두 언로드되는 것은 아닙니다. 그렇기 때문에 게임 플레이 중에 액션이 많지 않은 순간에 내장된 UnloadUnusedAssets 메서드를 때때로 호출해주어야 합니다. 이는 성능에 약간의 스파이크를 일으키지만 저희는 여전히 Unity 동작을 최적화해야하는 지점에 도달하지 못했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 씬의 비동기 로드 개선에 대한 다른 통찰을 보고싶다면 &lt;a href=&quot;https://blog.unity.com/technology/optimizing-loading-performance-understanding-the-async-upload-pipeline&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이 링크&lt;/a&gt;를 확인하세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&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;로드하기&amp;nbsp;위해&amp;nbsp;많은&amp;nbsp;일이&amp;nbsp;일어나고&amp;nbsp;있습니다.&amp;nbsp;그리고&amp;nbsp;Moo&amp;nbsp;Lander를&amp;nbsp;마친&amp;nbsp;후에는&amp;nbsp;이&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;플러그인으로&amp;nbsp;패키징하여&amp;nbsp;미래의&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;물론 게임 씬과 오브젝트(씬 사이를 이동할 수 있는 영구 오브젝트[Persistent objects]등)에 더 많은 일이 발생하지만 향후 글에서 이에 대한 통찰을 공유해보겠습니다. 현재로서는 이 글이 추가 씬 로딩 문제에 대한 훌륭한 솔루션을 구축하는데 충분한 지침이 되기를 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dimitar Popov, The&amp;nbsp;Sixth&amp;nbsp;Hammer의&amp;nbsp;공동&amp;nbsp;설립자이자&amp;nbsp;게임&amp;nbsp;개발자&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;번역 후기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 유니티에서 씬 스트리밍 까지는 아니지만 로딩 화면 구현과 관련해서 고생한 적이 있었는데요. 처음 구현하는 것 이기도 했고, 로딩하는 과정 자체가 게임 진행에 부하가 큰 작업이기 때문에 씬 간에 전이 효과를 주려고 해도 버벅거리는 문제가 있었습니다. 그 이후에 원글을 보게 되었는데요. 유니티의 성능 한계를 뛰어넘기 위해 고군분투한 모습에 감명받았고 잠이 확 달아난 저는 바로 블로그와 번역기를 켜서 한땀 한땀 번역해버렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의역이 많은데, 완전 의미가 다른 의역이 있다면 이 글을 읽으시는 다른 분들을 위해 댓글로 달아주시면 감사하겠습니다.&lt;/p&gt;</description>
      <category>프로그래밍/외국 기술 자료 번역</category>
      <category>유니티</category>
      <author>맛난호빵</author>
      <guid isPermaLink="true">https://steamb23.tistory.com/5</guid>
      <comments>https://steamb23.tistory.com/5#entry5comment</comments>
      <pubDate>Thu, 25 Nov 2021 11:23:09 +0900</pubDate>
    </item>
    <item>
      <title>페이지 테스트</title>
      <link>https://steamb23.tistory.com/pages/%ED%8E%98%EC%9D%B4%EC%A7%80-%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;가나다라마바사아자차카타파하&lt;/p&gt;</description>
      <author>맛난호빵</author>
      <guid isPermaLink="true">https://steamb23.tistory.com/pages/%ED%8E%98%EC%9D%B4%EC%A7%80-%ED%85%8C%EC%8A%A4%ED%8A%B8</guid>
      <pubDate>Tue, 24 Aug 2021 16:22:48 +0900</pubDate>
    </item>
    <item>
      <title>이동식 저장소 폴더 숨기기 유틸리티 - Hider 1.1v</title>
      <link>https://steamb23.tistory.com/3</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfBSsa/btraQr2jt5S/LSEcSzZhXOdL3VY34FNdL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfBSsa/btraQr2jt5S/LSEcSzZhXOdL3VY34FNdL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfBSsa/btraQr2jt5S/LSEcSzZhXOdL3VY34FNdL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfBSsa%2FbtraQr2jt5S%2FLSEcSzZhXOdL3VY34FNdL0%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cdBJB0/btraZL5SIB6/axV8NWtLQnwlU6SEn4XkK1/Hider%201.1v.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Hider 1.1v.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.73MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hider는 등록된 컴퓨터에서만 실행되는 포터블형 폴더 숨김 프로그램입니다. VeraCrypt와 같은 파티션 단위 암호화 프로그램이나 다른 폴더 숨기기 프로그램과는 다르게 비밀번호 없이, Hider가 설치된 이력이 있는 컴퓨터에서만 폴더를 숨기고 드러낼수 있습니다. 따라서 이동식 저장소에 있는 폴더를 숨길 때 적절합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;설치 및 사용법&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Hider 프로그램을 숨길 폴더의 상위에 복사합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;154&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Tn9Y/btraPvcPX4q/hTvaFBJZS63b5qddTuNtM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Tn9Y/btraPvcPX4q/hTvaFBJZS63b5qddTuNtM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Tn9Y/btraPvcPX4q/hTvaFBJZS63b5qddTuNtM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Tn9Y%2FbtraPvcPX4q%2FhTvaFBJZS63b5qddTuNtM1%2Fimg.png&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;154&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;명령 프롬프트를 실행하고 해당 폴더로 이동합니다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ASekj/btraVqn1jnt/XGKOsKIa7xmtsj4jvPYTq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ASekj/btraVqn1jnt/XGKOsKIa7xmtsj4jvPYTq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ASekj/btraVqn1jnt/XGKOsKIa7xmtsj4jvPYTq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FASekj%2FbtraVqn1jnt%2FXGKOsKIa7xmtsj4jvPYTq1%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;시스템 등록을 위해 '&amp;lt;Hider 프로그램 파일 이름&amp;gt; install'이라고 입력합니다. (일반적인 경우 'Hider install')&lt;br /&gt;만약 이전에 시스템 등록 과정을 수행한적이 있다면 탐색기에서 바로 Hider를 실행하셔도 좋습니다.&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu7n7G/btraNIXLecH/p5trZwOe8wnknjOqGu7l00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu7n7G/btraNIXLecH/p5trZwOe8wnknjOqGu7l00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu7n7G/btraNIXLecH/p5trZwOe8wnknjOqGu7l00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu7n7G%2FbtraNIXLecH%2Fp5trZwOe8wnknjOqGu7l00%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Hider가 실행되었습니다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj8uaw/btraXWsXhJI/JLOJ2cxEhlexECxpdid1aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj8uaw/btraXWsXhJI/JLOJ2cxEhlexECxpdid1aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj8uaw/btraXWsXhJI/JLOJ2cxEhlexECxpdid1aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj8uaw%2FbtraXWsXhJI%2FJLOJ2cxEhlexECxpdid1aK%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;'숨기기'를 선택하고 숨길 폴더의 이름을 입력합니다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC9tM2/btraXWfqnPA/O3Nhs7vAJy1EnrME6oGGa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC9tM2/btraXWfqnPA/O3Nhs7vAJy1EnrME6oGGa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC9tM2/btraXWfqnPA/O3Nhs7vAJy1EnrME6oGGa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC9tM2%2FbtraXWfqnPA%2FO3Nhs7vAJy1EnrME6oGGa0%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;폴더가 숨겨졌습니다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be1ucr/btraWTJ2gex/3C3VjBXxUvhZLJvxbkNdz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be1ucr/btraWTJ2gex/3C3VjBXxUvhZLJvxbkNdz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be1ucr/btraWTJ2gex/3C3VjBXxUvhZLJvxbkNdz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe1ucr%2FbtraWTJ2gex%2F3C3VjBXxUvhZLJvxbkNdz1%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;151&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZtrEg/btraWvWyQnI/P9GjjQYLfjkGok2ksww7Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZtrEg/btraWvWyQnI/P9GjjQYLfjkGok2ksww7Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZtrEg/btraWvWyQnI/P9GjjQYLfjkGok2ksww7Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZtrEg%2FbtraWvWyQnI%2FP9GjjQYLfjkGok2ksww7Mk%2Fimg.png&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;151&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;폴더를 드러내려면 메인메뉴에서 '드러내기'를 선택하고 숨겨진 폴더의 이름을 입력합니다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyJdAS/btraRxHZFpo/v8ZHUUjvR2Ut55Z8QWkH71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyJdAS/btraRxHZFpo/v8ZHUUjvR2Ut55Z8QWkH71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyJdAS/btraRxHZFpo/v8ZHUUjvR2Ut55Z8QWkH71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyJdAS%2FbtraRxHZFpo%2Fv8ZHUUjvR2Ut55Z8QWkH71%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;폴더가 드러났습니다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mBfZ3/btraNIwH8tz/xHFaGJ26FpLabfQNKKmPx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mBfZ3/btraNIwH8tz/xHFaGJ26FpLabfQNKKmPx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mBfZ3/btraNIwH8tz/xHFaGJ26FpLabfQNKKmPx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmBfZ3%2FbtraNIwH8tz%2FxHFaGJ26FpLabfQNKKmPx1%2Fimg.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;101&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xl8zl/btraRxgWL5d/rfey10KkxAiSexWT3hBP1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xl8zl/btraRxgWL5d/rfey10KkxAiSexWT3hBP1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xl8zl/btraRxgWL5d/rfey10KkxAiSexWT3hBP1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxl8zl%2FbtraRxgWL5d%2Frfey10KkxAiSexWT3hBP1k%2Fimg.png&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;101&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;컴퓨터에서 Hider의 실행을 방지하기 위해 등록을 해제하려면 명령프롬프트에서 '&amp;lt;Hider 프로그램 파일 이름&amp;gt; uninstall'이라고 입력합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;동작 원리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더의 속성을 시스템, 숨김 속성으로 변경하는 원리입니다. 숨겨진 시스템 폴더는 탐색기에서 일반적인 방법으로 볼 수 없게 되어있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주의사항&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hider는 폴더를 암호화하지 않습니다. 이 프로그램을 사용함으로써 발생되는 모든 문제는 책임 지지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;C# 파일 API의 한계로 전체 경로 길이가 260자를 넘어갈 경우 오류가 뜰 수 있습니다. 가급적 짧은 경로에서 사용을 권장합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;업데이트 이력&lt;/h2&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: 9.99998%; text-align: center;&quot;&gt;1.0v&lt;/td&gt;
&lt;td style=&quot;width: 90%;&quot;&gt;- 최초 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.99998%; text-align: center;&quot;&gt;1.1v&lt;/td&gt;
&lt;td style=&quot;width: 90%;&quot;&gt;- 폴더 이름이 영어일 때 실제 이름의 대소문자가 입력된 대로 치환되는 문제 수정&lt;br /&gt;- 폴더 이름 입력시 단일 이름 대신 경로를 입력했을 경우 가장 상위의 폴더만 동작하도록 수정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자작 유틸리티</category>
      <author>맛난호빵</author>
      <guid isPermaLink="true">https://steamb23.tistory.com/3</guid>
      <comments>https://steamb23.tistory.com/3#entry3comment</comments>
      <pubDate>Sat, 31 Jul 2021 20:40:26 +0900</pubDate>
    </item>
  </channel>
</rss>