<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>showcode</title>
    <link>https://showcode.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 08:59:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>showcode</managingEditor>
    <item>
      <title>Gem 파일에서 로컬 .gem 파일을 지정하려면 어떻게 해야 합니까?</title>
      <link>https://showcode.tistory.com/540</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Gem 파일에서 로컬 .gem 파일을 지정하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 설치하는 몇 개의 보석 파일이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gem install xx.gem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;번들러에게 그것들을 사용하라고 말할 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 소스 경로를 지정해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 설치에 대한 질문에 대한 답변이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://gembundler.com/man/gemfile.5.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;Gem&lt;/a&gt; 파일을 편집하여 모든 종류의 위치를 Gem 단위로 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성은 해당 경로의 보석을 로컬 컴퓨터에 설치합니다.&lt;/font&gt;&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;gem &quot;foreman&quot;, path: &quot;/Users/pje/my_foreman_fork&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는, 지정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:git&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특성은 원격 Git 저장소에서 Gem을 설치합니다.&lt;/font&gt;&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;gem &quot;foreman&quot;, git: &quot;git://github.com/pje/foreman.git&quot;

# ...or at a specific SHA-1 ref
gem &quot;foreman&quot;, git: &quot;git://github.com/pje/foreman.git&quot;, ref: &quot;bf648a070c&quot;

# ...or branch
gem &quot;foreman&quot;, git: &quot;git://github.com/pje/foreman.git&quot;, branch: &quot;jruby&quot;

# ...or tag
gem &quot;foreman&quot;, git: &quot;git://github.com/pje/foreman.git&quot;, tag: &quot;v0.45.0&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(@&lt;a href=&quot;https://stackoverflow.com/users/237186/jhurrah&quot; papago-id=&quot;9-1&quot;&gt;JHurrah&lt;/a&gt;가 &lt;a href=&quot;https://stackoverflow.com/questions/5633939/how-do-i-specify-local-gem-files-in-my-gemfile#comment6422126_5634086&quot; papago-id=&quot;9-3&quot;&gt;논평에서 언급&lt;/a&gt;했듯이&lt;a href=&quot;https://stackoverflow.com/users/237186/jhurrah&quot; papago-id=&quot;9-1&quot;&gt;)&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;번들러는 박스 밖에서 .gem 파일을 사용할 수 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.gem 파일이 포함된 디렉토리에 :path를 지정하면 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 사람들은 그 목적을 위해 로컬 보석 서버(geminabox, stickler)를 설치하자고 제안했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 파일 시스템에서 로컬 보석 &quot;서버&quot;를 사용하는 것이 훨씬 더 간단하다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.gem 파일을 로컬 디렉터리에 저장한 다음 &quot;gem generate_index&quot;를 사용하여 Gem 저장소로 만들기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mkdir repo
mkdir repo/gems
cp *.gem repo/gems
cd repo
gem generate_index
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 Gem 파일에 다음 행을 추가하여 이 위치에 번들러를 가리킵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;source &quot;file://path/to/repo&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리포지토리의 보석을 업데이트하는 경우 인덱스를 다시 생성해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션 공급업체 폴더에 보석을 포장을 풀겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gem unpack your.gem --target /path_to_app/vendor/gems/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Gem 파일의 경로를 추가하여 압축 해제된 Gem을 연결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gem 'your', '2.0.1', :path =&amp;gt; 'vendor/gems/your'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 번들러는 먼저 시스템을 확인하고 보석을 찾을 수 없으면 Gem 파일에 지정된 소스를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;bundle package&quot; 및 &quot;bundle install --local&quot;을 사용하여 배포한 보석을 번들러가 사용하도록 강제할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개발 컴퓨터에서 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bundle install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(필수 보석을 설치하고 Gemfile.lock을 만듭니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bundle package
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(벤더/캐시에서 중요한 요소를 캐쉬)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bundle install --local
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(--local은 &quot;벤더/캐시의 보석 사용&quot;을 의미합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 중&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;vendor/cache&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이 필요하지 않음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Gemfile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 자체 Gem 서버를 실행하는 것이 가장 쉽다는 것을 알게 되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;geminabox&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 &lt;a href=&quot;http://guides.rubygems.org/run-your-own-gem-server/&quot; papago-id=&quot;28-1&quot; rel=&quot;nofollow&quot;&gt;간단한&lt;/a&gt; 지침을 &lt;a href=&quot;http://guides.rubygems.org/run-your-own-gem-server/&quot; papago-id=&quot;28-1&quot; rel=&quot;nofollow&quot;&gt;참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5633939/&lt;a href=&quot;https://stackoverflow.com/questions/5633939/how-do-i-specify-local-gem-files-in-my-gemfile&quot; target=&quot;_blank&quot; papago-id=&quot;29-1&quot;&gt;how-do-i-specify-local-gem-files-in-my-gemfile&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ruby</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/540</guid>
      <comments>https://showcode.tistory.com/540#entry540comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:50:01 +0900</pubDate>
    </item>
    <item>
      <title>JWT가 포함된 Facebook 여권</title>
      <link>https://showcode.tistory.com/539</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JWT가 포함된 Facebook 여권&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 사용자 인증을 위해 Passport를 &lt;strong papago-id=&quot;1-1&quot;&gt;사용&lt;/strong&gt;하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 로컬에서(사용자 이름과 암호를 사용하여) 로그인할 때 서버는 로컬 스토리지에 &lt;strong papago-id=&quot;1-3&quot;&gt;저장&lt;/strong&gt;된 JWT를 전송하고 사용자 인증이 필요한 모든 api 호출에 대해 서버로 다시 전송됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &lt;strong papago-id=&quot;2-1&quot;&gt;페이스북과 구글&lt;/strong&gt; 로그인도 &lt;strong papago-id=&quot;2-1&quot;&gt;지원&lt;/strong&gt;하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 여권으로 시작했기 때문에 여권 &lt;strong papago-id=&quot;2-3&quot;&gt;페이스북&lt;/strong&gt;과 여권 &lt;strong papago-id=&quot;2-5&quot;&gt;구글&lt;/strong&gt; 인증을 사용하여 여권 전략을 계속하는 것이 가장 좋을 것이라고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Facebook을 참조하겠지만, 두 전략 모두 동일하게 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 서버 경로로 &lt;strong papago-id=&quot;3-1&quot;&gt;리디렉션해야&lt;/strong&gt; 합니다&lt;strong papago-id=&quot;3-1&quot;&gt;('/auth/&lt;/strong&gt;&lt;strong papago-id=&quot;3-3&quot;&gt;facebook'&lt;/strong&gt; 및 '/&lt;strong papago-id=&quot;3-3&quot;&gt;auth/facebook/&lt;/strong&gt;callback&lt;strong papago-id=&quot;3-3&quot;&gt;').&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로세스는 사용자의 Facebook\Google ID 및 토큰을 DB에 저장할 정도로 성공적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 사용자가 생성되면 Facebook\google에서 받은 토큰에 의존하지 않고 JWT가 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     ... // Passport facebook startegy
     var newUser = new User();
     newUser.facebook = {};
     newUser.facebook.id = profile.id; 
     newUser.facebook.token = token; // token received from facebook
     newUser.facebook.name  = profile.displayName;   
     newUser.save(function(err) {
          if (err)
               throw err;
          // if successful, return the new user
          newUser.jwtoken = newUser.generateJwt(); // JWT CREATION!
          return done(null, newUser);
     });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 &lt;strong papago-id=&quot;5-1&quot;&gt;JWT가 생성&lt;/strong&gt;된 후 제 앱으로 리디렉션해야 하기 때문에 &lt;strong papago-id=&quot;5-1&quot;&gt;고객&lt;/strong&gt;에게 JWT를 &lt;strong papago-id=&quot;5-1&quot;&gt;보낼&lt;/strong&gt; 수 있는 &lt;strong papago-id=&quot;5-1&quot;&gt;적절한 방법을 찾지 못했다는&lt;/strong&gt; 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.get('/auth/facebook/callback',
    passport.authenticate('facebook', {
        session: false,
        successRedirect : '/',
        failureRedirect : '/'
    }), (req, res) =&amp;gt; {
        var token = req.user.jwtoken;
        res.json({token: token});
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-1&quot;&gt;위&lt;/strong&gt;의 코드는 앱&lt;strong papago-id=&quot;6-1&quot;&gt; 메인 &lt;/strong&gt;페이지로 &lt;strong papago-id=&quot;6-1&quot;&gt;리디렉션되지만 토큰을 받지&lt;/strong&gt; 못합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;successRedirect를 제거하면&lt;strong papago-id=&quot;6-3&quot;&gt; 토큰이 표시되지만 앱으로 리디렉션되지는 않습니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것에 대한 해결책은 없습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 접근법이 잘못된 건가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 제안이든 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 문제에 대해 제가 찾은 가장 좋은 해결책은 JWT가 들어 있는 쿠키가 있는 예상 페이지로 리디렉션하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;res.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;json 응답만 보내고 리디렉션하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇기 때문에 여기에 제시된 다른 답은 제가 직면한 문제를 해결하지 못할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제 해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
    session: false,
    successRedirect : '/',
    failureRedirect : '/'
}), (req, res) =&amp;gt; {
    var token = req.user.jwtoken;
    res.cookie('auth', token); // Choose whatever name you'd like for that cookie, 
    res.redirect('http://localhost:3000'); // OR whatever page you want to redirect to with that cookie
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리디렉션 후 쿠키를 안전하게 읽고 예상대로 해당 JWT를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(사용자가 로그인했는지 확인하기 위해 실제로 모든 페이지 로드에서 쿠키를 읽을 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞서 언급했듯이, JWT를 쿼리 파라미터로 사용하여 리다이렉트하는 것은 가능하지만, 매우 안전하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿠키를 사용하는 것이 더 안전하며, 분명히 안전하지 않은 쿼리 매개 변수와 달리 쿠키를 훨씬 더 안전하게 만들기 위해 사용할 수 있는 보안 솔루션이 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바의 대답에 추가.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 쿠키를 추출하고 로컬 저장소에 저장한 다음 쿠키를 삭제하고 인증된 페이지로 리디렉션하기 위해 랜딩 구성요소를 준비했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class SocialAuthRedirect extends Component {
  componentWillMount() {
    this.props.dispatch(
      fbAuthUser(getCookie(&quot;auth&quot;), () =&amp;gt; {
        document.cookie =
          &quot;auth=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;&quot;;
        this.props.history.push(&quot;/profile&quot;);
      })
    );
  }

  render() {
    return &amp;lt;div /&amp;gt;;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절한 해결책은 클라이언트 측에서 리디렉션을 구현하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.get('/auth/facebook/callback',
  passport.authenticate('facebook', {
    session: false,
    failureRedirect: '/login'
  }), (req, res) =&amp;gt; {
    res.json({
      token: req.user.jwtoken
    })
  }
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트 측에서 토큰을 수신한 경우, 해당 토큰에서 홈 페이지로 리디렉션하고 로그인이 성공하지 못한 경우 서버에서 직접 리디렉션됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음과 같이 전체 클라이언트 측 관리를 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.get('/auth/facebook/callback',
  passport.authenticate('facebook', {
    session: false
  }), (req, res) =&amp;gt; {
    if (req.user.jwtoken) {
      res.json({
        success: true,
        token: req.user.jwtoken
      })
    } else {
      res.json({
        success: false
      })
    }
  }
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;success === true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JWT를 LocalStorage에 저장하고, 그렇지 않으면 로그인 페이지로 리디렉션합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/42508640/&lt;a href=&quot;https://stackoverflow.com/questions/42508640/facebook-passport-with-jwt&quot; target=&quot;_blank&quot; papago-id=&quot;22-1&quot;&gt;facebook-passport-with-jwt&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MongoDB</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/539</guid>
      <comments>https://showcode.tistory.com/539#entry539comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:49:55 +0900</pubDate>
    </item>
    <item>
      <title>범위에 배열을 쓰는 중입니다.어레이의 첫 번째 값만 가져옵니다.</title>
      <link>https://showcode.tistory.com/538</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;범위에 배열을 쓰는 중입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이의 첫 번째 값만 가져옵니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 범위에 배열을 쓰려고 노력하고 있으며 여러 가지 방법을 시도했지만 어떤 일이 있어도 항상 배열의 첫 번째 값만 반복해서 얻습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Option Explicit

Sub test()

    ActiveWorkbook.Worksheets(&quot;Sheet1&quot;).Cells.Clear

    Dim arrayData() As Variant
    arrayData = Array(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;E&quot;)

    Dim rngTarget As Range
    Set rngTarget = ActiveWorkbook.Worksheets(&quot;Sheet1&quot;).Range(&quot;A1&quot;)

    'this doesn't work
    rngTarget.Resize(UBound(arrayData, 1), 1).Value = arrayData

    Dim rngTarget2 As Range
    Set rngTarget2 = ActiveWorkbook.Worksheets(&quot;Sheet1&quot;).Range(Cells(1, 5), Cells(UBound(arrayData, 1), 5))
    'this doesn't work either
    rngTarget2.Value = arrayData

End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 기대하는 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(Col A)     (Col E)
A           A
B           B
C           C
D           D
E           E
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 실제로 본 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(Col A)     (Col E)
A           A
A           A
A           A
A           A
A           A
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 여기서 뭘 잘못하고 있는 거지?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;a href=&quot;http://www.cpearson.com/excel/ArraysAndRanges.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;여기&lt;/a&gt;에 있는 것처럼 칩 피어슨의 제안을 따르려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 운이 없어요...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자, 그럼 이 문제의 두 번째 부분에 추가해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;8,061개의 요소가 포함된 1D 어레이를 가지고 있으며, 이를 다음 함수로 전달합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Call writeArrayData7(strTabName, arrayBucketData, 7)

Sub writeArrayData7(strSheetName As String, arrayData As Variant, intColToStart As Integer)

    Dim lngNextRow As Long
    lngNextRow = 1 ' hard-coded b/c in this instance we are just using row 1

    ' Select range for data
    Dim rngData As Range
    Set rngData = Sheets(strSheetName).Range(Cells(lngNextRow, intColToStart), Cells(lngNextRow - 1 + UBound(arrayData, 1), intColToStart))

    ' Save data to range
    Dim arrayDataTransposed As Variant
    arrayDataTransposed = Application.Transpose(arrayData)
    rngData = arrayDataTransposed

End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 이것을 실행할 때, 전치환 함수는 다음과 같이 적절하게 변환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array(1 to 8061, 1 to 1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;범위는 G 열에 8,061개의 셀이 있는 단일 열로 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Run-time error '1004':
Application-defined or object-defined error
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 행에 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rngData = arrayDataTransposed
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 ---&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플 코드(b/c 솔직히 중요하지 않다고 생각했습니다)에서 한 가지 빠뜨린 것은 배열의 내용이 실제로 공식이라는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 라이브 코드에서 사용하는 라인은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;arrayData(i) = &quot;=IFERROR(VLOOKUP($D&quot; + CStr(i) + &quot;,&quot; + strSheetName + &quot;!$D:$F,3,FALSE),&quot;&quot;)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 (Excel Hero의 도움을 받아) 발견한 것은 위의 문장에 문자열에 필요한 이중 따옴표 집합이 없다는 것입니다. 그래서 대신 이것으로 변경해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;arrayBucketData(i) = &quot;=IFERROR(VLOOKUP($D&quot; + CStr(i) + &quot;,&quot; + strSheetName + &quot;!$D:$F,3,FALSE),&quot;&quot;&quot;&quot;)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것을 심야의 골머리 코딩이라고 부를 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 배운 것 중 하나는 전체 코드를 실행하기 위해 다시 돌아갔을 때 어레이를 범위에 붙여넣는 데 오랜 시간이 걸렸다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 보통 매우 간단한 작업이고 빠르게 발생할 것이기 때문에 저는 정말 혼란스러웠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 디버깅을 거친 후 문제가 모든 알림/계산/등을 끄고 이러한 공식을 붙여 넣었을 때 발생한 것으로 나타났습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strSheetName&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시트가 아직 도착하지 않았습니다. b/c 메인 파일과 별도로 이 코드를 개발하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 붙여넣을 때 대화 상자가 표시되는 것처럼 보이지만, 모든 것을 차단하면 볼 수 없지만 모든 것이 느려집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭이 없으면 범위를 붙여넣는 데 약 6분이 걸리고 탭이 있는 경우에는 몇 초(아마도 그보다 적음)가 걸립니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 코드를 좀 더 세분화하기 위해 필요한 시트를 확인하고 없으면 탭을 자리 표시자로 추가하여 전체 프로세스가 크롤로 느려지지 않도록 하는 기능을 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두의 도움에 감사드립니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 앞으로 다른 누군가에게 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수행할 작업:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;arrayData = Array(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;E&quot;)

[a1].Resize(UBound(arrayData) + 1) = Application.Transpose(arrayData)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요한 비트는 Transpose() 기능입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 워크시트에 2D 어레이를 쓸 계획이라면 처음부터 사용하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 순위의 행과 두 번째 순위의 열로 정의하는 한, 전환이 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 항목:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub test()

    ActiveWorkbook.Worksheets(&quot;Sheet1&quot;).Cells.Clear

    Dim arrayData(1 To 5, 1 To 1) As Variant
    arrayData(1, 1) = &quot;A&quot;
    arrayData(2, 1) = &quot;B&quot;
    arrayData(3, 1) = &quot;C&quot;
    arrayData(4, 1) = &quot;D&quot;
    arrayData(5, 1) = &quot;E&quot;

    Dim rngTarget As Range
    Set rngTarget = ActiveWorkbook.Worksheets(&quot;Sheet1&quot;).Range(&quot;A1:A5&quot;)
    rngTarget = arrayData

End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gBwRc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gBwRc.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 제가 수락된 답변을 확장할 수 있다면, 저는 다음과 같이 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[a1].Resize(UBound(arrayData) - LBound(arrayData) + 1) = Application.Transpose(arrayData)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 안전한 방법일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이 변수를 다음과 같이 선언해도 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim arrayData(0 to 2) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim arrayData(1 to 3) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;승인된 답변은 두 번째 경우에만 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제안된 방법은 어레이 크기를 알 수 없고 arrayData를 다음과 같이 선언하는 경우에 유용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim arrayData()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/33161371/&lt;a href=&quot;https://stackoverflow.com/questions/33161371/writing-an-array-to-a-range-only-getting-first-value-of-array&quot; target=&quot;_blank&quot; papago-id=&quot;32-1&quot;&gt;writing-an-array-to-a-range-only-getting-first-value-of-array&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/538</guid>
      <comments>https://showcode.tistory.com/538#entry538comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:49:47 +0900</pubDate>
    </item>
    <item>
      <title>테이블 열에 대한 Oracle의 비트 데이터 유형</title>
      <link>https://showcode.tistory.com/537</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 열에 대한 Oracle의 비트 데이터 유형&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 Oracle을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;true 시나리오에  기타 유형.true/false 파일 형식입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 다음을 사용합니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char(1)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문화적인 특정 문제에 상관없이 예/참을 나타내기 위해 특정 문자를 사용하여 필드를 대신합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 해야 ?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Number(1,0)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 이에 대해 - 0은 거짓으로 간주됩니다 / 아니요, 사실로 해석되는 다른 것은 없습니까 / 네?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 실행 가능합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle이 단순 부울 형식을 지원하지 않는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CHAR(1)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 리고만을허제조약건는하용그▁only조만 허용하는 제약 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;col CHAR(1),
CONSTRAINT cons_atable_col1 CHECK (col1 IN ('1','0'))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 영어 원어민이 아니라서 1과 0 또는 '1'과 '0'을 사용하는 편입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;영어로 코딩하지 않으면 'Y'와 'N'을 사용하는 것은 거의 의미가 없습니다(네, 모국어 코딩이 존재합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'SI'와 'NO' 또는 'S'와 'N'을 사용하는 것은 전문적인 것처럼 보이지 않습니다(악센트가 있는 문자로 변수의 이름을 지정하는 것과 같습니다)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반대로 C, PHP 또는 JavaScript로 코딩했다면 1과 0은 상당히 표준적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 경우에도 다른 문자를 허용하지 않도록 항상 적절한 제약 조건을 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주관적인 문제는 차치하고, CHAR나 NUMBER를 선택하는 것은 눈에 띄는 성과가 없다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인용할 필요가 없어서 숫자가 조금 더 좋아요 :)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것이 명백한 누락이라는 것에 동의하지만 저는 몇몇 오라클 포럼에서 그 주제에 대한 심각하게 열띤 토론을 읽었습니다; 그것은 일종의 종교적 문제입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부에서는 부울이 응용 프로그램 데이터 유형에 속하며 데이터베이스 코어에 위치하지 않는다고 주장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔직히, 저는 우리가 그것 없이 너무 오래된 것들 중 하나라고 생각합니다. 우리가 그것을 의도적이라고 말하는 것이 더 나을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 MySQL은 부울 형식을 가지고 있지만 TINYINT(1)와 동의어이므로 결국 1과 0과 같으며, 1과 0으로 평가되는 상수 TRUE와 FALSE도 있기 때문에 괜찮습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 톰에게 물어보기 &lt;a href=&quot;http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:6263249199595&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;주제&lt;/a&gt;에 대한 토론입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제에 대한 Oracle 중심의 관점을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스토리지의 경우 char(1)이 실제로 좀 더 효율적입니다(장난 의도는 없습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; CREATE TABLE xx (c CHAR(1), n NUMBER);

Table created

SQL&amp;gt; insert into xx values('T', 1);

1 row inserted

SQL&amp;gt; select dump(c), dump(n) from xx;

DUMP(C)             DUMP(N)
------------------- -------------
Typ=96 Len=1: 84    Typ=2 Len=2: 193,2
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 숫자(1)보다 문자(1)를 선호합니다. 왜냐하면 문자를 합리적으로 선택할 수 있기 때문입니다. 어떤 문자가 부울적인 의미를 가지고 있는지는 분명하기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 모든 다양한 변형과 싸워야 합니다. 하나를 선택하고 열에 체크 제약 조건을 적용하여 사용할 수 있도록 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 도구에서 스키마를 생성하면 일관성 문제가 해결되는 경우가 종종 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 개인적으로 이런 목적으로 겨울잠을 자는 것을 선호하지만, 그것은 매우 구체적인 상황입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 물론 그것은 명백한 의무입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;설상가상으로 PL/SQL에는 부울이 있지만 SQL 문에는 사용할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;본 Oracle 가이드에 따르면 NUMBER(3)를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미쳤지만, 사실입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/gateways.102/b14270/apa.htm&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://docs.oracle.com/cd/B19306_01/gateways.102/b14270/apa.htm&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자(1)가 문자(1)보다 크지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 기존의 char(1)에 추가될 경우에는 더욱 그렇습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 혼란을 가중시킬 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FWIW, 내부 뷰(예: USER_TAB_COLUMN)의 Oracle은 varchar2(3)(YES 및 NO)를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그들이 여기서 100% 일관성이 있는지는 확실하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문은 오래되었지만 최신 Oracle 릴리스가 사용되기 전까지는 여전히 유효한 질문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이런 방법으로 문제를 해결할 것입니다: true/false와 현지화된 표시 텍스트(예: T$KEYWARDS ITEMNO ITEMTEXTEXT_DE ITEMTEXT_FE ... 0 False Falsch 1 TrueWahr)에 대한 가능한 값을 포함하는 테이블을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참/거짓 대신 선택됨, 선택되지 않음 등을 선택할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 이 표에 열에 8개 키를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 유효한 값만 있고 현지화에 따라 값이 변경되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 좋은 솔루션인 iho는 데이터 열에 체크 제약 조건을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트의 현지화에 따라 동일한 데이터베이스/열에서 값이 다를 수 있는 경우에는 이 OFC가 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;alter table tblLocations add flag number CONSTRAINT &amp;lt;constraintname&amp;gt; CHECK (flag IN (1,0));&lt;/code&gt; &lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle은 내부적으로 서로 다른 Data Dictionary 보기에서 &quot;비트&quot;(데이터 유형 자체가 아님)를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 dba_users 보기의 내용은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;..
        , DECODE (BITAND (u.spare1, 128), 128, 'YES', 'NO')
..
        , DECODE (BITAND (u.spare1, 256), 256, 'Y', 'N')
..
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게든 해결할 수 있는 방법을 보여줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;boolean&quot; 비트를 자주 수정할 필요가 없는 경우 Oracle 6 이후와 동일한 접근 방식을 사용할 수 있습니다(최소한).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자 열과 그 위에 BITAND 연산의 복잡성을 숨기는 뷰가 있는 테이블을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ps. 참고로 Oracle JDBC에는 &quot;비트&quot;&lt;a href=&quot;https://docs.oracle.com/cd/E16338_01/appdev.112/e13995/oracle/jdbc/OracleTypes.html#BIT&quot; rel=&quot;nofollow&quot; papago-id=&quot;35-1&quot;&gt; 데이터&lt;/a&gt; 유형 https://docs.oracle.com/cd/E16338_01/appdev.112/e13995/oracle/jdbc/OracleTypes.html#BIT 이 있으며 PL/SQL에도 부울이 있다는 것을 이미 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 그것이 당신에게 큰 도움이 되지는 않겠지만요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;귀하의 경우에 적합한 경우 위의 BITAND 접근법을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/cd/E17952_01/refman-5.5-en/char.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.oracle.com/cd/E17952_01/refman-5.5-en/char.html&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/thj1v.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/thj1v.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DCookie가 말했듯이 char(1)이 더 효율적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;VARCHAR2(VARCHAR)가 비어 있으면 1바이트가 포함되지만 1문자를 저장하면 1바이트 크기 + 1바이트 크기 --&amp;gt; 2바이트는 1문자를 저장해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2426145/&lt;a href=&quot;https://stackoverflow.com/questions/2426145/oracles-lack-of-a-bit-datatype-for-table-columns&quot; target=&quot;_blank&quot; papago-id=&quot;38-1&quot;&gt;oracles-lack-of-a-bit-datatype-for-table-columns&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/537</guid>
      <comments>https://showcode.tistory.com/537#entry537comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:49:39 +0900</pubDate>
    </item>
    <item>
      <title>오류 TS4053: 내보낸 클래스에서 반환된 공용 메서드 유형에 '관찰 가능' 이름이 있거나 사용 중입니다.</title>
      <link>https://showcode.tistory.com/536</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 TS4053: 내보낸 클래스에서 반환된 공용 메서드 유형에 '관찰 가능' 이름이 있거나 사용 중입니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이온 2 &amp;amp; 각도 2로 앱을 구축하려고 하는데, 앱을 실행하려고 시도하는 동안 이 오류가 발생합니다. 저는 확인해야 할 다른 프로젝트를 구축하고 동일한 문제에 대해 정말 혼란스럽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZS1rf.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZS1rf.jpg&quot; alt=&quot;error in photo&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 나의 서비스 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import { Storage} from '@ionic/storage';
import {NavController} from &quot;ionic-angular&quot;;


/*
  Generated class for the MyService provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular 2 DI.
*/
@Injectable()
export class MyService {
  public local :Storage;
  public getsession : any;
  constructor(private http: Http, private navCtrl : NavController) {
    this.local = new Storage();
    console.log(&quot;my-service page&quot;)
  }

  postLogin(data){
    let link = &quot;http://adirzoari.16mb.com/login.php&quot;;
    return this.http.post(link,data)
        .map(res =&amp;gt; res.json())
  }

  checkToken(){
    return this.getsession =this.local.get('token');
  }

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것이 동일한 문제에 직면한 다른 SO 사용자들에게 도움이 될 수 있도록 답변으로만 추가합니다.&lt;/font&gt;&lt;/em&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@&lt;a href=&quot;https://stackoverflow.com/users/4915541/sudheer-kb&quot; papago-id=&quot;0-1&quot;&gt;sudheer-kb&lt;/a&gt;가 언급한 것처럼, 이 문제를 해결하려면 다음을 &lt;strong papago-id=&quot;0-3&quot;&gt;명시적&lt;/strong&gt;으로 가져와야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Observable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
// ...
import { Observable } from &quot;rxjs/Observable&quot;; // &amp;lt;- add this import
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 메소드에 명시적인 반환 유형을 지정합니다(또한 @&lt;a href=&quot;https://stackoverflow.com/users/1028230/ruffin&quot; papago-id=&quot;6-1&quot;&gt;ruffin&lt;/a&gt;의 의견에 감사드립니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;postLogin(data): Observable&amp;lt;any&amp;gt; {
    // ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 비슷한 문제가 있었는데, 반품 방식의 문제와 관련이 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제게 효과가 있었던 것은 메소드 선언 직후에 다음과 같이 &quot;: any&quot;를 간단히 추가하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;get(url) : any {
  //code
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것이 좋은 습관이라고 생각하지 않지만, 가끔은 좋은 치료법이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39870881/&lt;a href=&quot;https://stackoverflow.com/questions/39870881/error-ts4053-return-type-of-public-method-from-exported-class-has-or-is-using-n&quot; target=&quot;_blank&quot; papago-id=&quot;9-1&quot;&gt;error-ts4053-return-type-of-public-method-from-exported-class-has-or-is-using-n&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>TypeScript</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/536</guid>
      <comments>https://showcode.tistory.com/536#entry536comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:49:32 +0900</pubDate>
    </item>
    <item>
      <title>문자열에서 하위 문자열의 n번째 발생 찾기</title>
      <link>https://showcode.tistory.com/535</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에서 하위 문자열의 n번째 발생 찾기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 꽤 사소한 것처럼 보이지만, 저는 파이썬에 익숙하지 않고 가장 파이썬적인 방식으로 하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 내 하위 문자열의 n번째 발생에 해당하는 인덱스를 찾고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 하고 싶은 것과 동등한 것이 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;mystring.find(&quot;substring&quot;, 2nd)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python에서 어떻게 이를 달성할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 반복 솔루션의 Pythonic 버전은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_nth(haystack, needle, n):
    start = haystack.find(needle)
    while start &amp;gt;= 0 and n &amp;gt; 1:
        start = haystack.find(needle, start+len(needle))
        n -= 1
    return start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; find_nth(&quot;foofoofoofoo&quot;, &quot;foofoo&quot;, 2)
6
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 중 &lt;em papago-id=&quot;7-1&quot;&gt;n번째&lt;/em&gt; 중복 발생을 찾으십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;needle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;증분할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;len(needle)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_nth_overlapping(haystack, needle, n):
    start = haystack.find(needle)
    while start &amp;gt;= 0 and n &amp;gt; 1:
        start = haystack.find(needle, start+1)
        n -= 1
    return start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; find_nth_overlapping(&quot;foofoofoofoo&quot;, &quot;foofoo&quot;, 2)
3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 Mark 버전보다 읽기 쉬우며 분할 버전이나 정규식 가져오기 모듈의 추가 메모리가 필요하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 또한 다양한 것과 달리 &lt;a href=&quot;http://www.python.org/dev/peps/pep-0020/&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;파이썬의 젠&lt;/a&gt;에 있는 몇 가지 규칙을 고수합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;re&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접근 방식:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순한 것이 복잡한 것보다 낫습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내포된 것보다 평평한 것이 좋습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가독성이 중요합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 마크의 반복적인 접근이 일반적인 방법이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 문자열 분할과 관련된 프로세스를 찾는 데 유용할 수 있는 대안입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def findnth(haystack, needle, n):
    parts= haystack.split(needle, n+1)
    if len(parts)&amp;lt;=n+1:
        return -1
    return len(haystack)-len(parts[-1])-len(needle)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 여기 바늘과 일치하지 않는 겨를 골라야 한다는 점에서 약간 더러운 것이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'foo bar bar bar'.replace('bar', 'XXX', 1).find('bar')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에서 하위 문자열이 두 번째로 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_2nd(string, substring):
   return string.find(substring, string.find(substring) + 1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 성능에 대해 많이 생각하지 않았지만, 빠른 재귀는 n번째 발생을 찾는 데 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_nth(string, substring, n):
   if (n == 1):
       return string.find(substring)
   else:
       return string.find(substring, find_nth(string, substring, n - 1) + 1)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정규식이 항상 최선의 해결책은 아니라는 것을 이해하기 위해 여기서 하나를 사용할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import re
&amp;gt;&amp;gt;&amp;gt; s = &quot;ababdfegtduab&quot;
&amp;gt;&amp;gt;&amp;gt; [m.start() for m in re.finditer(r&quot;ab&quot;,s)]
[0, 2, 11]
&amp;gt;&amp;gt;&amp;gt; [m.start() for m in re.finditer(r&quot;ab&quot;,s)][2] #index 2 is third occurrence 
11
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;된 가장 @bobince의 @bobince의 @bobince의 @bobince의 @bobince의 @bobince를 비교한 벤치마킹 결과를 제시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findnth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.split()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 또는  Byers's) vs. @tgamblin's @Mark Byers's.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find_nth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.find()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C C)와해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_find_nth.so&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;얼마나 빨리 갈 수 있는지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 있습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find_nth.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def findnth(haystack, needle, n):
    parts= haystack.split(needle, n+1)
    if len(parts)&amp;lt;=n+1:
        return -1
    return len(haystack)-len(parts[-1])-len(needle)

def find_nth(s, x, n=0, overlap=False):
    l = 1 if overlap else len(x)
    i = -l
    for c in xrange(n + 1):
        i = s.find(x, i + l)
        if i &amp;lt; 0:
            break
    return i
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 문자열이 클 경우 성능이 가장 중요하므로 'bigfile'이라는 1.3&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GB 파일에서 1000001번째 줄('\n')을 찾으려 한다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리를 절약하기 위해, 우리는 작업을 하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mmap.mmap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일의 객체 표현:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [1]: import _find_nth, find_nth, mmap

In [2]: f = open('bigfile', 'r')

In [3]: mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫인 이미첫번다있습니제가문째에 이미 첫 번째 문제가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findnth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로, 터부&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mmap.mmap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 지원하지 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 전체 파일을 메모리에 복사해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [4]: %time s = mm[:]
CPU times: user 813 ms, sys: 3.25 s, total: 4.06 s
Wall time: 17.7 s
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도 아야! 다도히!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; » Macbook Air » 4GB »를 해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 벤치마크해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findnth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [5]: %timeit find_nth.findnth(s, '\n', 1000000)
1 loops, best of 3: 29.9 s per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확실히 끔찍한 공연입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 기반으로 한 접근 방식에 대해 살펴보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.find()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행:실행:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [6]: %timeit find_nth.find_nth(s, '\n', 1000000)
1 loops, best of 3: 774 ms per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훨씬 낫습니다!&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 확히실.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findnth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 문제는 다음 기간 동안 강제로 문자열을 복사한다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 이미 이은이우가 1.3에 이어 두 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GB의 데이터를 복사한 후 두 번째입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s = mm[:]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;▁of 두 번째 장점이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find_nth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 그것을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일의 복사본이 0개 필요하도록 &lt;em papago-id=&quot;29-1&quot;&gt;직접&lt;/em&gt; 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [7]: %timeit find_nth.find_nth(mm, '\n', 1000000)
1 loops, best of 3: 1.21 s per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 약간의 성능 저하가 발생한 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대 대&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이것은 그것을 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find_nth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findnth&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;47파운드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 어떤 경우도 발견하지 못했습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.find()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기반 접근 방식은 훨씬 더 나빴습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.split()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이 시점에서 저는 @bobince의 대답 대신 @tgamblin의 대답이나 @Mark Byers의 대답을 받아들여야 한다고 주장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트한 로는, 제가테한바로는은, 의버전트의 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find_nth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위는 제가 생각해 낼 수 있는 가장 빠른 순수 파이썬 솔루션이었습니다(@Mark Byers 버전과 매우 유사함).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 C 확장 모듈로 얼마나 더 잘 할 수 있는지 알아보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 있습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_find_nthmodule.c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;Python.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

off_t _find_nth(const char *buf, size_t l, char c, int n) {
    off_t i;
    for (i = 0; i &amp;lt; l; ++i) {
        if (buf[i] == c &amp;amp;&amp;amp; n-- == 0) {
            return i;
        }
    }
    return -1;
}

off_t _find_nth2(const char *buf, size_t l, char c, int n) {
    const char *b = buf - 1;
    do {
        b = memchr(b + 1, c, l);
        if (!b) return -1;
    } while (n--);
    return b - buf;
}

/* mmap_object is private in mmapmodule.c - replicate beginning here */
typedef struct {
    PyObject_HEAD
    char *data;
    size_t size;
} mmap_object;

typedef struct {
    const char *s;
    size_t l;
    char c;
    int n;
} params;

int parse_args(PyObject *args, params *P) {
    PyObject *obj;
    const char *x;

    if (!PyArg_ParseTuple(args, &quot;Osi&quot;, &amp;amp;obj, &amp;amp;x, &amp;amp;P-&amp;gt;n)) {
        return 1;
    }
    PyTypeObject *type = Py_TYPE(obj);

    if (type == &amp;amp;PyString_Type) {
        P-&amp;gt;s = PyString_AS_STRING(obj);
        P-&amp;gt;l = PyString_GET_SIZE(obj);
    } else if (!strcmp(type-&amp;gt;tp_name, &quot;mmap.mmap&quot;)) {
        mmap_object *m_obj = (mmap_object*) obj;
        P-&amp;gt;s = m_obj-&amp;gt;data;
        P-&amp;gt;l = m_obj-&amp;gt;size;
    } else {
        PyErr_SetString(PyExc_TypeError, &quot;Cannot obtain char * from argument 0&quot;);
        return 1;
    }
    P-&amp;gt;c = x[0];
    return 0;
}

static PyObject* py_find_nth(PyObject *self, PyObject *args) {
    params P;
    if (!parse_args(args, &amp;amp;P)) {
        return Py_BuildValue(&quot;i&quot;, _find_nth(P.s, P.l, P.c, P.n));
    } else {
        return NULL;    
    }
}

static PyObject* py_find_nth2(PyObject *self, PyObject *args) {
    params P;
    if (!parse_args(args, &amp;amp;P)) {
        return Py_BuildValue(&quot;i&quot;, _find_nth2(P.s, P.l, P.c, P.n));
    } else {
        return NULL;    
    }
}

static PyMethodDef methods[] = {
    {&quot;find_nth&quot;, py_find_nth, METH_VARARGS, &quot;&quot;},
    {&quot;find_nth2&quot;, py_find_nth2, METH_VARARGS, &quot;&quot;},
    {0}
};

PyMODINIT_FUNC init_find_nth(void) {
    Py_InitModule(&quot;_find_nth&quot;, methods);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 여기다니습있이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setup.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from distutils.core import setup, Extension
module = Extension('_find_nth', sources=['_find_nthmodule.c'])
setup(ext_modules=[module])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 설치이와 함께 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python setup.py install&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 C 코드는 단일 문자를 찾는 것으로 제한되기 때문에 유리하지만, 이것이 얼마나 빠른지 살펴보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [8]: %timeit _find_nth.find_nth(mm, '\n', 1000000)
1 loops, best of 3: 218 ms per loop

In [9]: %timeit _find_nth.find_nth(s, '\n', 1000000)
1 loops, best of 3: 216 ms per loop

In [10]: %timeit _find_nth.find_nth2(mm, '\n', 1000000)
1 loops, best of 3: 307 ms per loop

In [11]: %timeit _find_nth.find_nth2(s, '\n', 1000000)
1 loops, best of 3: 304 ms per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확실히 여전히 꽤 더 빠릅니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;흥미롭게도, 메모리 내 케이스와 매핑된 케이스 사이에는 C 수준에 차이가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 보는 것 또한 흥미롭습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_find_nth2()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 바를탕로으에  있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string.h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memchr()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 함수, 이브러기능리손대, 에 대해 패배합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_find_nth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의추최인 &quot;적화는 &quot;의 인 &quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memchr()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보아하니 역효과를 내고 있는 것 같군요...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 결적으로은, 구현의론의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findnth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.split()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(a) 필요한 복사로 인해 더 큰 문자열에 대해 끔찍하게 수행되고 (b) 작동하지 않기 때문에 정말 나쁜 생각입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mmap.mmap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물건이 전혀 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find_nth()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.find()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)는 모든 상황에서 선호되어야 합니다(따라서 이 질문에 대한 허용된 답변입니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 확장이 순수 파이썬 코드보다 거의 4배 더 빠르게 실행되어 전용 파이썬 라이브러리 함수에 대한 사례가 있을 수 있기 때문에 아직 개선의 여지가 꽤 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 간단한 방법은?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;text = &quot;This is a test from a test ok&quot; 

firstTest = text.find('test')

print text.find('test', firstTest + 1)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스 매개 변수를 사용하는 찾기 함수를 사용하여 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_nth(s, x, n):
    i = -1
    for _ in range(n):
        i = s.find(x, i + len(x))
        if i == -1:
            break
    return i

print find_nth('bananabanana', 'an', 3)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는 특별히 파이썬적인 것은 아니지만, 간단합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 재귀를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_nth(s, x, n, i = 0):
    i = s.find(x, i)
    if n == 1 or i == -1:
        return i 
    else:
        return find_nth(s, x, n - 1, i + len(x))

print find_nth('bananabanana', 'an', 3)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 그것을 해결하는 기능적인 방법이지만, 저는 그것이 그것을 더 파이썬적으로 만드는지 모르겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일치 항목에 대한 시작 인덱스 배열을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;yourstring&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import re
indices = [s.start() for s in re.finditer(':', yourstring)]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 n번째 항목은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;n = 2
nth_entry = indices[n-1]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 당신은 지수 경계를 조심해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 턴스수수있확다습니의  수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;yourstring&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;num_instances = len(indices)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자의 n번째 발생(즉, 길이 1의 하위 문자열)을 검색하는 특수한 경우, 다음 함수는 해당 문자의 모든 발생 위치 목록을 작성하여 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_char_nth(string, char, n):
    &quot;&quot;&quot;Find the n'th occurence of a character within a string.&quot;&quot;&quot;
    return [i for i, c in enumerate(string) if c == char][n-1]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 적은 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주어진 캐릭터의 발생, 그것은 줄 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IndexError: list index out of range&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 @Zv_oDD의 &lt;a href=&quot;https://stackoverflow.com/a/43301645/650222&quot; papago-id=&quot;88-1&quot;&gt;답변&lt;/a&gt;에서 파생되었으며 단일 문자의 경우 단순화되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 re.finditer를 사용하는 다른 접근법이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 본다는 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from re import finditer
from itertools import dropwhile
needle='an'
haystack='bananabanana'
n=2
next(dropwhile(lambda x: x[0]&amp;lt;n, enumerate(re.finditer(needle,haystack))))[1].start() 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 의 여또있다니습이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;re&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itertools&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 중 하나를 검색할 때 작동해야 하는 버전&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 는또.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RegexpObject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것이 과장되었을 가능성이 있다는 것을 자유롭게 인정하겠지만, 어떤 이유에서인지 그것은 저를 즐겁게 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import itertools
import re

def find_nth(haystack, needle, n = 1):
    &quot;&quot;&quot;
    Find the starting index of the nth occurrence of ``needle`` in \
    ``haystack``.

    If ``needle`` is a ``str``, this will perform an exact substring
    match; if it is a ``RegexpObject``, this will perform a regex
    search.

    If ``needle`` doesn't appear in ``haystack``, return ``-1``. If
    ``needle`` doesn't appear in ``haystack`` ``n`` times,
    return ``-1``.

    Arguments
    ---------
    * ``needle`` the substring (or a ``RegexpObject``) to find
    * ``haystack`` is a ``str``
    * an ``int`` indicating which occurrence to find; defaults to ``1``

    &amp;gt;&amp;gt;&amp;gt; find_nth(&quot;foo&quot;, &quot;o&quot;, 1)
    1
    &amp;gt;&amp;gt;&amp;gt; find_nth(&quot;foo&quot;, &quot;o&quot;, 2)
    2
    &amp;gt;&amp;gt;&amp;gt; find_nth(&quot;foo&quot;, &quot;o&quot;, 3)
    -1
    &amp;gt;&amp;gt;&amp;gt; find_nth(&quot;foo&quot;, &quot;b&quot;)
    -1
    &amp;gt;&amp;gt;&amp;gt; import re
    &amp;gt;&amp;gt;&amp;gt; either_o = re.compile(&quot;[oO]&quot;)
    &amp;gt;&amp;gt;&amp;gt; find_nth(&quot;foo&quot;, either_o, 1)
    1
    &amp;gt;&amp;gt;&amp;gt; find_nth(&quot;FOO&quot;, either_o, 1)
    1
    &quot;&quot;&quot;
    if (hasattr(needle, 'finditer')):
        matches = needle.finditer(haystack)
    else:
        matches = re.finditer(re.escape(needle), haystack)
    start_here = itertools.dropwhile(lambda x: x[0] &amp;lt; n, enumerate(matches, 1))
    try:
        return next(start_here)[1].start()
    except StopIteration:
        return -1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;71-1&quot;&gt;모델13&lt;/strong&gt;의 답변을 기반으로 구축하지만, 그것 없이.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;re&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈 종속성.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def iter_find(haystack, needle):
    return [i for i in range(0, len(haystack)) if haystack[i:].startswith(needle)]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 붙박이 현악기 방식이었으면 좋겠어요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; iter_find(&quot;http://stackoverflow.com/questions/1883980/&quot;, '/')
[5, 6, 24, 34, 42]
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s=&quot;abcdefabcdefababcdef&quot;
&amp;gt;&amp;gt;&amp;gt; j=0
&amp;gt;&amp;gt;&amp;gt; for n,i in enumerate(s):
...   if s[n:n+2] ==&quot;ab&quot;:
...     print n,i
...     j=j+1
...     if j==2: print &quot;2nd occurence at index position: &quot;,n
...
0 a
6 a
2nd occurence at index position:  6
12 a
14 a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &quot;한션른제&quot;를 사용하는 또 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;join&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 예에서, 우리는 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;len(&quot;substring&quot;.join([s for s in ori.split(&quot;substring&quot;)[:2]]))
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# return -1 if nth substr (0-indexed) d.n.e, else return index
def find_nth(s, substr, n):
    i = 0
    while n &amp;gt;= 0:
        n -= 1
        i = s.find(substr, i + 1)
    return i
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프와 재귀를 사용하지 않는 솔루션.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일 방법에서 필요한 패턴을 사용하고&lt;strong papago-id=&quot;104-1&quot;&gt; 변수 &lt;/strong&gt;'n'에 원하는 패턴을 입력하면 마지막 문이 지정된 문자열에서 패턴의 n번째 발생의 시작 인덱스를 인쇄합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 finditer, 즉 반복기의 결과가 목록으로 변환되고 n번째 인덱스에 직접 액세스됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;import re
n=2
sampleString=&quot;this is history&quot;
pattern=re.compile(&quot;is&quot;)
matches=pattern.finditer(sampleString)
print(list(matches)[n].span()[0])
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 제가 찾을 수 있는 해결책입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 을지어로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from functools import reduce


def findNth(a, b, n):
    return reduce(lambda x, y: -1 if y &amp;gt; x + 1 else a.find(b, x + 1), range(n), -1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 순수한 파이썬이고 반복적입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 또는 0의  는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;너무 크면 -1을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 원라이너이며 직접 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 예입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; reduce(lambda x, y: -1 if y &amp;gt; x + 1 else 'bibarbobaobaotang'.find('b', x + 1), range(4), -1)
7
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;findnth() 함수를 사용하다가 몇 가지 문제가 발생하여 더 빠른 버전의 함수를 다시 작성했습니다(목록 분할 없음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def findnth(haystack, needle, n):
    if not needle in haystack or haystack.count(needle) &amp;lt; n:
        return -1

    last_index = 0
    cumulative_last_index = 0
    for i in range(0, n):
        last_index = haystack[cumulative_last_index:].find(needle)
        cumulative_last_index += last_index
        
        # if not last element, then jump over it
        if i &amp;lt; n-1:
            cumulative_last_index += len(needle)

    return cumulative_last_index
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체 라이너 하나는 좋지만 XX와 바의 렌지가 동일하기 때문에 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절하고 일반적인 정의는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def findN(s,sub,N,replaceString=&quot;XXX&quot;):
    return s.replace(sub,replaceString,N-1).find(sub) - (len(replaceString)-len(sub))*(N-1)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def get_first_N_words(mytext, mylen = 3):
    mylist = list(mytext.split())
    if len(mylist)&amp;gt;=mylen: return ' '.join(mylist[:mylen])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;get_first_N_words('  One Two Three Four ' , 3)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'One Two Three'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제공된 발생에 대한 입력 값이 실제 발생 횟수보다 높을 경우 오류가 발생하거나 잘못된 출력을 방지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 'overflow' 문자열에서 'o'가 세 번째로 발생하는지 확인할 경우(발생 횟수가 두 번만 발생함), 아래 코드는 발생 값을 초과했음을 나타내는 경고 또는 메시지를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력한 발생 입력이 실제 발생 횟수를 초과했습니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;def check_nth_occurrence (string, substr, n):

## Count the Occurrence of a substr
    cnt = 0
    for i in string:
        if i ==substr:
            cnt = cnt + 1
        else:
            pass

## Check if the Occurrence input has exceeded the actual count of Occurrence

    if n &amp;gt; cnt:
        print (f' Input Occurrence entered has exceeded the actual count of Occurrence')
        return

## Get the Index value for first Occurrence of the substr

   index = string.find(substr)

## Get the Index value for nth Occurrence of Index
    while index &amp;gt;= 0 and n &amp;gt; 1:
        index = string.find(substr, index+ 1)
        n -= 1
  return index
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤에서 n번째를 찾고 싶은 사람이 있을 경우를 대비해서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def find_nth_reverse(haystack: str, needle: str, n: int) -&amp;gt; int:
    end = haystack.rfind(needle)

    while end &amp;gt;= 0 and n &amp;gt; 1:
        end = haystack.rfind(needle, 0, end - len(needle))
        n -= 1

    return end
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단하고 재미있는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def index_of_nth(text, substring, n) -&amp;gt; int:
    index = 0
    for _ in range(n):
        index = text.index(substring, index) + 1
    return index - 1
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 풀었어요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def second_index(text: str, symbol: str) -&amp;gt; [int, None]:
&quot;&quot;&quot;
    returns the second index of a symbol in a given text
&quot;&quot;&quot;
first = text.find(symbol)
result = text.find(symbol,first+1)
if result &amp;gt; 0: return result 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신이 진정으로 원하는 답입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def Find(String,ToFind,Occurence = 1):
index = 0 
count = 0
while index &amp;lt;= len(String):
    try:
        if String[index:index + len(ToFind)] == ToFind:
            count += 1
        if count == Occurence:
               return index
               break
        index += 1
    except IndexError:
        return False
        break
return False
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적인 프로그래밍 지식을 갖춘 사용자를 위한 간단한 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Function to find the nth occurrence of a substring in a text
def findnth(text, substring, n):

# variable to store current index in loop
count = -1

# n count
occurance = 0

# loop through string
for letter in text:
    
    # increment count
    count += 1
    
    # if current letter in loop matches substring target
    if letter == substring:
        
        # increment occurance
        occurance += 1
        
        # if this is the nth time the substring is found
        if occurance == n:
            
            # return its index
            return count
        
# otherwise indicate there is no match
return &quot;No match&quot;

# example of how to call function
print(findnth('C$100$150xx', &quot;$&quot;, 2))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어때요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;c = os.getcwd().split('\\')
print '\\'.join(c[0:-2])
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1883980/&lt;a href=&quot;https://stackoverflow.com/questions/1883980/find-the-nth-occurrence-of-substring-in-a-string&quot; target=&quot;_blank&quot; papago-id=&quot;125-1&quot;&gt;find-the-nth-occurrence-of-substring-in-a-string&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/535</guid>
      <comments>https://showcode.tistory.com/535#entry535comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:49:25 +0900</pubDate>
    </item>
    <item>
      <title>OR 기준이 있는 SUMIF</title>
      <link>https://showcode.tistory.com/534</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OR 기준이 있는 SUMIF&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SUMIF&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel 셀에서 주어진 범위에 합을 맞춰야 하고 단일 값을 찾는 대신 여러 값을 찾아야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 값을 찾기 위해 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUMIF(A4:A100;&quot;1&quot;;B4:B100)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 저는 그 칼럼이 다음과 같은 것인지 요약해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쥔다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUMIF(A4:A100;&quot;1&quot; OR &quot;2&quot;;B4:B100)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감방&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기준을 텍스트로 유지할 것입니다. 여기서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1;2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 동일하게 반환되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUMIF(A4:A100;&quot;1&quot;;B4:B100) + SUMIF(A4:A100;&quot;2&quot;;B4:B100)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 어떤 기준(1, 2, 3, 또는 그 이상)을 취할 수 있는 공식이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문이 뭐죠?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서는 VBA를 사용할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 또는 2로 요약하자면 이 버전을 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;=SUM(SUMIF(A4:A100;{1;2};B4:B100))&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;SUMIF&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 결과의 &quot;어레이&quot;를 반환하므로 다음과 같은 작업이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SUM&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1과 2의 합계에 대해 배열을 합하는 것.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 만큼 숫자를 추가할 수 있습니다. 예:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;=SUM(SUMIF(A4:A100;{1;2;3;4};B4:B100))&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 Z1:Z10과 같은 범위에 나열된 숫자로 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;=SUMPRODUCT(SUMIF(A4:A100;Z1:Z10;B4:B100))&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이렇게 하나의 진술 안에서 OR을 할 수 있는 방법이 없다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SUMIF는 모두 참이어야 하는 여러 조건에 대해 사용할 수 있지만, 이 경우 여러 SUMIF 문을 함께 추가하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUMIF(A4:A100,&quot;1&quot;,B4:B100)+SUMIF(A4:A100,&quot;2&quot;,B4:B100)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;1&quot;과 &quot;2&quot;는 서로 배타적이므로,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUMIF(A4:A100,&quot;1&quot;,B4:B100)+SUMIF(A4:A100,&quot;2&quot;,B4:B100)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;범위를 정의해야 한다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;keys&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합할 모든 값을 저장할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이 범위에서 당신은 1과 2를 유지하고 당신이 원할 때 그것을 수정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 공식이 있는 플래그 열을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IFERROR(IF(MATCH(A4,keys,0)&amp;gt;0,1,0),0)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 합할 값에 대한 1이 있는 열이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 텍스트 평가와 함께 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;=sumif(M4:M206,&quot;Sat&quot;,O4:O206)+sumif(M4:M206,&quot;Sun&quot;,O4:O206)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 더 추가 + + +&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21528616/&lt;a href=&quot;https://stackoverflow.com/questions/21528616/sumif-with-or-criteria&quot; target=&quot;_blank&quot; papago-id=&quot;26-1&quot;&gt;sumif-with-or-criteria&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/534</guid>
      <comments>https://showcode.tistory.com/534#entry534comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:49:10 +0900</pubDate>
    </item>
    <item>
      <title>MongoDB에서 데이터를 중지하지 않고 삭제하는 방법은 무엇입니까?</title>
      <link>https://showcode.tistory.com/533</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MongoDB에서 데이터를 중지하지 않고 삭제하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 MongoDB에서 더 많은 양의 데이터를 삭제할 때마다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;collection.remove()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 데이터베이스를 너무 느리게 만들어서 결국 우리의 웹 서버가 다운됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거 작업을 수행하면 컬렉션이 더 오랫동안 잠겨 있기 때문인 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제할 모든 문서를 제공하는 쿼리가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 쿼리에 날짜/시간 필드가 포함되어 있지 않기 때문에 TTL 인덱스를 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 제거할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nice&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가끔 자물쇠를 푸는 것?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대량 작업 사용&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대량 &lt;em papago-id=&quot;7-1&quot;&gt;작업&lt;/em&gt;이 여기에 도움이 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;순서가 없는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bulk.find(queryDoc).remove()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 의 버전입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;db.collection.remove(queryDoc)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 수의 작업에 최적화되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용법은 매우 간단합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var bulk = db.yourCollection.initializeUnorderedBulkOp()
bulk.find(yourQuery).remove()
bulk.execute()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;http://docs.mongodb.org/manual/reference/method/Bulk.find.remove/#bulk-find-remove&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;MongoDB 문서에서 &lt;/a&gt;Bulk.&lt;a href=&quot;http://docs.mongodb.org/manual/reference/method/Bulk.find.remove/#bulk-find-remove&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;find().remove()를 참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식의 아이디어는 제거 속도를 높이는 것이 아니라 부하를 줄이는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 결과, 부하가 절반으로 줄었고 시간은 a보다 약간 짧았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;db.collection.remove(query)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스 생성&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 제거 작업을 수행해도 인스턴스가 동결되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;5년 된 MacBook에서 1,200만 개의 문서를 제거하는 테스트를 해봤는데, 약간의 부하가 걸리는 동안 얼지 않고 10분 정도 걸렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 쿼리할 때 사용한 필드는 색인화되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 수집 검사를 경험하고 있을 수 있다는 결론에 도달합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 말이 맞다면 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리에 인덱스에 포함되지 않았거나 인덱스 교차를 구성할 수 없는 필드 또는 필드 조합이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 문제의 mongod는 &lt;strong papago-id=&quot;15-3&quot;&gt;&lt;em papago-id=&quot;15-3-0&quot;&gt;데이터베이스&lt;/em&gt;&lt;/strong&gt;의 각 &lt;em papago-id=&quot;15-1&quot;&gt;문서에 대한 필드&lt;/em&gt;를 디스크에서 &lt;strong papago-id=&quot;15-3&quot;&gt;&lt;em papago-id=&quot;15-3-0&quot;&gt;찾고&lt;/em&gt;&lt;/strong&gt;, 액세스하고, 읽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 제거 작업을 수행하기 전에 쿼리의 각 필드가 포함된 인덱스를 백그라운드로 작성하는 것이 유용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;db.collection.createIndex(
  {firstFieldYouQueryBy:1,...,NthFieldYouQueryBy:1},
  {background:true}
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 백그라운드에서 수행되지만 셸이 차단됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간이 좀 걸릴 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 셸을 열고 다음을 사용하여 상태를 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;db.currentOp()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(조금 검색해야 합니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스가 생성될 때(사용자가 사용하여 확인할 수 있음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;db.collection.getIndices()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더더 빨라야 합니다.), 제거 작업이 더 효율적이어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대량 제거가 완료된 후 별도로 필요하지 않은 경우 인덱스를 삭제할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스를 사용하면 수집 검색을 방지할 수 있으므로 제거 속도가 상당히 빨라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 가지 접근 방식의 결합&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스를 먼저 생성하고 인덱스가 준비된 후 대량 명령을 실행하는 것이 합리적이라는 것이 분명해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/33123008/&lt;a href=&quot;https://stackoverflow.com/questions/33123008/how-to-delete-data-from-mongodb-without-slowing-it-down-to-a-halt&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;how-to-delete-data-from-mongodb-without-slowing-it-down-to-a-halt&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MongoDB</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/533</guid>
      <comments>https://showcode.tistory.com/533#entry533comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:49:04 +0900</pubDate>
    </item>
    <item>
      <title>아이폰 웹 애플리케이션에서 방향을 세로 모드로 잠그려면 어떻게 해야 합니까?</title>
      <link>https://showcode.tistory.com/532</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이폰 웹 애플리케이션에서 방향을 세로 모드로 잠그려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPhone 웹 응용 프로그램을 만들고 있는데 방향을 세로 모드로 잠그려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 가능합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 웹킷 확장 기능이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 모바일 사파리용 HTML 및 JavaScript로 작성된 애플리케이션이며, Objective-C로 작성된 네이티브 애플리케이션이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 꽤 엉터리 해결책이지만, 적어도 뭔가(?)입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 아이디어는 CSS 변환을 사용하여 페이지의 내용을 준초상 모드로 회전시키는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작할 수 있는 JavaScript(jQuery로 표시) 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function () {
  function reorient(e) {
    var portrait = (window.orientation % 180 == 0);
    $(&quot;body &amp;gt; div&quot;).css(&quot;-webkit-transform&quot;, !portrait ? &quot;rotate(-90deg)&quot; : &quot;&quot;);
  }
  window.onorientationchange = reorient;
  window.setTimeout(reorient, 0);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 페이지의 전체 내용이 본문 요소 바로 안에 있는 div 안에 있을 것으로 예상합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가로 모드에서 div를 90도 회전시킵니다. 다시 세로로 회전합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;독자에게 연습으로 남겨짐: 디브는 중심점을 중심으로 회전하므로 완벽하게 정사각형이 아닌 한 위치를 조정해야 할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 매력적이지 않은 시각적 문제도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방향을 변경하면 Safari가 천천히 회전하고 최상위 디브가 90도로 바뀝니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 많은 재미를 위해, 추가.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body &amp;gt; div { -webkit-transition: all 1s ease-in-out; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 CSS로.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;장치가 회전하면 Safari가 회전하고 페이지 내용이 회전합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유혹해요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뷰포트 방향을 기준으로 CSS 스타일을 지정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;body[orient=&quot;body&quot;] 또는 body[orient=&quot;body&quot;]로 브라우저를 대상으로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.evotech.net/blog/2007/07/web-development-for-the-iphone/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.evotech.net/blog/2007/07/web-development-for-the-iphone/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 대한 Apple의 접근 방식은 개발자가 방향 변경을 기반으로 CSS를 변경할 수 있도록 허용하지만 방향 변경을 완전히 방지하지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 곳에서도 비슷한 질문을 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://ask.metafilter.com/99784/How-can-I-lock-iPhone-orientation-in-Mobile-Safari&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://ask.metafilter.com/99784/How-can-I-lock-iPhone-orientation-in-Mobile-Safari&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리 html5 게임에서 사용된 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function () {
     $(window)    
          .bind('orientationchange', function(){
               if (window.orientation % 180 == 0){
                   $(document.body).css(&quot;-webkit-transform-origin&quot;, &quot;&quot;)
                       .css(&quot;-webkit-transform&quot;, &quot;&quot;);               
               } 
               else {                   
                   if ( window.orientation &amp;gt; 0) { //clockwise
                     $(document.body).css(&quot;-webkit-transform-origin&quot;, &quot;200px 190px&quot;)
                       .css(&quot;-webkit-transform&quot;,  &quot;rotate(-90deg)&quot;);  
                   }
                   else {
                     $(document.body).css(&quot;-webkit-transform-origin&quot;, &quot;280px 190px&quot;)
                       .css(&quot;-webkit-transform&quot;,  &quot;rotate(90deg)&quot;); 
                   }
               }
           })
          .trigger('orientationchange'); 
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 미디어 쿼리를 사용하여 화면을 회전시키는 이 CSS만의 방법을 생각해냈습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리는 &lt;a href=&quot;http://i-skool.co.uk/mobile-development/web-design-for-mobiles-and-tablets-viewport-sizes/&quot; papago-id=&quot;14-1&quot;&gt;제가 여기서 찾은&lt;/a&gt; 화면 크기를 기준으로 합니다. 480px는 너비가 480px 이상이거나 높이가 480px 미만인 기기가 거의 없기 때문에 480px가 좋을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media (max-height: 480px) and (min-width: 480px) and (max-width: 600px) { 
    html{
        -webkit-transform: rotate(-90deg);
           -moz-transform: rotate(-90deg);
            -ms-transform: rotate(-90deg);
             -o-transform: rotate(-90deg);
                transform: rotate(-90deg);
        -webkit-transform-origin: left top;
           -moz-transform-origin: left top;
            -ms-transform-origin: left top;
             -o-transform-origin: left top;
                transform-origin: left top;
        width: 320px; /*this is the iPhone screen width.*/
        position: absolute;
        top: 100%;
            left: 0
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;Screen.lockOrientation()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 현재 지원은 보편적이지 않습니다(2017년 4월).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.w3.org/TR/screen-orientation/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.w3.org/TR/screen-orientation/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Screen.lockOrientation&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/API/Screen.lockOrientation&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 사용자에게 전화기를 세로 모드로 되돌리라고 말하는 것을 좋아합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 언급된 것처럼:&lt;a href=&quot;http://tech.sarathdr.com/featured/prevent-landscape-orientation-of-iphone-web-apps/&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow&quot; title=&quot;iPhone 웹 앱의 가로 방향 방지&quot; papago-attr-id=&quot;2&quot;&gt; &lt;/a&gt;http://tech.sarathdr.com/featured/&lt;a href=&quot;http://tech.sarathdr.com/featured/prevent-landscape-orientation-of-iphone-web-apps/&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow&quot; title=&quot;iPhone 웹 앱의 가로 방향 방지&quot; papago-attr-id=&quot;3&quot;&gt;prevent-landscape-orientation-of-iphone-web-apps&lt;/a&gt;/ ...그러나 자바스크립트 대신 CSS를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 새로운 미래에 그것은 특별한 용광로를 가지고 있을 것입니다...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2015년 5월에 대해서,&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하는 실험적 기능성이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Firefox 18+, IE11+ 및 Chrome 38+에서만 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 오페라나 사파리에서는 아직 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation#Browser_compatibility&quot; rel=&quot;nofollow&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation#Browser_compatibility&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 호환되는 브라우저의 현재 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var lockOrientation = screen.lockOrientation || screen.mozLockOrientation || screen.msLockOrientation;

lockOrientation(&quot;landscape-primary&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방향 변경이 적용되는 것을 방지할 수는 없지만 다른 답변에 명시된 대로 변경 사항을 에뮬레이트할 수는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 장치 방향 또는 방향 변경을 검색하고 JavaScript를 사용하여 래핑 요소에 클래스 이름을 추가합니다(이 예에서는 본문 태그를 사용함).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function deviceOrientation() {
  var body = document.body;
  switch(window.orientation) {
    case 90:
      body.classList = '';
      body.classList.add('rotation90');
      break;
    case -90:
      body.classList = '';
      body.classList.add('rotation-90');
      break;
    default:
      body.classList = '';
      body.classList.add('portrait');
      break;
  }
}
window.addEventListener('orientationchange', deviceOrientation);
deviceOrientation();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 장치가 가로형인 경우 CSS를 사용하여 본문 너비를 뷰포트 높이로, 본문 높이를 뷰포트 너비로 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 우리가 그것을 하는 동안 변형의 기원을 설정해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media screen and (orientation: landscape) {
  body {
    width: 100vh;
    height: 100vw;
    transform-origin: 0 0;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 차체 요소의 방향을 바꾸고 슬라이드하여 제 위치로 이동합니다(번역).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body.rotation-90 {
  transform: rotate(90deg) translateY(-100%);
}
body.rotation90 {
  transform: rotate(-90deg) translateX(-100%);
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;// CSS hack to prevent layout breaking in landscape
// e.g. screens larger than 320px  
html {
  width: 320px;
  overflow-x: hidden;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것 또는 유사한 CSS 솔루션은 적어도 당신이 원하는 것이라면 당신의 레이아웃을 보존할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;근본적인 해결책은 장치의 기능을 제한하는 것이 아니라 이를 고려하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;장치가 사용자에게 적절한 제한을 허용하지 않는다면 기본적으로 설계가 불완전하기 때문에 단순한 해킹보다 더 나은 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단할수록 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 사람이 있다면 커피에.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    $(window).bind 'orientationchange', -&amp;gt;
        if window.orientation % 180 == 0
            $(document.body).css
                &quot;-webkit-transform-origin&quot; : ''
                &quot;-webkit-transform&quot; : ''
        else
            if window.orientation &amp;gt; 0
                $(document.body).css
                    &quot;-webkit-transform-origin&quot; : &quot;200px 190px&quot;
                    &quot;-webkit-transform&quot; : &quot;rotate(-90deg)&quot;
            else
                $(document.body).css
                    &quot;-webkit-transform-origin&quot; : &quot;280px 190px&quot;
                    &quot;-webkit-transform&quot; : &quot;rotate(90deg)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Grumdrig의 대답에서 영감을 받아 사용된 지침 중 일부가 작동하지 않기 때문에 다른 사용자가 필요로 하는 경우 다음 스크립트를 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    $(document).ready(function () {

      function reorient(e) {
        var orientation = window.screen.orientation.type;
        $(&quot;body &amp;gt; div&quot;).css(&quot;-webkit-transform&quot;, (orientation == 'landscape-primary' || orientation == 'landscape-secondary') ? &quot;rotate(-90deg)&quot; : &quot;&quot;);
      }
    $(window).on(&quot;orientationchange&quot;,function(){
        reorient();
    });
      window.setTimeout(reorient, 0);
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 비슷한 문제가 있습니다만, 풍경을 만들기 위해서는...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 아래의 코드가 효과를 발휘해야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;//This code consider you are using the fullscreen portrait mode
function processOrientation(forceOrientation) {
  var orientation = window.orientation;
  if (forceOrientation != undefined)
    orientation = forceOrientation;
  var domElement = document.getElementById('fullscreen-element-div');
  switch(orientation) {
    case 90:
      var width = window.innerHeight;
      var height = window.innerWidth;
      domElement.style.width = &quot;100vh&quot;;
      domElement.style.height = &quot;100vw&quot;;
      domElement.style.transformOrigin=&quot;50% 50%&quot;;
      domElement.style.transform=&quot;translate(&quot;+(window.innerWidth/2-width/2)+&quot;px, &quot;+(window.innerHeight/2-height/2)+&quot;px) rotate(-90deg)&quot;;
      break;
    case -90:
      var width = window.innerHeight;
      var height = window.innerWidth;
      domElement.style.width = &quot;100vh&quot;;
      domElement.style.height = &quot;100vw&quot;;
      domElement.style.transformOrigin=&quot;50% 50%&quot;;
      domElement.style.transform=&quot;translate(&quot;+(window.innerWidth/2-width/2)+&quot;px, &quot;+(window.innerHeight/2-height/2)+&quot;px) rotate(90deg)&quot;;
      break;
    default:
      domElement.style.width = &quot;100vw&quot;;
      domElement.style.height = &quot;100vh&quot;;
      domElement.style.transformOrigin=&quot;&quot;;
      domElement.style.transform=&quot;&quot;;
      break;
  }
}
window.addEventListener('orientationchange', processOrientation);
processOrientation();&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body style=&quot;margin:0;padding:0;overflow: hidden;&quot;&amp;gt;
  &amp;lt;div id=&quot;fullscreen-element-div&quot; style=&quot;background-color:#00ff00;width:100vw;height:100vh;margin:0;padding:0&quot;&amp;gt; Test
  &amp;lt;br&amp;gt;
  &amp;lt;input type=&quot;button&quot; value=&quot;force 90&quot; onclick=&quot;processOrientation(90);&quot; /&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;input type=&quot;button&quot; value=&quot;force -90&quot; onclick=&quot;processOrientation(-90);&quot; /&amp;gt;&amp;lt;br&amp;gt;
  &amp;lt;input type=&quot;button&quot; value=&quot;back to normal&quot; onclick=&quot;processOrientation();&quot; /&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 웹 사이트의 튜토리얼 및 작업 예제를 보려면 여기를 &lt;a href=&quot;http://www.gajotres.net/locking-jquery-mobile-app-orientation-using-cordova/&quot; rel=&quot;nofollow&quot; papago-id=&quot;35-1&quot;&gt;클릭&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 PhoneGap을 사용하는 경우가 아니라면 더 이상 jQuery 모바일 화면 방향을 보기 위해 해킹을 사용할 필요도, PhoneGap을 사용할 필요도 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2015년에 이 작업을 수행하려면 다음이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Cordova(4.0 이상 버전이 더 좋더라도)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PhoneGap(PhoneGap을 사용할 수도 있으며 플러그인이 호환됨)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Cordova 버전에 따라 다음 플러그인 중 하나가 제공됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;net.yoik.cordova.plugins.화면 방향(cordova &amp;lt; 4)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cordova 플러그인 add net.yoik.codova.plugins.screen 방향&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cordova 플러그인 추가 cordova-vlan-screen-orientation (Cordova &amp;gt; = 4)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cordova 플러그인 cordova-vlan-screen 방향 추가&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;화면 방향을 잠그려면 다음 기능을 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;screen.lockOrientation('landscape');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잠금 해제 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;screen.unlockOrientation();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 방향:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;48-0&quot;&gt;priotal-primary&lt;/strong&gt; 방향이 기본 priotal 모드에 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;49-0&quot;&gt;portra-secondary&lt;/strong&gt; 방향은 보조 portra 모드입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;50-0&quot;&gt;landscape-primary&lt;/strong&gt; 방향은 기본 가로 모드입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;51-0&quot;&gt;landscape-secondary&lt;/strong&gt; 방향은 보조 가로 모드입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;priotal 방향은 priotal-primary 또는 priotal-secondary(센서)입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;53-0&quot;&gt;가로&lt;/strong&gt; 방향은 가로-기본 또는 가로-보조(센서)입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1207008/&lt;a href=&quot;https://stackoverflow.com/questions/1207008/how-do-i-lock-the-orientation-to-portrait-mode-in-a-iphone-web-application&quot; target=&quot;_blank&quot; papago-id=&quot;54-1&quot;&gt;how-do-i-lock-the-orientation-to-portrait-mode-in-a-iphone-web-application&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>iPhone</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/532</guid>
      <comments>https://showcode.tistory.com/532#entry532comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:57 +0900</pubDate>
    </item>
    <item>
      <title>'commit date'를 표시하도록 'git log'를 구성하는 방법</title>
      <link>https://showcode.tistory.com/531</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'commit date'를 표시하도록 'git log'를 구성하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보여주기 위해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;commit date&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;author date&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜를 &lt;a href=&quot;https://git-scm.com/docs/pretty-formats&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;예쁘게&lt;/a&gt; 인쇄할 수 &lt;a href=&quot;https://git-scm.com/docs/pretty-formats&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;있는&lt;/a&gt; 몇 가지 옵션이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 가장 쉬운 방법은 미리 구운 것 중 하나를 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--pretty&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;형식, 예를 들어&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git log --pretty=fuller&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 날짜가 모두 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜를 하나만 표시하고 커밋 날짜로 지정하려면 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git log --format=&amp;lt;some stuff&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;형식을 정의할 수 있는 &lt;a href=&quot;https://www.kernel.org/pub/software/scm/git/docs/git-log.html#_pretty_formats&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;모든&lt;/a&gt; 코드는 다음에 문서화되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git help log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋 날짜는 다음 중 하나입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%cd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%cD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%cr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%ct&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%ci&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 형식에 따라 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자주 하고 싶은 일이라면 별칭에 넣거나 보조 스크립트를 작성하여 타이핑 비용을 절약합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--pretty=format&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%cr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋 날짜 상대에 대해.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git log --graph --pretty=format:'%C(auto)%h%d (%cr) %cn &amp;lt;%ce&amp;gt; %s'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하기 쉽도록 별칭을 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 안에는 다음이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitconfig&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bsh prettyprint-override&quot;&gt;&lt;code&gt;[alias]
# see `git help log` for detailed help.
#   %h: abbreviated commit hash
#   %d: ref names, like the --decorate option of git-log(1)
#   %cn: commiter name
#   %ce: committer email
#   %cr: committer date, relative
#   %ci: committer date, ISO 8601-like format
#   %an: author name
#   %ae: author email
#   %ar: author date, relative
#   %ai: author date, ISO 8601-like format
#   %s: subject
# my awesome git log replacement
lol  = log --graph --pretty=format:\&quot;%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn &amp;lt;%ce&amp;gt;%Creset %s\&quot;
# same as above, but ISO date
lold = log --graph --pretty=format:\&quot;%C(auto)%h%d%Creset %C(cyan)(%ci)%Creset %C(green)%cn &amp;lt;%ce&amp;gt;%Creset %s\&quot;
# using build-in standards
lol2 = log --oneline --graph --decorate
# shows branches and their last commits
lol3 = log --all --graph --decorate --oneline --simplify-by-decoration
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Linux 또는 유사한 시스템에서는 단일 따옴표를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쌍끌이 대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[alias]
lol = log --graph --pretty=format:'%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn &amp;lt;%ce&amp;gt;%Creset %s'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것으로, 간단히 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git lol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다른 변형을 통해 예쁜 출력을 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git lol --simplify-by-decoration&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qEzNy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qEzNy.png&quot; alt=&quot;git lol output&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아 보여요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;:)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 입력하기 쉽습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 더 좋게 들립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; 
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;  &lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 정기적으로 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제든 필요하면요&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 눈은 다양한 색으로 내용물을 빠르게 스캔할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름과 이메일은 많은 기여자가 있는 대규모 프로젝트/조직에 매우 유용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해시/ref에 기본 색상을 사용하는 것은 이미 꽤 좋기 때문입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git lold&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜가 ISO 형식으로 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기여자의 시간대를 쉽게 볼 수 있다는 이점과 함께 커밋이 이루어진 정확한 날짜/시간을 확인하는 데 유용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jfg0D.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jfg0D.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;32-0&quot;&gt;2020-06&lt;/strong&gt; 편집: 스크린샷 추가.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하도록 업데이트됨&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%C(auto)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(자동/기본 색상):&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(커밋 해시) 및&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%d&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이름 변경).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가된&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%cn&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(커미셔너 이름)과 이메일을 함께 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작성자 이름을 포함하지 않고 실제 커밋 날짜를 포함하는 이 형식을 선호합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git log --graph --pretty=format:&quot;%C(yellow)%h%x09%Creset%C(cyan)%C(bold)%ad%Creset  %C(green)%Creset %s&quot; --date=short
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 유용할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;45-3&quot;&gt;작가&lt;/strong&gt; 이름이 적힌 &lt;strong papago-id=&quot;45-1&quot;&gt;날짜와 타임&lt;/strong&gt; 스탬프를 &lt;strong papago-id=&quot;45-1&quot;&gt;찾고&lt;/strong&gt; 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/byhCc.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/byhCc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git log --graph --pretty=format:&quot;%C(yellow)%h%x09%Creset%C(cyan)%C(bold)%ad%Creset %C(yellow)%cn%Creset  %C(green)%Creset %s&quot; --date=default
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14243380/&lt;a href=&quot;https://stackoverflow.com/questions/14243380/how-to-configure-git-log-to-show-commit-date&quot; target=&quot;_blank&quot; papago-id=&quot;46-1&quot;&gt;how-to-configure-git-log-to-show-commit-date&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>git</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/531</guid>
      <comments>https://showcode.tistory.com/531#entry531comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:47 +0900</pubDate>
    </item>
    <item>
      <title>사용자가 Vue 및 Vuex에서 첫 번째 경로에서 두 번째 경로 및 두 번째 경로에서 첫 번째 경로로 이동할 때 첫 번째 경로에서 기능을 실행하려고 합니다.</title>
      <link>https://showcode.tistory.com/530</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 Vue 및 Vuex에서 첫 번째 경로에서 두 번째 경로 및 두 번째 경로에서 첫 번째 경로로 이동할 때 첫 번째 경로에서 기능을 실행하려고 합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적재된 경로(첫 번째 경로)에서 함수를 실행한 후 두 번째 경로로 이동하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 사용자는 2번째 경로에서 1번째 경로로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 사용자가 Vue와 Vuex에서 2번째 경로에서 1번째 경로로 이동할 때 1번째 경로에서 기능을 실행하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마운트 전에 Created와 같은 Vue 수명 주기 후크를 사용해 보았지만 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 Vue 프로젝트에서 무엇을 실행해야 하는지, 어떻게 실행해야 하는지 알려주실 수 있나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;vue-router &lt;a href=&quot;https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-1&quot;&gt;탐색&lt;/a&gt; 가드는 각 라우터가 변경되기 전 &lt;a href=&quot;https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-3&quot;&gt;또는&lt;/a&gt; 각 라우터 &lt;a href=&quot;https://router.vuejs.org/guide/advanced/navigation-guards.html#global-after-hooks&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-5&quot;&gt;이후&lt;/a&gt;에 호출할 전역 후크를 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, &lt;a href=&quot;https://router.vuejs.org/guide/advanced/navigation-guards.html#per-route-guard&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-1&quot;&gt;사전 경로&lt;/a&gt; 가드의 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//router.js

const router = new VueRouter({
  routes: [
    {
      path: '/night',
      component: nightComponent,
      beforeEnter: (to, from, next) =&amp;gt; {
        const currentHour = new Date().getHours();
        if(currentHour &amp;lt; 6){
            next(); // this function will trigger the routing. in my example, i 
                   //call it only if its not morning yet.
        }
      }
    }
  ]
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 구성 &lt;a href=&quot;https://router.vuejs.org/guide/advanced/navigation-guards.html#in-component-guards&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-1&quot;&gt;요소 &lt;/a&gt;내 가드를 정의하여 이 특정 경로 변경 시 조치를 취할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Vue({
  el: &quot;#app&quot;,
  router,
  data: {},
  methods: {},
  beforeRouteLeave (to, from, next) {
    // called when the route that renders this component is about to
    // be navigated away from.
    // has access to `this` component instance.
       if(confirm('are you sure you want to leave this page?')){
           next();
        }
      }
   }
})
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/55076384/&lt;a href=&quot;https://stackoverflow.com/questions/55076384/want-to-run-function-on-1st-route-when-user-will-go-from-1st-route-to-2nd-and-2n&quot; target=&quot;_blank&quot; papago-id=&quot;9-1&quot;&gt;want-to-run-function-on-1st-route-when-user-will-go-from-1st-route-to-2nd-and-2n&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>vuex</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/530</guid>
      <comments>https://showcode.tistory.com/530#entry530comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:39 +0900</pubDate>
    </item>
    <item>
      <title>Python: 외부 루프에서 다음 반복으로 계속 진행</title>
      <link>https://showcode.tistory.com/529</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python: 외부 루프에서 다음 반복으로 계속 진행&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬의 외부 루프에서 다음 반복을 계속할 수 있는 내장된 방법이 있는지 알고 싶었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 다음 코드를 생각해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for ii in range(200):
    for jj in range(200, 400):
        ...block0...
        if something:
            continue
    ...block1...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 계속 진술서가 JJ 루프를 종료하고 ii 루프의 다음 항목으로 이동하기를 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(플래그 변수를 설정하여) 다른 방법으로 이 논리를 구현할 수 있지만, 이를 수행하는 쉬운 방법이 있습니까, 아니면 너무 많은 것을 요구하는 것과 같은 것입니까?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;for ii in range(200):
    for jj in range(200, 400):
        ...block0...
        if something:
            break
    else:
        ...block1...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;Break&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부 루프가 중단되고 블록 1이 실행되지 않습니다(내부 루프가 정상적으로 종료된 경우에만 실행됨).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;for i in ...:
    for j in ...:
        for k in ...:
            if something:
                # continue loop i
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 경우, 여러 수준의 루핑이 있을 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;break&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프  상위 중  진행하려는 ). 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다음 중 하나를 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탈출하려는 루프를 함수로 재팩터링&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;def inner():
    for j in ...:
        for k in ...:
            if something:
                return


for i in ...:
    inner()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단점은 이전에 범위에 포함되었던 몇 가지 변수를 새 함수에 전달해야 할 수도 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수로 전달하거나, 개체에 대한 인스턴스 변수로 만들거나(이 함수에 대해서만 새 개체를 생성하는 것이 적절하다면), 전역 변수, 싱글톤 등(으음, 으음)을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 정의할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;inner&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중첩 함수로서 필요한 것을 캡처하도록 합니다(더 느릴 수도 있음).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for i in ...:
    def inner():
        for j in ...:
            for k in ...:
                if something:
                    return
    inner()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외 사용&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;철학적으로, 이것이 필요할 때 구조화된 프로그래밍 구성 요소를 통해 프로그램 흐름을 깨는 예외입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;장점은 단일 코드를 여러 부분으로 분할할 필요가 없다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당신이 파이썬으로 작성하면서 설계하는 일종의 계산이라면 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 초기 단계에서 추상화를 도입하면 속도가 느려질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식의 나쁜 점은 인터프리터/컴파일러 작성자가 일반적으로 예외가 예외적이라고 가정하고 그에 따라 예외를 최적화한다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class ContinueI(Exception):
    pass


continue_i = ContinueI()

for i in ...:
    try:
        for j in ...:
            for k in ...:
                if something:
                    raise continue_i
    except ContinueI:
        continue
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실수로 다른 예외를 무시할 위험이 없도록 이에 대한 특수 예외 클래스를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전히 다른 무언가.&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아직 다른 해결책이 있다고 확신합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 언어에서는 루프에 레이블을 지정하고 레이블이 지정된 루프에서 분리할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PYP&lt;a href=&quot;http://www.python.org/dev/peps/pep-3136/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;(Python&lt;/a&gt; Enhancement Proposal)&lt;a href=&quot;http://www.python.org/dev/peps/pep-3136/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt; 3136&lt;/a&gt;은 Python에 &lt;a href=&quot;http://www.python.org/dev/peps/pep-3136/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;이러한&lt;/a&gt; 기능을 &lt;a href=&quot;http://www.python.org/dev/peps/pep-3136/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;추가할 것&lt;/a&gt;을 제안했지만 &lt;a href=&quot;http://mail.python.org/pipermail/python-3000/2007-July/008663.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-3&quot;&gt;Guido는 이&lt;/a&gt;를 &lt;a href=&quot;http://www.python.org/dev/peps/pep-3136/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;거부&lt;/a&gt;했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이 기능을 필요로 하는 복잡한 코드는 매우 드물기 때문에 저는 그것을 거부합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 경우 '반품'을 사용하는 등 클린 코드를 생성하는 기존 해결 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드의 명확성이 리턴을 사용하는 것을 가능하게 하는 리팩터링으로 인해 어려움을 겪는 (희귀한) 실제 사례가 있지만, 이는 다음 두 가지 문제로 인해 상쇄됩니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언어의 복잡성이 영구적으로 증가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 모든 Python 구현뿐만 아니라 모든 소스 분석 도구와 언어에 대한 모든 설명서에도 영향을 미칩니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능이 올바르게 사용되는 것보다 더 많이 남용되어 코드 선명도가 순으로 감소할 것으로 예상됩니다(이후 작성된 모든 파이썬 코드에서 측정됨).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게으른 프로그래머들은 어디에나 있고, 당신이 알기도 전에 당신은 이해할 수 없는 코드를 손에 쥐고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 여러분이 바라던 것이 운이 없기를 바란다면, 다른 답들 중 하나를 보세요. 좋은 선택들이 있기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for ii in range(200):
    restart = False
    for jj in range(200, 400):
        ...block0...
        if something:
            restart = True
            break
    if restart:
        continue
    ...block1...
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 무언가를 찾은 다음 내면의 반복을 멈추고자 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 깃발 시스템을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for l in f:
    flag = True
    for e in r:
        if flag==False:continue
        if somecondition:
            do_something()
            flag=False
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 달성하는 가장 쉬운 방법 중 하나는 &quot;continue&quot;를 &quot;break&quot; 문으로 바꾸는 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for ii in range(200):
 for jj in range(200, 400):
    ...block0...
    if something:
        break
 ...block1...       
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 다음은 정확하게 진행되는 방식을 확인할 수 있는 쉬운 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for i in range(10):
    print(&quot;doing outer loop&quot;)
    print(&quot;i=&quot;,i)
    for p in range(10):
        print(&quot;doing inner loop&quot;)
        print(&quot;p=&quot;,p)
        if p==3:
            print(&quot;breaking from inner loop&quot;)
            break
    print(&quot;doing some code in outer loop&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 문제를 해결하는 또 다른 방법은 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Exception()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for ii in range(200):
    try:
        for jj in range(200, 400):
            ...block0...
            if something:
                raise Exception()
    except Exception:
        continue
    ...block1...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for n in range(1,4):
    for m in range(1,4):
        print n,'-',m
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    1-1
    1-2
    1-3
    2-1
    2-2
    2-3
    3-1
    3-2
    3-3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;m =3일 때 m 루프에서 바깥쪽 n 루프로 점프한다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for n in range(1,4):
    try:
        for m in range(1,4):
            if m == 3:
                raise Exception()            
            print n,'-',m
    except Exception:
        continue
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    1-1
    1-2
    2-1
    2-2
    3-1
    3-2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.programming-idioms.org/idiom/42/continue-outer-loop/1264/python&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32-1&quot;&gt;참조&lt;/a&gt; 링크: http://www.programming-idioms.org/idiom/42/continue-outer-loop/1264/python&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그냥 이런 거 했어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 대한 저의 해결책은 루프의 내부를 목록 이해로 대체하는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for ii in range(200):
    done = any([op(ii, jj) for jj in range(200, 400)])
    ...block0...
    if done:
        continue
    ...block1...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 op는 ii와 jj의 조합에 작용하는 어떤 부울 연산자입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우, 만약 어떤 작업이 사실로 돌아온다면, 저는 끝입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 실제로 코드를 함수로 나누는 것과 크게 다르지 않지만, 저는 &quot;임의&quot; 연산자를 사용하여 불리언 목록에서 논리적 OR을 수행하고 논리적 논리를 한 줄로 모두 수행하는 것이 흥미롭다고 생각했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 함수 호출을 방지합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 루프를 계속하는 가장 좋은 방법은 외부 루프 아래에 범위가 지정된 부울을 사용하여 내부 루프를 끊는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 사용 사례에 따라 내부 루프를 중단하지 않을 수도 있지만 내부 루프 내부에서 외부 루프를 계속 진행하면 외부 루프의 첫 번째 줄로 즉시 이동하고 내부 루프에서 추가 실행을 방지할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 제가 추가한 이유는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;break&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진술.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;for i in range(0, 6):
    should_continue = False

    for f in range(1, i * 2):
        print(f&quot;f = {f}&quot;)
        if (not (f % 1337) or not (f % 7)):
            print(f&quot;{f} can be divided, continue outer loop&quot;)
            should_continue = True
            # leaves inner loop
            break

    if(should_continue): continue
    # Outer loop's code goes here
    print(f'Reached outer loop\ni = {i}')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식은 함수를 호출하고 가능한 결점을 처리하는 것을 방지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 호출은 특히 게임의 경우 다소 비싼 작업으로 알려져 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 깊은 둥지가 있는 것을 상상해 보세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수백만 번 실행되는 루프를 함수 안에 감싸면 부드러운 경험이 되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프를 예외 블록 안에 감는 것도 좋지 않으며 기능보다 훨씬 느립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 Python이 예외 메커니즘을 트리거하고 나중에 런타임 상태를 복원하기 위해 많은 오버헤드가 필요하기 때문입니다. 예외는 예외적으로 사용되도록 설계되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 점을 고려하여 다음과 같은 일부 CPU 최적화 작업도 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;speculative execution&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외 블록에는 적용되지 않아야 하며 적용되지 않을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근법에서 발견한 유일한 &quot;문제&quot;는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;break&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부 루프 밖으로 한 번 점프하여 착지합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;continue&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 한 번 더 뛰어오를 겁니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 C나 JavaScript의 goto 문과는 대조적으로 조금 더 서툴지만 CPU의 클럭이나 인터프리터 구현만큼 빠르게 실행되는 하나의 추가 명령만 생성하기 때문에 성능에 가시적인 영향을 미치지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1859072/&lt;a href=&quot;https://stackoverflow.com/questions/1859072/python-continuing-to-next-iteration-in-outer-loop&quot; target=&quot;_blank&quot; papago-id=&quot;45-1&quot;&gt;python-continuing-to-next-iteration-in-outer-loop&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/529</guid>
      <comments>https://showcode.tistory.com/529#entry529comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:33 +0900</pubDate>
    </item>
    <item>
      <title>iOS에서 프로그래밍 방식으로 절전 모드를 비활성화/활성화하는 방법은 무엇입니까?</title>
      <link>https://showcode.tistory.com/528</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS에서 프로그래밍 방식으로 절전 모드를 비활성화/활성화하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;카운트다운이 끝날 때까지 깨어 있어야 하는 앱이 있는데, 할당된 취침 시간에 도달할 때마다 '수면 모드'로 전환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 앱에서는 사용자가 절전 모드를 비활성화/활성화할 수 있도록 절전 모드를 연기할 수 있는 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래밍 방식으로 어떻게 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 유휴 타이머를 비활성화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목표 C:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[UIApplication sharedApplication].idleTimerDisabled = YES;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIApplication.sharedApplication().idleTimerDisabled = true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 3.0 및 Swift 4.0의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIApplication.shared.isIdleTimerDisabled = true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절전 모드를 다시 활성화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 보기를 떠날 때까지 필요한 경우 Will Dispose 보기를 재정의하여 다시 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;override func viewWillDisappear(_ animated: Bool) {
    UIApplication.shared.isIdleTimerDisabled = false
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instp/UIApplication/idleTimerDisabled&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;UIA 응용&lt;/a&gt; 프로그램 클래스에 대해 자세히 알아봅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 3에서 유휴 타이머를 비활성화하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIApplication.shared.isIdleTimerDisabled = true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유휴 타이머를 다시 켜는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIApplication.shared.isIdleTimerDisabled = false
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가로, 주의할 점은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;YES&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift에서는 사용할 수 없으며 다음 중 하나를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이전 답변과는 대조적으로).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;iOS 13, Swift&lt;/strong&gt; 5&lt;strong papago-id=&quot;8-0&quot;&gt;,5.1+&lt;/strong&gt;로 유휴 타이머를 비활성화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SceneDelegate.swift&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
     UIApplication.shared.isIdleTimerDisabled = true
 }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 3에서 이것이 가능한 정확한 위치는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AppDelegate.swift&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIApplication.shared.isIdleTimerDisabled = true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안에서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;application&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;func 결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&amp;gt; Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12661004/&lt;a href=&quot;https://stackoverflow.com/questions/12661004/how-to-disable-enable-the-sleep-mode-programmatically-in-ios&quot; target=&quot;_blank&quot; papago-id=&quot;26-1&quot;&gt;how-to-disable-enable-the-sleep-mode-programmatically-in-ios&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ios</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/528</guid>
      <comments>https://showcode.tistory.com/528#entry528comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:24 +0900</pubDate>
    </item>
    <item>
      <title>CSV 플랫 파일로 데이터를 내보내는 동안 포함된 텍스트 한정자 문제를 해결하는 방법은 무엇입니까?</title>
      <link>https://showcode.tistory.com/527</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV 플랫 파일로 데이터를 내보내는 동안 포함된 텍스트 한정자 문제를 해결하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;###RFC 4180:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-0&quot;&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc4180&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;2-0-0&quot;&gt;RFC 4180&lt;/a&gt;&lt;/strong&gt;은 을 정의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 요구 사항 중 하나는 아래와 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 RFC 링크의 포인트입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;If double-quotes are used to enclose fields, then a double-quote
appearing inside a field must be escaped by preceding it with
another double quote.  For example:

&quot;aaa&quot;,&quot;b&quot;&quot;bb&quot;,&quot;ccc&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;###SQL Server 2000:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;4-0&quot;&gt;&lt;code papago-id=&quot;4-0-0&quot;&gt;DTS Export/Import Wizard&lt;/code&gt;&lt;/strong&gt; RFC 4180 자체는 2005년 &lt;em papago-id=&quot;4-4&quot;&gt;10월&lt;/em&gt;에 발표된 것으로 보이지만, in은 위에서 언급한 표준을 준수하는 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;em papago-id=&quot;4-6&quot;&gt;아래&lt;/em&gt; SQL Server &lt;em papago-id=&quot;4-6&quot;&gt;2000&lt;/em&gt; 버전을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Microsoft SQL Server  2000 - 8.00.2039 (Intel X86) 
May  3 2005 23:18:38 
Copyright (c) 1988-2003 Microsoft Corporation
Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;###SQL Server 2012:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;&lt;code papago-id=&quot;6-0-0&quot;&gt;SQL Server Import and Export Wizard&lt;/code&gt;&lt;/strong&gt; in은 RFC 4180에 정의된 표준에 따라 테이블에서 CSV 파일로 데이터를 내보내지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;em papago-id=&quot;6-4&quot;&gt;아래 SQL&lt;/em&gt; Server 2012 버전을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Microsoft SQL Server 2012 - 11.0.2316.0 (X64) 
Apr  6 2012 03:20:55 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 &amp;lt;X64&amp;gt; (Build 7601: Service Pack 1) (Hypervisor)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;###문제 시뮬레이션:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 &lt;em papago-id=&quot;8-1&quot;&gt;SQL Server&lt;/em&gt; 2000과 &lt;em papago-id=&quot;8-3&quot;&gt;SQL Server&lt;/em&gt; 2012 &lt;em papago-id=&quot;8-1&quot;&gt;모두&lt;/em&gt;에서 실행한 샘플입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 쿼리를 실행하여 테이블을 만들고 레코드를 몇 개 삽입했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ItemDesc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열에 이중 변수가 있는 데이터가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내장 내보내기 데이터 마법사를 사용하여 두 SQL Server 버전의 데이터를 내보내고 생성된 CSV 파일을 비교하고자 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE dbo.ItemInformation(
    ItemId nvarchar(20) NOT NULL,
    ItemDesc nvarchar(100) NOT NULL
) 
GO

INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100338754', 'Crown Bolt 3/8&quot;-16 x 1&quot; Stainless-Steel Hex Bolt');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('202255836', 'Simpson Strong-Tie 5/8&quot; SSTB Anchot Bolt');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100171631', 'Grip-Rite #11 x 1-1/2&quot; Electro-Galvanized Steel Roofing Nails');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('202210289', 'Crown Bolt 1/2&quot; x 3&quot; &quot;Zinc-Plated&quot; Universal Clevis Pin');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100136988', 'Tapcon 3/16&quot; x 1-3/4&quot; Climaseal Steel &quot;Flat-Head&quot; Phillips Concrete Anchors (75-Pack)');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('203722101', 'KwikTap 3/16&quot; x 2-1/4&quot; &quot;Flat-Head&quot; Concrete Screws (100-Pack)');
GO
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 아래 설정을 사용하여 데이터를 CSV 파일로 내보냈습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 파일을 이름으로 저장했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQLServer2000_ItemInformation.csv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fdFSY.png&quot; alt=&quot;DTS Export/Import Wizard&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 아래 설정을 사용하여 데이터를 CSV 파일로 내보냈습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 파일을 이름으로 저장했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQLServer2012_ItemInformation.csv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/toryR.png&quot; alt=&quot;SQL Server Import and Export Wizard - Choose a destination&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MvbUx.png&quot; alt=&quot;SQL Server Import and Export Wizard - Configure Flat File Destination&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Beyond Compare를 사용하여 두 파일을 비교한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는 왼에는생파포있습다니함어에서 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL Server 2000&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는 오쪽에생파포있습다니함에서 생성한 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL Server 2012&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 왼쪽 파일을 볼 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL Server 2000&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는 데이터 열에 포함된 따옴표를 보상하기 위한 추가 이중 따옴표가 포함되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 다음에 명시된 표준을 준수합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RFC 4180&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그것은 분명히 에 의해 생성된 파일에서 누락되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL Server 2012&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ofh2w.png&quot; alt=&quot;File Comparison&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;###웹에서 검색:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 웹에서 이 버그를 검색했고 다음 링크를 찾았습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Microsoft Connect에 대한 버그 보고서입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 모든 문제는 파일 가져오기와 관련이 있지만 데이터 내보내기와는 관련이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 버그는 다음과 같이 닫혔습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Fixed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://connect.microsoft.com/SQLServer/feedback/details/282396/ssis-flat-file-parser-does-not-read-column-delimiters-embedded-in-text-data&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SSIS 플랫 파일 파서가 텍스트 데이터에 포함된 열 구분 기호를 읽지 않음&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://connect.microsoft.com/SQLServer/feedback/details/560592/flat-file-connection-manager-not-handling-text-delimiters-in-csv-files&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫 파일 연결 관리자가 CSV 파일의 텍스트 구분 기호를 처리하지 않음&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://connect.microsoft.com/SQLServer/feedback/details/267529/embedded-quotes-in-flat-file-import-fails&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫 파일 가져오기의 포함된 따옴표가 실패함&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://connect.microsoft.com/SQLServer/feedback/details/540056/bug-flat-file-connection-manager-multiple-character-text-qualifier-does-not-load-all-data&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버그: 플랫 파일 연결 관리자: 다중 문자 텍스트 한정자가 일부 데이터를 로드하지 않습니다.&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 아래 에는 MSDN과 이 있다고 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Flat file source supports embedded qualifiers and a variable number of columns per row&lt;/code&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/mattm/archive/2011/07/12/ssis-what-s-new-in-sql-server-denali.aspx?PageIndex=2#comments&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SSIS - SQL Server Denali의 새로운 기능&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MSDN 블로그의 또 다른 게시물은 섹션 아래에 동일하게 기술되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Embedded Qualifiers&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/mattm/archive/2011/07/17/flat-file-source-changes-in-denali.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Denali의 플랫 파일 소스 변경 사항&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;##제가 알고 있는 해결 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내보낸 파일이 올바른 포함 한정자 데이터로 끝나도록 열 데이터의 모든 이중 &lt;strong papago-id=&quot;32-1&quot;&gt;&lt;code papago-id=&quot;32-1-0&quot;&gt;&quot;&lt;/code&gt;&lt;/strong&gt;따옴표()를 두 개의 이중 &lt;strong papago-id=&quot;32-3&quot;&gt;&lt;code papago-id=&quot;32-3-0&quot;&gt;&quot;&quot;&lt;/code&gt;&lt;/strong&gt;따옴표()로 대체하는 쿼리를 작성하여 문제를 해결하는 방법을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 데이터를 그대로 테이블에서 직접 꺼내는 것을 피할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;###나의 질문:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제가 정말로 해결되었는지 모르겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL Server 2012&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 텍스트 한정자가 포함된 파일과 CSV 데이터에 대해서만 해결되었습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도, 저는 분명히 잘못된 일을 하고 있고 명백한 것을 놓치고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 여기서 무엇을 잘못하고 있는지 누가 설명해 주시겠습니까?&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;###Microsoft 연결:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Microsoft Connect 웹 사이트에 버그 보고서를 제출하여 피드백을 받았습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 버그 보고서에 대한 링크가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한다면, 해서 투표해 보세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Microsoft Connect&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹사이트&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://connect.microsoft.com/SQLServer/feedback/details/778980/embedded-text-qualifier-during-export-to-csv-does-not-conform-to-rfc-4180#details&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV로 내보내는 동안 포함된 텍스트 한정자가 RFC 4180을 준수하지 않음&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 답변을 제공하지 않을 것입니다. 당신이 문서화를 위해 열심히 노력했고 한 달이 지나도 답변이 없는 상태로 투표되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자, 그럼 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 변경하거나 도구를 변경하는 방법밖에 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도, 저는 분명히 잘못된 일을 하고 있고 명백한 것을 놓치고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 여기서 무엇을 잘못하고 있는지 누가 설명해 주시겠습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;툴이 고장났을 때 공급업체가 신경 쓰지 않을 때, 계속 시도하는 것은 실수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바꿀 시간입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그것이 어떻게 고장났는지 정확히 조사하고 그것이 RFC 뿐만 아니라 도구 자체의 이전 버전을 위반한다는 것을 입증하기 위해 많은 노력을 기울였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;얼마나 더 많은 증거가 필요합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV도 보트 앵커입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이 있으면 구분된 일반 파일 형식을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 응용 프로그램의 경우 탭 구분이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;영어 텍스트에는 해당 문자에 자리가 없기 때문에 IMO가 가장 적합한 구분 기호는 '\'입니다. (반면 Windows 경로 이름을 포함하는 데이터에서는 사용할 수 없습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV는 교환 형식으로 두 가지 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, RFC가 어떤 말을 하든지 간에 애플리케이션마다 서로 다른 버전을 인식합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째(그리고 관련)는 CS 용어로 &lt;em papago-id=&quot;20-1&quot;&gt;정규&lt;/em&gt; 언어를 구성하지 않기 때문에 정규 표현으로 구문 분석할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 비교&lt;/font&gt;&lt;/font&gt;&lt;code&gt;^([^\t]*\t)*[\t]*$&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭으로 구분된 회선의 경우.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV 정의의 복잡성의 실질적인 의미는 (위 참조) CSV를 처리할 도구가 상대적으로 부족하고 특히 심야 시간대에 호환되지 않는 경향이 있다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이 , 그중가 CSV &quot;DTS&quot;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bcp.exe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Microsoft는 수년 동안 업데이트를 시도하지 않았기 때문에 매우 빠르고 안전합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 DTS에 대해 잘 모르지만, 자동화를 위해 사용해야 할 경우 IIRC에는 외부 유틸리티를 호출할 수 있는 방법이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 주의하세요, 그것은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bcp.exe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 상태를 신뢰할 수 있게 셸에 반환하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DTS(디지털 스로틀 및 시프트)를 사용하고 CSV를 고수하기로 결정한 경우에는 데이터를 적절하게 준비하는 보기를 작성하는 것이 가장 좋은 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 그 코너로 를 들어 &quot;DTS2012CSV라는 스키마를 , &quot;DTS2012CSV &quot;DTS2012CSV&quot;라고 쓸 수 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select * from DTS2012CSV.tablename&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관심 있는 사람에게 그것을 이해할 수 있는 싸움의 기회를 주는 것. (당신이 그것을 문서화할 것이기 때문에, 보기 텍스트의 주석으로?)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 경우 다른 사용자가 다른 손상된 추출물에 대한 기술을 복사할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTH.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2년이 지난 계약이지만 SQL Server 2008을 계약에 사용해야 하기 때문에 이 문제가 발생했습니다(묻지마).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 읽은 후 교체 제안을 해야 한다는 것을 알았지만, 쿼리에서 이를 수행하러 갔을 때 잘라내기 문제가 발생했습니다. 쿼리 자체에서 replace() 함수를 사용하면 기본적으로 텍스트가 varchar(8000)로 변환되기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 DB Source 객체와 Flat File 객체 사이의 Derived Column 단계를 사용하여 동일한 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, &quot;short_description&quot;이라는 이름의 열이 있는데, 이 열에는 따옴표가 있을 수 있으므로 다음 함수를 식으로 사용하고 파생 열에서 &quot;Replace short_description&quot;을 선택했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;REPLACE(short_description,&quot;\&quot;&quot;,&quot;\&quot;\&quot;&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것으로 문제가 해결된 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종종 이름과 성은 동일한 필드에 있으며 형식이 지정되어 있습니다(성, 성).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업-&amp;gt;데이터를 데이터베이스에서 바로 내보내기(추가 옵션이 있는 SSIS를 통해가 아님)를 사용하고 쉼표로 구분된 파일로 CSV로 내보내려면 텍스트 인증을 받아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 이중 견적이 필요한 null이 아닌 선택된 필드에 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CASE WHEN NOT PersonName IS NULL AND LEN(PersonName) &amp;gt; 0 THEN QUOTENAME(PersonName, '&quot;') ELSE NULL END as 'PersonName'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 이름&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜린스&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14815574/&lt;a href=&quot;https://stackoverflow.com/questions/14815574/how-to-fix-the-embedded-text-qualifier-issue-while-exporting-data-to-csv-flat-fi&quot; target=&quot;_blank&quot; papago-id=&quot;61-1&quot;&gt;how-to-fix-the-embedded-text-qualifier-issue-while-exporting-data-to-csv-flat-fi&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>sql-server</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/527</guid>
      <comments>https://showcode.tistory.com/527#entry527comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:17 +0900</pubDate>
    </item>
    <item>
      <title>판다 데이터 프레임에서 행의 하위 집합 수정</title>
      <link>https://showcode.tistory.com/526</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;판다 데이터 프레임에서 행의 하위 집합 수정&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A와 B라는 두 개의 열이 있는 판다 데이터 프레임을 가지고 있다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;A가 0일 때마다 B가 항상 NaN이 되도록 이 DataFrame을 수정(또는 복사본을 생성)하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 어떻게 그것을 달성할 수 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음을 시도했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df['A'==0]['B'] = np.nan
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df['A'==0]['B'].values.fill(np.nan)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성공하지 못한&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이블 기반 인덱싱에 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[df.A==0, 'B'] = np.nan
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.A==0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;식은 행을 인덱싱하는 부울 열을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'B'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 사용하여 열의 하위 집합을 변환할 수도 있습니다. 예를 들어, 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[df.A==0, 'B'] = df.loc[df.A==0, 'B'] / 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;판다 내부에 대해서는 정확히 왜 그런지 알 수 없지만, 기본적인 문제는 데이터 프레임에 인덱싱하면 결과의 복사본이 반환되고, 때로는 원래 개체에 대한 뷰가 반환된다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 &lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/indexing.html#advanced-indexing-with-labels&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;문서&lt;/a&gt;에 따르면 이 동작은 기본적인 마비 동작에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[하나][둘]이 아닌 한 번의 작업으로 모든 것에 액세스하는 것이 설정에 더 효과적이라는 것을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-0&quot;&gt;다음&lt;/a&gt;은 고급 인덱싱에 대한 판다 문서입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 섹션은 당신이 무엇을 필요로 하는지 정확히 설명해 줄 것입니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;알고 보니&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.loc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(아래에서 많은 사람들이 지적했듯이 .ix는 더 이상 사용되지 않습니다.) 데이터 프레임의 쿨 슬라이싱/다이싱에 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고. 세팅도 할 수 있고요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[selection criteria, columns I want] = value
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 브렌의 대답은 '나를 찾는 모든 장소들을 찾는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.A == 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열 선택&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;np.nan&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;판다에서 시작하는 0.&lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;20 ix&lt;/a&gt;는 더 &lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;이상&lt;/a&gt; 사용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 방법은 df&lt;a href=&quot;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-3&quot;&gt;.loc를 사용&lt;/a&gt;하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 작동하는 예가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import pandas as pd 
&amp;gt;&amp;gt;&amp;gt; import numpy as np 
&amp;gt;&amp;gt;&amp;gt; df = pd.DataFrame({&quot;A&quot;:[0,1,0], &quot;B&quot;:[2,0,5]}, columns=list('AB'))
&amp;gt;&amp;gt;&amp;gt; df.loc[df.A == 0, 'B'] = np.nan
&amp;gt;&amp;gt;&amp;gt; df
   A   B
0  0 NaN
1  1   0
2  0 NaN
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 &lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/indexing.html#different-choices-for-indexing&quot; papago-id=&quot;20-1&quot; rel=&quot;noreferrer&quot;&gt;문서&lt;/a&gt;에서 설명한 바와 같이,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.loc&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;21-0&quot;&gt;주로 레이블 기반이지만 부울 배열과 함께 사용할 수도 있습니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 우리가 위에서 하는 것은 적용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.loc[row_index, column_index]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기준:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 사실을 이용하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;loc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Panda에게 변경할 행의 하위 집합을 알려주는 마스크로 부울 배열을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;row_index&lt;/code&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 활용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;loc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 레이블을 사용하여 열을 선택하는 레이블입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'B'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;column_index&lt;/code&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 논리적, 조건 또는 일련의 불리언을 반환하는 모든 연산을 사용하여 불리언 배열을 구성할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 예에서, 우리는 원하는 것이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rows&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 포함하는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 사용할 수 있는 것.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.A == 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 예에서 볼 수 있듯이, 이것은 일련의 부울을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; df = pd.DataFrame({&quot;A&quot;:[0,1,0], &quot;B&quot;:[2,0,5]}, columns=list('AB'))
&amp;gt;&amp;gt;&amp;gt; df 
   A  B
0  0  2
1  1  0
2  0  5
&amp;gt;&amp;gt;&amp;gt; df.A == 0 
0     True
1    False
2     True
Name: A, dtype: bool
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 위의 불리언 배열을 사용하여 필요한 행을 선택하고 수정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; df.loc[df.A == 0, 'B'] = np.nan
&amp;gt;&amp;gt;&amp;gt; df
   A   B
0  0 NaN
1  1   0
2  0 NaN
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 여기에서 고급 인덱싱 &lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34-1&quot;&gt;설명서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도를 크게 높이려면 NumPy's where 기능을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세우다&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0이 있는 100,000개의 행으로 구성된 2열 데이터 프레임을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df = pd.DataFrame(np.random.randint(0,3, (100000,2)), columns=list('ab'))
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 솔션루른으로 빠른 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;numpy.where&lt;/code&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;df['b'] = np.where(df.a.values == 0, np.nan, df.b.values)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타이밍&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;%timeit df['b'] = np.where(df.a.values == 0, np.nan, df.b.values)
685 µs ± 6.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit df.loc[df['a'] == 0, 'b'] = np.nan
3.11 ms ± 17.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;s 눔피의의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;where&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 빠름 » 4배 더 빠름 »&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다열을바는방다법은음사배을다열변로환니합여를 사용하여 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.values&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[df.A==0, ['B', 'C']] = df.loc[df.A==0, ['B', 'C']].values / 2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 보기에는 1번이 가장 좋아 보이지만, 이상하게도 저는 그것에 대한 증명 서류를 찾을 수 없습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열을 열로 필터링(참고: 필터는 열이 기록되는 다음에 오는 것이지 이전이 아님)&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dataframe.column[필터 조건]= 변경할 값&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.B[df.A==0] = np.nan
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;a href=&quot;https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;loc&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dataframe.loc[필터 조건, 변경할 열]=변경할 값&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[df.A == 0, 'B'] = np.nan
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;a href=&quot;https://numpy.org/doc/stable/reference/generated/numpy.where.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디가 어질어질한.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dataframe.column=np.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;where(필터 조건, 참인 경우 값, 거짓인 경우 값)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import numpy as np
df.B = np.where(df.A== 0, np.nan, df.B)
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;&lt;a href=&quot;https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;람다 적용&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dataframe.column=df.value(열: 조건이 true이면 값, 거짓이면 행이 아닌 행 사용)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.B = df.apply(lambda x: np.nan if x['A']==0 else x['B'],axis=1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;5&quot;&gt; 
 &lt;li papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.w3schools.com/python/ref_func_zip.asp&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;54-0&quot;&gt;zip&lt;/a&gt; 및 목록 구문&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dataframe.column=[조건이 true인 경우 value, 열 a 및 b의 zip 함수에서 요소 a, b 목록에 대해 false인 경우 value]&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.B = [np.nan if a==0 else b for a,b in zip(df.A,df.B)]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하려면 Pandas 서데이프레통수을임정다면 &quot;음적설탕사&quot; &quot;자를사수할&quot;와 같은 &quot;통사 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 타기.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그래서 대신:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[df.A == 0, 'B'] = df.loc[df.A == 0, 'B'] / 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 쓸 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[df.A == 0, 'B'] /= 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 값다 로대방법는으로 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NaN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Pandas 방법을 사용할 수 있습니다. 예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df  = pd.DataFrame({'A': [1, 2, 3], 'B': [0, 0, 4]})

   A  B
0  1  0
1  2  0
2  3  4

df['A'].mask(df['B'] == 0, inplace=True) # other=np.nan by default
# df['A'].where(df['B'] != 0, inplace=True) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     A  B
0  NaN  0
1  NaN  0
2  3.0  4
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12307099/&lt;a href=&quot;https://stackoverflow.com/questions/12307099/modifying-a-subset-of-rows-in-a-pandas-dataframe&quot; target=&quot;_blank&quot; papago-id=&quot;64-1&quot;&gt;modifying-a-subset-of-rows-in-a-pandas-dataframe&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/526</guid>
      <comments>https://showcode.tistory.com/526#entry526comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:08 +0900</pubDate>
    </item>
    <item>
      <title>원격 풀 중에 모든 태그를 가져오도록 Git 기본값을 설정할 수 있습니까?</title>
      <link>https://showcode.tistory.com/525</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 풀 중에 모든 태그를 가져오도록 Git 기본값을 설정할 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 다음과 같은 Git 원격 설정이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[remote &quot;upstream&quot;]
    url = &amp;lt;redacted&amp;gt;
    fetch = +refs/heads/*:refs/remotes/upstream/*
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;발급할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 마스터에서는 모든 원격 헤드가 원격/게이트웨이로 가져온 다음 원격/게이트웨이/마스터가 마스터로 병합됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도달할 수 있는 모든 태그도 동시에 가져오기 때문에 매우 편리합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;싶다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤드에서 직접 연결할 수 있는 태그뿐만 아니라 원격에서 모든 태그를 추가로 &lt;em papago-id=&quot;3-1&quot;&gt;가져옵니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 원래 설정을 시도했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tagopt == --tags&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이것이 태그만 가져오는 원인이 되어 모든 것을 깨뜨렸다는 것을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(주니오는 그것이 &lt;a href=&quot;http://git.661346.n2.nabble.com/unclear-documentation-of-git-fetch-tags-option-and-tagopt-config-tp7572964p7573006.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;끔찍한 잘못된&lt;/a&gt; 구성이라고 말하기도 합니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만들 방법이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 헤드 외에 기본적으로 모든 원격 태그를 가져오시겠습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git fetch --tags&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저를 위해 일했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그에 대한 refspec을 로컬 구성에 추가하여 이 작업을 수행할 수 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체적으로:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[remote &quot;upstream&quot;]
    url = &amp;lt;redacted&amp;gt;
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--force&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션은 로컬 태그를 새로 고치는 데 유용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주로 부동 태그가 있는 경우:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git fetch --tags --force
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git Pull 옵션은 또한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--force&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 및 설명은 동일합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gitfetch가 &amp;lt;rbranch&amp;gt;:&amp;lt;lbranch&amp;gt; refspec과 함께 사용되는 경우 gitfetch가 가져오는 원격 브랜치 &amp;lt;rbranch&amp;gt;가 &amp;lt;lbranch&amp;gt;의 하위가 아닌 한 로컬 브랜치 &amp;lt;lbranch&amp;gt; 업데이트를 거부합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 옵션은 해당 검사를 재정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 의 문서에 따르면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--no-tags&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 원격 저장소에서 다운로드한 개체를 가리키는 태그는 로컬로 가져와 저장됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 기본 문이 제한 사항이 아닌 경우 다음을 시도할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git pull --force
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게는 다음과 같은 것이 효과가 있는 것처럼 보였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git pull --tags
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도아&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git fetch --all
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;23-1&quot;&gt;원격 태그가 삭제되었을 때&lt;/em&gt;는 아무런 답변도 사용할 수 없었습니다. 해당 로컬 태그는 가져오기/풀링 레포에 여전히 존재합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 조합을 찾았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git fetch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제된 태그를 선택하는 유일한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git fetch --tags --prune --prune-tags
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 로컬(또는 글로벌) Git 구성에 적용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;...
[remote &quot;origin&quot;]
    url = [gitlab url]
    fetch = +refs/heads/*:refs/remotes/origin/*
    tagopt = --tags
    prune = true
    pruneTags = true
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 부작용:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 다음에도 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(명령줄 속성을 통해 이 작업을 수행할 수 없었습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성을 추가하는 명령:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git config (--global) remote.origin.tagopt --tags
git config (--global) remote.origin.prune true
git config (--global) remote.origin.pruneTags true
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것을 kernel.org 에서 Magit과 함께 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[remote &quot;upstream&quot;]
    url = &amp;lt;redacted&amp;gt;
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16678072/&lt;a href=&quot;https://stackoverflow.com/questions/16678072/can-we-set-a-git-default-to-fetch-all-tags-during-a-remote-pull&quot; target=&quot;_blank&quot; papago-id=&quot;31-1&quot;&gt;can-we-set-a-git-default-to-fetch-all-tags-during-a-remote-pull&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>git</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/525</guid>
      <comments>https://showcode.tistory.com/525#entry525comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:48:00 +0900</pubDate>
    </item>
    <item>
      <title>SQL, 보조 숫자 표</title>
      <link>https://showcode.tistory.com/524</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL, 보조 숫자 표&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 유형의 SQL 쿼리의 경우 보조 숫자 표가 매우 유용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 태스크에 필요한 만큼의 행이 있는 테이블이나 각 쿼리에 필요한 행 수를 반환하는 사용자 정의 함수로 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 기능을 만드는 최적의 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아... 죄송합니다. 오래된 게시물에 답장이 너무 늦었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고, 네, 이 스레드에서 가장 인기 있는 답변(당시 14가지 다른 방법에 대한 링크가 있는 재귀 CTE 답변)은 음...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최고의 성능에 도전합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저, 14가지 솔루션이 포함된 기사는 숫자/Taly 테이블을 만드는 다양한 방법을 즉시 확인할 수 있지만, 기사와 인용된 스레드에서 지적한 &lt;em papago-id=&quot;4-1&quot;&gt;것&lt;/em&gt;처럼 매우 중요한 인용문이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;효율성과 성능에 대한 논의는 종종 주관적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리가 사용되는 방식에 관계없이 실제 구현에 따라 쿼리의 효율성이 결정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 편향된 가이드라인에 의존하기보다는 쿼리를 테스트하고 어떤 것이 더 나은 성능을 발휘하는지 확인하는 것이 필수적입니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이러니하게도, 기사 자체에는 &lt;em papago-id=&quot;6-1&quot;&gt;많은&lt;/em&gt; 주관적인 &lt;em papago-id=&quot;6-1&quot;&gt;진술&lt;/em&gt;과 &quot;&lt;em papago-id=&quot;6-1&quot;&gt;재귀적&lt;/em&gt;인 CTE는 꽤&lt;em papago-id=&quot;6-1&quot;&gt; &lt;strong papago-id=&quot;6-1-1&quot;&gt;효율적&lt;/strong&gt;&lt;/em&gt;으로 &lt;em papago-id=&quot;6-1&quot;&gt;숫자&lt;/em&gt; &lt;em papago-id=&quot;6-1&quot;&gt;&lt;strong papago-id=&quot;6-1-1&quot;&gt;목록&lt;/strong&gt;&lt;/em&gt;을 &lt;em papago-id=&quot;6-1&quot;&gt;생성&lt;/em&gt;할 수 &lt;em papago-id=&quot;6-1&quot;&gt;있다&lt;/em&gt;&lt;em papago-id=&quot;6-3&quot;&gt;&quot;,&lt;/em&gt; &quot;&lt;em papago-id=&quot;6-3&quot;&gt;&lt;strong papago-id=&quot;6-3-1&quot;&gt;이것&lt;/strong&gt;&lt;/em&gt;은 &lt;em papago-id=&quot;6-3&quot;&gt;Itzik &lt;/em&gt;Ben-Gen의 &lt;em papago-id=&quot;6-3&quot;&gt;뉴스 그룹 게시물에서 WHY 루프를 사용&lt;/em&gt;하는 &lt;em papago-id=&quot;6-3&quot;&gt;&lt;strong papago-id=&quot;6-3-1&quot;&gt;효율적&lt;/strong&gt;&lt;/em&gt;인 &lt;em papago-id=&quot;6-3&quot;&gt;방법&lt;/em&gt;이다&quot;와 같은 &quot;편향적인 지침&quot;이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자, 여러분...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Itzik의 좋은 이름을 언급하는 것만으로도 가난한 게으름뱅이가 실제로 그 끔찍한 방법을 사용하게 될지도 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저자는 특히 확장성에 직면하여 터무니없이 부정확한 진술을 하기 전에 자신이 설교하는 것을 연습하고 약간의 성능 테스트를 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 무엇을 하는지 또는 누군가가 무엇을 좋아하는지에 대한 주관적인 주장을 하기 전에 실제로 몇 가지 테스트를 해야 한다는 생각으로, 여기 당신이 직접 테스트를 할 수 있는 몇 가지 코드가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 실행할 SPID에 대한 프로파일러를 설정하고 직접 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;즐겨찾기&quot; 번호에 대해 1000000의 &quot;Search'n'Replace&quot;를 입력하면...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--===== Test for 1000000 rows ==================================
GO
--===== Traditional RECURSIVE CTE method
   WITH Tally (N) AS 
        ( 
         SELECT 1 UNION ALL 
         SELECT 1 + N FROM Tally WHERE N &amp;lt; 1000000 
        ) 
 SELECT N 
   INTO #Tally1 
   FROM Tally 
 OPTION (MAXRECURSION 0);
GO
--===== Traditional WHILE LOOP method
 CREATE TABLE #Tally2 (N INT);
    SET NOCOUNT ON;
DECLARE @Index INT;
    SET @Index = 1;
  WHILE @Index &amp;lt;= 1000000 
  BEGIN 
         INSERT #Tally2 (N) 
         VALUES (@Index);
            SET @Index = @Index + 1;
    END;
GO
--===== Traditional CROSS JOIN table method
 SELECT TOP (1000000)
        ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS N
   INTO #Tally3
   FROM Master.sys.All_Columns ac1
  CROSS JOIN Master.sys.ALL_Columns ac2;
GO
--===== Itzik's CROSS JOINED CTE method
   WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
        E02(N) AS (SELECT 1 FROM E00 a, E00 b),
        E04(N) AS (SELECT 1 FROM E02 a, E02 b),
        E08(N) AS (SELECT 1 FROM E04 a, E04 b),
        E16(N) AS (SELECT 1 FROM E08 a, E08 b),
        E32(N) AS (SELECT 1 FROM E16 a, E16 b),
   cteTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E32)
 SELECT N
   INTO #Tally4
   FROM cteTally
  WHERE N &amp;lt;= 1000000;
GO
--===== Housekeeping
   DROP TABLE #Tally1, #Tally2, #Tally3, #Tally4;
GO
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 SQL Profiler에서 얻은 100, 1000, 10000, 100000 및 1000000의 값입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SPID TextData                                 Dur(ms) CPU   Reads   Writes
---- ---------------------------------------- ------- ----- ------- ------
  51 --===== Test for 100 rows ==============       8     0       0      0
  51 --===== Traditional RECURSIVE CTE method      16     0     868      0
  51 --===== Traditional WHILE LOOP method CR      73    16     175      2
  51 --===== Traditional CROSS JOIN table met      11     0      80      0
  51 --===== Itzik's CROSS JOINED CTE method        6     0      63      0
  51 --===== Housekeeping   DROP TABLE #Tally      35    31     401      0

  51 --===== Test for 1000 rows =============       0     0       0      0
  51 --===== Traditional RECURSIVE CTE method      47    47    8074      0
  51 --===== Traditional WHILE LOOP method CR      80    78    1085      0
  51 --===== Traditional CROSS JOIN table met       5     0      98      0
  51 --===== Itzik's CROSS JOINED CTE method        2     0      83      0
  51 --===== Housekeeping   DROP TABLE #Tally       6    15     426      0

  51 --===== Test for 10000 rows ============       0     0       0      0
  51 --===== Traditional RECURSIVE CTE method     434   344   80230     10
  51 --===== Traditional WHILE LOOP method CR     671   563   10240      9
  51 --===== Traditional CROSS JOIN table met      25    31     302     15
  51 --===== Itzik's CROSS JOINED CTE method       24     0     192     15
  51 --===== Housekeeping   DROP TABLE #Tally       7    15     531      0

  51 --===== Test for 100000 rows ===========       0     0       0      0
  51 --===== Traditional RECURSIVE CTE method    4143  3813  800260    154
  51 --===== Traditional WHILE LOOP method CR    5820  5547  101380    161
  51 --===== Traditional CROSS JOIN table met     160   140     479    211
  51 --===== Itzik's CROSS JOINED CTE method      153   141     276    204
  51 --===== Housekeeping   DROP TABLE #Tally      10    15     761      0

  51 --===== Test for 1000000 rows ==========       0     0       0      0
  51 --===== Traditional RECURSIVE CTE method   41349 37437 8001048   1601
  51 --===== Traditional WHILE LOOP method CR   59138 56141 1012785   1682
  51 --===== Traditional CROSS JOIN table met    1224  1219    2429   2101
  51 --===== Itzik's CROSS JOINED CTE method     1448  1328    1217   2095
  51 --===== Housekeeping   DROP TABLE #Tally       8     0     415      0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다시피 &lt;strong papago-id=&quot;9-1&quot;&gt;재귀 CTE 방법은 기간&lt;/strong&gt; 및 &lt;strong papago-id=&quot;9-1&quot;&gt;CPU에 대한 기간&lt;/strong&gt; 루프 &lt;strong papago-id=&quot;9-1&quot;&gt;다음으로 최악이며 논리적 읽기 형식의 메모리 압력&lt;/strong&gt;이 기간 &lt;strong papago-id=&quot;9-1&quot;&gt;루프보다 8배&lt;/strong&gt; 더 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스테로이드에 대한 RBAR이며 While Loop을 피해야 하는 것처럼 단일 행 계산에 대해서는 어떤 대가를 치르더라도 피해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-3&quot;&gt;재귀가 &lt;/strong&gt;꽤&lt;strong papago-id=&quot;9-3&quot;&gt; 가치&lt;/strong&gt; 있는 &lt;strong papago-id=&quot;9-3&quot;&gt;곳들이 있지만 이것&lt;/strong&gt;은 그들 중 &lt;strong papago-id=&quot;9-3&quot;&gt;하나가 아닙니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이드바로서 데니 씨는...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확한 크기의 영구 숫자 또는 집계 표가 대부분의 경우 사용할 수 있는 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 크기는 무엇을 의미합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 사람들은 VARCHAR(8000)에서 날짜를 생성하거나 분할하기 위해 Talile 테이블을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확한 클러스터 인덱스가 &quot;N&quot;인 11,000 행 Tal 테이블을 생성하면 30년 이상의 날짜를 생성할 수 있는 충분한 행(저는 모기지 관련 업무를 수행하므로 30년은 저에게 중요한 숫자입니다)과 VARCHAR(8000) 분할을 처리할 수 있는 충분한 행이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;올바른 사이징&quot;이 중요한 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Talile 테이블을 많이 사용하면 캐시에 쉽게 들어가 메모리에 큰 부담을 주지 않고 빠르게 이동할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 중요한 것은 영구적인 Talile 테이블을 만든다면 어떤 방법을 사용하여 테이블을 만드는지는 중요하지 않다는 것을 모두가 알고 있다는 것입니다. 1) 한 번만 만들 것이고 2) 11,000개의 행 테이블과 같은 것이라면 모든 방법이 &quot;충분히&quot; 실행될 것이기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;그렇다면 어떤 방법을 사용해야 하는지에 대한 내 입장의 모든 소화불량은 왜?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답은 더 잘 알지 못하고 일만 해야 하는 가난한 사람들이 Recursive CTE 방법과 같은 것을 보고 영구적인 Tal 테이블을 만드는 것보다 훨씬 더 크고 더 자주 사용되는 것에 그것을 사용하기로 결정할 수 있다는 것입니다. 그리고 저는 그 &lt;strong papago-id=&quot;12-1&quot;&gt;사람들, 그들의 코드가 실행되는 서버를 보호하려고 노력&lt;/strong&gt;하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-1&quot;&gt; 서버에 있는 데이터를 소유한 회사&lt;/strong&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 큰 일입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 모든 사람들을 위한 것이어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;충분히 좋다&quot; 대신 올바른 방법을 가르쳐 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시물이나 책을 게시하거나 사용하기 전에 테스트를 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실, 당신이 구한 생명은, 특히 당신이 재귀적인 CTE가 이런 것을 위한 방법이라고 생각한다면, 당신 자신일 수도 있습니다. ;-)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;들어주셔서 감사합니다...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 최적의 기능은 함수 대신 표를 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수를 사용하면 CPU 로드가 증가하여 반환되는 데이터의 값이 생성됩니다. 반환되는 값이 매우 큰 범위를 차지하는 경우에는 특히 그렇습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;http://web.archive.org/web/20120413120912/http://www.projectdmx.com:80/tsql/tblnumbers.aspx&quot; papago-id=&quot;15-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;기사&lt;/a&gt;는 각각의 논의와 함께 14가지의 가능한 해결책을 &lt;a href=&quot;http://web.archive.org/web/20120413120912/http://www.projectdmx.com:80/tsql/tblnumbers.aspx&quot; papago-id=&quot;15-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;제공&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요한 점은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효율성과 성능에 관한 제안은 종종 주관적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리가 사용되는 방식에 관계없이 실제 구현에 따라 쿼리의 효율성이 결정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 편향된 지침에 의존하기보다는 쿼리를 테스트하고 어떤 것이 더 잘 수행되는지 확인하는 것이 필수적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 개인적으로 좋아했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH Nbrs ( n ) AS (
    SELECT 1 UNION ALL
    SELECT 1 + n FROM Nbrs WHERE n &amp;lt; 500 )
SELECT n FROM Nbrs
OPTION ( MAXRECURSION 500 )
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 매우 인 모든 것을 하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가치.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE VIEW dbo.Numbers
WITH SCHEMABINDING
AS
    WITH Int1(z) AS (SELECT 0 UNION ALL SELECT 0)
    , Int2(z) AS (SELECT 0 FROM Int1 a CROSS JOIN Int1 b)
    , Int4(z) AS (SELECT 0 FROM Int2 a CROSS JOIN Int2 b)
    , Int8(z) AS (SELECT 0 FROM Int4 a CROSS JOIN Int4 b)
    , Int16(z) AS (SELECT 0 FROM Int8 a CROSS JOIN Int8 b)
    , Int32(z) AS (SELECT TOP 2147483647 0 FROM Int16 a CROSS JOIN Int16 b)
    SELECT ROW_NUMBER() OVER (ORDER BY z) AS n
    FROM Int32
GO
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/sql/t-sql/functions/generate-series-transact-sql&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SQL&lt;/a&gt; Server &lt;a href=&quot;https://learn.microsoft.com/en-us/sql/t-sql/functions/generate-series-transact-sql&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;2022&lt;/a&gt;부터 다음 작업을 &lt;a href=&quot;https://learn.microsoft.com/en-us/sql/t-sql/functions/generate-series-transact-sql&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;수행&lt;/a&gt;할 수 &lt;a href=&quot;https://learn.microsoft.com/en-us/sql/t-sql/functions/generate-series-transact-sql&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT Value
FROM GENERATE_SERIES(START = 1, STOP = 100, STEP=1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server 2022(CTP 2.0)의 공개 미리 보기에는 매우 유망한 요소가 몇 가지 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 출시 전에 부정적인 측면이 해결되기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✅ &lt;strong papago-id=&quot;22-1&quot;&gt;번호 생성을 위한 실행&lt;/strong&gt; 시간 아래는 테스트 VM에서 700ms 내에 10,000,000개의 번호를 생성합니다(변수를 할당하면 클라이언트로 결과를 전송할 때 오버헤드가 제거됨).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE @Value INT 

SELECT @Value =[value]
FROM GENERATE_SERIES(START=1, STOP=10000000)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✅ &lt;strong papago-id=&quot;23-1&quot;&gt;카디널리티 추정치&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자에서 반환될 숫자의 수를 계산하는 것은 간단하며 SQL Server는 아래와 같이 이를 활용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/k9IOk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k9IOk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;❌ &lt;strong papago-id=&quot;25-1&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halloween_Problem&quot; papago-id=&quot;25-1-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;불필요&lt;/a&gt;&lt;/strong&gt;한 할로윈 &lt;strong papago-id=&quot;25-1&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halloween_Problem&quot; papago-id=&quot;25-1-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;보호&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 삽입에 대한 계획에는 완전히 불필요한 스풀이 있습니다. SQL Server에는 현재 행의 소스가 잠재적으로 대상이 아님을 확인할 수 있는 논리가 없기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE dbo.NumberHeap(Number INT);

INSERT INTO dbo.Numbers
SELECT [value]
FROM GENERATE_SERIES(START=1, STOP=10);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;번호에 클러스터된 인덱스가 있는 테이블에 삽입할 때 스풀을 대신 정렬로 대체할 수 있습니다(위상 분리도 제공).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wsj5n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wsj5n.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;❌ &lt;strong papago-id=&quot;28-1&quot;&gt;불필요&lt;/strong&gt;한 정렬&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 행을 순서대로 반환하지만 SQL Server에는 이를 보장하고 실행 계획에서 이를 활용할 수 있는 속성이 아직 설정되어 있지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT [value]
FROM GENERATE_SERIES(START=1, STOP=10)
ORDER BY [value] 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WWQ0O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WWQ0O.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RE: 이 마지막 &lt;a href=&quot;https://www.mssqltips.com/sqlservertip/7265/sql-server-2022-t-sql-enhancements/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;지점은 Aaron Bertrand&lt;/a&gt;가 현재 체크 표시된 상자가 아니지만 곧 표시될 수 있음을 나타냅니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL Server 2016+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있는 숫자 표를 생성합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OPENJSON&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-- range from 0 to @max - 1
DECLARE @max INT = 40000;

SELECT rn = CAST([key] AS INT) 
FROM OPENJSON(CONCAT('[1', REPLICATE(CAST(',1' AS VARCHAR(MAX)),@max-1),']'));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;kbd&gt;&lt;strong&gt;&lt;a href=&quot;https://data.stackexchange.com/stackoverflow/query/481961&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;LiveDemo&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/kbd&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;hr&gt; Idea taken from 
&lt;a href=&quot;https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/generate-serie-of-numbers-in-sql-server-2016-using-openjson/&quot; rel=&quot;nofollow&quot; papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OPENJSON을 사용하여 일련의 숫자를 생성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 아래 콘래드의 설명을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제프 모든의 대답은 훌륭합니다... 하지만 저는 포스트그레스에서 E32 행을 제거하지 않으면 Itzik 방법이 실패한다는 것을 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트그레스(40ms 대 100ms)에서 &lt;a href=&quot;http://www.sqlservercentral.com/articles/T-SQL/67899/&quot; rel=&quot;nofollow&quot; papago-id=&quot;37-1&quot;&gt;약간&lt;/a&gt; 빠른 것도 포스트그레스에 적합한 또 다른 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH 
    E00 (N) AS ( 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ),
    E01 (N) AS (SELECT a.N FROM E00 a CROSS JOIN E00 b),
    E02 (N) AS (SELECT a.N FROM E01 a CROSS JOIN E01 b ),
    E03 (N) AS (SELECT a.N FROM E02 a CROSS JOIN E02 b 
        LIMIT 11000  -- end record  11,000 good for 30 yrs dates
    ), -- max is 100,000,000, starts slowing e.g. 1 million 1.5 secs, 2 mil 2.5 secs, 3 mill 4 secs
    Tally (N) as (SELECT row_number() OVER (ORDER BY a.N) FROM E03 a)

SELECT N
FROM Tally
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server에서 Postgres 월드로 이동하는 동안 해당 플랫폼에서 테이블을 더 효율적으로 문서화할 수 있는 방법을 놓쳤을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정수()? 시퀀스()?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 조금 다른 '전통적인' CTE에 기여하고 싶습니다(행의 볼륨을 얻기 위해 기본 테이블을 누르지 않음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--===== Hans CROSS JOINED CTE method
WITH Numbers_CTE (Digit)
AS
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9)
SELECT HundredThousand.Digit * 100000 + TenThousand.Digit * 10000 + Thousand.Digit * 1000 + Hundred.Digit * 100 + Ten.Digit * 10 + One.Digit AS Number
INTO #Tally5
FROM Numbers_CTE AS One CROSS JOIN Numbers_CTE AS Ten CROSS JOIN Numbers_CTE AS Hundred CROSS JOIN Numbers_CTE AS Thousand CROSS JOIN Numbers_CTE AS TenThousand CROSS JOIN Numbers_CTE AS HundredThousand
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 CTE는 Itzik의 CTE보다 읽기를 더 많이 수행하지만 기존 CTE보다는 덜 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;40-1&quot;&gt;그러나 일관되게 다른 쿼리보다 적은 쓰기 작업을 수행합니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아시다시피 쓰기는 읽기보다 훨씬 더 비쌉니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기간은 코어 수(MAXDOP)에 따라 크게 달라지지만, 8코어에서는 다른 쿼리에 비해 지속적으로 더 빨리(ms 단위로 짧은 기간) 수행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 중:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
May 14 2014 18:34:29 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.3 &amp;lt;X64&amp;gt; (Build 9600: )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우즈 서버 2012 R2, 32GB, Xeon X3450 @2.67Ghz, 4코어 HT 사용&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10819/&lt;a href=&quot;https://stackoverflow.com/questions/10819/sql-auxiliary-table-of-numbers&quot; target=&quot;_blank&quot; papago-id=&quot;44-1&quot;&gt;sql-auxiliary-table-of-numbers&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>sql-server</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/524</guid>
      <comments>https://showcode.tistory.com/524#entry524comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:53 +0900</pubDate>
    </item>
    <item>
      <title>'charmap' 코덱은 위치 0에서 문자 '\u010c'를 인코딩할 수 없습니다. 문자 맵은 MariaDB 및 SQLChemy에 있습니다.</title>
      <link>https://showcode.tistory.com/523</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'charmap' 코덱은 위치 0에서 문자 '\u010c'를 인코딩할 수 없습니다. 문자 맵은 &lt;undefined papago-id=&quot;0-1&quot;&gt;MariaDB&lt;/undefined&gt; 및 &lt;undefined papago-id=&quot;0-1&quot;&gt;SQLChemy&lt;/undefined&gt;에 있습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQLAlchemy를 사용하여 MariaDB 데이터베이스에 데이터를 삽입하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;삽입해야 할 데이터를 얻기 위해 XML 파일을 구문 분석하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 데이터를 읽는 데 문제가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/16346914/python-3-2-unicodeencodeerror-charmap-codec-cant-encode-character-u2013-i&quot; papago-id=&quot;1-1&quot;&gt;python&lt;/a&gt; 3&lt;a href=&quot;https://stackoverflow.com/questions/16346914/python-3-2-unicodeencodeerror-charmap-codec-cant-encode-character-u2013-i&quot; papago-id=&quot;1-1&quot;&gt;.2&lt;/a&gt; UnicodeError: '&lt;a href=&quot;https://stackoverflow.com/questions/16346914/python-3-2-unicodeencodeerror-charmap-codec-cant-encode-character-u2013-i&quot; papago-id=&quot;1-1&quot;&gt;charmap' 코덱은 9629 위치&lt;/a&gt;에서 문자 &lt;a href=&quot;https://stackoverflow.com/questions/16346914/python-3-2-unicodeencodeerror-charmap-codec-cant-encode-character-u2013-i&quot; papago-id=&quot;1-1&quot;&gt;'\u2013'을 인코딩할 &lt;/a&gt;수 &lt;a href=&quot;https://stackoverflow.com/questions/16346914/python-3-2-unicodeencodeerror-charmap-codec-cant-encode-character-u2013-i&quot; papago-id=&quot;1-1&quot;&gt;없습니다&lt;/a&gt;. &lt;a href=&quot;https://stackoverflow.com/questions/16346914/python-3-2-unicodeencodeerror-charmap-codec-cant-encode-character-u2013-i&quot; papago-id=&quot;1-1&quot;&gt;문자 맵&lt;/a&gt;에서 &amp;lt;undefined&lt;a href=&quot;https://stackoverflow.com/questions/16346914/python-3-2-unicodeencodeerror-charmap-codec-cant-encode-character-u2013-i&quot; papago-id=&quot;1-1&quot;&gt;&amp;gt;&lt;/a&gt;는 파일에서 데이터를 읽는 것을 말합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 단계에서 오류가 발생하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;con_string = db_driver + '://' + db_user + ':' + db_password + '@' + db_host + ':' + db_port + '/' + db_name
engine = sqlalchemy.create_engine(con_string, pool_pre_ping=True)

meta_data = sqlalchemy.MetaData(engine)
table = sqlalchemy.Table('table', meta_data, autoload=True, autoload_with=engine)
table.insert().execute(data)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;data&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블의 열에 매핑된 XML 파일을 구문 분석하여 얻은 값을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유는 무엇일까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 범위의 유니코드 문자를 지원하려면 추가해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;?charset=utf8mb4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에서 설명한 대로 연결 URL의 끝까지&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.sqlalchemy.org/en/14/dialects/mysql.html#charset-selection&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.sqlalchemy.org/en/14/dialects/mysql.html#charset-selection&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.,&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;e = create_engine(
    &quot;mysql+pymysql://scott:tiger@localhost/test?charset=utf8mb4&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/69946299/&lt;a href=&quot;https://stackoverflow.com/questions/69946299/charmap-codec-cant-encode-character-u010c-in-position-0-character-maps-to&quot; target=&quot;_blank&quot; papago-id=&quot;8-1&quot;&gt;charmap-codec-cant-encode-character-u010c-in-position-0-character-maps-to&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/523</guid>
      <comments>https://showcode.tistory.com/523#entry523comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:43 +0900</pubDate>
    </item>
    <item>
      <title>WPF 데이터 그리드의 &amp;quot;삭제 키 누름&amp;quot; 이벤트는 무엇입니까?</title>
      <link>https://showcode.tistory.com/522</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF 데이터 그리드의 &quot;삭제 키 누름&quot; 이벤트는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 &lt;strong papago-id=&quot;1-1&quot;&gt;WPF DataGrid에서 행을 강조 표시하고 delete&lt;/strong&gt; 키를 &lt;strong papago-id=&quot;1-1&quot;&gt;눌러&lt;/strong&gt; 행을 삭제할 수 &lt;strong papago-id=&quot;1-1&quot;&gt;있도록&lt;/strong&gt; 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능은 이미 &lt;strong papago-id=&quot;2-1&quot;&gt;그리드의 UI&lt;/strong&gt;에 내장되어 &lt;strong papago-id=&quot;2-1&quot;&gt;있으므로&lt;/strong&gt; 사용자에게 행은 사라집니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 &lt;strong papago-id=&quot;3-1&quot;&gt;SelectionChanged&lt;/strong&gt; 이벤트(아래 코드)에서 이 문제를 처리하고 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 모든 &quot;e&quot;를 반복합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거된 항목&quot; 및 LINQ를 사용하여 항목 삭제&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-0&quot;&gt;문제&lt;/strong&gt;는 &lt;em papago-id=&quot;5-2&quot;&gt;단순히&lt;/em&gt; 행을 선택하고 이동하는 경우에도 선택 변경이 실행되고 해당 행이 1이 된다는&lt;strong papago-id=&quot;5-0&quot;&gt; &lt;/strong&gt;것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Removed Items(이상하게도 어떤 항목을 선택하면 Removed Items(제거된 항목) 컨테이너에 넣을 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 간단하게 처리할 수 있도록 &lt;strong papago-id=&quot;6-1&quot;&gt;DeleteKeyPressed&lt;/strong&gt; 이벤트를 찾고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 행사의 이름은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2009년 3월 툴킷을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XAML:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Grid DockPanel.Dock=&quot;Bottom&quot;&amp;gt;
    &amp;lt;toolkit:DataGrid x:Name=&quot;TheDataGrid&quot; 
                      SelectionChanged=&quot;TheDataGrid_SelectionChanged&quot;
                      AutoGenerateColumns=&quot;True&quot;
                      RowEditEnding=&quot;TheDataGrid_RowEditEnding&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드백:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void TheDataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    if (e.RemovedItems.Count &amp;gt; 0)
    {
        Message.Text = &quot;The following were removed: &quot;;
        foreach (object obj in e.RemovedItems)
        {
            Customer customer = obj as Customer;
            Message.Text += customer.ContactName + &quot;,&quot;;
            _db.Order_Details.DeleteAllOnSubmit(
                customer.Orders.SelectMany(o =&amp;gt; o.Order_Details));
            _db.Orders.DeleteAllOnSubmit(customer.Orders);
            _db.Customers.DeleteOnSubmit(customer);
        } 
    }

    try
    {
        _db.SubmitChanges();
    }
    catch (Exception ex)
    {
        Message.Text = ex.Message;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h1 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변:&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Thanks lnferis, 그게 바로 제가 찾던 것입니다. 여기 데이터 그리드에 대한 완료된 삭제 처리 이벤트가 있습니다. 키다운 이벤트가 어떤 이유로 실행되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XAML:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;toolkit:DataGrid x:Name=&quot;TheDataGrid&quot; 
                  KeyDown=&quot;TheDataGrid_KeyDown&quot;
                  PreviewKeyDown=&quot;TheDataGrid_PreviewKeyDown&quot;
                  AutoGenerateColumns=&quot;True&quot;
                  RowEditEnding=&quot;TheDataGrid_RowEditEnding&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비밀의&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void TheDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        var grid = (DataGrid)sender;

        if (grid.SelectedItems.Count &amp;gt; 0)
        {
            string checkMessage = &quot;The following will be removed: &quot;;

            foreach (var row in grid.SelectedItems)
            {
                Customer customer = row as Customer;
                checkMessage += customer.ContactName + &quot;,&quot;;
            }
            checkMessage = Regex.Replace(checkMessage, &quot;,$&quot;, &quot;&quot;);

            var result = MessageBox.Show(checkMessage, &quot;Delete&quot;, MessageBoxButton.OKCancel);
            if (result == MessageBoxResult.OK)
            {
                foreach (var row in grid.SelectedItems)
                {
                    Customer customer = row as Customer;
                    _db.Order_Details.DeleteAllOnSubmit(
                        customer.Orders.SelectMany(o =&amp;gt; o.Order_Details));
                    _db.Orders.DeleteAllOnSubmit(customer.Orders);
                    _db.Customers.DeleteOnSubmit(customer);
                }
                _db.SubmitChanges();
            }
            else
            {
                foreach (var row in grid.SelectedItems)
                {
                    Customer customer = row as Customer;
                    LoadData();
                    _db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, customer); //TODO: this doesn't refresh the datagrid like the other instance in this code
                }
            }
        }
    }
}

private void TheDataGrid_KeyDown(object sender, KeyEventArgs e)
{
    Console.WriteLine(&quot;never gets here for some reason&quot;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RemovedItems&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항목은 그리드가 아닌 선택 항목에서 제거된 항목을 반영합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처리&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PreviewKeyDown&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 및 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SelectedItems&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 행을 삭제할 속성:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void PreviewKeyDownHandler(object sender, KeyEventArgs e) {
    var grid = (DataGrid)sender;
    if ( Key.Delete == e.Key ) {
        foreach (var row in grid.SelectedItems) {
            ... // perform linq stuff to delete here
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XAML&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;DataGrid ItemsSource=&quot;{Binding}&quot; CommandManager.PreviewCanExecute=&quot;Grid_PreviewCanExecute&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드백&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void Grid_PreviewCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
  DataGrid grid = (DataGrid)sender;
  if (e.Command == DataGrid.DeleteCommand)
  {
    if (MessageBox.Show(String.Format(&quot;Would you like to delete {0}&quot;, (grid.SelectedItem as Person).FirstName), &quot;Confirm Delete&quot;, MessageBoxButton.OKCancel) != MessageBoxResult.OK)
      e.Handled = true;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 그리드의 바인딩 대상은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상적으로는 바인딩할 컬렉션의 CollectionChanged 이벤트에 대응해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 논리(제거된 항목 삭제)가 UI에서 분리됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체를 포함하는 관찰 가능한 컬렉션을 만들고 이를 항목에 바인딩할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원본 컬렉션에 필요한 이벤트가 없는 경우 해당 용도의 원본입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 설정에 맞지 않을 수도 있지만, 저는 보통 그렇게 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 코드를 따르십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아래 코드로 성공했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경이 필요하면 알려주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; private void grdEmployee_PreviewKeyDown(object sender, KeyEventArgs e)
    {

        if (e.Device.Target.GetType().Name == &quot;DataGridCell&quot;)
        {
            if (e.Key == Key.Delete)
            {
                MessageBoxResult res = MessageBox.Show(&quot;Are you sure want to delete?&quot;, &quot;Confirmation!&quot;, MessageBoxButton.YesNo,MessageBoxImage.Question);
                e.Handled = (res == MessageBoxResult.No);
            }
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파티에 조금 늦었지만 인퍼리스의 대답을 듣기 위해서는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim isEditing = False
AddHandler dg.BeginningEdit, Sub() isEditing = True
AddHandler dg.RowEditEnding, Sub() isEditing = False
AddHandler dg.PreviewKeyDown, Sub(obj, ev) 
  If e.Key = Key.Delete AndAlso Not isEditing Then ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 &quot;셀을 편집할 때 삭제 키를 사용하여 셀에서 일부 문자를 제거하면 전체 행이 삭제됩니다.&quot;라는 설명이 수정됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 깨끗한 솔루션은 플럭스에 &lt;a href=&quot;https://stackoverflow.com/users/1523703/flux&quot; papago-id=&quot;28-1&quot;&gt;의해&lt;/a&gt; 응답된 것과 같은 PreviewCanExecute를 사용하는 것입니다. 이것은 저처럼 그의 답변을 간과한 사람들을 위해 조금 더 명확하게 하기 위한 완성된 솔루션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void Grid_PreviewCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    if (e.Command == DataGrid.DeleteCommand)
    {
        if (MessageBox.Show($&quot;Delete something from something else?&quot;, &quot;Confirm removal of something&quot;, MessageBoxButton.YesNo) == MessageBoxResult.Yes)
        {
            // Do what ever needs to be done when someone deletes the row
        }
        else
        {
            e.Handled = true;   
            // Handled means.. no worries, I took care of it.. and it will not delete the row
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 관리자에 연결할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 후에 실행됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Key Up 또는 Key Down 이벤트를 처리하고 누른 Key for Delete(삭제할 키)를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void OnKeyDown(object sender, KeyEventArgs e) {
  if ( Key.Delete == e.Key ) {
    // Delete pressed
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/677326/&lt;a href=&quot;https://stackoverflow.com/questions/677326/what-is-the-pressed-the-delete-key-event-for-the-wpf-datagrid&quot; target=&quot;_blank&quot; papago-id=&quot;31-1&quot;&gt;what-is-the-pressed-the-delete-key-event-for-the-wpf-datagrid&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WPF</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/522</guid>
      <comments>https://showcode.tistory.com/522#entry522comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:37 +0900</pubDate>
    </item>
    <item>
      <title>오라클 XE 데이터베이스의 공식 도커 이미지가 있습니까?</title>
      <link>https://showcode.tistory.com/521</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오라클 XE 데이터베이스의 공식 도커 이미지가 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;마감되었습니다.&lt;/b&gt; 이 질문은 책, 도구, 소프트웨어 라이브러리 등에 대한 추천을 구하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;충족되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;스택&lt;/a&gt; 오버플로 &lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;지침&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 수락하고 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; 
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;책, 도구, 소프트웨어 라이브러리 등에 대한 추천을 구하는 질문은 허용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에 사실과 인용문으로 답변할 수 있도록 질문을 편집할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2020-03-3107:58:33Z&quot; papago-attr-id=&quot;1&quot;&gt;3년&lt;/span&gt; 전에 &lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2020-03-3107:58:33Z&quot; papago-attr-id=&quot;2&quot;&gt;문&lt;/span&gt;을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/54940302/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 질문이 있습니다. Oracle XE 데이터베이스의 정식 Docker 이미지가 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 허브에서 아무것도 찾을 수 없지만, 제가 잘못 검색하고 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이곳은 도커를 위한 오라클의 공식 저장소인 것 같습니다 - https://github.com/oracle/&lt;a href=&quot;https://blogs.oracle.com/oraclemagazine/deliver-oracle-database-18c-express-edition-in-containers&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-3&quot;&gt;docker-images&lt;/a&gt; 더 자세한 정보는 여기에서 - https://blogs.oracle.com/oraclemagazine/deliver-oracle-database-18c-express-edition-in-containers&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 가능한 공식 도커 이미지는 없지만 다음 git repo를 참조하여 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/freneticdisc/oracle-blog-examples/tree/master/Docker%20-%20Oracle%20Database&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/freneticdisc/oracle-blog-examples/tree/master/Docker%20-%20Oracle%20Database&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/wnameless/docker-oracle-xe-11g&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/wnameless/docker-oracle-xe-11g&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/54940302/&lt;a href=&quot;https://stackoverflow.com/questions/54940302/is-there-official-docker-image-of-oracle-xe-database&quot; target=&quot;_blank&quot; papago-id=&quot;11-1&quot;&gt;is-there-official-docker-image-of-oracle-xe-database&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/521</guid>
      <comments>https://showcode.tistory.com/521#entry521comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:28 +0900</pubDate>
    </item>
    <item>
      <title>수동으로 변경 이벤트를 트리거하는 방법 - 각도2</title>
      <link>https://showcode.tistory.com/520</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수동으로 변경 이벤트를 트리거하는 방법 - 각도2&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 구성 요소가 주어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Component({
    selector: 'compA',
    template:  template: `&amp;lt;compB [item]=item&amp;gt;&amp;lt;/compB&amp;gt;`
})
export class CompA {
    item:any;
    updateItem():void {
        item[name] = &quot;updated name&quot;;
    }
}

@Component({
    selector: 'compB',
    template:  template: `&amp;lt;p&amp;gt;{{item[name]}}&amp;lt;/p&amp;gt;`
})
export class CompB implements OnInit{
    @Input() item: any;
    someArray: any[];

    ngOnInit():void {
        someArray.push(&quot;something&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 이해한 바로는 완전하지 않은 한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;item&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체가 변경되었습니다. angular2가 변경 내용을 인식하지 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;item&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음 기간 동안 수동으로 변경 이벤트를 내보내고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;item&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;updateItem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드가 호출됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 자녀 구성 요소를 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;CompB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도가 일반적인 방식의 변화를 감지한 것처럼 다시 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 제가 한 일은 다음을 구현하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngOnInit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 방법.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CompB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그 방법을 안으로 불러들입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;updateItem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a를 통한 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewChild&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크. 이야기의 또 다른 부분은 내 실제 출처가 다음과 같은 물체를 가지고 있다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;someArray&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 렌더에서 재설정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;재설정을 다시 렌더링할지 확신할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;someArray&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재, 저는 그것들을 재설정하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngOnInit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제 질문은 어떻게 하면 상위 개체의 더 깊은 요소에 대한 변경사항에 대한 렌더링을 트리거할 수 있을까 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알기로는 전체 아이템 객체가 변경되지 않는 한 angular2는 아이템의 변경을 인식하지 못하는 것으로 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 간단하지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거링을 구별해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngOnChanges&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체가 변환되고 하위 구성 요소의 DOM 업데이트가 수행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앵귤러는 그것을 인식하지 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;item&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경되었으며 트리거되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngOnChanges&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이프사이클 후크, 그러나 DOM은 만약 당신이 특정 속성을 참조한다면 여전히 업데이트될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;item&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 물건에 대한 참조가 보존되어 있기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음 동작을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 자녀 구성 요소를 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도가 일반적인 방식의 변화를 감지한 것처럼 CompB가 다시 렌더링되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM에 업데이트가 남아 있기 때문에 특별히 아무것도 할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수동 변경 감지&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경 디텍터를 삽입하고 다음과 같이 트리거할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Component({
    selector: 'compA',
    template:  template: `&amp;lt;compB [item]=item&amp;gt;&amp;lt;/compB&amp;gt;`
})
export class CompA {
    item:any;
    constructor(cd: ChangeDetectorRef) {}

    updateItem():void {
        item[name] = &quot;updated name&quot;;
        this.cd.detectChanges();
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 구성 요소와 모든 하위 구성 요소에 대한 변경 탐지를 트리거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-0&quot;&gt;그러나 &lt;/strong&gt;Angular가 변화를 감지하지 못하더라도 &lt;strong papago-id=&quot;29-0&quot;&gt;당신&lt;/strong&gt;의 경우에는 &lt;strong papago-id=&quot;29-0&quot;&gt;아무런 영향이 없을 &lt;/strong&gt;것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;item&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;30-1&quot;&gt;하위&lt;/strong&gt; 항목에 대한 &lt;strong papago-id=&quot;30-1&quot;&gt;변경&lt;/strong&gt; 탐지를 &lt;strong papago-id=&quot;30-1&quot;&gt;계속&lt;/strong&gt; 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-1&quot;&gt;구성&lt;/strong&gt; 요소 및 &lt;strong papago-id=&quot;31-1&quot;&gt;DOM&lt;/strong&gt;을 업데이트합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;32-0&quot;&gt;사용&lt;/strong&gt;하지 않는 한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ChangeDetectionStrategy.OnPush&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에 당신이 할 수 있는 한 가지 방법은 다음에서 수동 점검을 하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngDoCheck&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 갈고리&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CompB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { ChangeDetectorRef } from '@angular/core';

export class CompB implements OnInit{
    @Input() item: any;
    someArray: any[];
    previous;

    constructor(cd: ChangeDetectorRef) {}

    ngOnInit():void {
        this.previous = this.item.name;
        someArray.push(&quot;something&quot;);
    }

    ngDoCheck() {
      if (this.previous !== this.item.name) {
        this.cd.detectChanges();
      }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 다음 문서에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 기사의 &lt;a href=&quot;https://hackernoon.com/everything-you-need-to-know-about-change-detection-in-angular-8006c51d206f&quot; papago-id=&quot;37-0&quot; rel=&quot;noreferrer&quot;&gt;변경 탐지에 대해 알아야&lt;/a&gt; 할 &lt;a href=&quot;https://hackernoon.com/everything-you-need-to-know-about-change-detection-in-angular-8006c51d206f&quot; papago-id=&quot;37-0&quot; rel=&quot;noreferrer&quot;&gt;모든 정보&lt;/a&gt;.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/the-mechanics-of-dom-updates-in-angular-3b2970d5c03d&quot; rel=&quot;noreferrer&quot; papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular에서 DOM 업데이트의 역학&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/the-mechanics-of-property-bindings-update-in-angular-39c0812bc4ce&quot; rel=&quot;noreferrer&quot; papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular에서 속성 바인딩의 메커니즘이 업데이트됩니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CompB에 다른 입력을 넣어 CompA에서 항목의 속성을 변경하려면 이 입력의 값만 변경하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;@Component({
    selector: 'compA',
    template:  template: `&amp;lt;compB [item]=item [trigger]=trigger&amp;gt;&amp;lt;/compB&amp;gt;`
})
export class CompA {
    item:any;
    trigger: any;
    updateItem():void {
        item[name] = &quot;updated name&quot;;
        trigger = new Object();
    }
}

@Component({
    selector: 'compB',
    template:  template: `&amp;lt;p&amp;gt;{{item[name]}}&amp;lt;/p&amp;gt;`
})
export class CompB implements OnInit{
    @Input() item: any;
    @Input() trigger: any;
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/44941635/&lt;a href=&quot;https://stackoverflow.com/questions/44941635/how-to-trigger-a-change-event-manually-angular2&quot; target=&quot;_blank&quot; papago-id=&quot;41-1&quot;&gt;how-to-trigger-a-change-event-manually-angular2&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>TypeScript</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/520</guid>
      <comments>https://showcode.tistory.com/520#entry520comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:21 +0900</pubDate>
    </item>
    <item>
      <title>수백만 개의 레코드가 있을 때 몽고 카운트는 정말 느립니다.</title>
      <link>https://showcode.tistory.com/519</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수백만 개의 레코드가 있을 때 몽고 카운트는 정말 느립니다.&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;//FAST
db.datasources.find().count()
12036788

//SLOW    
db.datasources.find({nid:19882}).count()
10161684
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nid의 인덱스&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 질문을 더 빨리 할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(약 8초 정도 걸립니다)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MongoDB가 기준과 일치하는 문서의 적절한 수를 찾기 위해 전체 b-tree 워크를 수행해야 하기 때문에 인덱스가 있든 없든 카운트 쿼리는 느립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유는 MongoDB b-tree 구조가 &quot;카운트&quot;되지 않기 때문입니다. 즉, 각 노드는 노드/하위 트리의 요소 수에 대한 정보를 저장하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 https://jira.mongodb.org/browse/&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-1752&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;4-1&quot;&gt;SERVER-1752&lt;/a&gt; 에서 보고되며, 현재 몇 가지 단점이 있는 컬렉션에 대한 카운터를 수동으로 유지 관리하는 것 외에는 성능을 개선하기 위한 해결 방법이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 db.col.count() 버전(따라서 기준 없음)은 큰 바로 가기를 사용할 수 없으며 실제로 쿼리를 수행하지 않으므로 속도가 빨라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 모든 요소를 반환해야 하는 카운트 쿼리와 항상 동일한 값을 보고하지는 않습니다(예: 쓰기 처리량이 높은 공유 환경에서는 그렇지 않음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 버그인지 아닌지에 대한 논쟁이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 것 같아요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2.3+에서는 인덱스 필드의 카운트 성능을 개선해야 하는(그리고 개선해야 하는) 상당한 최적화가 도입되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-7745&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-1&quot;&gt;참조:&lt;/a&gt; https://jira.mongodb.org/browse/SERVER-7745&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Remon이 말했듯이, count()는 쿼리/필터와 일치하는 모든 문서를 스캔해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 n은 색인과 일치하는 문서의 수 또는 필드가 색인화되지 않은 경우 집합의 문서 수입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 경우 일반적으로 요구 사항을 다시 검토하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과 10161684에 대한 정확한 번호가 꼭 필요합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정밀도가 중요한 경우 특정 쿼리에 대해 별도의 카운터를 유지해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 대부분의 경우 정밀도는 중요하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 중 하나입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;천만이든, 1,020만이든 상관없지만 규모의 순서가 중요하다, 즉 800만이든, 1,000만이든 신경을 쓰는 겁니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확한 숫자는 작은 숫자만 신경 쓰시면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 44개의 결과 또는 72개의 결과가 있다는 것을 알고자 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 예를 들어 1000개를 넘어서면 사용자에게 '1000개 이상의 개체'를 찾을 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 앱에서 두 번째 옵션은 제가 원하는 것이라는 것을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 제한에 도달하면 카운트가 중지되도록 count() 쿼리도 제한합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;db.datasources.find({nid: 19882}).limit(1000).count(true)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;카운트가 1000이면 사용자에게 '&lt;em papago-id=&quot;13-1&quot;&gt;1000 이상&lt;/em&gt;의 결과를 찾았습니다'를 표시하고, 그렇지 않으면 정확한 숫자를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 옵션은...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아직 깔끔한 해결책을 생각하지 못했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 모든 문서의 모든 분야를 두 번째로 살펴봐야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;색인화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nid&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;계산을 더 빠르게 하기 위해서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9778420/&lt;a href=&quot;https://stackoverflow.com/questions/9778420/mongo-count-really-slow-when-there-are-millions-of-records&quot; target=&quot;_blank&quot; papago-id=&quot;17-1&quot;&gt;mongo-count-really-slow-when-there-are-millions-of-records&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MongoDB</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/519</guid>
      <comments>https://showcode.tistory.com/519#entry519comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:14 +0900</pubDate>
    </item>
    <item>
      <title>mongodb 집계 쿼리에서 $regex를 $match 내에서 사용하는 방법</title>
      <link>https://showcode.tistory.com/518</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mongodb 집계 쿼리에서 $regex를 $match 내에서 사용하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부를 사용하려고 하는데, 일치하는 문서가 반환되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;db.collection('MyCollection', function (err, collection) {
  collection.aggregate([
    { $match: { 'Code': 'Value_01', 'Field2': { $regex: '/Value_2/g' } } },  
    { $project: {
        _id: 1,
        CodeNumber: '$Code',
        FieldName2: '$Field2'
      }
    }
  ], function (err, Result_doc) {
    console.log(Result_doc);
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디가 잘못되고 있는지 정확한 구문을 알려줄 수 있는 사람이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;
&lt;hr&gt; I even tried with replacing the 
&lt;p&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'Field2': { $regex: /Value_2/g }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 나와 있는 것처럼.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$regex&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연결한 문서의 두 가지 방법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Field2: /Value_2/g
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OR&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Field2: { $regex: 'Value_2', $options: 'g' }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 두 번째 시도도 시도해봤어요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'Field2': { $regex: /Value_2/g }&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것도 효과가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BTW, 더&lt;/font&gt;&lt;/font&gt;&lt;code&gt;g&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;regex 옵션은 어차피 하나의 일치만 필요하기 때문에 이 맥락에서 의미가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록에 나열되지도 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$regex&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드로 작동하게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var Value_match = new RegExp('Value_2');

db.collection('MyCollection', function (err, collection) {

  collection.aggregate([
    { $match: { Code: 'Value_01', Field2: { $regex: Value_match } } },  
    { $project: {
        _id: 1,
        CodeNumber: '$Code',
        FieldName2: '$Field2'
      }
    }
  ], function (err, Result_doc) {
    console.log(Result_doc);
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 개체 콘텐츠를 콘솔로 푸시할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.dir(Value_match)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'/Value_2/'&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16252208/&lt;a href=&quot;https://stackoverflow.com/questions/16252208/how-to-use-regex-in-mongodb-aggregation-query-within-match&quot; target=&quot;_blank&quot; papago-id=&quot;14-1&quot;&gt;how-to-use-regex-in-mongodb-aggregation-query-within-match&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MongoDB</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/518</guid>
      <comments>https://showcode.tistory.com/518#entry518comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:07 +0900</pubDate>
    </item>
    <item>
      <title>cx_Oracle: distutils.errors.디퓨틸스SetupError: Oracle 포함 파일을 찾을 수 없습니다.</title>
      <link>https://showcode.tistory.com/517</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cx_Oracle: distutils.errors.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디퓨틸스&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SetupError: Oracle 포함 파일을 찾을 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Linux(Linux 2.6.18-371.1.2.el5 i686)에 Python 2.5용 cx_Oracle을 설치해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 클라이언트 10.2.0.4를 설치했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음을 시도했습니다: 1.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다운로드.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cx_Oracle tar.gz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://sourceforge.net/projects/cx-oracle/files/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나열된 버전 중 python 2.5와 Oracle 클라이언트 10.2.0.4에 적합한 버전이 무엇인지 모르니 cx_Oracle-5.1.tar.gz를 사용해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포장을 푼 tar, 포장을 푼 폴더로 이동하여 python setup.py install을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Traceback (most recent call last):
File &quot;setup.py&quot;, line 187, in &amp;lt;module&amp;gt;
raise DistutilsSetupError(&quot;cannot locate Oracle include files&quot;)
distutils.errors.DistutilsSetupError: cannot locate Oracle include files
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.bash_profile에서 Oracle 경로를 설정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export ORACLE_HOME=/usr/oracle/10.2.0.4/client
export PATH=$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 오류를 어떻게 해결할 수 있을까요? cx_Oracle tar의 다른 버전이 필요할까요?&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pip install cx_Oracle을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 발생:&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cx-Oracle 다운로드/패킹 해제&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement cx-Oracle
No distributions at all found for cx-Oracle
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 나에게 올바른 해결책을 조언해 줄 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-0&quot;&gt;업데이트&lt;/strong&gt; 응답에서 제안한 후 다음 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;...
cx_Oracle.c:496: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from  pointer without a cast
cx_Oracle.c:497: error: âOCI_UCBTYPE_EXITâ undeclared (first use in this function)
cx_Oracle.c:497: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from pointer without a cast
cx_Oracle.c:498: error: âOCI_UCBTYPE_REPLACEâ undeclared (first use in this function)
cx_Oracle.c:498: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from pointer without a cast
error: command 'gcc' failed with exit status 1
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;setup.py 을 실행하면 Oracle_HOME에서 이러한 폴더를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;possibleIncludeDirs = [&quot;rdbms/demo&quot;, &quot;rdbms/public&quot;, &quot;network/public&quot;,
        &quot;sdk/include&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 인스턴트 클라이언트는 때때로 /usr/include/oracle//client에 oci.h와 같은 포함 파일을 배치합니다. 만약 ORACLE_HOME 아래에 '포함' 디렉터리가 없다면 이 디렉터리에 대한 심볼릭 링크를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo ln -s /usr/include/oracle/11.2/client $ORACLE_HOME/include
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.oracle.com/technology/software/tech/oci/instantclient/index.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-1&quot;&gt;클라이언트&lt;/a&gt; SDK가 누락된 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS용 인스턴트 클라이언트 sdk를 설치해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;oracle_client_basic&lt;/code&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pip 설치 사용&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;python -m pip install cx_Oracle
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ldconfig 추가 중&lt;/font&gt;&lt;/p&gt; 
  &lt;ol&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트 위치를 찾습니다. 예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/u01/app/oracle/product/11.2.0/client_1/lib&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;p&gt;&lt;code&gt;vi /etc/ld.so.conf.d/oracle.conf&lt;/code&gt;&lt;/p&gt; &lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 위치를 추가합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;/u01/app/oracle/product/11.2.0/client_1/lib
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;ldconfig&lt;/code&gt;&lt;/li&gt; 
  &lt;/ol&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;import cx_oracle&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경로에 클라이언트 SDK가 있는지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 이것을 .bash_rc에 추가해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export DYLD_LIBRARY_PATH=$ORACLE_HOME
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Python 2.7은 Python 3.4에서 기본적으로 사용할 수 있는 Python.h와 함께 제공되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 또한 파이썬 개발 패키지를 설치하는 것을 제안하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yum install python-devel
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 문제가 해결될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24549911/&lt;a href=&quot;https://stackoverflow.com/questions/24549911/cx-oracle-distutils-errors-distutilssetuperror-cannot-locate-oracle-include-fi&quot; target=&quot;_blank&quot; papago-id=&quot;25-1&quot;&gt;cx-oracle-distutils-errors-distutilssetuperror-cannot-locate-oracle-include-fi&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/517</guid>
      <comments>https://showcode.tistory.com/517#entry517comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:47:01 +0900</pubDate>
    </item>
    <item>
      <title>모듈 설명자 클래스를 로드하지 못했습니다.클래스 &amp;quot;com.google.android.gms.dynamite.descriptors.com .google&amp;quot;을 찾을 수 없습니다.화력 기지auth.ModuleDescriptor&amp;quot;</title>
      <link>https://showcode.tistory.com/516</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈 설명자 클래스를 로드하지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 &quot;com.google.android.gms.dynamite.descriptors.com .google&quot;을 찾을 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;화력 기지&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;auth.ModuleDescriptor&quot;&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 신입이고 Firebase 9.0.0을 사용하여 이메일/비밀번호 인증을 구현하려고 했습니다. 그래서 활동은 등록 작업 또는 로그인 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그인 작업이 원활하게 실행되고 Firebase 콘솔에서 업데이트를 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 새로운 사용자를 등록하려고 하면 이 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;E/DynamiteModule: Failed to load module descriptor class: Didn't find class &quot;com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescri ptor&quot; on path: DexPathList[[zip file &quot;/data/app/deventree.com.thetimothyinitiative- 2/base.apk&quot;],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 장치에서 Google Play 서비스 버전 9.0.83을 실행하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Studio 2.1.1(Google Play 서비스 SDK 설치)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘솔에서도 로그인 방법을 활성화했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 뭘 놓쳤는지 모르겠어요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이어베이스 팀의 알폰소입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류를 무시할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;E/DynamiteModule: Failed to load module descriptor class: Didn't find class &quot;com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 Play Services에 디버깅이 아닌 E/로 기록되는 버그가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 다음 릴리스에서 수정 사항을 배포할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 응용 프로그램의 동작에 영향을 미치지 않습니다. 문제가 있는 경우 다른 곳에서 원인을 찾으십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력하는 비밀번호가 6자 이상이어야 합니다! :)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;auth=FirebaseAuth.getInstance();&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 나에게 같은 오류를 주었고 이 코드를 추가한 후에 그 오류를 제거하는 데 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 사용자를 인스턴스화하지 않고 쓰기만 하면 이 문제가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firebase Auth.getInstance();&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/37370258/&lt;a href=&quot;https://stackoverflow.com/questions/37370258/failed-to-load-module-descriptor-class-didnt-find-class-com-google-android-gm&quot; target=&quot;_blank&quot; papago-id=&quot;15-1&quot;&gt;failed-to-load-module-descriptor-class-didnt-find-class-com-google-android-gm&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Firebase</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/516</guid>
      <comments>https://showcode.tistory.com/516#entry516comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:46:54 +0900</pubDate>
    </item>
    <item>
      <title>Python의 상대적인 위치에서 파일 열기</title>
      <link>https://showcode.tistory.com/515</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python의 상대적인 위치에서 파일 열기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 파이썬 코드가 다음 디렉토리를 실행한다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션에 액세스해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main/2091/data.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open(location)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수가 무엇이어야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;location&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 간단한 코드가 작동한다는 것을 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단점이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;file = &quot;\2091\sample.txt&quot;
path = os.getcwd()+file
fp = open(path, 'r+');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 유형의 작업에서는 실제 작업 디렉터리가 무엇인지 주의해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 파일이 있는 디렉터리에서 스크립트를 실행할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, 상대 경로를 단독으로 사용할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 파일이 스크립트가 실제로 위치한 하위 디렉터리에 있는 것이 확실하면 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__file__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 당신을 도우려고요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;__file__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 스크립트가 있는 위치의 전체 경로입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 여러분은 다음과 같은 것을 다룰 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os
script_dir = os.path.dirname(__file__) #&amp;lt;-- absolute dir the script is in
rel_path = &quot;2091/data.txt&quot;
abs_file_path = os.path.join(script_dir, rel_path)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 정상적으로 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os

def read_file(file_name):
    file_handle = open(file_name)
    print file_handle.read()
    file_handle.close()

file_dir = os.path.dirname(os.path.realpath('__file__'))
print file_dir

#For accessing the file in the same folder
file_name = &quot;same.txt&quot;
read_file(file_name)

#For accessing the file in a folder contained in the current folder
file_name = os.path.join(file_dir, 'Folder1.1/same.txt')
read_file(file_name)

#For accessing the file in the parent folder of the current folder
file_name = os.path.join(file_dir, '../same.txt')
read_file(file_name)

#For accessing the file inside a sibling folder.
file_name = os.path.join(file_dir, '../Folder2/same.txt')
file_name = os.path.abspath(os.path.realpath(file_name))
print file_name
read_file(file_name)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Russ의 원래 답변에서 제가 발견한 불일치를 명확히 하기 위해 계정을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로, 그의 원래 대답은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os
script_dir = os.path.dirname(__file__)
rel_path = &quot;2091/data.txt&quot;
abs_file_path = os.path.join(script_dir, rel_path)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 파일에 대한 절대 시스템 경로를 동적으로 생성하려고 하므로 이 방법은 매우 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코리 모워터가 알아차린 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__file__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 상대 경로(내 시스템에서도 마찬가지)이며 다음을 사용하여 제안됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;os.path.abspath(__file__)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;os.path.abspath&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 현재 스크립트의 절대 경로를 반환합니다(즉,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/path/to/dir/foobar.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 메서드를 사용하려면(그리고 최종적으로 어떻게 작동했는지) 경로 끝에서 스크립트 이름을 제거해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os
script_path = os.path.abspath(__file__) # i.e. /path/to/dir/foobar.py
script_dir = os.path.split(script_path)[0] #i.e. /path/to/dir/
rel_path = &quot;2091/data.txt&quot;
abs_file_path = os.path.join(script_dir, rel_path)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과 abs_file_path(이 예에서는)는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/path/to/dir/2091/data.txt&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 운영 체제에 따라 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 및 *nix와 모두 호환되는 솔루션을 원하는 경우 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from os import path

file_path = path.relpath(&quot;2091/data.txt&quot;)
with open(file_path) as f:
    &amp;lt;do stuff&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 작동할 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈은 실행 중인 운영 체제에 대한 경로를 포맷할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 python은 올바른 권한만 있으면 상대 경로를 잘 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-0&quot;&gt;편집&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;kindall이 코멘트에서 언급했듯이, python은 unix-style 경로와 windows-style 경로 사이에서 변환할 수 있으므로 더 간단한 코드도 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;with open(&quot;2091/data/txt&quot;) as f:
    &amp;lt;do stuff&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇긴 하지만, &lt;a href=&quot;http://docs.python.org/library/os.path.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;30-1&quot;&gt;모듈&lt;/a&gt;은 여전히 몇 가지 유용한 기능을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 시스템에서 Python 3을 실행하는 파일을 코드가 찾을 수 없는 이유를 찾기 위해 많은 시간을 소비합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 전에 추가했습니다. 모든 것이 잘 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os

script_dir = os.path.dirname(__file__)
file_path = os.path.join(script_dir, './output03.txt')
print(file_path)
fptr = open(file_path, 'w')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from pathlib import Path

data_folder = Path(&quot;/relative/path&quot;)
file_to_open = data_folder / &quot;file.pdf&quot;

f = open(file_to_open)

print(f.read())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3.4는 pathlib라고 불리는 파일과 경로를 처리하기 위한 새로운 표준 라이브러리를 도입했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나에게는 그게 효과가 있어요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os
script_path = os.path.abspath(__file__) 
path_list = script_path.split(os.sep)
script_directory = path_list[0:len(path_list)-1]
rel_path = &quot;main/2091/data.txt&quot;
path = &quot;/&quot;.join(script_directory) + &quot;/&quot; + rel_path
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리 가져오기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__file__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 스크립트의 경로에 도달하는 방법:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;script_path = os.path.abspath(__file__)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트 경로를 여러 항목으로 구분합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;path_list = script_path.split(os.sep)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록의 마지막 항목(실제 스크립트 파일)을 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;script_directory = path_list[0:len(path_list)-1]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상대 파일 경로 추가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rel_path = &quot;main/2091/data.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 항목을 결합하고 상대 경로의 파일을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;path = &quot;/&quot;.join(script_directory) + &quot;/&quot; + rel_path
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 다음과 같은 파일로 원하는 모든 작업을 수행하도록 설정되었습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;file = open(path)
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import os
def file_path(relative_path):
    dir = os.path.dirname(os.path.abspath(__file__))
    split_path = relative_path.split(&quot;/&quot;)
    new_path = os.path.join(dir, *split_path)
    return new_path

with open(file_path(&quot;2091/data.txt&quot;), &quot;w&quot;) as f:
    f.write(&quot;Powerful you have become.&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일이 부모 폴더에 있는 경우(예: 팔로워).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; txt, 당은간사수용있다니습할단히신▁t를 사용하면 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open('../follower.txt', 'r').read()&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 폴더의 경로를 가져온 다음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;os.join&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 관련 파일들은 끝까지.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;# get parent folder with `os.path`
import os.path

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

# now use BASE_DIR to get a file relative to the current script
os.path.join(BASE_DIR, &quot;config.yaml&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;  것.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pathlib&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;# get parent folder with `pathlib`'s Path
from pathlib import Path

BASE_DIR = Path(__file__).absolute().parent

# now use BASE_DIR to get a file relative to the current script
BASE_DIR / &quot;config.yaml&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python은 사용자가 제공한 파일 이름을 운영 체제에 전달하기만 하면 파일이 열립니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 중인 가 운영 다같상은경지와 같은 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main/2091/data.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 잘 될 거예요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 질문에 대답하는 가장 쉬운 방법은 시도해보고 무슨 일이 일어나는지 보는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 어디에서나 효과가 있는지 확실하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 우분투에서 ipython을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 폴더의 하위 디렉토리에 있는 파일을 읽으려면 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/current-folder/sub-directory/data.csv
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트가 현재 폴더에 있습니다. 다음을 수행하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import pandas as pd
path = './sub-directory/data.csv'
pd.read_csv(path)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3.4(PEP &lt;a href=&quot;https://www.python.org/dev/peps/pep-0428/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;56-1&quot;&gt;428&lt;/a&gt;)에서는 객체 지향 방식으로 파일을 작업할 수 있도록 다음과 같은 기능이 도입되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from pathlib import Path

working_directory = Path(os.getcwd())
path = working_directory / &quot;2091&quot; / &quot;sample.txt&quot;
with path.open('r+') as fp:
    # do magic
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 이 키워드를 사용하면 처리되지 않은 문제(예: 처리되지 않은 문제)가 발생하더라도 리소스가 올바르게 닫힙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Exception&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서명 또는 유사)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 초보자였을 때 저는 이 설명들이 약간 위협적이라는 것을 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음처럼 나는 노력할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;f= open('C:\Users\chidu\Desktop\Skipper New\Special_Note.txt','w+')
print(f) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이것은 문제를 일으킬 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;syntax error&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 자주 헷갈리곤 했어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 구글에서 서핑을 좀 한 후에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생한 이유를 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;61-1&quot;&gt;초보자를 위한 글입니다.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유니코드에서 경로를 읽기 위해서는 단순히 a를 추가하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 경로를 때 작시로파시▁when▁starting&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;f= open('C:\\Users\chidu\Desktop\Skipper New\Special_Note.txt','w+')
print(f)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이제 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉터리를 시작하기 전에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7165749/&lt;a href=&quot;https://stackoverflow.com/questions/7165749/open-file-in-a-relative-location-in-python&quot; target=&quot;_blank&quot; papago-id=&quot;66-1&quot;&gt;open-file-in-a-relative-location-in-python&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/515</guid>
      <comments>https://showcode.tistory.com/515#entry515comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:46:48 +0900</pubDate>
    </item>
    <item>
      <title>TypeScript npm 모듈에서 유형을 내보내는 방법</title>
      <link>https://showcode.tistory.com/514</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeScript npm 모듈에서 유형을 내보내는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeScript에서 사용자가 내 모듈의 &quot;내부&quot; 유형을 사용하여 내 모듈을 사용할 때 자신의 변수를 올바르게 입력하도록 합니다. 이를 수행하려면 index.ts 파일에서 문자 그대로 모든 것을 내보내면 됩니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// index.ts

export * from './file1' // uses types/interfaces defined in file1types
export * from './file2' // uses types/interfaces defined in file2types
export * from './types/file1types'
export * from './types/file2types'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.d.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일이 이를 달성하는 데 도움이 됩니까? 아니면 비TS 프로젝트에만 해당됩니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;한다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 선택권&lt;/font&gt;&lt;/font&gt;&lt;code&gt;declaration: true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a를 생성하여 이를 달성하는 데 도움이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.d.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 TS 파일에 대해?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 index.ts 파일에서 모든 항목을 내보내는 대신 사용할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 만약에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;declaration: true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 달성하는 데 도움이 됩니다. 사용자는 생성된 모든 것을 어떻게 사용합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.d.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내의 파일&lt;/font&gt;&lt;/font&gt;&lt;code&gt;build&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴더?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TS 프로젝트에서 일반적으로 유형을 수출하는 방법에 대해 설명해 주시면 대단히 감사하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 부탁드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나와 같고, 그리고 확실히 한 사람들을 위해.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;declaration: true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신의 빌드 프로세스가 정확하게 그에 상응하는 것을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.d.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 가리키는 적절한 디렉토리에 대한 파일&lt;/font&gt;&lt;/font&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일, 그리고 여전히 외부 프로젝트에서 테스트할 때 모듈의 내부 유형에 액세스할 수 없습니다. VSCode에서 TS 서버를 다시 시작해 보십시오(VSCode를 사용한다고 가정).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KzImZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KzImZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Typescript가 정상적으로 작동하고 IDE에 의해 방해를 받고 있다는 것을 깨닫기까지 많은 시간이 낭비되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선언 파일 없이 TypeScript로 패키지를 개발하고 컴파일하여 다른 사용자에게 JavaScript 코드로 노출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 패키지를 포함하면 TypeScript 개발자가 패키지에서 정의한 모든 유형을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리를 사용하는 동안 필요한 인수 유형, 함수 반환 유형 및 충돌 시 IDE/Intelligence의 경고와 같은 더 많은 유형 정보를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;declaration: true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서류철에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeScript 컴파일러가 선언 파일(.d.ts)을 출력하도록 지시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;종종 단일 파일(예: index.d.ts)로 번들된 다음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;types&quot;: path/to/index.d.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리의 필드가 추가되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 패키지를 가져올 때 형식을 찾을 위치를 TypeScript에 알려주는 파일입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/60712323/&lt;a href=&quot;https://stackoverflow.com/questions/60712323/how-to-export-types-in-a-typescript-npm-module&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;how-to-export-types-in-a-typescript-npm-module&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>TypeScript</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/514</guid>
      <comments>https://showcode.tistory.com/514#entry514comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:46:39 +0900</pubDate>
    </item>
    <item>
      <title>문자열 Python에서 a: 앞에 모든 것을 가져오려면 어떻게 해야 합니까?</title>
      <link>https://showcode.tistory.com/513</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 Python에서 a: 앞에 모든 것을 가져오려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a: 앞에 있는 문자열의 모든 문자를 가져올 방법을 찾고 있습니다. 하지만 어디서부터 시작해야 할지 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정규식을 사용할까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇다면, 어떻게?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string = &quot;Username: How are you today?&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 제가 무엇을 할 수 있는지 예를 보여주실 수 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 요소를 유지할 수 있도록 목록을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s1.split(':')
['Username', ' How are you today?']
&amp;gt;&amp;gt;&amp;gt; s1.split(':')[0]
'Username'
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;index&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; string = &quot;Username: How are you today?&quot;
&amp;gt;&amp;gt;&amp;gt; string[:string.index(&quot;:&quot;)]
'Username'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스는 다음 위치를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;줄로 묶은 다음, 당신은 그것을 자를 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정규식을 사용하려는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import re
&amp;gt;&amp;gt;&amp;gt; re.match(&quot;(.*?):&quot;,string).group()
'Username'                       
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;match&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열의 시작 부분부터 일치합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itertools.takewhile&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import itertools
&amp;gt;&amp;gt;&amp;gt; &quot;&quot;.join(itertools.takewhile(lambda x: x!=&quot;:&quot;, string))
'Username'
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요없습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;regex&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 때문에&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s = &quot;Username: How are you today?&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 문자열을 분할하는 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;':'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성격&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s.split(':')
['Username', ' How are you today?']
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 요소를 잘라냅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[0]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현의 첫 부분을 따다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; s.split(':')[0]
'Username'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Python 3.7.0(IPython)에서 이러한 다양한 기술을 벤치마킹했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TLDR&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;fastest(분할 기호일 때)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;known): 정규식 이전입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 빠른(속도):&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;s.partition(c)[0]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안전한(즉, 언제)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;없을 수도 있음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;): 파티션, 분할.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안전하지 않음: 인덱스, 정규식.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3 papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;import string, random, re

SYMBOLS = string.ascii_uppercase + string.digits
SIZE = 100

def create_test_set(string_length):
    for _ in range(SIZE):
        random_string = ''.join(random.choices(SYMBOLS, k=string_length))
        yield (random.choice(random_string), random_string)

for string_length in (2**4, 2**8, 2**16, 2**32):
    print(&quot;\nString length:&quot;, string_length)
    print(&quot;  regex (compiled):&quot;, end=&quot; &quot;)
    test_set_for_regex = ((re.compile(&quot;(.*?)&quot; + c).match, s) for (c, s) in test_set)
    %timeit [re_match(s).group() for (re_match, s) in test_set_for_regex]
    test_set = list(create_test_set(16))
    print(&quot;  partition:       &quot;, end=&quot; &quot;)
    %timeit [s.partition(c)[0] for (c, s) in test_set]
    print(&quot;  index:           &quot;, end=&quot; &quot;)
    %timeit [s[:s.index(c)] for (c, s) in test_set]
    print(&quot;  split (limited): &quot;, end=&quot; &quot;)
    %timeit [s.split(c, 1)[0] for (c, s) in test_set]
    print(&quot;  split:           &quot;, end=&quot; &quot;)
    %timeit [s.split(c)[0] for (c, s) in test_set]
    print(&quot;  regex:           &quot;, end=&quot; &quot;)
    %timeit [re.match(&quot;(.*?)&quot; + c, s).group() for (c, s) in test_set]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과.&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;String length: 16
  regex (compiled): 156 ns ± 4.41 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
  partition:        19.3 µs ± 430 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
  index:            26.1 µs ± 341 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split (limited):  26.8 µs ± 1.26 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split:            26.3 µs ± 835 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  regex:            128 µs ± 4.02 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

String length: 256
  regex (compiled): 167 ns ± 2.7 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
  partition:        20.9 µs ± 694 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  index:            28.6 µs ± 2.73 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split (limited):  27.4 µs ± 979 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split:            31.5 µs ± 4.86 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  regex:            148 µs ± 7.05 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

String length: 65536
  regex (compiled): 173 ns ± 3.95 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
  partition:        20.9 µs ± 613 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
  index:            27.7 µs ± 515 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split (limited):  27.2 µs ± 796 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split:            26.5 µs ± 377 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  regex:            128 µs ± 1.5 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

String length: 4294967296
  regex (compiled): 165 ns ± 1.2 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
  partition:        19.9 µs ± 144 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
  index:            27.7 µs ± 571 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split (limited):  26.1 µs ± 472 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  split:            28.1 µs ± 1.69 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  regex:            137 µs ± 6.53 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구분 기호가 없거나 더 많은 구분 기호가 없는 상황에서 더 나은 예측 가능한 결과를 얻을 수 있기 때문에 이 목적을 위해&lt;a href=&quot;https://docs.python.org/3/library/stdtypes.html?highlight=partition#str.partition&quot; papago-id=&quot;31-0&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;partition(&quot;분할보다 더 나은&quot;)을 &lt;a href=&quot;https://docs.python.org/3/library/stdtypes.html?highlight=partition#str.partition&quot; papago-id=&quot;31-0&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RegEx를 사용하여 이 문제를 해결하려면 부정적인 미리 보기/부정적인 미리 보기 접근법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 아래의 Python용 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import re
string = &quot;Username: How are you today?&quot;
regex='(\S*)[:]'

data=re.findall(regex, string)
print(data)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27387415/&lt;a href=&quot;https://stackoverflow.com/questions/27387415/how-would-i-get-everything-before-a-in-a-string-python&quot; target=&quot;_blank&quot; papago-id=&quot;34-1&quot;&gt;how-would-i-get-everything-before-a-in-a-string-python&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/513</guid>
      <comments>https://showcode.tistory.com/513#entry513comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:46:32 +0900</pubDate>
    </item>
    <item>
      <title>두 개의 열이 있는 LISTAGG 함수</title>
      <link>https://showcode.tistory.com/512</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 열이 있는 LISTAGG 함수&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 테이블이 하나 있습니다(리포트)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--------------------------------------------------
|  user_id |  Department | Position  | Record_id |
--------------------------------------------------
|  1       |  Science    | Professor |  1001     |
|  1       |  Maths      |           |  1002     |
|  1       |  History    | Teacher   |  1003     |
|  2       |  Science    | Professor |  1004     |
|  2       |  Chemistry  | Assistant |  1005     |
--------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음과 같은 결과를 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   ---------------------------------------------------------
   | user_id  |  Department+Position                       |
   ---------------------------------------------------------
   |  1       | Science,Professor;Maths, ; History,Teacher |
   |  2       | Science, Professor; Chemistry, Assistant   |
   ---------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 결과 표에서 볼 수 있듯이 빈 공간을 '로 보존해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 LISTAGG 함수를 사용하는 방법을 알고 있지만 한 열에 대해서만 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 동시에 두 개의 열에 대해 어떻게 해야 하는지 정확히 알 수가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT user_id, LISTAGG(department, ';') WITHIN GROUP (ORDER BY record_id)
FROM report
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 부탁드립니다 :-)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해서는 집계 내에서 연결을 현명하게 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select user_id
     , listagg(department || ',' || coalesce(position, ' '), '; ')
        within group ( order by record_id )
  from report
 group by user_id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 다음의 농도를 집계합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;department&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉼표와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;position&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및 대체&lt;/font&gt;&lt;/font&gt;&lt;code&gt;position&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NULL인 경우 공백이 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13876802/&lt;a href=&quot;https://stackoverflow.com/questions/13876802/listagg-function-with-two-columns&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;listagg-function-with-two-columns&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/512</guid>
      <comments>https://showcode.tistory.com/512#entry512comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:46:25 +0900</pubDate>
    </item>
    <item>
      <title>Mongoose는 array.length가 0보다 큰 모든 문서를 찾고 데이터를 정렬합니다.</title>
      <link>https://showcode.tistory.com/511</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mongoose는 array.length가 0보다 큰 모든 문서를 찾고 데이터를 정렬합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 MongoDB에서 CRUD 작업을 수행하기 위해 mongoose를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제 스키마입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var EmployeeSchema = new Schema({
      name: String,
      description: {
        type: String,
        default: 'No description'
      },
      departments: []

    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 직원은 여러 부서에 속할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부서 배열은 [1,2,3]과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 departments.length = 3. 직원이 부서에 속하지 않는 경우 departments.length는 0과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EmployeeSchema.departments.length &amp;gt; 0 및 쿼리가 10개 이상의 레코드를 반환하는 경우 최대 부서 수가 없는 직원만 찾으면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mongoose.find()를 사용하여 원하는 결과를 얻을 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모형의 호출을 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Employee&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Employee.find({ &quot;departments.0&quot;: { &quot;$exists&quot;: true } },function(err,docs) {

})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청에 따라&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열의 인덱스입니다. 즉, 배열에 무언가가 있다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 숫자에도 동일하게 적용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Employee.find({ &quot;departments.9&quot;: { &quot;$exists&quot;: true } },function(err,docs) {

})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 일치시키려면 배열에 최소 10개의 항목이 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정말이지 배열 길이를 기록하고 무언가가 추가될 때마다 업데이트해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Employee.find({ &quot;departmentsLength&quot;: { &quot;$gt&quot;: 0 } },function(err,docs) {

})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장하는 &quot;departmentsLength&quot; 속성.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 속성은 인덱싱할 수 있으므로 훨씬 더 효율적입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 현재로서는 선택한 답변이 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-1&quot;&gt;$&lt;/strong&gt;&lt;a href=&quot;https://docs.mongodb.com/manual/reference/operator/query/size/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-3&quot;&gt;size&lt;/a&gt; 연산자가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;collection.find({ field: { $size: 1 } });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;길이가 1인 배열을 찾습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.mongodb.com/manual/reference/operator/query/where/index.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-1&quot;&gt;다음&lt;/a&gt;과 같이 $where를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;await EmployeeSchema.find( {$where:'this.departments.length&amp;gt;0'} )
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이 길이가 1보다 큰 경우 아래와 같이 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;db.collection.find({ &quot;arrayField.1&quot; : { $exists: true }})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 쿼리는 배열 필드에 첫 번째 인덱스 값이 있는지 확인합니다. 즉, 배열에 항목이 두 개 이상 있음을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 배열 인덱스는 0부터 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31677061/&lt;a href=&quot;https://stackoverflow.com/questions/31677061/mongoose-find-all-documents-where-array-length-is-greater-than-0-sort-the-data&quot; target=&quot;_blank&quot; papago-id=&quot;19-1&quot;&gt;mongoose-find-all-documents-where-array-length-is-greater-than-0-sort-the-data&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MongoDB</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/511</guid>
      <comments>https://showcode.tistory.com/511#entry511comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:46:18 +0900</pubDate>
    </item>
    <item>
      <title>virtualenv 폴더를 중단하지 않고 이름 바꾸기</title>
      <link>https://showcode.tistory.com/510</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenv 폴더를 중단하지 않고 이름 바꾸기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴더를 만들고 폴더에서 가상 환경 인스턴스를 초기화했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ mkdir myproject
$ cd myproject
$ virtualenv env
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 행할때실을 할 때.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(env)$ pip freeze&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치된 패키지가 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이제이변다니합경을름다니합▁now변▁rename로 이름을 바꾸고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myproject/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;project/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ mv myproject/ project/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 지금 내가 달릴 때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ . env/bin/activate
(env)$ pip freeze
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이프가 설치되어 있지 않다고 나옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경을 파괴하지 않고 프로젝트 폴더의 이름을 변경하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상대 경로를 사용하도록 설치를 조정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;virtualenv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는 이 되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--relocatable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://virtualenv.pypa.io/en/latest/userguide.html#making-environments-relocatable&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;문서&lt;/a&gt;에서:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 환경은 특정 경로에 연결됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 환경을 이동하거나 다른 시스템에 복사할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령을 사용하여 환경을 수정하여 재배치할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenv -- 재배치 가능한 ENV&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-0&quot;&gt;참고:&lt;/strong&gt; ENV는 가상 환경의 이름이며 이 이름을 ENV 디렉터리 외부에서 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 setuptools 또는 distribute에 의해 생성된 파일 중 일부가 상대 경로를 사용하게 되며, Python 인터프리터의 위치를 사용하여 환경을 선택하는 대신 activate_this.py를 사용하도록 모든 스크립트가 변경됩니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 환경에 패키지를 설치한 후 이를 실행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경을 재배치할 수 있도록 만든 다음 새 패키지를 설치하는 경우 virtualenv --replocatable을 다시 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &quot;&lt;em papago-id=&quot;17-1&quot;&gt;방법을 아는&lt;/em&gt; 것&lt;em papago-id=&quot;17-1&quot;&gt;&quot;&lt;/em&gt;보다 &quot;&lt;em papago-id=&quot;17-1&quot;&gt;이유를 아는&lt;/em&gt; 것&quot;이 더 &lt;em papago-id=&quot;17-1&quot;&gt;중요&lt;/em&gt;하다고 믿습니다&lt;em papago-id=&quot;17-1&quot;&gt;.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하기 위한 또 다른 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;. env/bin/activate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;과 같은합니다(「 」 「 」 「 」 「 」를 사용합니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/tmp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;VIRTUAL_ENV=&quot;/tmp/myproject/env&quot;
export VIRTUAL_ENV
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 방금 이름을 변경했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myproject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;project&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령을 실행하지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그기때문라고 쓰여 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pip is not installed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;  및  환경에서 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스가 정확하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수동으로 이 문제를 해결하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Vim과 같은 당신이 좋아하는 에디터로, 수정하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/tmp/project/env/bin/activate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;VIRTUAL_ENV='/tmp/myproject/env'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;=&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VIRTUAL_ENV='/tmp/project/env'&lt;/code&gt; &lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 정&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/tmp/project/env/bin/pip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 1줄 1:줄 1:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;#!/tmp/myproject/env/bin/python&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;=&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#!/tmp/project/env/bin/python&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;env&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 당신의 다시, 그면당당신의은신러를  될 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 돌아왔습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;37-0&quot;&gt;참고:&lt;/strong&gt; @jb.가 지적한 바와 같이 이 솔루션은 쉽게(다시) 생성되는 경우에만 적용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;virtualenv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 데 몇  환경은 되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 환경은 쉽게 만들고 전환할 수 있기 때문에 단일 구성에 갇히는 것을 방지할 수 있기 때문에 매우 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트 요구 사항을 알고 있거나 프로젝트 요구 사항을 얻을 수 있는 경우 새&lt;strong papago-id=&quot;39-1&quot;&gt; 항목 만들기&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requirements.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;(env)$ pip freeze &amp;gt; requirements.txt&lt;/code&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이 경우수없을 만들 수 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requirements.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 일파, 크체를 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;env/lib/pythonX.X/site-packages&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;▁removing▁before▁the에▁original전을 제거하기 전에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;env&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 항목삭을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(env)&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;deactivate &amp;amp;&amp;amp; rm -rf env&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 새기 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;virtualenv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 사항은 다음과 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;virtualenv env &amp;amp;&amp;amp; . env/bin/activate &amp;amp;&amp;amp; pip install -r requirements.txt&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 virtualenvrapper를 사용하여 모든 가상 환경을 중앙 집중화된 위치에 보관하므로 작업을 조금 더 쉽게 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(old-venv) pip freeze &amp;gt; temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 도움을 주기 위해 항상 virtualenwrapperfrapper를 설치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;셸 프롬프트에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install virtualenvwrapper
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenvrapper 문서에는 cpvirtualenv 이렇게 문서화되어 &lt;a href=&quot;https://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=cpvirtualenv#cpvirtualenv&quot; rel=&quot;noreferrer&quot; papago-id=&quot;51-1&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경을 벗어나 셸 프롬프트로 돌아가십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 이름을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cpvirtualenv oldenv newenv
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 필요한 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rmvirtualenv oldenv
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 환경으로 이동하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;workon newenv
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 단계를 수행하여 문제를 해결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉터리 이름 바꾸기&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ virtualenv ..\path\renamed_directory&lt;/code&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenv는 패키지를 제자리에 둔 상태에서 디렉토리 연결을 수정합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$ scripts/activate&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$ pip freeze&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 설치되어  확인하기 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenv 디렉토리의 스크립트 파일에 정적 경로 종속성이 있는 경우 이러한 종속성을 수동으로 변경해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 번 문제 없이 작동했던 또 다른 방법은 &lt;a href=&quot;https://pypi.python.org/pypi/virtualenv-clone&quot; rel=&quot;noreferrer&quot; papago-id=&quot;60-1&quot;&gt;virtualenv-clone&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트 폴더 내에서 실행:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd bin
sed -i 's/old_dir_name/new_dir_name/g' *
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비활성화 및 활성화하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;venv가 내장된 Python 3.3+의 경우&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 3 버전은 3.3이다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;virtualenv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 에지는 파이썬내있습니다로 기본 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;venv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 사소한 차이가 있는데, 그 중 하나는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--relocatable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이 제거되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 일반적으로 가상 환경을 이동하기보다는 가상 환경을 다시 생성하는 것이 가장 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/58772116/6501141&quot; papago-id=&quot;67-1&quot;&gt;이&lt;/a&gt; 방법에 대한 자세한 내용은 &lt;a href=&quot;https://stackoverflow.com/a/58772116/6501141&quot; papago-id=&quot;67-1&quot;&gt;다음 답변&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 환경을 재생성하는 것이 아니라 이동하려는 목적이 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 환경은 종속된 특정 패키지 또는 모듈의 서로 다른 특정 버전을 가질 수 있도록 venv를 사용하여 모듈/패키지의 종속성을 관리하고 이러한 패키지 또는 모듈을 로컬로 설치할 수 있도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 패키지는 venv를 처음부터 다시 만들 수 있는 방법을 제공해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 이 작업은 다음을 사용하여 수행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requirements.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및  파일및도a은도 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requirements-dev.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 및 패키지 자체의 설정/설치에서 venv를 다시 만드는 스크립트도 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 될 수 있는 부분 중 하나는 실행 파일로 특정 버전의 Python이 필요할 수 있다는 것입니다. 이 파일은 아직 존재하지 않더라도 자동화하기가 어렵습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 기존 가상 환경을 재생성할 때는 새 가상 환경을 생성할 때 기존 venv에서 python을 실행하기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후에는 일반적으로 pip을 사용하여 모든 종속성을 재설치하는 것이 문제입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requirements.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows의 Git Bash에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;python -m venv mynewvenv
source myvenv/Scripts/activate
pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬로 개발된 다른 패키지의 로컬 종속성이 여러 개인 경우에는 로컬 절대 경로 등을 업데이트해야 할 수 있습니다. 적절한 Python 패키지로 설정하면 git repo에서 설치할 수 있으므로 정적 URL을 소스로 하여 이 문제를 방지할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;virtualenv --relocatable ENV&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바람직한 솔루션이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 사람들이 장기적인 부작용 없이 가상 &lt;em papago-id=&quot;48-1&quot;&gt;환경&lt;/em&gt;의 이름을 바꿀 수 있는 기능을 원한다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 그것을 할 수 있는 간단한 도구를 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/brbsix/virtualenv-mv&quot; rel=&quot;nofollow&quot; title=&quot;가상 env-mv&quot; papago-id=&quot;49-1&quot; papago-attr-id=&quot;1&quot;&gt;virtual&lt;/a&gt; env-mv에 대한 프로젝트 페이지는 이를 좀 더 자세히 설명하지만 기본적으로 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;virtualenv-mv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의단한구사것처럼는용하의 간단한 처럼.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(옵션 없음).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;virtualenv-mv myproject project
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 방금 이것을 해킹했다는 것을 알아두시기 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비정상적인 상황(예: 연결된 가상 환경)에서 고장이 발생할 수 있으므로 주의하십시오(손실할 수 없는 항목은 백업). 문제가 발생하면 알려 주십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가  더 : 하세요: 씬훨더쉬해은있요: 그복하세사다냥니효나었습.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;site-packages&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 가상 환경의 폴더를 새 가상 환경으로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio Code(vscode)를 사용하여 프로젝트 루트의 ./env 폴더를 열고 업데이트된 프로젝트 이름으로 전환하기 위해 대량 찾기/바꾸기를 수행했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 확인&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;which python&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 콘덴서를 사용하고 있다면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6628476/&lt;a href=&quot;https://stackoverflow.com/questions/6628476/renaming-a-virtualenv-folder-without-breaking-it&quot; target=&quot;_blank&quot; papago-id=&quot;87-1&quot;&gt;renaming-a-virtualenv-folder-without-breaking-it&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/510</guid>
      <comments>https://showcode.tistory.com/510#entry510comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:02:45 +0900</pubDate>
    </item>
    <item>
      <title>소방서:문서 배열의 항목별 쿼리</title>
      <link>https://showcode.tistory.com/509</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소방서:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서 배열의 항목별 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;&lt;strong papago-id=&quot;1-1&quot;&gt;사진&quot;&lt;/strong&gt;과 &lt;strong papago-id=&quot;1-3&quot;&gt;&quot;사용자&quot;&lt;/strong&gt;&lt;strong papago-id=&quot;1-1&quot;&gt; &lt;/strong&gt;두 개의 컬렉션이 있으며 &quot;&lt;strong papago-id=&quot;1-5&quot;&gt;사용자&quot;&lt;/strong&gt;의 각 문서에는 &lt;strong papago-id=&quot;1-7&quot;&gt;배열이 있는 하나 이상의 사진 ID가 있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;photos &amp;gt; 5528c46b &amp;gt; name: &quot;Photo1&quot;
         a1e820eb &amp;gt; name: &quot;Photo2&quot;
         32d410a7 &amp;gt; name: &quot;Photo3&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;users &amp;gt; acd02b1d &amp;gt; name: &quot;John&quot;, photos: [&quot;5528c46b&quot;]
        67f60ad3 &amp;gt; name: &quot;Tom&quot;, photos: [&quot;5528c46b&quot;, &quot;32d410a7&quot;]
        7332ec75 &amp;gt; name: &quot;Sara&quot;, photos: [&quot;a1e820eb&quot;]
        9f4edcc1 &amp;gt; name: &quot;Anna&quot;, photos: [&quot;32d410a7&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-1&quot;&gt;하나 이상의 특정 사진&lt;/strong&gt; ID를 &lt;strong papago-id=&quot;2-1&quot;&gt;가진 모든 사용자를 불러오고&lt;/strong&gt; 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Array Contains 쿼리를 사용할 수 있도록 설정하지 않았기 때문에 Henry의 &lt;a href=&quot;https://stackoverflow.com/questions/46849222/firestore-query-by-item-in-array-of-document/51511322#51511322&quot; papago-id=&quot;4-1&quot;&gt;답변을 참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아쉽게도 아직은 아닙니다. 로드맵에 나와 있지만요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 동안에는 다음과 같은 형태의 지도를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;photos: {
    id1: true
    id2: true
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 다음을 기준으로 필터링하여 ID가 1인 모든 사용자를 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;photos.id1 == true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://firebase.google.com/docs/firestore/solutions/arrays#top_of_page&quot; papago-id=&quot;9-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;이러한&lt;/a&gt; 집합을 쿼리하는 방법에 대한 자세한 내용은 &lt;a href=&quot;https://firebase.google.com/docs/firestore/solutions/arrays#top_of_page&quot; papago-id=&quot;9-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firebase&lt;/a&gt; 설명서를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 필드에 특정 요소가 포함된 문서를 찾기 위해 .where()와 함께 사용할 'array-contains' 쿼리 연산자가 추가되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://firebase.google.com/support/&lt;a href=&quot;https://firebase.google.com/support/release-notes/js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-0&quot;&gt;release-notes&lt;/a&gt;/js 5.3.0&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-0&quot;&gt;업데이트&lt;/strong&gt;: 에서도 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@google-cloud/firestore&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: &lt;a href=&quot;https://github.com/googleapis/nodejs-firestore/releases/tag/v0.16.0&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;https://github.com/googleapis/nodejs-firestore/releases/tag/v0.16.0&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 2&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-0&quot;&gt;업데이트&lt;/strong&gt; 3은 이제 관리 노드.js SDK v6.0.0 https://github.com/firebase/&lt;a href=&quot;https://github.com/firebase/firebase-admin-node/releases&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-2&quot;&gt;firebase-admin-node&lt;/a&gt;/releases 에서 사용할 수 &lt;strong papago-id=&quot;16-0&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 각 키에 대한 인덱스를 만들어야 하는 것에 대해 혼동하는 것처럼 보이기 때문에 답변에 대한 약간의 확장입니다. Firestore는 이미 간단한 쿼리를 위해 데이터를 인덱싱하므로 다음과 같은 간단한 쿼리를 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;documentReference.where('param','==','value').onSnapshot(...)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 복합 쿼리는 해당 매개 변수에 대한 데이터를 인덱싱하지 않는 한 수행할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음과 같은 작업을 수행하려면 인덱스가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; documentReference.where('param','==','value').where(..otherparams...).onSnapshot(...)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신이 ID를 위해 사진이 필요하다면 당신은 그것들을 저장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;usersCollection :                        (a collection)
    uidA:                                (a document)
         photoField:                     (a field value that is a map or object)
            fieldID1 : true              (a property of the photoField)
            fieldID2 : true              (a property of the photoField)
            etc ...  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 필드가 있는 사용자에게 간단히 질문할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 쿼리와 같이 인덱스를 구성할 필요 없이 photoField의 ID1.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;firestore.doc('usersCollection/uidA').where('photoField.fieldID1','==',true).onSnapshot(...)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이어스토어는 2019년 11월 현재 'in' 쿼리를 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://firebase.googleblog.com/2019/11/cloud-firestore-now-supports-in-queries.html&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;발표&lt;/a&gt; 기사에 &lt;a href=&quot;https://firebase.googleblog.com/2019/11/cloud-firestore-now-supports-in-queries.html&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;따르면&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;in 쿼리를 사용하면 단일 쿼리에서 여러 값(최대 10개)에 대해 특정 필드를 쿼리할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색할 모든 값을 포함하는 목록을 전달하면 Cloud Firestore는 필드가 해당 값 중 하나인 모든 문서와 일치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;h2 papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firebase Version 9(2021년 12월 업데이트)&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;24-5&quot;&gt;&quot;while()&quot;&lt;/strong&gt;에서 &lt;strong papago-id=&quot;24-3&quot;&gt;단일 사진 문서&lt;/strong&gt; ID와 &lt;strong papago-id=&quot;24-3&quot;&gt;함께&lt;/strong&gt; &quot;&lt;strong papago-id=&quot;24-1&quot;&gt;array-contains&quot;&lt;/strong&gt;를 사용하여 사진 문서 ID를 &lt;strong papago-id=&quot;24-7&quot;&gt;가진 모든 사용자를 가져올&lt;/strong&gt; 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;import {
  query,
  collection,
  where,
  getDocs
} from &quot;firebase/firestore&quot;;

// Here
const q = query(
  collection(db, &quot;users&quot;),
  where(&quot;photos&quot;, &quot;array-contains&quot;, &quot;5528c46b&quot;)
);
// Here

const usersDocsSnap = await getDocs(q);

usersDocsSnap .forEach((doc) =&amp;gt; {
  console.log(doc.data()); // &quot;John's doc&quot;, &quot;Tom's doc&quot;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;25-5&quot;&gt;&quot;&lt;/strong&gt;&lt;strong papago-id=&quot;25-1&quot;&gt;array-contains-any&quot;&lt;/strong&gt;를 &quot;&lt;strong papago-id=&quot;25-5&quot;&gt;while()&quot;&lt;/strong&gt;에 &lt;strong papago-id=&quot;25-3&quot;&gt;배열이 있는 하나 이상의 사진 문서 ID와 함께&lt;/strong&gt; 사용하여 더 많은 &lt;strong papago-id=&quot;25-7&quot;&gt;해당&lt;/strong&gt; 사용자를 &lt;strong papago-id=&quot;25-7&quot;&gt;가져올&lt;/strong&gt; 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;import {
  query,
  collection,
  where,
  getDocs
} from &quot;firebase/firestore&quot;;

// Here
const q = query(
  collection(db, &quot;users&quot;),
  where(&quot;photos&quot;, &quot;array-contains-any&quot;, [&quot;5528c46b&quot;, &quot;a1e820eb&quot;])
);
// Here

const usersDocsSnap = await getDocs(q);

usersDocsSnap .forEach((doc) =&amp;gt; {
  console.log(doc.data()); // &quot;John's doc&quot;, &quot;Tom's doc&quot;, &quot;Sara's doc&quot;
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/46849222/&lt;a href=&quot;https://stackoverflow.com/questions/46849222/firestore-query-by-item-in-array-of-document&quot; target=&quot;_blank&quot; papago-id=&quot;26-1&quot;&gt;firestore-query-by-item-in-array-of-document&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Firebase</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/509</guid>
      <comments>https://showcode.tistory.com/509#entry509comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:02:38 +0900</pubDate>
    </item>
    <item>
      <title>루비는 진짜 멀티스레딩이 있나요?</title>
      <link>https://showcode.tistory.com/508</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루비는 진짜 멀티스레딩이 있나요?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;a href=&quot;http://en.wikipedia.org/wiki/Green_threads&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;녹색&lt;/a&gt; 실을 &lt;a href=&quot;http://en.wikipedia.org/wiki/Green_threads&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;하는 루비의 &quot;협동&quot; 스레드에 대해 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 CPU 코어를 처리에 사용하기 위해 애플리케이션에서 실제 &quot;OS 레벨&quot; 스레드를 생성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jörg의 2011년 9월 논평으로 업데이트됨&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 여기서 두 &lt;em papago-id=&quot;3-1&quot;&gt;가지&lt;/em&gt; 매우 다른 것을 혼동하고 있는 것 같습니다: 루비 프로그래밍 언어와 루비 프로그래밍 언어의 특정 구현의 특정 스레드 모델입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 루비 프로그래밍 언어에는 약 11개의 다른 구현체가 있으며, 매우 다르고 고유한 스레드 모델이 &lt;em papago-id=&quot;3-3&quot;&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(불행히도 실제 운영 환경에서 사용할 수 있는 구현은 11개 중 2개에 불과하지만 연말에는 그 수가 4개 또는 5개까지 늘어날 것으로 &lt;strong papago-id=&quot;4-1&quot;&gt;예상&lt;/strong&gt;됩니다.) (업데이트: MRI, JRuby, YARV(Ruby 1.9 인터프리터), Rubinius 및 IronRuby.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 구현은 실제로 이름이 없기 때문에 참조하기가 상당히 어색하고 정말 짜증나고 혼란스럽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 루비 프로그래밍 언어의 기능과 특정 루비 구현 사이에 끝없는 혼란을 초래하기 때문에 이름이 없는 것보다 훨씬 더 짜증나고 혼란스러운 &quot;루비&quot;로 가장 자주 언급됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &quot;MRI&quot;(&quot;Matz's Ruby Implementation&quot;의 경우), CRuby 또는 MatzRuby라고도 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://RedMine.Ruby-Lang.Org/repositories/annotate/ruby-18/ext/thread/thread.c&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-0&quot;&gt;MRI는 인터프리터 내에서 Ruby Threads를 Green Thread로 구현&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 이러한 스레드를 병렬로 예약할 수 없으므로 한 번에 하나의 스레드만 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 임의의 수의 C 스레드(POSIX 스레드 등)가 Ruby 스레드와 병렬로 실행될 수 있으므로 자체 스레드를 생성하는 외부 C 라이브러리 또는 MRI C Extensions는 여전히 병렬로 실행될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 구현은 &lt;a href=&quot;http://WWW.AtDot.Net/yarv/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-1&quot;&gt;YARV&lt;/a&gt;(&quot;Yet Another Ruby VM&quot;의 줄임말)입니다. YARV는 &lt;a href=&quot;http://RedMine.Ruby-Lang.Org/repositories/annotate/ruby-19/thread.c&quot; papago-id=&quot;9-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ruby Thread를 POSIX&lt;/a&gt; 또는 &lt;a href=&quot;http://RedMine.Ruby-Lang.Org/repositories/annotate/ruby-19/thread.c&quot; papago-id=&quot;9-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows NT&lt;/a&gt; 스레드로 &lt;a href=&quot;http://RedMine.Ruby-Lang.Org/repositories/annotate/ruby-19/thread.c&quot; papago-id=&quot;9-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;구현&lt;/a&gt;하지만 GIL(Global Interpreter Lock)을 사용하여 한 번에 하나의 Ruby Thread만 예약할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MRI와 마찬가지로 C &lt;em papago-id=&quot;10-1&quot;&gt;스레드&lt;/em&gt;는 실제로 루비 스레드와 병렬로 실행될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미래에는, &lt;em papago-id=&quot;11-1&quot;&gt;GIL&lt;/em&gt;이 더 미세한 잠금장치로 분해되어 더 많은 코드가 실제로 병렬로 실행될 수 있게 될 수도 있습니다. 하지만 그것은 너무 멀어서 아직 &lt;em papago-id=&quot;11-3&quot;&gt;계획&lt;/em&gt;조차 되어 있지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.restlessprogrammer.com/2013/02/multi-threading-in-jruby.html&quot; papago-id=&quot;12-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;JRuby는 Ruby 스레드&lt;/a&gt;를 네이티브 &lt;a href=&quot;http://www.restlessprogrammer.com/2013/02/multi-threading-in-jruby.html&quot; papago-id=&quot;12-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;스레드&lt;/a&gt;로 구현합니다. &lt;a href=&quot;http://www.restlessprogrammer.com/2013/02/multi-threading-in-jruby.html&quot; papago-id=&quot;12-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt;서 JVM의 경우 &quot;네이티브 스레드&quot;는 분명히 &quot;JVM 스레드&quot;를 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JRuby는 그들에게 추가적인 잠금을 하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이러한 스레드가 실제로 병렬로 실행될 수 있는지 여부는 JVM에 따라 달라집니다. 일부 JVM은 JVM 스레드를 OS 스레드로 구현하고 일부는 Green 스레드로 구현합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(Sun/Oracle의 메인스트림 JVM은 JDK 1.3 이후의 OS 스레드만을 사용합니다.)&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &lt;a href=&quot;http://XRuby.GoogleCode.Com/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;13-0&quot;&gt;XRuby&lt;/a&gt;는 &lt;a href=&quot;http://Code.Google.Com/p/xruby/source/browse/trunk/src/com/xruby/runtime/builtin/RubyThread.java#21&quot; papago-id=&quot;13-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ruby 스레드를 JVM&lt;/a&gt; 스레드로 &lt;a href=&quot;http://Code.Google.Com/p/xruby/source/browse/trunk/src/com/xruby/runtime/builtin/RubyThread.java#21&quot; papago-id=&quot;13-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;구현&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-4&quot;&gt;업데이트&lt;/strong&gt;: XRuby가 종료되었습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://IronRuby.Net/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14-0&quot;&gt;IronRuby&lt;/a&gt;는 &lt;a href=&quot;http://IronRuby.RubyForge.Org/svn/trunk/src/IronRuby.Libraries/Builtins/ThreadOps.cs&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14-2&quot;&gt;Ruby Threads를 네이티브 스레드로 구현&lt;/a&gt;합니다. 여기서 CLR의 경우 &quot;네이티브 스레드&quot;는 분명히 &quot;CLR 스레드&quot;를 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IronRuby는 추가 잠금을 부과하지 않으므로 CLR에서 이를 지원하는 한 병렬로 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://RubyDotNetCompiler.GoogleCode.Com/&quot; papago-id=&quot;15-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;또한 &lt;/a&gt;Ruby.&lt;a href=&quot;http://RubyDotNetCompiler.GoogleCode.Com/&quot; papago-id=&quot;15-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;NET&lt;/a&gt;은 &lt;a href=&quot;http://Code.Google.Com/p/rubydotnetcompiler/source/browse/trunk/src/RubyRuntime/Built-in%20Classes/Thread.cs#21&quot; papago-id=&quot;15-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;CLR&lt;/a&gt; 스레드로 &lt;a href=&quot;http://Code.Google.Com/p/rubydotnetcompiler/source/browse/trunk/src/RubyRuntime/Built-in%20Classes/Thread.cs#21&quot; papago-id=&quot;15-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ruby 스레드를 구현&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;15-4&quot;&gt;업데이트:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;루비.NET이 죽었습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://GitHub.Com/EvanPhx/Rubinius/tree/master/kernel/core/thread.rb#L9&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-2&quot;&gt;Rubinius는 가상 시스템 내에 Ruby 스레드를 녹색 스레드로 구현&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 정확하게 말하면, Rubinius VM은 &quot;Task&quot;라고 하는 매우 가볍고 유연한 동시성/병렬성/비로컬 제어 흐름 구성을 내보내고, 다른 모든 동시성 구성(이 논의의 스레드는 물론 &lt;a href=&quot;https://GitHub.Com/EvanPhx/Rubinius/tree/master/kernel/core/continuation.rb#L45&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-6&quot;&gt;연속성&lt;/a&gt;, &lt;a href=&quot;https://GitHub.Com/EvanPhx/Rubinius/tree/master/lib/actor.rb#L31&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-8&quot;&gt;행위자&lt;/a&gt; 및 기타 요소)은 태스크를 사용하여 순수 루비로 구현됩니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 루비니우스는 스레드를 병렬로 예약할 수 없으며, 이는 큰 문제가 아니라고 덧붙였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Rubinius는 &lt;a href=&quot;https://GitHub.Com/EvanPhx/Rubinius/tree/master/kernel/core/vm.rb#L5&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;이미&lt;/a&gt; 하나의 Rubinius 프로세스 내에서 &lt;a href=&quot;https://GitHub.Com/EvanPhx/Rubinius/tree/master/kernel/core/vm.rb#L5&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;여러 POSIX 스레드에서 여러 VM 인스턴스를 병렬로 실행&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스레드는 실제로 Ruby에서 구현되므로 다른 Ruby 개체와 마찬가지로 직렬화되어 다른 POSIX 스레드의 다른 VM으로 전송될 수 있습니다. (이 모델은 BEAM &lt;a href=&quot;http://Erlang.Org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17-3&quot;&gt;Erlang&lt;/a&gt; VM에서 SMP 동시성에 사용하는 모델과 동일합니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 &lt;a href=&quot;https://GitHub.Com/EvanPhx/Rubinius/tree/master/lib/vmactor.rb&quot; papago-id=&quot;17-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;루비니우스&lt;/a&gt; 액터스를 &lt;a href=&quot;https://GitHub.Com/EvanPhx/Rubinius/tree/master/lib/vmactor.rb&quot; papago-id=&quot;17-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;위해 구현&lt;/a&gt;되었습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-0&quot;&gt;업데이트&lt;/strong&gt;: 이 답변에서 Rubinius에 대한 정보는 더 이상 존재하지 않는 샷건 VM에 대한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;새&quot; C++ VM에서 여러 VM(예: Erlang/B)에 예약된 녹색 스레드를 사용하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;EAM 스타일)에서는 CLR, Mono 및 거의 모든 JVM에서 사용하는 모델과 마찬가지로 기존의 단일 VM과 여러 기본 OS 스레드 모델을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;8&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://MacRuby.Org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-0&quot;&gt;MacRuby&lt;/a&gt;는 Objective-C 런타임 및 코어 파운데이션과 코코아 프레임워크 위에 YARV의 포트로 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 YARV에서 크게 벗어났지만, AFAIK는 &lt;a href=&quot;http://MacRuby.Org/trac/browser/MacRuby/trunk/thread.c?annotate=blame&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-2&quot;&gt;현재 YARV와 동일한 스레드화 모델을 공유&lt;/a&gt;하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-4&quot;&gt;업데이트:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MacRuby는 더 이상 사용되지 않는 것으로 선언되고 이후 버전의 MacOSX에서 제거될 사과 가비지 수집기에 의존합니다. MacRuby는 비활성 상태입니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Cardinal은 &lt;a href=&quot;http://ParrotCode.Org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-2&quot;&gt;앵무새 가상&lt;/a&gt; 시스템을 위한 루비 구현입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 스레드를 구현하지는 않지만 구현할 때는 &lt;a href=&quot;http://SVN.Perl.Org/viewvc/parrot/trunk/src/thread.c?view=annotate&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-4&quot;&gt;패럿 스레드&lt;/a&gt;로 구현할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트: 카디널은 매우 활동적이지 않거나 사망한 것 &lt;strong papago-id=&quot;20-6&quot;&gt;같습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://MagLev.GemStone.Com/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-0&quot;&gt;MagLev&lt;/a&gt;는 &lt;a href=&quot;http://GemStone.Com/products/smalltalk/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-2&quot;&gt;GemStone/S Smalltalk&lt;/a&gt; VM용 Ruby 구현입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;GemStone/S가 어떤 스레드 모델을 사용하는지, MagLev가 어떤 스레드 모델을 사용하는지, 스레드가 아직 구현되지 않았더라도(아마도) 아무런 정보가 없습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://HotRuby.Yukoba.Jp/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-0&quot;&gt;HotRuby&lt;/a&gt;는 &lt;em papago-id=&quot;22-2&quot;&gt;자체적&lt;/em&gt;으로 완전한 Ruby 구현이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JavaScript에서 YARV 바이트코드 VM을 구현한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HotRuby는 스레드를 지원하지 않습니다(아직 지원하지 않음). 지원할 경우 자바스크립트가 진정한 병렬화를 지원하지 않기 때문에 병렬로 실행할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 HotRuby에는 ActionScript 버전이 있으며 ActionScript는 실제로 병렬 처리를 지원할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;22-4&quot;&gt;업데이트&lt;/strong&gt;:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;핫 루비가 죽었어요&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행하게도, 이 11개의 Ruby 구현 중 실제로 프로덕션 준비가 된 것은 MRI와 JRuby 두 가지뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 진정한 병렬 스레드를 원한다면 현재 JRuby가 유일한 선택입니다. 나쁜 선택은 아닙니다. JRuby는 MRI보다 속도가 빠르고 안정적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면, &quot;클래식&quot; Ruby 솔루션은 병렬 처리를 위해 스레드 대신 프로세스를 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ruby Core Library에는 다른 Ruby 프로세스를 쉽게 분기할 수 있는 &lt;a href=&quot;http://Ruby-Doc.Org/core/classes/Process.html#M003179&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;25-3&quot;&gt;방법&lt;/a&gt;이 포함된 &lt;a href=&quot;http://Ruby-Doc.Org/core/classes/Process.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;25-1&quot;&gt;모듈&lt;/a&gt;이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Ruby Standard Library에는 &lt;a href=&quot;http://Ruby-Doc.Org/stdlib/libdoc/drb/rdoc/&quot; papago-id=&quot;25-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Distributed&lt;/a&gt; Ruby&lt;a href=&quot;http://Ruby-Doc.Org/stdlib/libdoc/drb/rdoc/&quot; papago-id=&quot;25-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;(dRuby &lt;/a&gt;/ &lt;a href=&quot;http://Ruby-Doc.Org/stdlib/libdoc/drb/rdoc/&quot; papago-id=&quot;25-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;dRb)&lt;/a&gt; 라이브러리가 포함되어 있어 Ruby 코드가 동일한 시스템뿐만 아니라 네트워크 전체에 걸쳐 여러 프로세스에 걸쳐 사소한 분산이 가능합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ruby 1.8에는 녹색 스레드만 있으며, 실제 &quot;OS 수준&quot; 스레드를 만들 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 루비 1.9에는 실제 OS 수준 스레드를 만들 수 있는 파이버라는 새로운 기능이 포함될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행하게도, 루비 1.9는 아직 베타 단계에 있으며, 몇 달 안에 안정적으로 운영될 예정입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 대안은 JRuby를 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JRuby는 스레드를 OS 수준의 광고로 구현하며, &quot;녹색 스레드&quot;가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JRuby의 최신 버전은 1.1.4이며 Ruby 1.8에 해당합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 구에따다릅니다라현다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MRI는 없고, YARV가 더 가깝습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JRUby와 MacRuby가 가지고 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;br&gt;&lt;/p&gt; 
&lt;p&gt;&lt;br&gt; &lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루비는 다음과 같은 &lt;a href=&quot;http://en.wikipedia.org/wiki/Closure_%28computer_programming%29&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;1-1&quot;&gt;폐쇄&lt;/a&gt;를 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Blocks&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lambdas&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Procs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JRuby의 폐쇄와 다중 코어를 최대한 활용하기 &lt;a href=&quot;http://blog.bitmelt.com/2013/05/concurrent-tasks-in-jruby.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;4-1&quot;&gt;위해 Java의 실행자&lt;/a&gt;는 유용합니다. MacRuby의 &lt;a href=&quot;http://seanlilmateus.github.io/blog/2012/05/31/getting-started-with-grand-central-dispatch-in-macruby-and-rubymotion/&quot; papago-id=&quot;4-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;경우&lt;/a&gt; GCD의&lt;a href=&quot;http://seanlilmateus.github.io/blog/2012/05/31/getting-started-with-grand-central-dispatch-in-macruby-and-rubymotion/&quot; papago-id=&quot;4-3&quot; rel=&quot;nofollow noreferrer&quot;&gt; 대기열을 좋아합니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 &lt;em papago-id=&quot;5-1&quot;&gt;&quot;OS&lt;/em&gt; 레벨&quot;&lt;em papago-id=&quot;5-1&quot;&gt; 스레드를 생성&lt;/em&gt;할 수 있다고 해서 병렬 처리에 여러 CPU 코어를 사용할 수 있는 것은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 예를 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://gist.github.com/user454322/8785580&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;다음&lt;/a&gt;은 Ruby 2.1.0을 사용하여 &lt;a href=&quot;https://gist.github.com/user454322/8785580&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;3개의 스레드&lt;/a&gt;를 사용하는 &lt;a href=&quot;https://gist.github.com/user454322/8785580&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;간단한 Ruby&lt;/a&gt; 프로그램의 &lt;a href=&quot;https://gist.github.com/user454322/8785580&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;출력&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(jalcazar@mac ~)$ ps -M 69877
USER     PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
jalcazar 69877 s002    0.0 S    31T   0:00.01   0:00.04 /Users/jalcazar/.rvm/rubies/ruby-2.1.0/bin/ruby threads.rb
   69877         0.0 S    31T   0:00.01   0:00.00 
   69877        33.4 S    31T   0:00.01   0:08.73 
   69877        43.1 S    31T   0:00.01   0:08.73 
   69877        22.8 R    31T   0:00.01   0:08.65 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 같이 OS  상태가 만 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;R&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 Ruby의 스레드 구현 방식에 제한이 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 JR유비와 같은 프로그램입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 개의 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;R&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 말은 그들이 평행으로 달리고 있다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(jalcazar@mac ~)$ ps -M 72286
USER     PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
jalcazar 72286 s002    0.0 S    31T   0:00.01   0:00.01 /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java -Djdk.home= -Djruby.home=/Users/jalcazar/.rvm/rubies/jruby-1.7.10 -Djruby.script=jruby -Djruby.shell=/bin/sh -Djffi.boot.library.path=/Users/jalcazar/.rvm/rubies/jruby-1.7.10/lib/jni:/Users/jalcazar/.rvm/rubies/jruby-1.7.10/lib/jni/Darwin -Xss2048k -Dsun.java.command=org.jruby.Main -cp  -Xbootclasspath/a:/Users/jalcazar/.rvm/rubies/jruby-1.7.10/lib/jruby.jar -Xmx1924M -XX:PermSize=992m -Dfile.encoding=UTF-8 org/jruby/Main threads.rb
   72286         0.0 S    31T   0:00.00   0:00.00 
   72286         0.0 S    33T   0:00.00   0:00.00 
   72286         0.0 S    31T   0:00.09   0:02.34 
   72286         7.9 S    31T   0:00.15   0:04.63 
   72286         0.0 S    31T   0:00.00   0:00.00 
   72286         0.0 S    31T   0:00.00   0:00.00 
   72286         0.0 S    31T   0:00.00   0:00.00 
   72286         0.0 S    31T   0:00.04   0:01.68 
   72286         0.0 S    31T   0:00.03   0:01.54 
   72286         0.0 S    31T   0:00.00   0:00.00 
   72286         0.0 S    31T   0:00.01   0:00.01 
   72286         0.0 S    31T   0:00.00   0:00.01 
   72286         0.0 S    31T   0:00.00   0:00.03 
   72286        74.2 R    31T   0:09.21   0:37.73 
   72286        72.4 R    31T   0:09.24   0:37.71 
   72286        74.7 R    31T   0:09.24   0:37.80 
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 맥루비와 같은 프로그램입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 3개의 스레드가 병렬로 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/MacRuby/MacRuby/wiki/Why-MacRuby%3F#2-thread-support&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-1&quot;&gt;이는 MacRuby 스레드가 POSIX 스레드&lt;/a&gt;(&lt;em papago-id=&quot;10-3&quot;&gt;실제 &quot;OS&lt;/em&gt; 레벨&quot;&lt;em papago-id=&quot;10-3&quot;&gt; 스레드&lt;/em&gt;)이며 &lt;a href=&quot;http://vimeo.com/67731482#t=19m47s&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-5&quot;&gt;GVL이 없기&lt;/a&gt; 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(jalcazar@mac ~)$ ps -M 38293
USER     PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
jalcazar 38293 s002    0.0 R     0T   0:00.02   0:00.10 /Users/jalcazar/.rvm/rubies/macruby-0.12/usr/bin/macruby threads.rb
   38293         0.0 S    33T   0:00.00   0:00.00 
   38293       100.0 R    31T   0:00.04   0:21.92 
   38293       100.0 R    31T   0:00.04   0:21.95 
   38293       100.0 R    31T   0:00.04   0:21.99 
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 한 번, 같은 프로그램이지만 지금은 예전의 MRI를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 그린됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(jalcazar@mac ~)$ ps -M 70032
USER     PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
jalcazar 70032 s002  100.0 R    31T   0:00.08   0:26.62 /Users/jalcazar/.rvm/rubies/ruby-1.8.7-p374/bin/ruby threads.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루비 멀티 스레드에 관심이 있다면 포크 &lt;em papago-id=&quot;12-1&quot;&gt;&lt;a href=&quot;https://modprobe.files.wordpress.com/2015/09/jalcazar_pmam20151.pdf&quot; papago-id=&quot;12-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;핸들러&lt;/a&gt;&lt;/em&gt;를 &lt;em papago-id=&quot;12-1&quot;&gt;&lt;a href=&quot;https://modprobe.files.wordpress.com/2015/09/jalcazar_pmam20151.pdf&quot; papago-id=&quot;12-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;사용한 병렬 프로그램&lt;/a&gt;&lt;/em&gt; 디버깅 &lt;em papago-id=&quot;12-1&quot;&gt;&lt;a href=&quot;https://modprobe.files.wordpress.com/2015/09/jalcazar_pmam20151.pdf&quot; papago-id=&quot;12-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;보고서&lt;/a&gt;&lt;/em&gt;가 흥미로울 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루비 &lt;em papago-id=&quot;13-1&quot;&gt;&lt;a href=&quot;http://shop.oreilly.com/product/9781593275273.do&quot; papago-id=&quot;13-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;내부&lt;/a&gt;&lt;/em&gt;에 대한 더 일반적인 개요는 루비 &lt;em papago-id=&quot;13-1&quot;&gt;&lt;a href=&quot;http://shop.oreilly.com/product/9781593275273.do&quot; papago-id=&quot;13-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;현미경&lt;/a&gt;&lt;/em&gt; &lt;em papago-id=&quot;13-1&quot;&gt;&lt;a href=&quot;http://shop.oreilly.com/product/9781593275273.do&quot; papago-id=&quot;13-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;아래에서 읽는&lt;/a&gt;&lt;/em&gt; 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, &lt;a href=&quot;https://www.omniref.com/ruby/2.2.0.preview1/files/thread_pthread.h#annotation=4057266&amp;amp;line=38&quot; papago-id=&quot;14-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;루비 스레드&lt;/a&gt;와 C in Omniref의 &lt;a href=&quot;https://www.omniref.com/ruby/2.2.0.preview1/files/thread_pthread.h#annotation=4057266&amp;amp;line=38&quot; papago-id=&quot;14-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Global Interpreter Lock&lt;/a&gt;은 소스 코드에서 루비 스레드가 병렬로 실행되지 않는 이유를 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://chadfowler.com/ruby/drb.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;46-1&quot;&gt;drb&lt;/a&gt;를 사용하는 것은 어떻습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 멀티 스레드가 아니라 여러 프로세스 간의 통신이지만 1.8로 사용할 수 있으며 마찰력이 상당히 낮습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;시스템 모니터&quot;가 이 질문에 답하도록 하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;i7(4 하이퍼스레딩 코어) 기계에서 실행되는 8개의 Ruby 스레드로 동일한 코드(아래 소수 계산)를 실행하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 실행은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jruby 1.5.6(ruby 1.8.7 패치 수준 249)(2014-02-036586)(OpenJDK 64비트 서버 VM 1.7.0_75) [amd64-java]&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ruby 2.1.2p95 (2014-05-08) [x86_64-linux-linux-linux]&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;흥미롭게도, CPU는 JRuby 스레드의 경우 더 높지만, 해석된 Ruby의 경우 완료 시간이 약간 더 짧습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래프로 보면 알 수 없지만, 두 번째(Ruby 해석) 실행은 CPU의 1/2 정도를 사용합니다(하이퍼스레딩 없음).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/haINx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def eratosthenes(n)
  nums = [nil, nil, *2..n]
  (2..Math.sqrt(n)).each do |i|
    (i**2..n).step(i){|m| nums[m] = nil}  if nums[i]
  end
  nums.compact
end

MAX_PRIME=10000000
THREADS=8
threads = []

1.upto(THREADS) do |num|
  puts &quot;Starting thread #{num}&quot;
  threads[num]=Thread.new { eratosthenes MAX_PRIME }
end

1.upto(THREADS) do |num|
    threads[num].join
end
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MRI를 사용하는 경우 확장으로 또는 루비 인라인 보석을 사용하여 C에 스레드 코드를 작성할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ruby for Production 레벨 시스템(베타를 사용할 수 없는 시스템)에서 병렬화가 정말 필요하다면 프로세스가 더 나은 대안이 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 우선 JRuby 아래에서 스레드를 시도해 볼 가치가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Ruby 아래에서 스레드화의 미래에 관심이 있다면 이 &lt;a href=&quot;http://www.infoq.com/news/2007/05/ruby-threading-futures&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;55-1&quot;&gt;기사&lt;/a&gt;가 유용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 린다의 루비 구현인 린다에 대한 몇 가지 정보가 있습니다. http://charmalloc.blogspot.com/2009/12/&lt;a href=&quot;http://charmalloc.blogspot.com/2009/12/linda-tuples-rinda-drb-parallel.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;56-1&quot;&gt;linda-tuples-rinda-drb-parallel&lt;/a&gt;.html&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 답변을 편집할 수 없으므로 여기에 새 답변을 추가하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트(2017-05-08)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문서는 매우 오래되었으며 정보가 현재(2017) 트레드를 따르지 않습니다. 다음은 몇 가지 보충 자료입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;12&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/opal/opal&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;60-0&quot;&gt;Opal&lt;/a&gt;은 Ruby to JavaScript 소스 간 컴파일러입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Ruby corelib을 구현하고 있으며, 현재 매우 활발한 개발 작업을 수행하고 있으며, 많은 (프론트엔드) 프레임워크가 존재하고 있으며, 프로덕션 준비가 되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트 기반이기 때문에 병렬 스레드를 지원하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/graalvm/truffleruby&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;61-0&quot;&gt;Truffleruby&lt;/a&gt;는 Ruby 프로그래밍 언어의 고성능 구현입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle Labs가 GraalVM을 기반으로 구축한 TruffleRuby는 JRuby의 포크로, 루비니우스 프로젝트의 코드와 결합하고 Ruby의 표준 구현에서 가져온 코드, MRI, 아직 실시간 개발, 프로덕션 준비가 되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 버전의 루비는 성능을 위해 탄생한 것 같습니다. 병렬 스레드를 지원하는지는 모르겠지만, 그래야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/56087/&lt;a href=&quot;https://stackoverflow.com/questions/56087/does-ruby-have-real-multithreading&quot; target=&quot;_blank&quot; papago-id=&quot;62-1&quot;&gt;does-ruby-have-real-multithreading&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ruby</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/508</guid>
      <comments>https://showcode.tistory.com/508#entry508comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:02:30 +0900</pubDate>
    </item>
    <item>
      <title>분기 인식 프로그래밍</title>
      <link>https://showcode.tistory.com/507</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 인식 프로그래밍&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 예측 오류가 애플리케이션 성능의 핫 병목 현상이 될 수 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 볼 수 있듯이, 사람들은 종종 문제를 드러내는 어셈블리 코드를 &lt;em papago-id=&quot;1-1&quot;&gt;보여주고&lt;/em&gt; 프로그래머들은 보통 분기가 가장 자주 어디로 갈지 예측할 수 있고 분기의 잘못된 예측을 피할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 &lt;em papago-id=&quot;3-3&quot;&gt;고급&lt;/em&gt; 프로그래밍 기법(즉, &lt;strong papago-id=&quot;3-5&quot;&gt;어셈블리&lt;/strong&gt; 없음)을 사용하여 분기 오예측을 방지할 수 &lt;em papago-id=&quot;3-1&quot;&gt;있습니까&lt;/em&gt;?&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고급 프로그래밍 언어로 &lt;em papago-id=&quot;4-1&quot;&gt;지점&lt;/em&gt; 친화적인 코드를 생성하려면 무엇을 염두에 두어야 합니까(저는 주로 C와 C++에 관심이 있습니다)?&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 예제 및 벤치마크를 환영합니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사람들은 종종... 그리고 프로그래머들은 보통 지점이 어디로 갈 수 있는지 예측할 수 있다고 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(*) 숙련된 프로그래머들은 종종 인간 프로그래머들이 그것을 예측하는 것에 매우 서툴다는 것을 상기시킵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 - 일부 고급 프로그래밍 기법(즉, 어셈블리 없음)을 사용하여 분기 오예측을 방지할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준 c++ 또는 c에는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;적어도 지점 하나는 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;종속성 체인의 깊이를 최소화하여 분기 예측 오류가 영향을 미치지 않도록 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 CPU는 분기의 두 코드 경로를 모두 실행하고 선택되지 않은 경로를 삭제합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 여기에는 한계가 있습니다. 그렇기 때문에 지점 예측은 깊은 의존성 체인에서만 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 컴파일러는 &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-1&quot;&gt;__builtin_expecting&lt;/a&gt; gcc와 같이 수동으로 예측을 제안하기 위한 확장을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 &lt;a href=&quot;https://stackoverflow.com/a/30131034/2079303&quot; papago-id=&quot;10-3&quot;&gt;이에 대한&lt;/a&gt; 스택 오버플로 질문이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 좋은 것은 일부 컴파일러(예: gcc)가 코드 프로파일링을 지원하고 최적의 예측을 자동으로 감지한다는 점입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(*) 때문에 수작업보다는 프로파일링을 사용하는 것이 현명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2- 고급 프로그래밍 언어로 지점 친화적인 코드를 생성하려면 무엇을 염두에 두어야 합니까(C와 C++에 주로 관심이 있습니다)?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 분기 예측 오류는 프로그램에서 가장 성능이 중요한 부분에만 영향을 미치고 문제를 측정하고 발견할 때까지 걱정하지 않는다는 점에 유의해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 일부 프로파일러(valgrind, VTune, ...)가 foo.cpp 온라인에서 분기 예측 패널티를 받았다고 말하면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;룬딘은 매우 현명한 조언을 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 중요한지 알아보기 위한 조치.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 중요하다면, 그럼.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;계산의 종속성 체인 깊이를 최소화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 하는 방법은 꽤 복잡하고 제 전문 지식을 넘어서는 것일 수 있으며 조립에 뛰어들지 않고 할 수 있는 것은 많지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;고급 언어로 수행할 수 있는 작업은 조건부 검사(**) 수를 최소화하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 컴파일러 최적화에 좌우됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 깊은 의존성 체인을 방지하면 고장난 슈퍼 스칼라 프로세서를 보다 효율적으로 사용할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기를 일관성 있게 예측할 수 있도록 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 효과는 이 &lt;a href=&quot;https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array&quot; papago-id=&quot;17-1&quot;&gt;스택 오버플로&lt;/a&gt; 질문에서 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에서 배열 위에 루프가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프에 분기가 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기는 현재 요소의 크기에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터가 정렬되었을 때, 루프는 특정 컴파일러로 컴파일되고 특정 CPU에서 실행될 때 훨씬 더 빠르다는 것을 증명할 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 모든 데이터를 정렬 상태로 유지하면 CPU 시간도 소요되며, 분기의 잘못된 예측보다 더 많은 시간이 소요될 수 &lt;em papago-id=&quot;17-3&quot;&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 문제가 있는 경우 &lt;a href=&quot;https://en.wikipedia.org/wiki/Profile-guided_optimization&quot; papago-id=&quot;19-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;프로파일 기반&lt;/a&gt; 최적화(&lt;a href=&quot;https://en.wikipedia.org/wiki/Profile-guided_optimization&quot; papago-id=&quot;19-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;사용&lt;/a&gt; 가능한 경우)를 사용합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2번과 3번의 순서를 바꿀 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수작업으로 코드를 최적화하는 것은 많은 일입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에 프로파일링 데이터를 수집하는 것은 일부 프로그램에서도 어려울 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(**) 이를 위한 한 가지 방법은 예를 들어 루프를 언롤링하여 변환하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최적화 도구가 자동으로 이 작업을 수행하도록 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 롤을 풀면 캐시와 상호 작용하는 방식에 영향을 미치고 비관적으로 끝날 수 있으므로 측정해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의할 점으로, 저는 미세 최적화 마법사가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하드웨어 분기 예측 변수가 어떻게 작동하는지 정확히 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 그것은 가위바위보를 하는 마법의 짐승이고 항상 제 마음을 읽고 저를 이길 수 있는 것처럼 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 디자인과 건축 타입입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼에도 불구하고, 이 질문은 높은 수준의 사고방식에 관한 것이었기 때문에, 저는 몇 가지 조언을 할 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로파일링&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞서 말했듯이, 저는 컴퓨터 아키텍처 마법사는 아니지만 VTune로 코드를 프로파일링하고 분기 오예측 및 캐시 누락과 같은 것을 측정하여 성능이 중요한 분야에서 항상 이 작업을 수행하는 방법을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업(프로파일링)을 수행하는 방법을 모르는 경우 가장 먼저 조사해야 할 사항이 바로 그것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 마이크로 레벨 핫스팟의 대부분은 프로파일러를 손에 쥐고 나중에 발견하는 것이 가장 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 제거&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 사람들이 지점의 예측 가능성을 개선하는 방법에 대해 우수한 수준의 조언을 하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 변수를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 사례를 먼저 확인하기 위한 진술.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인텔(https://software.intel.com/en-us/articles/&lt;a href=&quot;https://software.intel.com/en-us/articles/branch-and-loop-reorganization-to-prevent-mispredicts&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;branch-and-loop-reorganization-to-prevent-mispredicts&lt;/a&gt; )에서 제공하는 중요한 세부 정보에 대한 포괄적인 기사가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 기본적인 일반적인 사례/희귀 사례 예상치를 초과하여 이 작업을 수행하는 것은 매우 어려우며 측정 후에는 거의 항상 &lt;em papago-id=&quot;29-1&quot;&gt;나중&lt;/em&gt;에 사용할 수 있도록 저장하는 것이 가장 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인간이 분기 예측자의 본질을 정확하게 예측할 수 있는 것은 너무 어렵습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 결함이나 캐시 누락과 같은 것들보다 예측하는 것이 훨씬 더 어렵고, 그것들조차도 복잡한 코드베이스에서 인간이 완벽하게 예측하는 것은 거의 불가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 분기의 잘못된 예측을 완화하는 보다 쉽고 높은 수준의 방법이 있습니다. 즉, 분기를 완전히 방지하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소규모/희귀 작업 건너뛰기&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 경력 초기에 흔히 범했던 실수 중 하나는 많은 동료들이 프로파일링하는 것을 배우기도 전에 시작할 때, 그리고 아직도 열심히 공부하기도 전에, 작고 희귀한 일을 건너뛰려고 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 를 저장하여 계산을 . 예를 들어, 예 한 로 반 는 피 위 트 것 검 큰 메 않 테 수 반 계 로 을 으 적 행 복 하산지 도 색록에모 하블이는니 다입 에한렴저비적 교같이이사테것블검을이는에르색는용하과복이하가바출해을적인 호기메▁to▁an이▁megabytes▁to-▁that▁memoations&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cos&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인간의 뇌에는 한 번 계산하고 저장하는 것이 작업을 절약하는 것처럼 보입니다. 단, 이 거대한 LUT에서 메모리 계층을 통해 아래로 메모리를 로드하고 레지스터에 저장하는 것은 저장하려는 계산보다 훨씬 더 많은 비용이 듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 경우는 코드 전반에 걸쳐 불필요하게 수행하는(정확성에 영향을 미치지 않는) 작은 계산을 피하기 위해 여러 개의 작은 분기를 추가하는 것입니다. 이는 단순한 최적화 시도로, 불필요한 계산을 수행하는 것보다 분기 비용이 더 많이 들 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최적화로 분기하려는 이러한 순진한 시도는 약간 비싸지만 드문 작업에도 적용될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 C++ 예를 들어 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct Foo
{
    ...
    Foo&amp;amp; operator=(const Foo&amp;amp; other)
    {
        // Avoid unnecessary self-assignment.
        if (this != &amp;amp;other)
        {
            ...
        }
        return *this;
    }
    ...
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;sub&gt;&lt;em papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 사용자가 값에 의해 전달된 매개 변수에 대해 복사 및 스왑을 사용하여 복사 할당을 구현하고 어떠한 경우에도 분기를 방지하기 때문에 이는 단순한/설명적인 예입니다.&lt;/font&gt;&lt;/em&gt;&lt;/sub&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, 우리는 자가 할당을 피하기 위해 분기하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 자가 할당이 중복 작업만 수행하고 결과의 정확성을 저해하지 않는다면, 단순히 자가 복사를 허용하는 실제 성능을 향상시킬 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct Foo
{
    ...
    Foo&amp;amp; operator=(const Foo&amp;amp; other)
    {
        // Don't check for self-assignment.
        ...
        return *this;
    }
    ...
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 자기 평가가 매우 드문 경향이 있기 때문에 도움이 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복 자기배정을 통해 희귀사건의 발생 속도를 늦추고 있지만, 다른 모든 사건에 대해서는 확인할 필요가 없도록 함으로써 공통사건의 발생 속도를 높이고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 분기 측면에서 일반적인/희귀한 경우 차이가 있기 때문에 분기 오예측을 크게 줄일 수는 없지만, 실제로 존재하지 않는 분기를 잘못 예측할 수는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작은 벡터에 대한 순진한 시도&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적인 이야기로, 저는 이전에 다음과 같은 많은 코드가 있는 대규모 C 코드베이스에서 일했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str[256];
// do stuff with 'str'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 사용자 기반이 상당히 넓기 때문에 소프트웨어에서 255자가 넘는 재료의 이름을 입력하고 버퍼를 오버플로하여 세그먼트 결함이 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리 팀은 C++에 접속하여 많은 소스 파일을 C++로 이식하고 코드를 다음과 같이 교체했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;std::string str = ...;
// do stuff with 'str'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 노력 없이 버퍼 오버런을 제거했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 당시에는, 만하그, 도당는에시, 너들은이와 같은 이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::vector&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;힙(자유 저장소)이 할당된 구조물이었고, 효율성을 위해 정확성/안전성을 거래했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 교체된 영역 중 일부는 성능에 매우 중요했으며(엄격한 루프라고 함), 이러한 대량 교체를 통해 많은 버그 보고서를 제거하는 동안 사용자는 속도 저하를 알아차리기 시작했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 우리는 이 두 기술 사이의 하이브리드 같은 것을 원했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 C 스타일 고정 버퍼 변형(일반적인 경우 시나리오에 완벽하게 적합하고 매우 효율적임)에 대한 안전을 달성하기 위해 무언가를 적용할 수 있기를 원했지만, 버퍼가 사용자 입력에 충분히 크지 않은 드문 경우 시나리오에서 여전히 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 팀에서 성능 괴짜 중 한 명이었고 프로파일러를 사용하는 몇 안 되는 사람들 중 한 명이었습니다(불행히도 저는 프로파일러를 사용하기에는 너무 똑똑하다고 생각하는 많은 사람들과 함께 일했습니다). 그래서 저는 그 일에 소집되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 첫 번째 순진한 시도는 이와 같은 것이었습니다(매우 단순화되었습니다: 실제 것은 새로운 배치 등을 사용했고 완전히 표준을 준수하는 시퀀스였습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 경우 고정 크기 버퍼(컴파일 시 지정된 크기)를 사용하고 크기가 해당 용량을 초과하는 경우 동적으로 할당된 버퍼를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;template &amp;lt;class T, int N&amp;gt;
class SmallVector
{
public:
    ...
    T&amp;amp; operator[](int n)
    {
        return num &amp;lt; N ? buf[n]: ptr[n];
    }
    ...
private:
    T buf[N];
    T* ptr;
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 시도는 완전히 실패했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구축할 힙/프리 스토어의 가격을 지불하지 않았지만, 지사는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;operator[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 더 나쁘게 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::vector&amp;lt;char&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 프로파일링 핫스팟으로 나타났습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 ()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::allocator&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;operator new&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용했다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;후드 아래에)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 간단히 할당할 아이디어를 빠르게 얻었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ptr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;buf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생성자에서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금이다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ptr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 가리키는 말.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;buf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 지금은 일적인경도에우, 지고금그.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;operator[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 구현할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;T&amp;amp; operator[](int n)
{
    return ptr[n];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 분기 제거로 핫스팟이 사라졌습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 이제 이전의 C 스타일 고정 버퍼 솔루션과 거의 같은 속도의 범용 표준 호환 컨테이너를 사용할 수 있게 되었습니다. (하나의 추가 포인터와 몇 개의 생성자 명령어만 다를 뿐) 그러나 크기가 다음보다 커야 하는 드문 경우의 시나리오를 처리할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;N&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 우리는 이것을 더 많이 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::vector&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그러나 우리의 사용 사례가 여러 개의 작은 임시 연속 랜덤 액세스 컨테이너를 선호하기 때문입니다.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것을 빠르게 만드는 것은 단지 지점을 제거하는 것으로 귀결되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;operator[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 대/희귀 대/소문자 구분 기호&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로파일링과 최적화를 수년간 수행한 후 배운 것 중 하나는 &lt;em papago-id=&quot;67-1&quot;&gt;&quot;모든 &lt;/em&gt;곳에서 절대적으로 빠른&quot; 코드가 없다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최적화의 대부분은 비효율성을 더 큰 효율성과 맞바꾸는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자는 코드가 어디에서나 &lt;em papago-id=&quot;67-3&quot;&gt;절대적&lt;/em&gt;으로 빠른 것으로 인식할 수 있지만, 이는 최적화가 일반적인 사례와 일치하는 스마트 트레이드오프(일반적인 사례는 현실적인 사용자-최종 시나리오와 일치하며 이러한 일반 시나리오를 측정하는 프로파일러에서 지적된 핫스팟에서 발생함)에서 비롯됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능을 일반적인 경우에 치우치고 드문 경우에서 벗어나면 좋은 일이 발생하는 경향이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 경우가 더 빨라지기 위해서는 종종 드문 경우가 더 느려져야 하지만, 그것은 좋은 일입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비용이 들지 않는 예외 처리&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 사례/희귀 사례 스큐의 예로는 많은 최신 컴파일러에서 사용되는 예외 처리 기술이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 제로 코스트 EH를 적용하는데, 이것은 전반적으로 실제로 &quot;제로 코스트&quot;가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외가 발생할 경우, 그 어느 때보다 속도가 느려집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 예외가 발생하지 않는 경우에는 이전보다 더 빠르며 성공적인 시나리오에서는 다음과 같은 코드보다 더 빠릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (!try_something())
    return error;
if (!try_something_else())
    return error;
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 비용이 들지 않는 EH를 대신 사용하고 수동으로 오류를 확인하고 전파하는 것을 피하면 위의 이 코드 스타일보다 예외적이지 않은 경우에 상황이 훨씬 더 빨리 진행되는 경향이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대략적으로 말하면, 그것은 지점이 감소했기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그 대가로 예외가 발생할 경우 훨씬 더 비싼 일이 발생해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼에도 불구하고 일반적인 사례와 드문 사례 사이의 차이는 실제 시나리오에 도움이 되는 경향이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 성공적으로 로드하지 못하는 속도(희귀한 경우)는 일반적인 경우(일반적인 경우)만큼 중요하지 않으므로 많은 최신 C++ 컴파일러가 &quot;비용이 들지 않는&quot; EH를 구현합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 사례와 드문 사례를 왜곡하여 성능 면에서 각각의 사례에서 더 멀리 밀어내는 것이 다시 한 번 이익이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 디스패치 및 동질성&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의존성이 추상화(예: 안정적 추상화 원리)로 흐르는 객체 지향 코드의 많은 분기는 동적 디스패치(가상 함수 호출 또는 함수 포인터 호출)의 형태로 분기의 많은 부분(물론 분기 예측자에게 잘 작동하는 루프 외에도)을 가질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 경우, 일반적인 유혹은 모든 종류의 하위 유형을 기본 포인터를 저장하는 다형성 컨테이너에 통합하고, 이를 통해 루프하고, 해당 컨테이너의 각 요소에서 가상 메서드를 호출하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로 인해 특히 이 컨테이너가 항상 업데이트되는 경우 많은 분기 예측 오류가 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사 코드는 다음과 같이 표시될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for each entity in world:
    entity.do_something() // virtual call
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 시나리오를 피하기 위한 전략은 하위 유형을 기준으로 이 다형성 컨테이너를 정렬하기 시작하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 게임 산업에서 인기 있는 꽤 오래된 스타일의 최적화입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘날 그것이 얼마나 도움이 되는지는 모르겠지만, 그것은 고도의 최적화입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사한 효과를 달성하는 최근의 경우에도 여전히 유용하다는 것을 알게 된 또 다른 방법은 다형성 컨테이너를 각 하위 유형에 대해 여러 개의 컨테이너로 분할하여 다음과 같은 코드로 이끄는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for each human in world.humans():
    human.do_something()
for each orc in world.orcs():
    orc.do_something()
for each creature in world.creatures():
    creature.do_something()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당연히 이것은 코드의 유지보수성을 방해하고 확장성을 감소시킵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 세상의 모든 하위 유형에 대해 이 작업을 수행할 필요는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 가장 일반적인 경우에만 그것을 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이 상상 속의 비디오 게임은 단연코 인간과 오크로 구성되어 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 또한 요정, 도깨비, 트롤, 요정, 요정, 요정 등을 가지고 있을지도 모르지만, 그들은 인간이나 오크만큼 흔하지는 않을지도 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 우리는 인간과 오크들을 다른 사람들로부터 떼어놓기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;경제적인 여유가 있다면 성능에 덜 중요한 루프에 사용할 수 있는 모든 하위 유형을 저장하는 다형성 컨테이너를 보유할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 기준 위치를 최적화하기 위한 핫/콜드 분할과 다소 유사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 중심 최적화&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 예측을 위한 최적화와 메모리 레이아웃 최적화는 함께 흐릿해지는 경향이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 예측 변수에 &lt;em papago-id=&quot;79-1&quot;&gt;대한&lt;/em&gt; 최적화를 시도한 적이 거의 없으며, 다른 모든 것을 다 사용한 후에야 가능했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 기억과 참조의 지역성에 많이 초점을 맞추면 측정 결과 지점의 잘못된 예측이 줄어들었다는 것을 알게 되었습니다(대부분의 경우 정확한 이유는 알지 못합니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 데이터 지향 설계를 연구하는 데 도움이 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최적화와 관련된 가장 유용한 지식 중 일부는 데이터 지향 설계의 맥락에서 메모리 최적화를 연구하는 데서 비롯된다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 지향 설계는 추상화(있는 경우)가 적고 대량의 데이터를 처리하는 대용량의 고급 인터페이스를 강조하는 경향이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;본질적으로 이러한 설계는 동종 데이터의 큰 청크를 처리하는 더 많은 루프 코드를 사용하여 코드에서 이질적인 분기 및 점프의 양을 줄이는 경향이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지사의 잘못된 예측을 줄이는 것이 목표라고 해도 데이터를 보다 신속하게 소비하는 데 더 집중할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이전에도 지점이 없는 SIMD에서 몇 가지 큰 이점을 발견했지만, 이러한 사고방식은 여전히 데이터를 더 빨리 소비하는 경향에 있었습니다(Harold와 같은 SO의 도움 덕분에 그렇게 되었습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TL;DR&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이러한 전략은 코드 전반에 걸쳐 높은 수준의 관점에서 분기의 잘못된 예측을 잠재적으로 줄일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 컴퓨터 아키텍처에 대한 최고 수준의 전문성이 부족하지만, 저는 질문의 수준을 고려할 때 이것이 적절한 종류의 도움이 되는 답변이기를 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 조언의 대부분은 일반적으로 최적화를 통해 모호하지만 분기 예측을 위한 최적화는 종종 그 이상의 최적화(메모리, 병렬화, 벡터화, 알고리즘)를 통해 모호해질 필요가 있다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든, 가장 안전한 방법은 당신이 깊이 모험하기 전에 당신의 손에 프로파일러가 있는지 확인하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 리눅스를 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;likely&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unlikely&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__builtin_expect&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gcc 파일:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    #define likely(x)   __builtin_expect(!!(x), 1)
    #define unlikely(x) __builtin_expect(!!(x), 0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 매크로 정의는 여기를 &lt;a href=&quot;http://lxr.free-electrons.com/source/include/linux/compiler.h#L165&quot; papago-id=&quot;30-1&quot;&gt;참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;include/linux/compiler.h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (likely(a &amp;gt; 42)) {
    /* ... */
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (unlikely(ret_value &amp;lt; 0)) {
    /* ... */
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 핫 내부 루프는 가장 일반적으로 발생하는 캐시 크기에 비례하여 유지하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 프로그램이 한 번에 32KB 미만의 데이터를 처리하고 상당한 양의 작업을 수행하는 경우 L1 캐시를 잘 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반대로 핫 내부 루프가 100MB바이트의 데이터를 확인하고 각 데이터 항목에 대해 하나의 작업만 수행하는 경우 CPU는 DRAM에서 데이터를 가져오는 데 대부분의 시간을 소비합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CPU에 분기 예측 기능이 있는 이유 중 일부는 다음 명령을 위해 피연산자를 사전에 가져올 수 있기 때문에 이 기능이 중요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 오예측의 성능 결과는 어떤 분기를 취하든 L1 캐시에서 다음 데이터를 가져올 가능성이 높아지도록 코드를 배열함으로써 줄일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;완벽한 전략은 아니지만, L1 캐시 크기는 일반적으로 32K 또는 64K에 머물러 있는 것처럼 보입니다. 이는 업계 전반에 걸쳐 거의 일정한 현상입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 방식으로 코딩하는 것은 종종 간단하지 않으며, 다른 사람들이 권장하는 프로파일 기반 최적화 등에 의존하는 것이 아마도 가장 간단한 방법일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 오예측 문제가 발생할지 여부는 CPU의 캐시 크기, 시스템에서 실행 중인 다른 항목, 기본 메모리 대역폭/지연 시간 등에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 가장 일반적인 기법은 정규 및 오류 반환에 별도의 방법을 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에는 선택의 여지가 없지만 C++에는 예외가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러는 예외 분기가 예외적이므로 예기치 않은 것임을 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 예외 분기가 예측되지 않은 것처럼 실제로 느리지만 오류가 없는 분기가 더 빨리 생성된다는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평균적으로, 이것은 순승입니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 - 일부 고급 프로그래밍 기법(즉, 어셈블리 없음)을 사용하여 분기 오예측을 방지할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;피한다고요? 아마 아닐 겁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;줄이라고요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론...&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2- 고급 프로그래밍 언어로 지점 친화적인 코드를 생성하려면 무엇을 염두에 두어야 합니까(C와 C++에 주로 관심이 있습니다)?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 기계에 대한 최적화가 반드시 다른 기계에 대한 최적화는 아니라는 점에 유의할 필요가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 점을 염두에 두고, &lt;a href=&quot;https://www.google.com/search?q=profile-guided+optimisation&quot; rel=&quot;nofollow&quot; papago-id=&quot;101-1&quot;&gt;프로파일 기반&lt;/a&gt; 최적화는 제공하는 테스트 입력에 따라 분기를 재정렬하는 데 상당히 유용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 이 최적화를 수행하기 위해 프로그래밍을 &lt;em papago-id=&quot;101-3&quot;&gt;수행&lt;/em&gt;할 필요가 없으며 프로파일링 중인 컴퓨터에 상대적으로 맞게 &lt;em papago-id=&quot;101-5&quot;&gt;조정&lt;/em&gt;되어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 입력과 프로파일링하는 기계가 일반적인 예상과 대략 일치할 때 최상의 결과가 얻어질 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이는 다른 최적화에 대한 고려사항이기도 합니다. 분기-표현과 관련이 있거나 다른 경우도 마찬가지입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에 답하기 위해 분기 예측이 어떻게 작동하는지 설명하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 프로세서가 &lt;strong papago-id=&quot;32-1&quot;&gt;촬영&lt;/strong&gt;된 분기를 올바르게 예측할 때 분기 페널티가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로세서가 분기를 예측할 때 해당 주소에서 실행 흐름이 계속되므로 예측된 분기의 대상을 알아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기 대상 주소가 이미 BTB(Branch Target Buffer)에 저장되어 있다고 가정하면 BTB에서 발견된 주소에서 새 명령을 가져와야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 분기가 정확하게 예측되더라도 여전히 몇 개의 클럭 주기를 낭비하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BTB는 연관 캐시 구조를 가지고 있기 때문에 대상 주소가 없을 수 있으며, 따라서 더 많은 클럭 주기가 낭비될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에 CPU가 분기를 실행되지 않은 것으로 예측하고 정확한 경우 CPU는 이미 연속된 명령이 어디에 있는지 알고 있기 때문에 아무런 불이익이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 설명한 바와 같이, &lt;strong papago-id=&quot;106-1&quot;&gt;예측&lt;/strong&gt;되지 않은 &lt;strong papago-id=&quot;106-1&quot;&gt;분기는 예측된 분기보다 처리량이 높습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 고급 프로그래밍 기법(즉, 어셈블리 없음)을 사용하여 분기 오예측을 방지할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&quot;, &quot;가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 구성하여 모든 분기가 항상 취해지거나 그렇지 않은 반복적인 분기 패턴을 갖도록 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 처리량을 높이려면 위에서 설명한 것처럼 가지를 사용하지 않을 가능성이 가장 높은 방식으로 지점을 구성해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고급 프로그래밍 언어로 지점 친화적인 코드를 생성하려면 무엇을 염두에 두어야 합니까(저는 주로 C와 C++에 관심이 있습니다)?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능하면 가지를 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문  문을 할 때  경우 합니다. if-else &quot; switch &quot; &quot; switch &quot; 렇 할 지 그 때 은 않 인 적 우 반 를 우 경 일 경 하 여 먼 저 인 다 니 합 기 인 가 확 되 지 높 은 용 장 지 을 가 사 이 확 분 성 능 가 않 장 문&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;_를 사용해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_builtin_expect(condition, 1)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 수행되지 않은 것으로 처리할 조건을 생성하도록 강제하는 함수입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기가 없는 것이 항상 더 나은 것은 아닙니다. 분기의 양쪽이 모두 사소한 것일지라도 말입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://yarchive.net/comp/linux/cmov.html&quot; papago-id=&quot;113-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;분기 예측이 &lt;/a&gt;작동할 &lt;a href=&quot;http://yarchive.net/comp/linux/cmov.html&quot; papago-id=&quot;113-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;경우 루프 전달 데이터 종속성보다 빠릅니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/28875325/gcc-optimization-flag-o3-makes-code-slower-than-o2&quot; papago-id=&quot;38-1&quot;&gt;gcc 최적화 플래그&lt;/a&gt; 참조 - &lt;a href=&quot;https://stackoverflow.com/questions/28875325/gcc-optimization-flag-o3-makes-code-slower-than-o2&quot; papago-id=&quot;38-1&quot;&gt;O3&lt;/a&gt;는 다음과 같은 &lt;a href=&quot;https://stackoverflow.com/questions/28875325/gcc-optimization-flag-o3-makes-code-slower-than-o2&quot; papago-id=&quot;38-1&quot;&gt;경우&lt;/a&gt;에 코드를 &lt;a href=&quot;https://stackoverflow.com/questions/28875325/gcc-optimization-flag-o3-makes-code-slower-than-o2&quot; papago-id=&quot;38-1&quot;&gt;-O2보다 느리게 만듭니다&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gcc -O3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;형된을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분기가 없는 코드로 변환할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 매우 예측 가능하여 속도가 느려집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;때로는 조건을 예측할 수 없다고 확신할 수 있습니다(예: 정렬 알고리즘 또는 이진 검색).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 최악의 경우가 1.5배 빠른 경우보다 10배 느리지 않는 것이 더 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 더 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cmov&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;x86 조건부 이동 지침).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x = x&amp;gt;limit ? limit : x;   // likely to compile branchless

if (x&amp;gt;limit) x=limit;      // less likely to compile branchless, but still can
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 번째  첫번방항다씁음니다에상은법째에 씁니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 방 법 않 동 안 지 되 정 수 이 안 동 ▁while 는 않 ▁doesn ▁the t ▁modify '두 ▁second 지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;이 &lt;font class=&quot;papago-parent&quot;&gt;일부&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 대신 &lt;font class=&quot;papago-parent&quot;&gt;브런치를 내보내는&lt;/font&gt; 경향이 있는 &lt;font class=&quot;papago-parent&quot;&gt;이유&lt;/font&gt;인 것 &lt;font class=&quot;papago-parent&quot;&gt;같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cmov&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를해위를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;판본&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 다음과 같은 경우에도 적용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 자치 단체입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레지스터에 이미 존재하는 변수이므로 &quot;쓰기&quot;에는 메모리에 저장할 필요가 없으며 레지스터의 값만 변경됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러들은 여전히 그들이 원하는 것은 무엇이든 할 수 있지만, 저는 이 관용구의 차이가 차이를 만들 수 있다는 것을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트하는 내용에 따라 &lt;a href=&quot;https://stackoverflow.com/questions/34407437/what-is-the-efficient-way-to-count-set-bits-at-a-position-or-lower&quot; papago-id=&quot;127-1&quot;&gt;컴파일러 마스크와 AND를 지원하는 것이 일반적&lt;/a&gt;인 오래된&lt;a href=&quot;https://stackoverflow.com/questions/34407437/what-is-the-efficient-way-to-count-set-bits-at-a-position-or-lower&quot; papago-id=&quot;127-1&quot;&gt; 작업을 수행&lt;/a&gt;하는 것보다 더 &lt;a href=&quot;https://stackoverflow.com/questions/34407437/what-is-the-efficient-way-to-count-set-bits-at-a-position-or-lower&quot; papago-id=&quot;127-1&quot;&gt;나을&lt;/a&gt; 수 있습니다. 저는 컴파일러가 단일 명령어로 마스크를 생성하는 데 필요한 작업을 수행할 수 있다는 것을 알고 있었기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;128&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TODO:&lt;a href=&quot;http://gcc.godbolt.org/&quot; papago-id=&quot;128-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;http://gcc.&lt;a href=&quot;http://gcc.godbolt.org/&quot; papago-id=&quot;128-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;godbolt&lt;/a&gt;.org/ 의 예&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;129&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32581644/&lt;a href=&quot;https://stackoverflow.com/questions/32581644/branch-aware-programming&quot; target=&quot;_blank&quot; papago-id=&quot;129-1&quot;&gt;branch-aware-programming&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/507</guid>
      <comments>https://showcode.tistory.com/507#entry507comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:02:21 +0900</pubDate>
    </item>
    <item>
      <title>Wordpress URL의 슬래시 전달</title>
      <link>https://showcode.tistory.com/506</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wordpress URL의 슬래시 전달&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 사이트를 드루팔에서 워드프레스로 옮기고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Drupal에서 저는 URL에 대한 별칭을 쉽게 제공할 수 있으며 이 별칭은 무엇이든 될 수 있습니다. 즉, www.example.com/abc/xyz/hello.html .&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 Wordpress에서는 WP를 즉시 사용할 수 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스와 같은 방법에 대한 힌트가 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL 일관성을 유지해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 방금 이 플러그인&lt;a href=&quot;https://wordpress.org/plugins/custom-permalinks/&quot; papago-id=&quot;6-1&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;https://wordpress.org/plugins/&lt;a href=&quot;https://wordpress.org/plugins/custom-permalinks/&quot; papago-id=&quot;6-1&quot; rel=&quot;nofollow&quot;&gt;custom-permalinks&lt;/a&gt;/ 을 발견하고 슬래시와 포인트와 같은 문자를 워드프레스로 이동하는 웹사이트의 URL에 추가하는 데 사용했습니다. 지금까지 작동하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 설정 -&amp;gt; Permalinks에 관심이 있을 수 있지만, 그 이상을 원하는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://wordpress.org/extend/plugins/redirection/&quot; rel=&quot;nofollow&quot; papago-id=&quot;8-1&quot;&gt;리디렉션&lt;/a&gt; 플러그인의 기능 목록을 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 다른 페이지로 리디렉션을 설정하거나 리디렉션을 &lt;a href=&quot;http://urbangiraffe.com/plugins/redirection/&quot; rel=&quot;nofollow&quot; papago-id=&quot;8-3&quot;&gt;통과&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신이 찾고 있는 것이 아니라면 당신이 원하는 것을 달성할 수 있는 다른 플러그인이 몇 개 있다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정 -&amp;gt; 퍼멀링크에서 기본 URL을 변경할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시물을 추가하거나 편집할 때 영구 링크를 변경할 수 있는 옵션도 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;퍼멀 링크(http://wordpress.org/extend/plugins/advanced-permalinks/) 에도 플러그인이 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7082940/&lt;a href=&quot;https://stackoverflow.com/questions/7082940/forwarding-slash-in-wordpress-url&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;forwarding-slash-in-wordpress-url&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/506</guid>
      <comments>https://showcode.tistory.com/506#entry506comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:02:10 +0900</pubDate>
    </item>
    <item>
      <title>경고 메시지:에서...: 잘못된 요인 수준, NA가 생성됨</title>
      <link>https://showcode.tistory.com/505</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경고 메시지:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 잘못된 요인 수준, NA가 생성됨&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 왜 이런 경고 메시지를 받았는지 이해할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; fixed &amp;lt;- data.frame(&quot;Type&quot; = character(3), &quot;Amount&quot; = numeric(3))
&amp;gt; fixed[1, ] &amp;lt;- c(&quot;lunch&quot;, 100)
Warning message:
In `[&amp;lt;-.factor`(`*tmp*`, iseq, value = &quot;lunch&quot;) :
  invalid factor level, NA generated
&amp;gt; fixed
  Type Amount
1 &amp;lt;NA&amp;gt;    100
2           0
3           0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경고 메시지는 &quot;유형&quot; 변수가 요인이 되고 &quot;점심&quot;이 정의된 수준이 아니기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stringsAsFactors = FALSE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 프레임을 만들 때 플래그를 눌러 &quot;유형&quot;을 문자로 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; fixed &amp;lt;- data.frame(&quot;Type&quot; = character(3), &quot;Amount&quot; = numeric(3))
&amp;gt; str(fixed)
'data.frame':   3 obs. of  2 variables:
 $ Type  : Factor w/ 1 level &quot;&quot;: NA 1 1
 $ Amount: chr  &quot;100&quot; &quot;0&quot; &quot;0&quot;
&amp;gt; 
&amp;gt; fixed &amp;lt;- data.frame(&quot;Type&quot; = character(3), &quot;Amount&quot; = numeric(3),stringsAsFactors=FALSE)
&amp;gt; fixed[1, ] &amp;lt;- c(&quot;lunch&quot;, 100)
&amp;gt; str(fixed)
'data.frame':   3 obs. of  2 variables:
 $ Type  : chr  &quot;lunch&quot; &quot;&quot; &quot;&quot;
 $ Amount: chr  &quot;100&quot; &quot;0&quot; &quot;0&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV 파일에서 직접 읽는 경우 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myDataFrame &amp;lt;- read.csv(&quot;path/to/file.csv&quot;, header = TRUE, stringsAsFactors = FALSE)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 &lt;strong papago-id=&quot;5-1&quot;&gt;모든 경우&lt;/strong&gt;, 특히 다음과 같은 유연한 접근 방식입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-1&quot;&gt;하나&lt;/strong&gt;의 열에만 &lt;strong papago-id=&quot;6-1&quot;&gt;영향을 미치거나&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dataframe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 작업(예: &lt;strong papago-id=&quot;3-1&quot;&gt;파일을 즉시 열지&lt;/strong&gt; 않거나 새 데이터 프레임을 만들지 &lt;strong papago-id=&quot;3-1&quot;&gt;않음&lt;/strong&gt;)을 적용하여 얻은 데이터입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저, 다음을 사용하여 문자열 &lt;em papago-id=&quot;4-1&quot;&gt;인수&lt;/em&gt; 분해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;as.character&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능, 그리고 나서, &lt;em papago-id=&quot;5-1&quot;&gt;다시&lt;/em&gt; 인수분해합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;as.factor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(또는 간단히)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;factor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 함수:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-r prettyprint-override&quot;&gt;&lt;code&gt;fixed &amp;lt;- data.frame(&quot;Type&quot; = character(3), &quot;Amount&quot; = numeric(3))

# Un-factorize (as.numeric can be use for numeric values)
#              (as.vector  can be use for objects - not tested)
fixed$Type &amp;lt;- as.character(fixed$Type)
fixed[1, ] &amp;lt;- c(&quot;lunch&quot;, 100)

# Re-factorize with the as.factor function or simple factor(fixed$Type)
fixed$Type &amp;lt;- as.factor(fixed$Type)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하는 가장 쉬운 방법은 열에 새 요인을 추가하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수준 함수를 사용하여 요인 수를 확인한 다음 새 요인을 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;gt; levels(data$Fireplace.Qu)
    [1] &quot;Ex&quot; &quot;Fa&quot; &quot;Gd&quot; &quot;Po&quot; &quot;TA&quot;
    &amp;gt; levels(data$Fireplace.Qu) = c(&quot;Ex&quot;, &quot;Fa&quot;, &quot;Gd&quot;, &quot;Po&quot;, &quot;TA&quot;, &quot;None&quot;)
    [1] &quot;Ex&quot;   &quot;Fa&quot;   &quot;Gd&quot;   &quot;Po&quot;   &quot; TA&quot;  &quot;None&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.xlsx 파일에서 검색한 데이터와 유사한 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도, 저는 여기서 적절한 답을 찾을 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들에게 도움이 될 수 있는 아래와 같이 dplyr로 스스로 처리했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#install.packages(&quot;xlsx&quot;)
library(xlsx)
extracted_df &amp;lt;- read.xlsx(&quot;test.xlsx&quot;, sheetName='Sheet1', stringsAsFactors=FALSE)
# Replace all NAs in a data frame with &quot;G&quot; character
extracted_df[is.na(extracted_df)] &amp;lt;- &quot;G&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 저는 그것과 유사한 파라미터를 가지고 있지 않은 &lt;a href=&quot;https://readxl.tidyverse.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-1&quot;&gt;패키지&lt;/a&gt;로 그것을 처리할 수 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stringsAsFactors&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유로, 나는 이사를 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xlsx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꾸러미&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16819956/&lt;a href=&quot;https://stackoverflow.com/questions/16819956/warning-message-in-invalid-factor-level-na-generated&quot; target=&quot;_blank&quot; papago-id=&quot;18-1&quot;&gt;warning-message-in-invalid-factor-level-na-generated&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>r</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/505</guid>
      <comments>https://showcode.tistory.com/505#entry505comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:02:04 +0900</pubDate>
    </item>
    <item>
      <title>axios 응답 값을 변수 vue.js에 할당할 수 없습니다.</title>
      <link>https://showcode.tistory.com/504</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;axios 응답 값을 변수 vue.js에 할당할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열을 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lists&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 개의 문자열을 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 나는 루프를 하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lists&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(즉, in)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getSubs()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Axios 요청을 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 요청에는 다음 문자열이 하나 포함되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lists&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매번.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 코드:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;computed: {
  subscribers: {
    get() {
      return this.$store.state.subscribers;
    },
    set(value) {
      this.$store.commit('updateSubscribers', value);
    },
  },
},
methods: {
  getLodzkie() {
    axios
      .get(`correct_domain/lodzkietargi/get`)
      .then((response) =&amp;gt; {
        this.subscribers = [];
        this.subscribers.push.apply(this.subscribers, response.data)
      })
      .catch(function(error) {
        console.log(error);
      })
  },
  getSubs() {
    function getSub(value) {
      axios
      .get(`correct_domain/${value}/get`)
      .then((response) =&amp;gt; {
        this.subscribers.push.apply(this.subscribers, response.data)
      })
      .catch(function(error) {
        console.log(error);
      });
      console.log(value);
    }
    this.lists.forEach(function(entry) {
      getSub.call(null, entry);
    });
  },
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;getLodzkie()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@ourmandave 정말 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 저에게 완벽한 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에 함수를 다시 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getSubs() {
  let listsReqs = this.lists.map(list =&amp;gt; {
    return axios.get(`correct_domain/${list}/get`);
  });
  axios.all(listsReqs)
  .then(axios.spread((...responses) =&amp;gt; {
    responses.forEach(res =&amp;gt; this.subscribers.push.apply(this.subscribers, res.data));
  })
)},
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/54866356/&lt;a href=&quot;https://stackoverflow.com/questions/54866356/cannot-assign-axios-response-value-to-a-variable-vue-js&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;cannot-assign-axios-response-value-to-a-variable-vue-js&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>vuex</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/504</guid>
      <comments>https://showcode.tistory.com/504#entry504comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:57 +0900</pubDate>
    </item>
    <item>
      <title>오류 Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKey토큰=31bf3856ad364e35</title>
      <link>https://showcode.tistory.com/503</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 Microsoft.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKey&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;토큰=31bf3856ad364e35&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 작은 웹 애플리케이션을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션에 일반 핸들러 2개를 추가하기 전까지는 잘 작동했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http 핸들러에 대해 다음과 같이 변경했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;system.web&amp;gt;
    &amp;lt;authentication mode=&quot;Forms&quot; &amp;gt;
        &amp;lt;forms protection=&quot;All&quot; timeout=&quot;720&quot; defaultUrl=&quot;Default.aspx&quot; loginUrl=&quot;Login.aspx&quot; &amp;gt;
        &amp;lt;/forms&amp;gt;
    &amp;lt;/authentication&amp;gt;
    &amp;lt;authorization&amp;gt;
        &amp;lt;deny users=&quot;?&quot;/&amp;gt;
    &amp;lt;/authorization&amp;gt;
    &amp;lt;compilation debug=&quot;true&quot; targetFramework=&quot;4.0&quot; /&amp;gt;

    &amp;lt;httpHandlers&amp;gt;
        &amp;lt;!--Code Log Handler--&amp;gt;
        &amp;lt;add verb=&quot;*&quot; path=&quot;*.aspx&quot; type=&quot;System.Web.UI.PageHandlerFactory&quot; /&amp;gt;
        &amp;lt;add verb=&quot;*&quot; type=&quot;InfoDomeNewUI.Handler.SendOWA&quot; path=&quot;SendOWA.ashx&quot; /&amp;gt;
        &amp;lt;add verb=&quot;*&quot; type=&quot;InfoDomeNewUI.Handler.SendSOS&quot; path=&quot;SendSOS.ashx&quot; /&amp;gt;
    &amp;lt;/httpHandlers&amp;gt;
    &amp;lt;customErrors mode=&quot;Off&quot;&amp;gt;
        &amp;lt;error statusCode=&quot;404&quot; redirect=&quot;Templates/PageNotFound.html&quot; /&amp;gt;
    &amp;lt;/customErrors&amp;gt;
&amp;lt;/system.web&amp;gt;
&amp;lt;system.webServer&amp;gt;
    &amp;lt;validation validateIntegratedModeConfiguration=&quot;false&quot; /&amp;gt;
    &amp;lt;handlers&amp;gt;
        &amp;lt;!--Code Log Handler--&amp;gt;
        &amp;lt;add name=&quot;LogHandler1&quot; path=&quot;SendOWA.ashx&quot; verb=&quot;*&quot; type=&quot;InfoDomeNewUI.Handler.SendOWA&quot;/&amp;gt;
        &amp;lt;!-- SMS SENDER--&amp;gt;
        &amp;lt;add name=&quot;SendSOS&quot; path=&quot;SendSOS.ashx&quot; verb=&quot;*&quot; type=&quot;InfoDomeNewUI.Handler.SendSOS&quot;/&amp;gt;
    &amp;lt;/handlers&amp;gt;
&amp;lt;/system.webServer&amp;gt;

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 asp.net4.0과 C#을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;3-1&quot;&gt;MVC를 사용하지 않습니다.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 호스트에서 정상적으로 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 게시된 코드를 호스팅할 때 위의 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스택 추적:-&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[파일을 찾을 수 없음 예외:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Microsoft' 파일 또는 어셈블리를 로드할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKey&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Token=31bf3856ad364e35' 또는 그 종속성 중 하나입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정한 파일을 찾을 수 없습니다.]&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹.Http.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 호스트.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SuppressFormsAuthRedirectModule.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;등록() +0&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[잘못된 작업]&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 적용 시작 초기화 방법 Start on System(시스템에서 시작)입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹.Http.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 호스트.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PreApplicationStartCode가 다음 오류 메시지와 함께 예외를 발생시켰습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Microsoft' 파일 또는 어셈블리를 로드할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKey&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Token=31bf3856ad364e35' 또는 그 종속성 중 하나입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정한 파일을 찾을 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;] 시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹, 편집.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빌드 관리자.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PreStartInitMethods(ICollection`1 메서드) +11708830 시스템을 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹, 편집.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빌드 관리자.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PreStartInitMethods() +465 시스템을 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹. 호스팅.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;호스팅 환경.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;초기화(Application Manager appManager, I 애플리케이션)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Host appHost, IconfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters, policyLevel 정책&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;레벨&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[HttpException(0x80004005):&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 적용 시작 초기화 방법 Start on System(시스템에서 시작)입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹.Http.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 호스트.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PreApplicationStartCode가 다음 오류 메시지와 함께 예외를 발생시켰습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Microsoft' 파일 또는 어셈블리를 로드할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKey&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Token=31bf3856ad364e35' 또는 그 종속성 중 하나입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정한 파일을 찾을 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;] 시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Http 런타임.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FirstRequestInit(HttpContextContext) +11697760 시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Http 런타임.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FirstRequestInit(HttpContextContext) +141 시스템을 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Http 런타임.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로세스 요청 알림 비공개(&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIS7WorkerRequestwr, HttpContext 컨텍스트) +4866485&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Microsoft로&lt;strong papago-id=&quot;10-1&quot;&gt; 표시&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-1&quot;&gt;윈도우즈&lt;/strong&gt; 서버에 .net(4.0 또는 4.5 또는 기타)이 성공적으로 설치된 경우에도 Web&lt;strong papago-id=&quot;10-1&quot;&gt;.Infrastructure.dll&lt;/strong&gt;이 GAC에 설치되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 호스트(일반적으로 Windows 클라이언트)에서는 도구/플랫폼(Visual Studio 등)이 설치될 때 GAC에 있는 것처럼 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 해결책 중 하나로 다음을 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 관리자 콘솔에서 다음 명령을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(Visual Studio를 사용하는 경우 메뉴 옵션 &quot;도구 --&amp;gt; 라이브러리 패키지 관리자 --&amp;gt; 패키지 관리자 콘솔:&quot;을 통해 액세스할 수 있습니다.)&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;PM&amp;gt; Install-Package Microsoft.Web.Infrastructure
&lt;/code&gt;&lt;/pre&gt; &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성공적으로 설치되면 다음 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-1&quot;&gt;Microsoft를 &lt;/strong&gt;확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-1&quot;&gt;이제&lt;/strong&gt; Web&lt;strong papago-id=&quot;14-1&quot;&gt;.Infrastructure.dll&lt;/strong&gt;이 참조로 추가되었습니다(솔루션 탐색기의 프로젝트 참조 폴더에서 확인할 수 있습니다).&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 참조의 속성을 보면 &quot;&lt;strong papago-id=&quot;15-1&quot;&gt;로컬 복사&lt;/strong&gt;&quot;가 기본적으로 &quot;&lt;strong papago-id=&quot;15-3&quot;&gt;참&lt;/strong&gt;&quot;으로 설정되어 있음을 알 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 프로젝트를 &quot;게시&quot;하면 마이크로소프트가 &lt;strong papago-id=&quot;16-1&quot;&gt;됩니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-1&quot;&gt;Web.Infrastructure.dll&lt;/strong&gt;이 배포됩니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPI를 통해 MVC4를 설치했는데 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;승인된 답변(rockyb)을 시도했을 때 패키지가 이미 설치되어 있고 제 프로젝트에 할당되어 있다는 메시지를 받았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 참조 목록을 확인해보니 참조가 되지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이크로소프트사.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션의 패키지 폴더에 Web.Infrastructure가 설치되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지를 추가할 때 NuGet을 사용하는 대신 Add Reference 옵션을 사용했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;팝업 창 왼쪽에서 찾아보기를 선택한 다음 창 하단의 찾아보기 버튼을 누릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션이 있는 폴더 아래의 패키지 폴더로 이동한 다음...로 드릴다운했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\mysolution\packages\Microsoft.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.1.0.0\lib\net40을 클릭하고 Microsoft를 클릭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.dll.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인을 클릭하면 패키지가 참조 목록에 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web Deploy Package 옵션을 사용하여 웹 사이트를 배포하고 모든 작업을 수행했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 Microsoft를 모방하지 않습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.dll 파일을 서버 BIN 폴더에 수동으로 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 효과가 있어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 프로젝트는 VS2010 웹사이트입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 파일은 다음과 같이 찾을 수:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C:\Program Files(x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.1.0.0\lib\net40&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복사해서 BIN 폴더에 붙여넣기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;web.config가 아직 없다면 아마도 이것을 포함시켜야 할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;compilation debug=&quot;true&quot; targetFramework=&quot;4.0&quot;&amp;gt;
  &amp;lt;assemblies&amp;gt;
    &amp;lt;add assembly=&quot;Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&quot;/&amp;gt;
  &amp;lt;/assemblies&amp;gt;
&amp;lt;/compilation&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조:&lt;a href=&quot;http://thedeveloperblog.com/&quot; papago-id=&quot;25-1&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;http://&lt;a href=&quot;http://thedeveloperblog.com/&quot; papago-id=&quot;25-1&quot; rel=&quot;noreferrer&quot;&gt;thedeveloperblog&lt;/a&gt;.com/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 클스를추는대신하가래▁instead신.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(.cs)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실수로 파일을 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Web API Controller&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 솔루션에 구성 파일을 추가한 클래스입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그 구성 파일은 언급된 DLL(Microsoft)을 찾고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure 1.0.0.0).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 그 파일을 제거하고 애플리케이션을 정리한 다음 게시했을 때 작동했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이크로소프트를 설치한 후.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; »를 통한 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인프라스트럭처를 통한&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Nuget-Package Manager&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PM&amp;gt; Install-Package Microsoft.Web.Infrastructure
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Microsoft.Web.Infrastructure.dll&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에수로에서 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Nuget-Package&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 응용 프로그램의 폴더를 만든 다음 웹 서버에 배포된 웹 응용 프로그램의 bin 폴더에 붙여넣습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지\Microsoft.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.1.0.0\lib\net40\Microsoft.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.dll&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 나에게 효과가 있었다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Update-Package -reinstall Microsoft.Web.Infrastructure&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 설치되어 있다는 오류가 계속 발생했기 때문에 작동하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는&lt;em papago-id=&quot;36-1&quot;&gt; 마이크로소프트&lt;/em&gt;로 이동해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 폴더에 있는 &lt;em papago-id=&quot;36-1&quot;&gt;Web.Infrastructure.1.0.&lt;/em&gt;0 폴더를 수동으로 &lt;em papago-id=&quot;36-1&quot;&gt;삭제&lt;/em&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 에, 을한후에, 는것달리를 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Install-Package Microsoft.Web.Infrastructure&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 참고:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CopyLocal&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동으로 true로 설정되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;때때로 강제로 패키지를 삭제한 후 다시 설치해야 합니다. 패키지를 삭제해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Uninstall-Package Microsoft.Web.Infrastructure -force
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다시 설치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Install-Package Microsoft.Web.Infrastructure
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었고 &quot;마이크로소프트&quot;였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.dll&quot;이(가) 누락된 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 조언을 해보고 MVC 등을 설치했지만 아무 도움이 되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션은 Microsoft가 포함된 &quot;WSE(Web Services Enhancements) 1.0 SP1 for Microsoft .NET&quot;을 설치하는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure.dll.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/en-gb/download/details.aspx?id=4065&quot; rel=&quot;nofollow&quot; papago-id=&quot;43-1&quot;&gt;이용&lt;/a&gt; 가능한 곳: http://www.microsoft.com/en-gb/download/details.aspx?id=4065&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio 2010 SP1을 설치하려고 했지만 작동하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마침내 마이크로소프트를 얻었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;동료의 Web.Infrastructure.dll.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트가 완벽하게 작동하는 친구 PC에서 dll을 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;dll을 Temp/Temporary ASP.NET 파일로 검색합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 창에 %temp%를 사용하여 Temp로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dll을 PC에 넣은 후 프로젝트에 참조를 추가하면 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이트를 다시 게시하면서 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 문제에 직면하고 있었는데 불행히도 여기서는 아무 것도 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마침내, 저는 이 링크를 발견했습니다:&lt;a href=&quot;https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;https://blogs.msdn.microsoft.com/jjameson/2009/11/18/&lt;a href=&quot;https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;the-copy-local-bug-in-visual-studio&lt;/a&gt;/&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션은 다소 바보같습니다. microsoft.web.인프라 dll에 대한 copy-local을 False로 설정한 다음 True로 다시 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데, 제 생각에 지금 일어나고 있는 일은 두 가지 버전의 microsoft.web.인프라 dll이 있는데 하나는 GAC에 미리 설치되어 있는 것이고 다른 하나는 현재 nugget 패키지가 된 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 하나가 다른 하나를 가리고 있어서 문제를 일으키고 있다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 빌드 서버에서 폴더로 복사해야 합니다(이 폴더는 압축되어 배포로 전송됨).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에 로컬 복사본이 있고 &quot;아, 괜찮을 거야&quot;라고 생각한 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 파일 전용 웹사이트를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 양식 애플리케이션(대상 net45)에 MVC 5 추가.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;packages.config를 수정해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package id=&quot;Microsoft.AspNet.Mvc&quot; version=&quot;5.2.3&quot; targetFramework=&quot;net45&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package id=&quot;Microsoft.AspNet.Mvc&quot; version=&quot;5.2.3&quot; targetFramework=&quot;net45&quot; developmentDependency=&quot;true&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버그 모드(이전에는 위에 설명된 오류가 있음)에서 로컬 상자에서 시작하기 위해 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 7에서 VS 2017을 실행 중... 파일 &amp;gt; 열기 &amp;gt; 웹 사이트 &amp;gt; 파일(IIS 외부 루트 디렉터리 선택)을 통해 열립니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 많은 NuGet 패키지를 업그레이드한 후에도 같은 문제를 겪었습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 여기에 설명된 모든 종류의 삭제, 청소, 재설치를 시도했지만 소용이 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조에 Microsoft가 포함되어 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure가 설치되어 있음을 NuGet 관리자가 표시했음에도 불구하고.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 다음을 교체하여 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  &amp;lt;package id=&quot;Microsoft.Web.Infrastructure&quot; version=&quot;1.0.0.0&quot; targetFramework=&quot;net45&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  &amp;lt;package id=&quot;Microsoft.Web.Infrastructure&quot; version=&quot;1.0.0.0&quot; targetFramework=&quot;net46&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;packages.config에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;범인은 분명히 &quot;net45&quot;입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비주얼 스튜디오 2022 .net.4.8&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것을 실행하고 해결됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nuget package manager PM &amp;gt; Install-Package Microsoft를 사용하여 이 dll을 설치할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.Infrastructure - 버전 1.0.0&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12669206/&lt;a href=&quot;https://stackoverflow.com/questions/12669206/error-microsoft-web-infrastructure-version-1-0-0-0-culture-neutral-publickeyt&quot; target=&quot;_blank&quot; papago-id=&quot;62-1&quot;&gt;error-microsoft-web-infrastructure-version-1-0-0-0-culture-neutral-publickeyt&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ASP.NET</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/503</guid>
      <comments>https://showcode.tistory.com/503#entry503comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:50 +0900</pubDate>
    </item>
    <item>
      <title>Tkinter에서 윈도우 닫기 이벤트는 어떻게 처리합니까?</title>
      <link>https://showcode.tistory.com/502</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tkinter에서 윈도우 닫기 이벤트는 어떻게 처리합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python Tkinter 프로그램에서 창 닫기 이벤트(사용자가 'X' 버튼을 클릭)를 어떻게 처리합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tkinter는 &lt;a href=&quot;http://web.archive.org/web/20201111215134/http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm#protocols&quot; papago-id=&quot;2-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;2-1-0&quot;&gt;프로토콜&lt;/em&gt;&lt;/a&gt; 핸들러라는 &lt;a href=&quot;http://web.archive.org/web/20201111215134/http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm#protocols&quot; papago-id=&quot;2-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;2-1-0&quot;&gt;메커니즘&lt;/em&gt;&lt;/a&gt;을 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 프로토콜이라는 &lt;em papago-id=&quot;2-3&quot;&gt;용어&lt;/em&gt;는 응용 프로그램과 창 관리자 간의 상호 작용을 나타냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 일반적으로 사용되는 프로토콜은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WM_DELETE_WINDOW&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 창 관리자를 사용하여 창을 명시적으로 닫을 때 수행되는 작업을 정의하는 데 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로토콜에 대한 &lt;em papago-id=&quot;5-1&quot;&gt;처리기를 설치하는 방법&lt;/em&gt;(위젯은 반드시&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Tk&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Toplevel&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위젯):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 구체적인 예가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import tkinter as tk
from tkinter import messagebox

root = tk.Tk()

def on_closing():
    if messagebox.askokcancel(&quot;Quit&quot;, &quot;Do you want to quit?&quot;):
        root.destroy()

root.protocol(&quot;WM_DELETE_WINDOW&quot;, on_closing)
root.mainloop()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Matt는 Close 버튼을 고전적으로 수정한 것을 보여주었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 하나는 닫기 버튼을 사용하여 창을 최소화하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://wiki.tcl-lang.org/page/wm+iconify&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;11-1-0&quot;&gt;아이콘화&lt;/em&gt;&lt;/a&gt; 방법을 사용하여 이 동작을 재현할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.tcl.tk/man/tcl8.4/TkCmd/wm.htm#M39&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;12-1-0&quot;&gt;프로토콜&lt;/em&gt;&lt;/a&gt; 방법의 두 번째 인수입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Windows 7 및 10에서 테스트된 작동 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Python 3
import tkinter
import tkinter.scrolledtext as scrolledtext

root = tkinter.Tk()
# make the top right close button minimize (iconify) the main window
root.protocol(&quot;WM_DELETE_WINDOW&quot;, root.iconify)
# make Esc exit the program
root.bind('&amp;lt;Escape&amp;gt;', lambda e: root.destroy())

# create a menu bar with an Exit command
menubar = tkinter.Menu(root)
filemenu = tkinter.Menu(menubar, tearoff=0)
filemenu.add_command(label=&quot;Exit&quot;, command=root.destroy)
menubar.add_cascade(label=&quot;File&quot;, menu=filemenu)
root.config(menu=menubar)

# create a Text widget with a Scrollbar attached
txt = scrolledtext.ScrolledText(root, undo=True)
txt['font'] = ('consolas', '12')
txt.pack(expand=True, fill='both')

root.mainloop()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에게 두  새로운 종료을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존의 File → Exit(파일 ▁exit 종료) 및 버튼도 선택할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동에 ,  Tkinter때 Tkinter 동에라따를활, 리특히고 Tkinter.after를 사용하여 이 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;destroy()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜, 단추 등을 사용하더라도 이 활동(&quot;실행 중&quot; 오류)을 종료하는 것이 아니라 방해합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;거의 모든 경우에 가장 좋은 해결책은 깃발을 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 어리석은 . (하지 않다고  :) 여기그대사방는예있다어니습가은리만석지확않하신지필고다그하요!) :)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from Tkinter import *

def close_window():
  global running
  running = False  # turn off while loop
  print( &quot;Window closed&quot;)

root = Tk()
root.protocol(&quot;WM_DELETE_WINDOW&quot;, close_window)
cv = Canvas(root, width=200, height=200)
cv.pack()

running = True;
# This is an endless loop stopped only by setting 'running' to 'False'
while running: 
  for i in range(200): 
    if not running: 
        break
    cv.create_oval(i, i, i+1, i+1)
    root.update() 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 그래픽 작업이 제대로 종료됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 하만면됩다니확만 확인하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;running&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적재적소에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;x 단추의 기능을 변경하거나 닫을 수 없도록 하려면 이 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourwindow.protocol(&quot;WM_DELETE_WINDOW&quot;, whatever)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 &quot;감정&quot;이 무엇을 의미하는지 무시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def whatever():
    # Replace this with your own event for example:
    print(&quot;oi don't press that button&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 창을 닫을 때 다음과 같이 다시 호출할 수 있도록 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourwindow.withdraw() 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창을 숨기지만 닫지는 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourwindow.deiconify()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 창이 다시 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;em papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 제게 알려주신 아포스톨로스의 답변에 감사드립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 2019년 파이썬 3에 대한 훨씬 더 자세한 예가 있으며, 더 명확한 설명과 예제 코드가 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 사실에 주의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;destroy()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 사용자 정의 창 닫기 처리기가 전혀 없는 경우 사용자가 &lt;em papago-id=&quot;27-1&quot;&gt;창을 닫을&lt;/em&gt; 때 &lt;em papago-id=&quot;27-1&quot;&gt;창&lt;/em&gt;과 실행 &lt;em papago-id=&quot;27-1&quot;&gt;중&lt;/em&gt;인 모든 콜백이 즉시 삭제됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 현재 활동에  이는현재 에▁using▁this다있습니,를 사용할 때 당신에게 나쁠 수.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tkinter.after&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(콜백 가능).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 데이터를 처리하고 디스크에 쓰는 콜백을 사용하고 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 데이터 쓰기가 갑자기 중단되지 않고 완료되기를 원하는 것이 분명합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 위한 가장 좋은 해결책은 깃발을 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 창 닫기를 요청하면 플래그로 표시한 다음 이에 대응합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(참고: 저는 보통 GUI를 잘 캡슐화된 클래스와 별도의 작업자 스레드로 설계하고 &quot;global&quot;을 사용하지 않습니다(대신 클래스 인스턴스 변수를 사용합니다). 하지만 이것은 사용자가 창을 닫을 때 TK가 어떻게 당신의 주기적인 콜백을 갑자기 죽였는지 보여주는 단순하고 분해된 예입니다...)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from tkinter import *
import time

# Try setting this to False and look at the printed numbers (1 to 10)
# during the work-loop, if you close the window while the periodic_call
# worker is busy working (printing). It will abruptly end the numbers,
# and kill the periodic callback! That's why you should design most
# applications with a safe closing callback as described in this demo.
safe_closing = True

# ---------

busy_processing = False
close_requested = False

def close_window():
    global close_requested
    close_requested = True
    print(&quot;User requested close at:&quot;, time.time(), &quot;Was busy processing:&quot;, busy_processing)

root = Tk()
if safe_closing:
    root.protocol(&quot;WM_DELETE_WINDOW&quot;, close_window)
lbl = Label(root)
lbl.pack()

def periodic_call():
    global busy_processing

    if not close_requested:
        busy_processing = True
        for i in range(10):
            print((i+1), &quot;of 10&quot;)
            time.sleep(0.2)
            lbl[&quot;text&quot;] = str(time.time()) # Will error if force-closed.
            root.update() # Force redrawing since we change label multiple times in a row.
        busy_processing = False
        root.after(500, periodic_call)
    else:
        print(&quot;Destroying GUI at:&quot;, time.time())
        try: # &quot;destroy()&quot; can throw, so you should wrap it like this.
            root.destroy()
        except:
            # NOTE: In most code, you'll wanna force a close here via
            # &quot;exit&quot; if the window failed to destroy. Just ensure that
            # you have no code after your `mainloop()` call (at the
            # bottom of this file), since the exit call will cause the
            # process to terminate immediately without running any more
            # code. Of course, you should NEVER have code after your
            # `mainloop()` call in well-designed code anyway...
            # exit(0)
            pass

root.after_idle(periodic_call)
root.mainloop()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 당신에게 그것을 보여줄 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WM_DELETE_WINDOW&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;핸들러는 사용자 지정 중에도 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;periodic_call()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업무/시간 중에 바쁩니다!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 꽤 된 우리는꽤과것사을용다합니된장▁some▁pretty다▁exagger를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.after()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값: 500밀리초.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 정기적인 통화가 통화 중일 때 닫는 것과 그렇지 않을 때 닫는 것 사이의 차이를 쉽게 알 수 있도록 하기 위한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자가 업데이트되는 동안 닫으면 다음과 같은 것을 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WM_DELETE_WINDOW&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주기적인 호출 &quot;처리 중인 중에 &lt;em papago-id=&quot;25-1&quot;&gt;발생&lt;/em&gt;했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실입니다. 숫자가 일시 중지된 상태에서 닫으면(즉, 정기적인 콜백이 처리되지 않는 상태에서 닫힘) 종료가 &quot;비지&quot; 상태일 때 발생했음을 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 사용할는, 당신의 제사용서에실,서▁your제사에,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.after()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답 GUI를 사용하려면 30-100밀리초 정도의 시간이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 TK의 기본 &quot;마감 시 모든 작업을 즉시 중단&quot;하는 행동으로부터 자신을 보호하는 방법을 이해하는 데 도움이 되는 데모일 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WM_DELETE_WINDOW&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 후 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.destroy()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창이 안전할 때(앱이 모든 작업을 완료했을 때).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 사할수있다습니도용▁ps를 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WM_DELETE_WINDOW&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자에게 창을 닫을지 묻는 &lt;em papago-id=&quot;32-1&quot;&gt;메시지&lt;/em&gt;를 표시합니다. 사용자가 아니오라고 대답하면 플래그를 설정하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 간단합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 단지 메시지 상자를 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WM_DELETE_WINDOW&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 답변에 따라 플래그를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tkinter 창을 닫으려면 destroy()를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   from Tkinter import *
   root = Tk()
   Button(root, text=&quot;Quit&quot;, command=root.destroy).pack()
   root.mainloop()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;root.quit()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 라인은 단지 다음을 우회합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root.mainloop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root.mainloop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;quit()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령이 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;root.destroy()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 동안에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;destroy()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root.mainloop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root.mainloop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정지합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램을 종료하고 싶으니 다음을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root.destroy()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 메인 루프를 멈출 것이기 때문에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 무한 루프를 실행하고 싶고 TK 창을 파괴하고 싶지 않고 다음 이후에 코드를 실행하고 싶다면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root.mainloop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라인 그렇다면 당신은 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root.quit()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from Tkinter import *
def quit():
    global root
    root.quit()

root = Tk()
while True:
    Button(root, text=&quot;Quit&quot;, command=quit).pack()
    root.mainloop()
    #do something
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 쉬운 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from tkinter import *
window = Tk()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 경우: 숨기창:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window.withdraw()&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;과 같이 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window.deiconify()&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 창서나가경우는에:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit()&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창에서 나가는 경우(.exe 파일을 만든 경우):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from tkinter import *
import sys
window = Tk()
sys.exit()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 물론 버튼을 배치하고 위의 코드를 함수에 사용해야 버튼의 명령 부분에 함수의 이름을 입력할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 버전을 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import tkinter

window = Tk()

closebutton = Button(window, text='X', command=window.destroy)
closebutton.pack()

window.mainloop()

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 명령을 추가하려는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import tkinter

window = Tk()


def close():
    window.destroy()
    #More Functions


closebutton = Button(window, text='X', command=close)
closebutton.pack()

window.mainloop()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있는 항목:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;root = Tk()
def func():
    print('not clossed')
root.protocol('wm_delete_window', func)
root.mainloop()
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;def on_closing():
    if messagebox.askokcancel(&quot;Quit&quot;, &quot;would you like to quit&quot;):
        window.destroy()


window.protocol(&quot;WM_DELETE_WINDOW&quot;, on_closing)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 창 닫기 이벤트를 처리할 수 있습니다. 다른 작업을 수행하려면 on_message 함수에서 발생하는 작업을 변경하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 훨씬 더 간단한 방법이 그것을 사용하는 것이라고 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;break&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예를 들어 , 예들어&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import tkinter as tk
win=tk.Tk
def exit():
    break
btn= tk.Button(win, text=&quot;press to exit&quot;, command=exit)
win.mainloop()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 사용 OR 용사&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sys.exit()&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import tkinter as tk
import sys
win=tk.Tk
def exit():
    sys.exit
btn= tk.Button(win, text=&quot;press to exit&quot;, command=exit)
win.mainloop()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/111155/&lt;a href=&quot;https://stackoverflow.com/questions/111155/how-do-i-handle-the-window-close-event-in-tkinter&quot; target=&quot;_blank&quot; papago-id=&quot;74-1&quot;&gt;how-do-i-handle-the-window-close-event-in-tkinter&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/502</guid>
      <comments>https://showcode.tistory.com/502#entry502comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:41 +0900</pubDate>
    </item>
    <item>
      <title>이클립스 선폭 마커가 있습니까?</title>
      <link>https://showcode.tistory.com/501</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이클립스 선폭 마커가 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 모든 코드 줄을 65자로 묶어야 하는 특정 프로젝트가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해 일식 자바 코드 포맷을 제대로 설정했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 정말 원하는 것은 편집기에 세로줄이 그려지는 것입니다. 제가 타자를 칠 때 뿐만 아니라, 제가 타자를 칠 때 최대 선폭이 어디에 있는지를 보여주는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 코드 포맷터 속성 페이지에 표시되므로 일부 용량에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse에서 이 기능을 설정할 수 있는 옵션이 없고 Eclipse Plugin Central에서 이 기능을 수행하는 플러그인이 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows / 기본 설정(최소한 Windows - IIRC에서는 다른 운영 체제에 대해 이동함)을 확인한 후 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;General -&amp;gt; Editors -&amp;gt; Text Editors -&amp;gt; Show Print Margin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 선택하면 선이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 찾는 빠른 방법으로 상단에 있는 검색 필터를 사용하고 &quot;마진&quot;을 필터링합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;댓글의 메모 - 저에 의해 확인되지 않았지만, 저는 그것들을 의심할 이유가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2016년에 어떻게든 변경되었습니다. 자세한 내용은 [here&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=495490#c2&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;](&lt;/a&gt;https://bugs.eclipse.org/bugs/&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=495490#c2&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;show_bug&lt;/a&gt;.cgi?id=495490#c2) 참조). 포맷을 설정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[Windows]--&amp;gt;[환경설정] 메뉴에서 [Java]--&amp;gt;[코드 스타일]--&amp;gt;[포맷]을 선택한 후 포맷터 프로파일을 편집합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭 페이지 [라인 래핑]에서 &quot;최대 라인 너비&quot;라는 설정을 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 설정을 변경하면 Java 소스 편집기의 인쇄 여백도 변경됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse Luna (4.4): 메뉴를 선택합니다. 왼쪽 상단 모서리의 검색 상자에 다음을 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt; &lt;img src=&quot;https://i.stack.imgur.com/P9TPM.png&quot; alt=&quot;enter image description here&quot;&gt; &lt;br&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;섹션에서 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 상자에 다음을 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;65&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 원하는 대로.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@존&lt;a href=&quot;https://stackoverflow.com/a/1248899/4561887&quot; papago-id=&quot;11-0&quot;&gt; 스키트의 대답&lt;/a&gt;은 불완전합니다&lt;a href=&quot;https://stackoverflow.com/a/1248899/4561887&quot; papago-id=&quot;11-0&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(1/2) 먼저, 그가 말한 것을 수행합니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;Window&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Preferences&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;General&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Editors&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Text Editors&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt; 다음 항목을 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Show Print Margin&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 상자를 클릭하면 수직선이 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2JXhX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2JXhX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 찾는 빠른 방법으로 상단에 있는 검색 필터를 사용하고 &quot;마진&quot;을 필터링합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이것은 선만 표시하지만 대부분의 경우 &quot;마진 열 인쇄&quot; 값은 완전히 무시됩니다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;21-0&quot;&gt;줄이 있어야&lt;/strong&gt; 하는 &lt;strong papago-id=&quot;21-0&quot;&gt;위치에 대한 &lt;/strong&gt;열&lt;strong papago-id=&quot;21-0&quot;&gt; 번호를 설정&lt;/strong&gt;하려면 @John Percival Hackworth가 여기서 &lt;a href=&quot;https://stackoverflow.com/a/3697302/4561887&quot; papago-id=&quot;21-2&quot;&gt;언급&lt;/a&gt;하는 것을 &lt;strong papago-id=&quot;21-0&quot;&gt;수행&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(2/2) 이동:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;Window&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Preferences&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C/C++&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[또는 사용 중인 언어] --&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Code Style&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Formatter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; --&amp;gt; 릭클&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Edit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; --&amp;gt; 아래에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Line Wrapping&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Maximum line width&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JPET7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JPET7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 사항:&lt;/font&gt;&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+ +를 사용하여 소프트 라인 래핑을 켜거나 끕니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;화면 끝에 소프트랩(즉, 캐리지 리턴 없음)이 표시되지만 위에서 설정한 열에는 표시되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;33-0&quot;&gt;위에서 설정한 열(즉, 캐리지 리턴을 추가하는 열)에 하드 라인 래핑을 적용하려면 어떻게 해야 합니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;33-0&quot;&gt; 아직 모르겠어요.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 알아내면 제게다가.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Sublime Text 3(훨씬 더 나은 편집기이지만 훨씬 더 나쁜 인덱서/함수 정의 파인더:())에서는 +입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;34-0&quot;&gt;업데이트:&lt;/strong&gt; 다음을 사용하는 &quot;CppStyle&quot; 플러그인으로 가능할 수 있다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clang-format&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+ +를 사용하여 자동 형식을 적용하지만 아직 작동하는 정확한 지침을 알지 못합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련:&lt;/font&gt;&lt;/h1&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭 너비 &lt;a href=&quot;https://stackoverflow.com/questions/1650652/changing-editor-tab-width-in-eclipse-3-5/58494110#58494110&quot; papago-id=&quot;37-1&quot;&gt;설정&lt;/a&gt;: &lt;a href=&quot;https://stackoverflow.com/questions/1650652/changing-editor-tab-width-in-eclipse-3-5/58494110#58494110&quot; papago-id=&quot;37-1&quot;&gt;Eclipse&lt;/a&gt; 3&lt;a href=&quot;https://stackoverflow.com/questions/1650652/changing-editor-tab-width-in-eclipse-3-5/58494110#58494110&quot; papago-id=&quot;37-1&quot;&gt;.5에서 편집기&lt;/a&gt; 탭 &lt;a href=&quot;https://stackoverflow.com/questions/1650652/changing-editor-tab-width-in-eclipse-3-5/58494110#58494110&quot; papago-id=&quot;37-1&quot;&gt;너비 변경&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에스프레시프와 다른 브랜드 이클립스를 사용한 지 몇 달 만에 최대 선폭을 넓히는 방법을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 많은 시도를 했고 Espressif-IDE에 대한 방법을 보여주었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트-&amp;gt;속성-&amp;gt;C/C++ 일반-&amp;gt;포맷-&amp;gt;프로젝트별 설정 사용-&amp;gt;새로 만들기-&amp;gt;프로파일 이름을 지정하고 기본 제공 형식을 기반으로 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;BSD/Allman-&amp;gt;이 새 프로필 편집-&amp;gt;라인 래핑 탭 유형(예: 200)에서 최대 줄 너비-&amp;gt;변경사항 적용을 선택합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 파일 형식 지정: 줄이 길어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 같은 행동을 하기 전에:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창-&amp;gt;환경설정-&amp;gt;C/C++-&amp;gt;코드 스타일-&amp;gt;포맷...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 결코 효과가 없었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1248895/&lt;a href=&quot;https://stackoverflow.com/questions/1248895/is-there-an-eclipse-line-width-marker&quot; target=&quot;_blank&quot; papago-id=&quot;42-1&quot;&gt;is-there-an-eclipse-line-width-marker&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Eclipse</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/501</guid>
      <comments>https://showcode.tistory.com/501#entry501comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:31 +0900</pubDate>
    </item>
    <item>
      <title>Wordpress(또는 .htaccess)에서 URL 별칭 만들기</title>
      <link>https://showcode.tistory.com/500</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wordpress(또는 .htaccess)에서 URL 별칭 만들기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스에서 실행 중인 사이트가 있는데, 하나의 사용자 정의 짧은 URL을 만들고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 URL이 www.mysite.com/category/post 이면 사용자가 www.mysite.com/alias 을 방문할 수 있기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 'Wordpress-y' 방식이 있다면, 그것이 더 좋겠지만, 저는 또한 .htaccess 파일을 수정하여 그것을 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
    RewriteEngine On
    RewriteRule ^alias$ category/post [R=301,L]
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것이 약간 오래된 게시물이라는 것을 알고 있고 이미 받아들여진 답변을 가지고 있지만, 우리 중 .htaccess 파일을 가지고 놀고 싶지 않거나 할 수 없는 사람들을 위해, 이 공간에 여러 개의 사용 가능한 플러그인이 있다는 것에 주목해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 80만 개 이상의 설치가 있는&lt;a href=&quot;https://wordpress.org/plugins/redirection/&quot; papago-id=&quot;6-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;https://wordpress.org/plugins/&lt;a href=&quot;https://wordpress.org/plugins/redirection/&quot; papago-id=&quot;6-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;redirection&lt;/a&gt;/ 을 사용했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 200,000개 이상의 설치가 &lt;a href=&quot;https://wordpress.org/plugins/simple-301-redirects/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-3&quot;&gt;있는&lt;/a&gt;&lt;a href=&quot;https://wordpress.org/plugins/search/redirect/&quot; papago-id=&quot;6-5&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;https&lt;a href=&quot;https://wordpress.org/plugins/search/redirect/&quot; papago-id=&quot;6-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;://&lt;/a&gt;wordpress.org/plugins/&lt;a href=&quot;https://wordpress.org/plugins/search/redirect/&quot; papago-id=&quot;6-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;simple-301-redirects&lt;/a&gt;/ 와 소규모 설치 기반이 있는 여러 개의 다른 사이트도 https://wordpress.org/plugins/search/redirect/ 에서 이용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29444739/&lt;a href=&quot;https://stackoverflow.com/questions/29444739/make-url-alias-in-wordpress-or-htaccess&quot; target=&quot;_blank&quot; papago-id=&quot;7-1&quot;&gt;make-url-alias-in-wordpress-or-htaccess&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/500</guid>
      <comments>https://showcode.tistory.com/500#entry500comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:23 +0900</pubDate>
    </item>
    <item>
      <title>vba를 사용하여 엑셀에서 데이터를 잠그는 방법</title>
      <link>https://showcode.tistory.com/499</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;vba를 사용하여 엑셀에서 데이터를 잠그는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다른 사람들이 VBA를 사용하여 제 엑셀 시트의 셀 내용을 편집하는 것을 막고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 보호하지 않을 셀(사용자 편집 가능)의 잠금 상태를 거짓으로 설정하여 셀을 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Worksheets(&quot;Sheet1&quot;).Range(&quot;B2:C3&quot;).Locked = False
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 시트를 보호할 수 있고 다른 모든 셀이 보호됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;VBA 코드가 셀을 수정할 수 있도록 허용하는 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Worksheets(&quot;Sheet1&quot;).Protect UserInterfaceOnly:=True
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Call Worksheets(&quot;Sheet1&quot;).Protect(UserInterfaceOnly:=True)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Worksheet.Protect&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법, 다음과 같은 것:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub ProtectActiveSheet()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    ws.Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True, Password=&quot;SamplePassword&quot;
End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 VBA 코드에 암호를 포함하는 것에 대해 주의해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수식을 삭제하는 등의 작은 실수를 방지하는 단순한 장벽만 세우려는 경우에는 반드시 암호가 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Excel의 VBA에서 특정 작업을 수행하는 방법을 보려면 매크로를 기록하고 매크로가 생성하는 코드를 살펴 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 VBA를 시작하는 좋은 방법입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 범위 A1에서 I50 사이의 셀을 잠그려면 아래의 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Worksheets(&quot;Enter your sheet name&quot;).Range(&quot;A1:I50&quot;).Locked = True
ActiveSheet.Protect Password:=&quot;Enter your Password&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 경우에는 이미 보호 시트가 있는 경우 아래 코드를 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ActiveSheet.Unprotect Password:=&quot;Enter your Password&quot;
Worksheets(&quot;Enter your sheet name&quot;).Range(&quot;A1:I50&quot;).Locked = True
ActiveSheet.Protect Password:=&quot;Enter your Password&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워크시트의 변경 이벤트에 캡처된 워크시트 수준에서도 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 당신의 요구에 더 적합하다면요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값, 기준 등을 기준으로 동적 잠금을 허용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Private Sub Worksheet_Change(ByVal Target As Range)

    'set your criteria here
    If Target.Column = 1 Then

        'must disable events if you change the sheet as it will
        'continually trigger the change event
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True

        MsgBox &quot;You cannot do that!&quot;
    End If
End Sub
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Sub LockCells()

Range(&quot;A1:A1&quot;).Select

Selection.Locked = True

Selection.FormulaHidden = False

ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True

End Sub
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3037400/&lt;a href=&quot;https://stackoverflow.com/questions/3037400/how-to-lock-the-data-in-a-cell-in-excel-using-vba&quot; target=&quot;_blank&quot; papago-id=&quot;12-1&quot;&gt;how-to-lock-the-data-in-a-cell-in-excel-using-vba&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/499</guid>
      <comments>https://showcode.tistory.com/499#entry499comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:17 +0900</pubDate>
    </item>
    <item>
      <title>ASP.NET MVC 작업에서 HTTP 404 응답을 보내는 올바른 방법은 무엇입니까?</title>
      <link>https://showcode.tistory.com/498</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP.NET MVC 작업에서 HTTP 404 응답을 보내는 올바른 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경로가 지정된 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;{FeedName}/{ItemPermalink}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ex: /Blog/Hello-World&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 물건이 없다면 404를 반품하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP.NET MVC에서 이 작업을 수행하는 올바른 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엉덩이에서 촬영(카우보이 코딩;-), 저는 다음과 같은 것을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class HomeController : Controller
{
    public ActionResult Index()
    {
        return new HttpNotFoundResult(&quot;This doesn't exist&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpNotFound 결과:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System;
using System.Net;
using System.Web;
using System.Web.Mvc;

namespace YourNamespaceHere
{
    /// &amp;lt;summary&amp;gt;An implementation of &amp;lt;see cref=&quot;ActionResult&quot; /&amp;gt; that throws an &amp;lt;see cref=&quot;HttpException&quot; /&amp;gt;.&amp;lt;/summary&amp;gt;
    public class HttpNotFoundResult : ActionResult
    {
        /// &amp;lt;summary&amp;gt;Initializes a new instance of &amp;lt;see cref=&quot;HttpNotFoundResult&quot; /&amp;gt; with the specified &amp;lt;paramref name=&quot;message&quot;/&amp;gt;.&amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&quot;message&quot;&amp;gt;&amp;lt;/param&amp;gt;
        public HttpNotFoundResult(String message)
        {
            this.Message = message;
        }

        /// &amp;lt;summary&amp;gt;Initializes a new instance of &amp;lt;see cref=&quot;HttpNotFoundResult&quot; /&amp;gt; with an empty message.&amp;lt;/summary&amp;gt;
        public HttpNotFoundResult()
            : this(String.Empty) { }

        /// &amp;lt;summary&amp;gt;Gets or sets the message that will be passed to the thrown &amp;lt;see cref=&quot;HttpException&quot; /&amp;gt;.&amp;lt;/summary&amp;gt;
        public String Message { get; set; }

        /// &amp;lt;summary&amp;gt;Overrides the base &amp;lt;see cref=&quot;ActionResult.ExecuteResult&quot; /&amp;gt; functionality to throw an &amp;lt;see cref=&quot;HttpException&quot; /&amp;gt;.&amp;lt;/summary&amp;gt;
        public override void ExecuteResult(ControllerContext context)
        {
            throw new HttpException((Int32)HttpStatusCode.NotFound, this.Message);
        }
    }
}
// By Erik van Brakel, with edits from Daniel Schaffer :)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식을 사용하면 프레임워크 표준을 준수할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 거기에는 HttpUnauthorizedResult가 있기 때문에, 이것은 나중에 당신의 코드를 유지하는 다른 개발자(당신이 사는 곳을 알고 있는 싸이코)의 관점에서 프레임워크를 확장할 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리플렉터를 사용하여 HttpUnauthorizedResult(HttpUnauthorizedResult)가 어떻게 달성되는지 확인할 수 있습니다. 이 접근 방식이 누락된 것이 있는지 알 수 없기 때문입니다(거의 단순한 것 같습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 리플렉터를 사용하여 HttpUnauthorizedResult를 살펴보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답에 대한 상태 코드를 0x191(401)로 설정하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 401에 대해 작동하지만 404를 새로운 값으로 사용하면 Firefox에서 빈 페이지만 표시되는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Internet Explorer는 기본 404를 표시하지만 ASP.NET 버전은 표시하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 개발자 도구 모음을 사용하여 FF의 헤더를 검사했는데, 404 Not Found 응답을 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순히 FF에서 잘못 구성한 것일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 말이 나온 김에 제프의 접근법은 KISS의 좋은 예라고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 이 샘플에 장황함이 정말로 필요하지 않다면, 그의 방법도 잘 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 그렇게 합니다; 이 코드는 다음에서 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BaseController&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// returns our standard page not found view
/// &amp;lt;/summary&amp;gt;
protected ViewResult PageNotFound()
{
    Response.StatusCode = 404;
    return View(&quot;PageNotFound&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 불리는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public ActionResult ShowUserDetails(int? id)
{        
    // make sure we have a valid ID
    if (!id.HasValue) return PageNotFound();
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;throw new HttpException(404, &quot;Are you sure you're in the right place?&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpNotFoundResult는 제가 사용하는 것에 대한 훌륭한 첫 단계입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpNotFoundResult를 반환하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 문제는, 다음은 무엇일까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HandleNotFoundAttribute라는 작업 필터를 생성하여 404 오류 페이지를 표시했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기를 반환하므로 컨트롤러당 특수 404 보기를 생성하거나 기본 공유 404 보기를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프레임 워크가 상태 코드가 404인 HttpException을 던지기 때문에 컨트롤러에 지정된 작업이 없는 경우에도 호출됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class HandleNotFoundAttribute : ActionFilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        var httpException = filterContext.Exception.GetBaseException() as HttpException;
        if (httpException != null &amp;amp;&amp;amp; httpException.GetHttpCode() == (int)HttpStatusCode.NotFound)
        {
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; // Prevents IIS from intercepting the error and displaying its own content.
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.StatusCode = (int) HttpStatusCode.NotFound;
            filterContext.Result = new ViewResult
                                        {
                                            ViewName = &quot;404&quot;,
                                            ViewData = filterContext.Controller.ViewData,
                                            TempData = filterContext.Controller.TempData
                                        };
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 MVC3부터는 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpStatusCodeResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생할 때마다 특성에 필터를 설정해야 하므로 &lt;strong papago-id=&quot;18-1&quot;&gt;ActionFilter&lt;/strong&gt;를 사용하는 것은 유지하기 &lt;strong papago-id=&quot;18-3&quot;&gt;어렵습니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정하는 것을 잊으면 어떻게 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 방법은 도출하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OnException&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 컨트롤러에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 정야해합다니를 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BaseController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서파된에서 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Controller&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 모든 컨트롤러는 다음과 같은 이점을 제공해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BaseController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 컨트롤러를 사용하는 것이 가장 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 경우 참고&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Exception&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답 상태 코드는 500이므로, 찾을 수 없음은 404, 무단은 401로 변경해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에처럼, 서언것처럼한급다니, 사합용을에위다니를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OnException&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대한 오버라이드.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BaseController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터 특성을 사용하지 않도록 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 MVC 3는 또한 브라우저에 빈 보기를 반환함으로써 더 많은 문제를 일으킵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 조사 후 가장 좋은 해결책은 &lt;a href=&quot;https://stackoverflow.com/questions/4985550/how-to-return-a-view-for-httpnotfound-in-asp-net-mvc-3/5254840#5254840&quot; papago-id=&quot;27-1&quot;&gt;ASP.Net MVC 3&lt;/a&gt;의 HttpNotFound&lt;a href=&quot;https://stackoverflow.com/questions/4985550/how-to-return-a-view-for-httpnotfound-in-asp-net-mvc-3/5254840#5254840&quot; papago-id=&quot;27-1&quot;&gt;()에 대한&lt;/a&gt; 보기를 &lt;a href=&quot;https://stackoverflow.com/questions/4985550/how-to-return-a-view-for-httpnotfound-in-asp-net-mvc-3/5254840#5254840&quot; papago-id=&quot;27-1&quot;&gt;반환하는 방법&lt;/a&gt;에 대한 제 답변을 기반으로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 편리하게 하기 위해 여기에 붙여넣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공부를 좀 한 후에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 &lt;strong papago-id=&quot;29-1&quot;&gt;MVC&lt;/strong&gt; 3에 대한 해결 방법은 모든 것을 도출하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpNotFoundResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpUnauthorizedResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpStatusCodeResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 및 새로운 &lt;strong papago-id=&quot;32-1&quot;&gt;구현&lt;/strong&gt;(포함)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpNotFound&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 () 메소드&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BaseController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 컨트롤러를 사용하여 파생된 모든 컨트롤러를 '제어'하는 것이 가장 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 새로만다니를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpStatusCodeResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 생되지않계급에서 되지 않음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ActionResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 단, 서에서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 임의의 뷰를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;View&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을  경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewName&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소유물.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 원본을 따릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpStatusCodeResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정하기 위해&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpContext.Response.StatusCode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpContext.Response.StatusDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그 다음에 러나그.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;base.ExecuteResult(context)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 다시 파생하기 때문에 적절한 뷰를 렌더링할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 MVC 코어에서 구현되기를 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 것 보기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BaseController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System.Web;
using System.Web.Mvc;

namespace YourNamespace.Controllers
{
    public class BaseController : Controller
    {
        public BaseController()
        {
            ViewBag.MetaDescription = Settings.metaDescription;
            ViewBag.MetaKeywords = Settings.metaKeywords;
        }

        protected new HttpNotFoundResult HttpNotFound(string statusDescription = null)
        {
            return new HttpNotFoundResult(statusDescription);
        }

        protected HttpUnauthorizedResult HttpUnauthorized(string statusDescription = null)
        {
            return new HttpUnauthorizedResult(statusDescription);
        }

        protected class HttpNotFoundResult : HttpStatusCodeResult
        {
            public HttpNotFoundResult() : this(null) { }

            public HttpNotFoundResult(string statusDescription) : base(404, statusDescription) { }

        }

        protected class HttpUnauthorizedResult : HttpStatusCodeResult
        {
            public HttpUnauthorizedResult(string statusDescription) : base(401, statusDescription) { }
        }

        protected class HttpStatusCodeResult : ViewResult
        {
            public int StatusCode { get; private set; }
            public string StatusDescription { get; private set; }

            public HttpStatusCodeResult(int statusCode) : this(statusCode, null) { }

            public HttpStatusCodeResult(int statusCode, string statusDescription)
            {
                this.StatusCode = statusCode;
                this.StatusDescription = statusDescription;
            }

            public override void ExecuteResult(ControllerContext context)
            {
                if (context == null)
                {
                    throw new ArgumentNullException(&quot;context&quot;);
                }

                context.HttpContext.Response.StatusCode = this.StatusCode;
                if (this.StatusDescription != null)
                {
                    context.HttpContext.Response.StatusDescription = this.StatusDescription;
                }
                // 1. Uncomment this to use the existing Error.ascx / Error.cshtml to view as an error or
                // 2. Uncomment this and change to any custom view and set the name here or simply
                // 3. (Recommended) Let it commented and the ViewName will be the current controller view action and on your view (or layout view even better) show the @ViewBag.Message to produce an inline message that tell the Not Found or Unauthorized
                //this.ViewName = &quot;Error&quot;;
                this.ViewBag.Message = context.HttpContext.Response.StatusDescription;
                base.ExecuteResult(context);
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 작업에 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public ActionResult Index()
{
    // Some processing
    if (...)
        return HttpNotFound();
    // Other processing
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 _Layout.cshtml(마스터 페이지처럼)에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;content&quot;&amp;gt;
    @if (ViewBag.Message != null)
    {
        &amp;lt;div class=&quot;inlineMsg&quot;&amp;gt;&amp;lt;p&amp;gt;@ViewBag.Message&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;
    }
    @RenderBody()
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 또한다음과같사정보의사수있다습니용할기를용자은▁like▁view다와 같은  정의 보기를 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Error.shtml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 새 또는새만을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NotFound.cshtml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드에서 언급한 것처럼 상태 설명 및 기타 설명에 대한 뷰 모델을 정의할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/499817/&lt;a href=&quot;https://stackoverflow.com/questions/499817/what-is-the-proper-way-to-send-an-http-404-response-from-an-asp-net-mvc-action&quot; target=&quot;_blank&quot; papago-id=&quot;54-1&quot;&gt;what-is-the-proper-way-to-send-an-http-404-response-from-an-asp-net-mvc-action&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ASP.NET</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/498</guid>
      <comments>https://showcode.tistory.com/498#entry498comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:10 +0900</pubDate>
    </item>
    <item>
      <title>&amp;quot;쓰기 작업 실패: 계산된 속성 &amp;quot;포스트&amp;quot;가 읽기 전용입니다.&amp;quot;</title>
      <link>https://showcode.tistory.com/497</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;쓰기 작업 실패: 계산된 속성 &quot;포스트&quot;가 읽기 전용입니다.&quot;&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PostList에서 게시물을 제거하려고 하지만 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;PostList
    :posts=&quot;sortedAndSearchedPosts&quot;
    @remove=&quot;removePost&quot;
    v-if=&quot;!isPostsLoading&quot;
  /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사후 기능 제거&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; removePost(post) {
      this.posts = this.posts.filter((p) =&amp;gt; p.id !== post.id);
    },
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 초기화된 게시물&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; computed: {
    ...mapState({
      posts: (state) =&amp;gt; state.post.posts,
    }),
    ...mapGetters({
      sortedPosts: &quot;post/sortedPosts&quot;,
      sortedAndSearchedPosts: &quot;post/sortedAndSearchedPosts&quot;,
    }),
  },
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디에 있는지 확실하지 않음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.posts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로는 초기에 설정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아키텍처가 올바른 것으로 판단되면 다음과 같은 두 가지 옵션이 제공됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 가게에 있는 게시물을 직접 제거하거나.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sortedAndSearchedPosts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변화를 직접 반영합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌 상태를 업데이트하지 않으려면 초기화할 때 로컬 복사본을 작성합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;posts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;data () {
   return {
      posts: [...this.sortedAndSearchedPosts],
      ...
   }
},
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 게시물 목록을 사용하도록 코드를 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;PostList
    :posts=&quot;posts&quot;
    ...
  /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/72379077/&lt;a href=&quot;https://stackoverflow.com/questions/72379077/write-operation-failed-computed-property-posts-is-readonly&quot; target=&quot;_blank&quot; papago-id=&quot;12-1&quot;&gt;write-operation-failed-computed-property-posts-is-readonly&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>vuex</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/497</guid>
      <comments>https://showcode.tistory.com/497#entry497comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:01:00 +0900</pubDate>
    </item>
    <item>
      <title>배열 첨자 안에 &amp;quot;휘발성&amp;quot; 키워드가 나타나는 목적은 무엇입니까?</title>
      <link>https://showcode.tistory.com/496</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 첨자 안에 &quot;휘발성&quot; 키워드가 나타나는 목적은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cppreference를 검색하는 동안 다음과 같은 함수 매개 변수에서 이상한 유형의 배열을 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void f(double x[volatile], const double y[volatile]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 그 목적은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 첨자 안에 키워드가 표시됩니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 무엇을 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드는 함수 매개 변수의 배열 유형을 선언하는 데 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double x[volatile]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 동등합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double * volatile x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.cppreference.com/w/c/language/volatile&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;cpp&lt;/a&gt; 기본 설정은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 선언에서 &lt;strong papago-id=&quot;10-1&quot;&gt;키워드는 함수 &lt;/strong&gt;매개 변수의 &lt;strong papago-id=&quot;10-1&quot;&gt;배열 유형을 선언하는 &lt;/strong&gt;데&lt;strong papago-id=&quot;10-1&quot;&gt; 사용되는 대괄호&lt;/strong&gt; 안에 &lt;strong papago-id=&quot;10-1&quot;&gt;나타날&lt;/strong&gt; 수 &lt;strong papago-id=&quot;10-1&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 유형이 변환되는 포인터 유형을 한정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 두 선언은 동일한 기능을 선언합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;void f(double x[volatile], const double y[volatile]);

void f(double * volatile x, const double * volatile y);
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 구문은 함수 매개 변수의 C 언어에서만 유효합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 이 C(및 C만 해당) 기능을 사용하면 배열 대괄호 안에 있는 모든 형식 한정자를 지정할 수 있습니다. 정확한 표준 따옴표는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수를 ''array of type''으로 선언하는 경우 ''alified pointer to type''으로 조정해야 합니다. &lt;strong papago-id=&quot;13-1&quot;&gt;여기서 형식 한정자(있는&lt;/strong&gt; 경우)는&lt;strong papago-id=&quot;13-1&quot;&gt; 배열 형식&lt;/strong&gt; 파생의 및&lt;strong papago-id=&quot;13-1&quot;&gt; 내에서 지정된 것&lt;/strong&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드인 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에도 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 유형 파생의 경우, 함수에 대한 각 호출에 대해, 해당 실제 인수의 값은 크기 식에 의해 지정된 최소 개수의 요소로 배열의 첫 번째 요소에 대한 액세스를 제공해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(C99, § 6.7.5.3, 7, 강조 추가)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 이것이 단지 다음과 같은 것에 국한되지 않는다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,그렇지만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;restrict&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &lt;strong papago-id=&quot;21-1&quot;&gt;허용&lt;/strong&gt;됩니다(형식 한정자, § 6.7.31 참조).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 해킹의 요점은 기본적으로 (&lt;strong papago-id=&quot;22-3&quot;&gt;어레이&lt;/strong&gt;의 요소가 아닌) &lt;em papago-id=&quot;22-1&quot;&gt;매개 변수에 형식&lt;/em&gt; 한정자를 추가하고 선언을 위한 배열 구문을 유지할 수 있도록 하는 것입니다. 이 구문이 없으면 &lt;em papago-id=&quot;22-5&quot;&gt;포인터&lt;/em&gt;로 쓸 수밖에 &lt;em papago-id=&quot;22-5&quot;&gt;없습니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AFAIK에는 동등한 포인터 구문이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다차원 배열에 대해 구문을 약간 덜 어색하게 만드는 것이 대부분인 것 같습니다. § 6.7.5.3 21을 인용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void f(double (* restrict a)[5]);
void f(double a[restrict][5]);
void f(double a[restrict 3][5]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두 동일하지만, 2와 3은 이것이 단순한 포인터가 아니라 배열을 의도한다는 것을 약간 더 잘 전달할 수 있으며, 여전히 어떤 장소에 두도록 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;restrict&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예선의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 위에서 말한 것처럼, 다음과 같은 것을 가질 수 있는 방법은 없는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void f(double a[restrict static 3][5]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 (&quot;이 &quot; 한것정는해다인지수다를니합하당은에음다▁cor▁(also▁argument지▁(▁the▁that니&quot;에 해당하는 인수를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 일이 있어도&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;f&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;정규&quot; 포인터 구문을 사용하는 최소 3개의 배열 중 첫 번째 배열인 &quot;5배&quot;, &lt;em papago-id=&quot;29-1&quot;&gt;ibidem&lt;/em&gt;)에 대한 비반복 포인터여야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히, 저는 이 구문을 멀리할 것입니다. 매우 모호하고 거의 사용되지 않습니다. (&lt;em papago-id=&quot;30-1&quot;&gt;어레이&lt;/em&gt; 매개 변수에 형식 한정자를 추가할 필요가 없다고 생각합니다. 다시 말하지만, 요소 유형이 아니라 매개 변수 자체입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;restrict&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 C++에 이식할 수 없는 유일한 사용 사례입니다(라이브러리를 작성하는 경우 일반적으로 관련이 있음).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/47377106/&lt;a href=&quot;https://stackoverflow.com/questions/47377106/what-is-the-purpose-of-the-volatile-keyword-appearing-inside-an-array-subscrip&quot; target=&quot;_blank&quot; papago-id=&quot;32-1&quot;&gt;what-is-the-purpose-of-the-volatile-keyword-appearing-inside-an-array-subscrip&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/496</guid>
      <comments>https://showcode.tistory.com/496#entry496comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:00:53 +0900</pubDate>
    </item>
    <item>
      <title>Oracle PL/SQL을 위한 유닛 테스트 프레임워크?</title>
      <link>https://showcode.tistory.com/495</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle PL/SQL을 위한 유닛 테스트 프레임워크?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;닫혔습니다.&lt;/b&gt; 이 질문은 충족되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;스택&lt;/a&gt; 오버플로 &lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;지침&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 수락하고 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; 
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;2-1&quot;&gt;도구, 라이브러리 또는&lt;/b&gt; 즐겨찾는 &lt;b papago-id=&quot;2-1&quot;&gt;오프사이트&lt;/b&gt; 리소스를 &lt;b papago-id=&quot;2-1&quot;&gt;추천하거나 찾는&lt;/b&gt; 질문은 의견이 많은 답변과 스팸을 유인하는 경향이 있기 때문에 스택 오버플로의 주제에서 벗어나 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 &lt;a href=&quot;http://meta.stackoverflow.com/q/254394/&quot; papago-id=&quot;2-3&quot;&gt;문제&lt;/a&gt;를 설명하고 문제를 해결하기 위해 지금까지 수행된 작업을 &lt;a href=&quot;http://meta.stackoverflow.com/q/254394/&quot; papago-id=&quot;2-3&quot;&gt;설명&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2013-11-130 09:00:58Z&quot; papago-attr-id=&quot;1&quot;&gt;9년&lt;/span&gt; 전에 &lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2013-11-130 09:00:58Z&quot; papago-attr-id=&quot;2&quot;&gt;문&lt;/span&gt;을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/203376/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MS &lt;a href=&quot;https://stackoverflow.com/questions/202940/unit-tests-framework-for-databases&quot; papago-id=&quot;5-1&quot;&gt;SQL&lt;/a&gt; 서버에 &lt;a href=&quot;https://stackoverflow.com/questions/202940/unit-tests-framework-for-databases&quot; papago-id=&quot;5-1&quot;&gt;대한&lt;/a&gt; 질문(및 답변)을 본 적이 있지만 Oracle 및 PL/SQL에 대한 질문은 아직 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오라클의 PL/SQL에 대한 xUnit 스타일 테스트 프레임워크가 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것들은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 일반적으로 사용되는 것은 &lt;a href=&quot;http://utplsql.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-1&quot;&gt;아마도&lt;/a&gt; utPLSQL일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 툴킷의 원저자는 현재 &lt;a href=&quot;http://www.quest.com/code-tester-for-oracle/&quot; papago-id=&quot;7-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;상용 &lt;/a&gt;PL/&lt;a href=&quot;http://www.quest.com/code-tester-for-oracle/&quot; papago-id=&quot;7-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SQL 유닛 테스트&lt;/a&gt; 애플리케이션을 사용하는 Quest에서 일하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.oracle.com/technology/products/database/sql_developer/index.html&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;SQL&lt;/a&gt; Developer의 &lt;a href=&quot;http://www.oracle.com/technology/products/database/sql_developer/index.html&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;마지막&lt;/a&gt; 버전에는 매우 흥미로운 Unit Test 제품군이 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://blog.rayapps.com/2009/11/27/oracle-plsql-unit-testing-with-ruby&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot;&gt;저&lt;/a&gt;는 Ruby &lt;a href=&quot;http://blog.rayapps.com/2009/11/27/oracle-plsql-unit-testing-with-ruby&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot;&gt;라이브러리 ruby-plsql을 사용&lt;/a&gt;하여 PL/&lt;a href=&quot;http://blog.rayapps.com/2009/11/27/oracle-plsql-unit-testing-with-ruby&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot;&gt;SQL 유닛 테스트&lt;/a&gt; 프레임워크를 &lt;a href=&quot;http://blog.rayapps.com/2009/11/27/oracle-plsql-unit-testing-with-ruby&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot;&gt;생성&lt;/a&gt;하여 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;utPLSQL보다 훨씬 짧고 읽기 쉬운 테스트를 제공하며 GUI 도구(예: Quest Code Tester 또는 SQL Developer 2.1)에 비해 유연성이 높습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명왕성은 매우 새로운 것으로 보이며, 많은 문서가 없는 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 당신이 일을 잘 처리하기 위해 상당한 수의 버그를 해결할 것을 우려합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;utPLSQL은 몇 년 동안 사용되어 왔으며 상당히 광범위하게 배포되었습니다. 따라서 버그 수정이 훨씬 더 많았고 문제가 발생했을 때 도움을 줄 수 있는 사람들이 훨씬 더 많았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 아무도 폄하하지 않기 위해, 그러나 utPLSQL을 작성한 Steven Feuerstein은 세계에서 가장 인정받는 PL/SQL 전문가 중 한 명입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 명왕성의 저자가 완벽하게 유능한 개발자라고 확신하지만, 저는 그가 스티븐이 가지고 있는 명성에 근접할 수 있다고는 생각하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL 유닛 테스트 프레임워크를 검색하는 중에 이 질문을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는&lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/detail/3026&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;13-1&quot;&gt; 명왕성의 개발자가 주장&lt;/a&gt;하는 기사를 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL 프로그래머가 코드를 테스트하는 데 도움이 되는 몇 가지 제품이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Quest Software에는 Oracle용 Code Tester라는 제품이 있습니다. 하지만 무료 버전은 장애인용이며 유료 버전은 테스트를 시작하도록 조직을 설득하는 데 걸림돌을 하나 더 추가할 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 년 전에 폐기된 utPLSQL 프로젝트도 있는데 비트로트로 인해 어려움을 겪고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최근&lt;a href=&quot;http://code.google.com/p/plsql-commons/&quot; papago-id=&quot;15-1&quot; rel=&quot;nofollow&quot;&gt; PL&lt;/a&gt;/SQL Commons &lt;a href=&quot;http://code.google.com/p/plsql-commons/&quot; papago-id=&quot;15-1&quot; rel=&quot;nofollow&quot;&gt;툴킷&lt;/a&gt;의 유닛 테스트 프레임워크를 성공적으로 사용했습니다(저자 &lt;a href=&quot;http://www.slideshare.net/areuser/plsql-commons-v10-6623604&quot; rel=&quot;nofollow&quot; papago-id=&quot;15-3&quot;&gt;슬라이드 참조&lt;/a&gt;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 툴킷은 아직 공개되지 않았지만(글을 쓸 때) 작성자에게 이메일을 보내면 작업 패키지가 제공됩니다(또는 적어도 제가 받았습니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 또 다른 &lt;a href=&quot;http://code.google.com/p/pluto-test-framework/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-1&quot;&gt;도서관&lt;/a&gt;도 찾았습니다: 명왕성 - 누가 이것들을 사용했고 비교/대조할 수 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 DB 유닛을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개발자들은 약간의 자바를 배워야 하지만, 크루즈 컨트롤과 같은 지속적인 통합 도구에 잘 통합됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿, 유틸리티 및 코드 샘플은 우리의 pl/sql 개발자들이 신속하게 속도를 낼 수 있도록 도와주었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하지는 않았지만 utPLSQL의 마지막 실제는 2005년 7월이었고 저자가 오라클의 상용 코드 테스터와 같기 때문에&lt;a href=&quot;http://www.quest.com/code-tester-for-oracle/&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;(&lt;/a&gt;http://www.quest.com/&lt;a href=&quot;http://www.quest.com/code-tester-for-oracle/&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;code-tester-for-oracle&lt;/a&gt;/) ) 앞으로 utPLSQL을 많이 볼 수 없을 것 같아서 플루토(2008)와 함께 모험을 해봐야 할 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것들을 모두 살펴보았지만, 제가 유일하게 마음에 들었던 것은 &lt;a href=&quot;http://plunit.com/&quot; rel=&quot;nofollow&quot; papago-id=&quot;19-1&quot;&gt;PLU&lt;/a&gt; 유닛이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유지 관리자들에게 버림받은 것 같습니다(스크립트를 수정하여 설치하도록 해야 했습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 API는 매우 단순하며, OOP/xUnit 접근 방식을 PL/SQL에 적용하려고 하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/203376/&lt;a href=&quot;https://stackoverflow.com/questions/203376/unit-testing-framework-for-oracle-pl-sql&quot; target=&quot;_blank&quot; papago-id=&quot;20-1&quot;&gt;unit-testing-framework-for-oracle-pl-sql&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/495</guid>
      <comments>https://showcode.tistory.com/495#entry495comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:00:47 +0900</pubDate>
    </item>
    <item>
      <title>XML 패키지를 사용하여 html 테이블을 R 데이터 프레임으로 스크랩</title>
      <link>https://showcode.tistory.com/494</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 패키지를 사용하여 html 테이블을 R 데이터 프레임으로 스크랩&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 패키지를 사용하여 html 테이블을 어떻게 스크랩합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brazil_national_football_team&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;브라질 축구팀&lt;/a&gt;의 위키피디아 페이지를 예로 들어 보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것을 R로 읽고 &quot;브라질이 FIFA 공인 팀과 경기한 모든 경기 목록&quot; 표를 데이터 프레임으로 얻고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 해야 하나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;…또는 더 짧은 시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(XML)
library(RCurl)
library(rlist)
theurl &amp;lt;- getURL(&quot;https://en.wikipedia.org/wiki/Brazil_national_football_team&quot;,.opts = list(ssl.verifypeer = FALSE) )
tables &amp;lt;- readHTMLTable(theurl)
tables &amp;lt;- list.clean(tables, fun = is.null, recursive = FALSE)
n.rows &amp;lt;- unlist(lapply(tables, function(t) dim(t)[1]))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택된 테이블이 페이지에서 가장 긴 테이블입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tables[[which.max(n.rows)]]
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;library(RCurl)
library(XML)

# Download page using RCurl
# You may need to set proxy details, etc.,  in the call to getURL
theurl &amp;lt;- &quot;http://en.wikipedia.org/wiki/Brazil_national_football_team&quot;
webpage &amp;lt;- getURL(theurl)
# Process escape characters
webpage &amp;lt;- readLines(tc &amp;lt;- textConnection(webpage)); close(tc)

# Parse the html tree, ignoring errors on the page
pagetree &amp;lt;- htmlTreeParse(webpage, error=function(...){})

# Navigate your way through the tree. It may be possible to do this more efficiently using getNodeSet
body &amp;lt;- pagetree$children$html$children$body 
divbodyContent &amp;lt;- body$children$div$children[[1]]$children$div$children[[4]]
tables &amp;lt;- divbodyContent$children[names(divbodyContent)==&quot;table&quot;]

#In this case, the required table is the only one with class &quot;wikitable sortable&quot;  
tableclasses &amp;lt;- sapply(tables, function(x) x$attributes[&quot;class&quot;])
thetable  &amp;lt;- tables[which(tableclasses==&quot;wikitable sortable&quot;)]$table

#Get columns headers
headers &amp;lt;- thetable$children[[1]]$children
columnnames &amp;lt;- unname(sapply(headers, function(x) x$children$text$value))

# Get rows from table
content &amp;lt;- c()
for(i in 2:length(thetable$children))
{
   tablerow &amp;lt;- thetable$children[[i]]$children
   opponent &amp;lt;- tablerow[[1]]$children[[2]]$children$text$value
   others &amp;lt;- unname(sapply(tablerow[-1], function(x) x$children$text$value)) 
   content &amp;lt;- rbind(content, c(opponent, others))
}

# Convert to data frame
colnames(content) &amp;lt;- columnnames
as.data.frame(content)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가할 편집 내용:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플 출력&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;                     Opponent Played Won Drawn Lost Goals for Goals against &amp;nbsp;% Won
    1               Argentina     94  36    24   34       148           150  38.3%
    2                Paraguay     72  44    17   11       160            61  61.1%
    3                 Uruguay     72  33    19   20       127            93  45.8%
    ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xml2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html 웹 페이지를 구문 분석하는 데 사용되는 또 다른 패키지입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(rvest)
theurl &amp;lt;- &quot;http://en.wikipedia.org/wiki/Brazil_national_football_team&quot;
file&amp;lt;-read_html(theurl)
tables&amp;lt;-html_nodes(file, &quot;table&quot;)
table1 &amp;lt;- html_table(tables[4], fill = TRUE)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문이 보다 사용하기 쉽습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 및 대부분의 웹 페이지에 대해 패키지는 필요한 모든 옵션을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xpath를 사용하는 다른 옵션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(RCurl)
library(XML)

theurl &amp;lt;- &quot;http://en.wikipedia.org/wiki/Brazil_national_football_team&quot;
webpage &amp;lt;- getURL(theurl)
webpage &amp;lt;- readLines(tc &amp;lt;- textConnection(webpage)); close(tc)

pagetree &amp;lt;- htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE)

# Extract table header and contents
tablehead &amp;lt;- xpathSApply(pagetree, &quot;//*/table[@class='wikitable sortable']/tr/th&quot;, xmlValue)
results &amp;lt;- xpathSApply(pagetree, &quot;//*/table[@class='wikitable sortable']/tr/td&quot;, xmlValue)

# Convert character vector to dataframe
content &amp;lt;- as.data.frame(matrix(results, ncol = 8, byrow = TRUE))

# Clean up the results
content[,1] &amp;lt;- gsub(&quot;Â&amp;nbsp;&quot;, &quot;&quot;, content[,1])
tablehead &amp;lt;- gsub(&quot;Â&amp;nbsp;&quot;, &quot;&quot;, tablehead)
names(content) &amp;lt;- tablehead
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 결과를 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; head(content)
   Opponent Played Won Drawn Lost Goals for Goals against % Won
1 Argentina     94  36    24   34       148           150 38.3%
2  Paraguay     72  44    17   11       160            61 61.1%
3   Uruguay     72  33    19   20       127            93 45.8%
4     Chile     64  45    12    7       147            53 70.3%
5      Peru     39  27     9    3        83            27 69.2%
6    Mexico     36  21     6    9        69            34 58.3%
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1395528/&lt;a href=&quot;https://stackoverflow.com/questions/1395528/scraping-html-tables-into-r-data-frames-using-the-xml-package&quot; target=&quot;_blank&quot; papago-id=&quot;14-1&quot;&gt;scraping-html-tables-into-r-data-frames-using-the-xml-package&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>r</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/494</guid>
      <comments>https://showcode.tistory.com/494#entry494comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:00:40 +0900</pubDate>
    </item>
    <item>
      <title>FUN 내부의 응용프로그램 인덱스 이름에 액세스합니다.</title>
      <link>https://showcode.tistory.com/493</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FUN 내부의 응용프로그램 인덱스 이름에 액세스합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;lapply() 함수에서 목록 인덱스 이름을 가져올 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;n = names(mylist)
lapply(mylist, function(list.elem) { cat(&quot;What is the name of this list element?\n&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 lapply() &lt;em papago-id=&quot;2-3&quot;&gt;반환&lt;/em&gt;된 목록에서 인덱스 이름을 보존할 수 있는지 &lt;a href=&quot;https://stackoverflow.com/questions/9469504/access-and-preserve-list-names-in-lapply-function&quot; papago-id=&quot;2-1&quot;&gt;문의&lt;/a&gt;했지만 사용자 지정 함수 내에서 각 요소 이름을 쉽게 가져올 수 있는 방법이 있는지는 아직 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름 자체에 대한 호출을 피하고 싶습니다. 함수 매개 변수에 이름을 입력하고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 불하게도행,,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통과하는 벡터의 요소만 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 해결 방법은 벡터 자체 대신 벡터의 이름이나 인덱스를 전달하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 항상 추가 인수를 함수에 전달할 수 있으므로 다음이 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x &amp;lt;- list(a=11,b=12,c=13) # Changed to list to address concerns in commments
lapply(seq_along(x), function(y, n, i) { paste(n[[i]], y[[i]]) }, y=x, n=names(x))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 위치&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 넘는을의 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 또한 전달합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및의이의 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시다시피, 함수 인수의 순서는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 인수 중에 지정되지 않은 첫 번째 &lt;em papago-id=&quot;11-1&quot;&gt;인수&lt;/em&gt;에 &quot;인덱스&quot;(여기서는 인덱스)를 전달합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는 다음과 같이 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;y&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그서오밖에 없어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왼쪽...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[[1]]
[1] &quot;a 11&quot;

[[2]]
[1] &quot;b 12&quot;

[[3]]
[1] &quot;c 13&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-0&quot;&gt;업데이트&lt;/strong&gt; 더 간단한 예, 동일한 결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lapply(seq_along(x), function(i) paste(names(x)[[i]], x[[i]]))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 &quot; &quot;글로벌&quot;을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 통화의 이름을 추출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;토미와 하지만, 이작은기토동미일해사방만용지하법결을한와로본으적업,▁this▁with만사▁basically▁but▁the지용,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Map()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 구성 요소의 이름을 저장하는 전역 변수에 액세스할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; x &amp;lt;- list(a=11, b=12, c=13)
&amp;gt; Map(function(x, i) paste(i, x), x, names(x))
$a
[1] &quot;a 11&quot;

$b
[1] &quot;b 12&quot;

$c
[1] &quot;c 13
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면, 당신이 원한다면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mapply()&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; mapply(function(x, i) paste(i, x), x, names(x))
     a      b      c 
&quot;a 11&quot; &quot;b 12&quot; &quot;c 13&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;R 버전 3.2 업데이트&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고지 사항: 이것은 진부한 속임수이며, 다음 릴리스에서 작동을 멈출 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 인덱스를 가져올 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; lapply(list(a=10,b=20), function(x){parent.frame()$i[]})
$a
[1] 1

$b
[1] 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 고: 더&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;R이 기호를 생각하도록 속이기 때문에 이것이 작동하기 위해 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됨)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 더 많은  수  참조의 할 수 있습니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 더 많은 참조가 있을 수 있으므로 해당 참조의 느린 복제를 활성화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 없으면, R은 분리된 복사본을 보관하지 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; lapply(list(a=10,b=20), function(x){parent.frame()$i})
$a
[1] 2

$b
[1] 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 이국적인 속임수들이 사용될 수 있습니다, 예를 들면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;function(x){parent.frame()$i+0}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;function(x){--parent.frame()$i}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능 영향&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;강제 복제로 인해 성능이 저하됩니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예! 다음은 벤치마크입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; x &amp;lt;- as.list(seq_len(1e6))

&amp;gt; system.time( y &amp;lt;- lapply(x, function(x){parent.frame()$i[]}) )
user system elapsed
2.38 0.00 2.37
&amp;gt; system.time( y &amp;lt;- lapply(x, function(x){parent.frame()$i[]}) )
user system elapsed
2.45 0.00 2.45
&amp;gt; system.time( y &amp;lt;- lapply(x, function(x){parent.frame()$i[]}) )
user system elapsed
2.41 0.00 2.41
&amp;gt; y[[2]]
[1] 2

&amp;gt; system.time( y &amp;lt;- lapply(x, function(x){parent.frame()$i}) )
user system elapsed
1.92 0.00 1.93
&amp;gt; system.time( y &amp;lt;- lapply(x, function(x){parent.frame()$i}) )
user system elapsed
2.07 0.00 2.09
&amp;gt; system.time( y &amp;lt;- lapply(x, function(x){parent.frame()$i}) )
user system elapsed
1.89 0.00 1.89
&amp;gt; y[[2]]
[1] 1000000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결론&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 대답은 단지 당신이 이것을 사용하지 말아야 한다는 것을 보여줍니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 Tommy와 같은 다른 솔루션을 찾는다면 코드를 더 쉽게 읽을 수 있을 뿐만 아니라 향후 릴리스와 더욱 호환될 수 있으므로 핵심 팀이 개발하려고 노력한 최적화 기능을 잃을 위험이 있습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 이상 작동하지 않는 이전 버전의 트릭:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; lapply(list(a=10,b=10,c=10), function(x)substitute(x)[[3]])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a
[1] 1

$b
[1] 2

$c
[1] 3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 설명:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FUN(X[[1L]], ...)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FUN(X[[2L]], ...)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 인수는 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그래서 그것이 통과하는 주장은.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X[[i]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프의 현재 인덱스입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평가하기 전에 &lt;em papago-id=&quot;44-1&quot;&gt;이것&lt;/em&gt;을 얻으면 (즉, 사용할 경우)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;substitute&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 되지 않은  됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X[[i]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[[&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수, 수인인 함수&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및 (기호) 및&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(정수).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;substitute(x)[[3]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확하게 이 정수를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스가 있는 경우 다음과 같이 먼저 저장하면 이름에 간단하게 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;L &amp;lt;- list(a=10,b=10,c=10)
n &amp;lt;- names(L)
lapply(L, function(x)n[substitute(x)[[3]]])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a
[1] &quot;a&quot;

$b
[1] &quot;b&quot;

$c
[1] &quot;c&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;53-0&quot;&gt;아니면&lt;/em&gt; 이 두 번째 속임수를 사용하는 것:-)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lapply(list(a=10,b=10,c=10), function(x)names(eval(sys.call(1)[[2]]))[substitute(x)[[3]]])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(결과는 동일합니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 2: 설명 2:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sys.call(1)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아온다를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply(...)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 도록하록&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sys.call(1)[[2]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 리트인사표현니다입식는용에 대한 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 전달대에게 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;eval&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;names&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;까다롭지만, 효과가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보너스: 이름을 얻는 두 번째 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lapply(list(a=10,b=10,c=10), function(x)eval.parent(quote(names(X)))[substitute(x)[[3]]])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 의부 프유개다니체의 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FUN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그고 의리인참다니조합수를의 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 우리는 그것을 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;eval.parent&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;방법을&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;했습니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법을 사용하기 시작했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사하는대를 사용하는 에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하기 시작했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mapply&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;n = names(mylist)
mapply(function(list.elem, names) { }, list.elem = mylist, names = n)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사해볼수있다니습용을 사용해 볼 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;imap()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;purrr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꾸러미&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명서에서 다음을 참조하십시오.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;imap(x, ...)은 x에 이름이 있으면 map2(x, names(x), ...)의 단축형이고, 없으면 map2(x, seq_along(x), ...)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(purrr)
myList &amp;lt;- list(a=11,b=12,c=13) 
imap(myList, function(x, y) paste(x, y))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음과 같은 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a
[1] &quot;11 a&quot;

$b
[1] &quot;12 b&quot;

$c
[1] &quot;13 c&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 이름을 입력하세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sapply(names(mylist), function(n) { 
    doSomething(mylist[[n]])
    cat(n, '\n')
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;토미의 대답은 명명된 벡터에 적용되지만 당신이 목록에 관심이 있다는 생각이 들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그는 호출 환경에서 &quot;x&quot;를 참조했기 때문에 엔드 어라운드를 하는 것처럼 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 함수는 함수에 전달된 매개 변수만 사용하므로 전달된 개체의 이름에 대한 가정은 하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x &amp;lt;- list(a=11,b=12,c=13)
lapply(x, function(z) { attributes(deparse(substitute(z)))$names  } )
#--------
$a
NULL

$b
NULL

$c
NULL
#--------
 names( lapply(x, function(z) { attributes(deparse(substitute(z)))$names  } ))
#[1] &quot;a&quot; &quot;b&quot; &quot;c&quot;
 what_is_my_name &amp;lt;- function(ZZZ) return(deparse(substitute(ZZZ)))
 what_is_my_name(X)
#[1] &quot;X&quot;
what_is_my_name(ZZZ=this)
#[1] &quot;this&quot;
 exists(&quot;this&quot;)
#[1] FALSE
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 대답은 토미와 캐러칼과 같은 방향으로 진행되지만 목록을 추가 개체로 저장할 필요는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lapply(seq(3), function(i, y=list(a=14,b=15,c=16)) { paste(names(y)[[i]], y[[i]]) })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[[1]]
[1] &quot;a 14&quot;

[[2]]
[1] &quot;b 15&quot;

[[3]]
[1] &quot;c 16&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 목록이 (적용하는 대신) FUN에 명명된 인수로 제공됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;lapply는 목록의 요소에 대해서만 반복하면 됩니다(목록의 길이를 변경할 때 이 첫 번째 인수를 lapply로 변경하도록 주의하십시오).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 추가 인수로 적용할 목록을 직접 지정하는 것도 효과적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lapply(seq(3), function(i, y) { paste(names(y)[[i]], y[[i]]) }, y=list(a=14,b=15,c=16))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@둘 다 은 @caracals @Tommy의 예를 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.frame&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;r&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.frame&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dput(r[[1]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막에).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;names(r)
[1] &quot;todos&quot;  &quot;random&quot;
r[[1]][1]
$F0
$F0$rst1
   algo  rst  prec  rorac prPo pos
1  Mean 56.4 0.450 25.872 91.2 239
6  gbm1 41.8 0.438 22.595 77.4 239
4  GAM2 37.2 0.512 43.256 50.0 172
7  gbm2 36.8 0.422 18.039 85.4 239
11 ran2 35.0 0.442 23.810 61.5 239
2  nai1 29.8 0.544 52.281 33.1 172
5  GAM3 28.8 0.403 12.743 94.6 239
3  GAM1 21.8 0.405 13.374 68.2 239
10 ran1 19.4 0.406 13.566 59.8 239
9  svm2 14.0 0.385  7.692 76.2 239
8  svm1  0.8 0.359  0.471 71.1 239

$F0$rst5
   algo  rst  prec  rorac prPo pos
1  Mean 52.4 0.441 23.604 92.9 239
7  gbm2 46.4 0.440 23.200 83.7 239
6  gbm1 31.2 0.416 16.421 79.5 239
5  GAM3 28.8 0.403 12.743 94.6 239
4  GAM2 28.2 0.481 34.815 47.1 172
11 ran2 26.6 0.422 18.095 61.5 239
2  nai1 23.6 0.519 45.385 30.2 172
3  GAM1 20.6 0.398 11.381 75.7 239
9  svm2 14.4 0.386  8.182 73.6 239
10 ran1 14.0 0.390  9.091 64.4 239
8  svm1  6.2 0.370  3.584 72.4 239
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목적은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unlist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 목록, 순서 입력&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사건을 식별하기 위한 란으로서의 이름.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;r=unlist(unlist(r,F),F)
names(r)
[1] &quot;todos.F0.rst1&quot;  &quot;todos.F0.rst5&quot;  &quot;todos.T0.rst1&quot;  &quot;todos.T0.rst5&quot;  &quot;random.F0.rst1&quot; &quot;random.F0.rst5&quot;
[7] &quot;random.T0.rst1&quot; &quot;random.T0.rst5&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록을 취소하지만 목록은 취소하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.frame&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ra=Reduce(rbind,Map(function(x,y) cbind(case=x,y),names(r),r))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;Map&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름 순서를 열로 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Reduce&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.frame&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;head(ra)
            case algo  rst  prec  rorac prPo pos
1  todos.F0.rst1 Mean 56.4 0.450 25.872 91.2 239
6  todos.F0.rst1 gbm1 41.8 0.438 22.595 77.4 239
4  todos.F0.rst1 GAM2 37.2 0.512 43.256 50.0 172
7  todos.F0.rst1 gbm2 36.8 0.422 18.039 85.4 239
11 todos.F0.rst1 ran2 35.0 0.442 23.810 61.5 239
2  todos.F0.rst1 nai1 29.8 0.544 52.281 33.1 172
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r[[1]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    structure(list(F0 = structure(list(rst1 = structure(list(algo = c(&quot;Mean&quot;, 
    &quot;gbm1&quot;, &quot;GAM2&quot;, &quot;gbm2&quot;, &quot;ran2&quot;, &quot;nai1&quot;, &quot;GAM3&quot;, &quot;GAM1&quot;, &quot;ran1&quot;, 
    &quot;svm2&quot;, &quot;svm1&quot;), rst = c(56.4, 41.8, 37.2, 36.8, 35, 29.8, 28.8, 
    21.8, 19.4, 14, 0.8), prec = c(0.45, 0.438, 0.512, 0.422, 0.442, 
    0.544, 0.403, 0.405, 0.406, 0.385, 0.359), rorac = c(25.872, 
    22.595, 43.256, 18.039, 23.81, 52.281, 12.743, 13.374, 13.566, 
    7.692, 0.471), prPo = c(91.2, 77.4, 50, 85.4, 61.5, 33.1, 94.6, 
    68.2, 59.8, 76.2, 71.1), pos = c(239L, 239L, 172L, 239L, 239L, 
    172L, 239L, 239L, 239L, 239L, 239L)), .Names = c(&quot;algo&quot;, &quot;rst&quot;, 
    &quot;prec&quot;, &quot;rorac&quot;, &quot;prPo&quot;, &quot;pos&quot;), row.names = c(1L, 6L, 4L, 7L, 
    11L, 2L, 5L, 3L, 10L, 9L, 8L), class = &quot;data.frame&quot;), rst5 = structure(list(
        algo = c(&quot;Mean&quot;, &quot;gbm2&quot;, &quot;gbm1&quot;, &quot;GAM3&quot;, &quot;GAM2&quot;, &quot;ran2&quot;, 
        &quot;nai1&quot;, &quot;GAM1&quot;, &quot;svm2&quot;, &quot;ran1&quot;, &quot;svm1&quot;), rst = c(52.4, 46.4, 
        31.2, 28.8, 28.2, 26.6, 23.6, 20.6, 14.4, 14, 6.2), prec = c(0.441, 
        0.44, 0.416, 0.403, 0.481, 0.422, 0.519, 0.398, 0.386, 0.39, 
        0.37), rorac = c(23.604, 23.2, 16.421, 12.743, 34.815, 18.095, 
        45.385, 11.381, 8.182, 9.091, 3.584), prPo = c(92.9, 83.7, 
        79.5, 94.6, 47.1, 61.5, 30.2, 75.7, 73.6, 64.4, 72.4), pos = c(239L, 
        239L, 239L, 239L, 172L, 239L, 172L, 239L, 239L, 239L, 239L
        )), .Names = c(&quot;algo&quot;, &quot;rst&quot;, &quot;prec&quot;, &quot;rorac&quot;, &quot;prPo&quot;, &quot;pos&quot;
    ), row.names = c(1L, 7L, 6L, 5L, 4L, 11L, 2L, 3L, 9L, 10L, 8L
    ), class = &quot;data.frame&quot;)), .Names = c(&quot;rst1&quot;, &quot;rst5&quot;)), T0 = structure(list(
        rst1 = structure(list(algo = c(&quot;Mean&quot;, &quot;ran1&quot;, &quot;GAM1&quot;, &quot;GAM2&quot;, 
        &quot;gbm1&quot;, &quot;svm1&quot;, &quot;nai1&quot;, &quot;gbm2&quot;, &quot;svm2&quot;, &quot;ran2&quot;), rst = c(22.6, 
        19.4, 13.6, 10.2, 9.6, 8, 5.6, 3.4, -0.4, -0.6), prec = c(0.478, 
        0.452, 0.5, 0.421, 0.423, 0.833, 0.429, 0.373, 0.355, 0.356
        ), rorac = c(33.731, 26.575, 40, 17.895, 18.462, 133.333, 
        20, 4.533, -0.526, -0.368), prPo = c(34.4, 52.1, 24.3, 40.7, 
        37.1, 3.1, 14.4, 53.6, 54.3, 116.4), pos = c(195L, 140L, 
        140L, 140L, 140L, 195L, 195L, 140L, 140L, 140L)), .Names = c(&quot;algo&quot;, 
        &quot;rst&quot;, &quot;prec&quot;, &quot;rorac&quot;, &quot;prPo&quot;, &quot;pos&quot;), row.names = c(1L, 
        9L, 3L, 4L, 5L, 7L, 2L, 6L, 8L, 10L), class = &quot;data.frame&quot;), 
        rst5 = structure(list(algo = c(&quot;gbm1&quot;, &quot;ran1&quot;, &quot;Mean&quot;, &quot;GAM1&quot;, 
        &quot;GAM2&quot;, &quot;svm1&quot;, &quot;nai1&quot;, &quot;svm2&quot;, &quot;gbm2&quot;, &quot;ran2&quot;), rst = c(17.6, 
        16.4, 15, 12.8, 9, 6.2, 5.8, -2.6, -3, -9.2), prec = c(0.466, 
        0.434, 0.435, 0.5, 0.41, 0.8, 0.44, 0.346, 0.345, 0.337), 
            rorac = c(30.345, 21.579, 21.739, 40, 14.754, 124, 23.2, 
            -3.21, -3.448, -5.542), prPo = c(41.4, 54.3, 35.4, 22.9, 
            43.6, 2.6, 12.8, 57.9, 62.1, 118.6), pos = c(140L, 140L, 
            195L, 140L, 140L, 195L, 195L, 140L, 140L, 140L)), .Names = c(&quot;algo&quot;, 
        &quot;rst&quot;, &quot;prec&quot;, &quot;rorac&quot;, &quot;prPo&quot;, &quot;pos&quot;), row.names = c(5L, 
        9L, 1L, 3L, 4L, 7L, 2L, 8L, 6L, 10L), class = &quot;data.frame&quot;)), .Names = c(&quot;rst1&quot;, 
    &quot;rst5&quot;))), .Names = c(&quot;F0&quot;, &quot;T0&quot;))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 원소의 길이를 계산하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mylist &amp;lt;- list(a=1:4,b=2:9,c=10:20)
mylist

$a
[1] 1 2 3 4

$b
[1] 2 3 4 5 6 7 8 9

$c
 [1] 10 11 12 13 14 15 16 17 18 19 20
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 결과적인 요소들에 을 붙이는 이라면, 목이결요라붙것벨면이라이는을과,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply(mylist,length)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 그 이하의 작업.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sapply(mylist,length,USE.NAMES=T)

 a  b  c 
 4  8 11 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이라면, 함수내라사벨것는목이면라적이용하을부,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mapply()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 요소와 목록 이름의 두 개체를 루프하여 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fun &amp;lt;- function(x,y) paste0(length(x),&quot;_&quot;,y)
mapply(fun,mylist,names(mylist))

     a      b      c 
 &quot;4_a&quot;  &quot;8_b&quot; &quot;11_c&quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@https-kraft는 우리에게 훌륭한 속임수를 주었고, 문서화되지 않았고 성능 오버헤드 때문에 사용하면 안 된다고 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 첫 번째 점에 대해 크게 논쟁할 수는 없지만 간접비가 걱정되는 경우는 거의 없다는 점에 주목하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복잡한 표현을 부를 필요가 없도록 활성 함수를 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parent.frame()$i[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 단지 만다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.i()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 또한 만들 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.n()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 및 &lt;em papago-id=&quot;78-3&quot;&gt;purr&lt;/em&gt; 기능(및 대부분의 다른 기능)에 &lt;em papago-id=&quot;78-1&quot;&gt;모두&lt;/em&gt; 사용할 수 있는 이름에 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-r prettyprint-override&quot;&gt;&lt;code&gt;.i &amp;lt;- function() parent.frame(2)$i[]
# looks for X OR .x to handle base and purrr functionals
.n &amp;lt;- function() {
  env &amp;lt;- parent.frame(2)
  names(c(env$X,env$.x))[env$i[]]
}

sapply(cars, function(x) paste(.n(), .i()))
#&amp;gt;     speed      dist 
#&amp;gt; &quot;speed 1&quot;  &quot;dist 2&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다른 함수를  (이 이다접이사인벡항붙에간함덱보벤여다니해습치수겠를크마한단벡있수제사다니여터화습할하용다을물음론른넣는스연은산목근터을법을용여하이▁nowations▁of▁canized▁whichthis,▁course▁using▁be▁to있▁oper▁a수▁vector다니습벡▁appro▁of▁vectoresaches▁different할화▁using터▁their이▁function▁simple▁(▁past▁let▁benchmark▁index제▁items▁a(▁the여하사s'용다을다보&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;paste(vec, seq_along(vec))&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 여기서 중요한 것은 그것이 아닙니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;벤치마킹 함수와 플로팅 함수를 정의하고 아래에 결과를 플롯합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-r prettyprint-override&quot;&gt;&lt;code&gt;library(purrr)
library(ggplot2)
benchmark_fun &amp;lt;- function(n){
  vec &amp;lt;- sample(letters,n, replace = TRUE)
  mb &amp;lt;- microbenchmark::microbenchmark(unit=&quot;ms&quot;,
                                      lapply(vec, function(x)  paste(x, .i())),
                                      map(vec, function(x) paste(x, .i())),
                                      lapply(seq_along(vec), function(x)  paste(vec[[x]], x)),
                                      mapply(function(x,y) paste(x, y), vec, seq_along(vec), SIMPLIFY = FALSE),
                                      imap(vec, function(x,y)  paste(x, y)))
  cbind(summary(mb)[c(&quot;expr&quot;,&quot;mean&quot;)], n = n)
}

benchmark_plot &amp;lt;- function(data, title){
  ggplot(data, aes(n, mean, col = expr)) + 
    geom_line() +
    ylab(&quot;mean time in ms&quot;) +
    ggtitle(title) +
    theme(legend.position = &quot;bottom&quot;,legend.direction = &quot;vertical&quot;)
}

plot_data &amp;lt;- map_dfr(2^(0:15), benchmark_fun)
benchmark_plot(plot_data[plot_data$n &amp;lt;= 100,], &quot;simplest call for low n&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/TC2JMJE.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-r prettyprint-override&quot;&gt;&lt;code&gt;benchmark_plot(plot_data,&quot;simplest call for higher n&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/qNulLc0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sup papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://reprex.tidyverse.org&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;115-1&quot;&gt;reprex&lt;/a&gt; 패키지(v0.3.0)에 의해 2019-11-15에 생성되었습니다.&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 차트 시작 부분의 드롭은 요행입니다, 무시해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 선택된 답이 실제로 더 빠르다는 것을 알 수 있으며, 상당한 양의 반복 동안 우리의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.i()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 더. 는 션은정더느를 사용할 의 약 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 선택한 답변과 비교했을 때 오버헤드는 사용할 때의 약 3배입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;purrr::imap()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 반복 시 약약합니다. 30,000회 반복당 약 1ms의 손실이 발생합니다. 30,000회 반복당 약 25ms의 손실은 1ms, 100회 반복당 1ms의 손실이 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는 편의상 적은 비용입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만의 맞춤법을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 수행&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lapply2 &amp;lt;- function(X, FUN){
  if( length(formals(FUN)) == 1 ){
    # No index passed - use normal lapply
    R = lapply(X, FUN)
  }else{
    # Index passed
    R = lapply(seq_along(X), FUN=function(i){
      FUN(X[[i]], i)
    })
  }

  # Set names
  names(R) = names(X)
  return(R)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다음과 같이 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lapply2(letters, function(x, i) paste(x, i))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9950144/&lt;a href=&quot;https://stackoverflow.com/questions/9950144/access-lapply-index-names-inside-fun&quot; target=&quot;_blank&quot; papago-id=&quot;123-1&quot;&gt;access-lapply-index-names-inside-fun&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>r</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/493</guid>
      <comments>https://showcode.tistory.com/493#entry493comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:00:32 +0900</pubDate>
    </item>
    <item>
      <title>Firebase를 사용하여 페이지를 새로 고칠 때 토큰 null을 가져옵니다.auth(.oAuthStateChanged)</title>
      <link>https://showcode.tistory.com/492</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firebase를 사용하여 페이지를 새로 고칠 때 토큰 null을 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;auth(.oAuthStateChanged)&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 파이어베이스와 Vuejs를 사용하는 웹사이트를 개발하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 vuex로 상태 관리를 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 읽을 때 토큰이 다시 로드되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 나는 autoSignIn이라는 작업을 구현했습니다. 그의 작업은 페이지를 새로 고친 후 사용자를 계속 기록하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 토큰으로 같은 방법을 시도해 봤는데, 작동이 안 되는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 무엇을 잘못하고 있는지 알 수 없습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각은 사용자가 페이지를 새로 고칠 때 사용자 인증과 마찬가지로 토큰을 다시 로드해야 한다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 로드할 때 프로그램이 수행하는 작업은 다음과 같습니다. getter를 호출하면 getter는 null입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 작업을 autoSignIn이라고 부릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;◦토큰을 위해 페이지 새로 고침 시 첫 번째 autoSignWhen을 어떻게 호출합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 인증과 작업에 대해 동일한 작업을 수행하기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세션 저장소, 쿠키 또는 로컬 저장소에 토큰을 저장하는 것이 좋은 방법입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음 로그인할 때는 정상이지만 페이지를 새로 고치면 다음 오류가 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/Suhfl.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5-1&quot;&gt;https://i.stack.imgur.com/Suhfl.png&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 새로 고침에서 사용자 인증을 제어하는 인증 핸들러입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;router.beforeEach(async (to, from, next) =&amp;gt; {
    const user = await new Promise((resolve) =&amp;gt; {
        firebase.auth().onAuthStateChanged(async user =&amp;gt; {
             await store.dispatch(&quot;autoSignIn&quot;, user),
            resolve(user)
        });

    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Inside autoSignIni는 토큰을 상태로 커밋하는 코드를 구현했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; autoSignIn ({commit},payload) {

            if (payload !== null){
                commit('setUser',{email:payload.email, userId:payload.uid})
                payload.getIdTokenResult(true).then(token =&amp;gt;{
                    commit('setToken',token)
                    console.log(token)
                })
            }

        },
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제 증표가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; getToken:(state) =&amp;gt; {
            return state.token !== null &amp;amp;&amp;amp; state.user !== null ? state.token : null
        }
`````

I use getter in this action to retrieve certain depending on user role.

`````
getEventsByUser({getters,commit}){
            let data = [];

                if (getters.getToken.claims.admin) {
                    firebase.database().ref('usuario')
                        .on('value',event =&amp;gt;{
                            event.forEach(user =&amp;gt;{
                                user.child('eventos').forEach(evento =&amp;gt;{
                                    data.push({ &quot;id&quot;: evento.key, ...evento.val() })
                                })
                            });
                            commit('setEventsByUser',data)
                        });

                }else if( getters.getToken.claims.student){
                    firebase.database().ref('usuario/' + getters.isAuthenticated.userId + '/eventos/')
                        .on(&quot;value&quot;, eventos =&amp;gt;{
                            eventos.forEach(evento =&amp;gt;{
                                data.push({&quot;id&quot;:evento.key, ...evento.val()})
                            });
                            commit('setEventsByUser',data)
                        })
                }


        }
````

This is my componente from where i call the action getEventByUser for getting data.
````
computed:{
            getEventsByUser(){
                return  this.$store.getters.getEventsByUser;
            },

        },

        mounted() {
            this.$store.dispatch('getEventsByUser')
        },
````






&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램 전체에서 실제로 토큰을 일치시키려면 로그인한 후 로컬 스토리지에 토큰을 저장할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const token = res.data.access_token;
localStorage.setItem('access_token', token);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 로드할 때마다 로컬 스토리지에서 토큰을 가져와 vuex를 저장할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인 아래에 js 파일을 생성할 수 있으며 아래 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export default ({store}) =&amp;gt; {

  const token = localStorage.getItem('access_token') || null;

  store.commit('retrieveToken', token);

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/61221470/&lt;a href=&quot;https://stackoverflow.com/questions/61221470/getting-token-null-on-page-refresh-using-firebase-auth-oauthstatechanged&quot; target=&quot;_blank&quot; papago-id=&quot;11-1&quot;&gt;getting-token-null-on-page-refresh-using-firebase-auth-oauthstatechanged&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>vuex</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/492</guid>
      <comments>https://showcode.tistory.com/492#entry492comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:00:18 +0900</pubDate>
    </item>
    <item>
      <title>TS2611: 'foo'는 클래스 'A'에서 속성으로 정의되지만 여기서 'B'에서는 액세스로 재정의됩니다.</title>
      <link>https://showcode.tistory.com/491</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TS2611: 'foo'는 클래스 'A'에서 속성으로 정의되지만 여기서 'B'에서는 액세스로 재정의됩니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 앱에서 Typescript 컴파일 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 샘플 코드 및 오류 메시지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류를 억제할 수 있도록 안내해 주시겠습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에 따르면 이 코드가 맞는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;- error TS2611: 'foo' is defined as a property in class 'A', but is overridden here in 'B' as an accessor.
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;export class A {
  foo: string;
}

export class B extends A {
  f1;
  set foo(name) {
    this.f1 = name;
  }
  get foo() {
    return this.f1;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집자의 메모: 논평에서 두 클래스 모두가 나타났습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타사 라이브러리에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 미묘한 버그가 있어 오류 메시지가 정확합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부모 클래스에서 속성을 정의하면 모든 하위 클래스에 대해 속성이 &lt;em papago-id=&quot;6-1&quot;&gt;자동&lt;/em&gt;으로 생성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 당신이 작성한 코드에서, &lt;strong papago-id=&quot;7-1&quot;&gt;클래스&lt;/strong&gt; B에 대해 작성하지 않았다면:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;set/get foo(name) { ... }&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 수업은 그랬을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성이 에 선언되었기 때문에 어쨌든 &lt;em papago-id=&quot;9-1&quot;&gt;속성&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 부모 클래스 -&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 코드에서 당신은 실제로 문질러지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신고 재산&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접근자 선언과 함께.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 모든 하위 클래스가 필요한 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-1&quot;&gt;그들&lt;/strong&gt;의 것을 선언하기 위해&lt;/font&gt;&lt;/font&gt; &lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성(인터페이스와 유사)을 입력한 다음 다음을 시도합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;export class A {
  abstract foo: string;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 또 다른 방법은 다음을 만드는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;abstract&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 항목을 확장하는 데 사용할 수 있는 클래스입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;interface&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;abstract&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 액세스 장치(get/set)를 사용하여 최종 클래스에서 확장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;interface&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성을 정의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 접근자(get/set)를 사용하려면 다음을 생성해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;abstract&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스에 대한 데이터를 저장하고 검색하는 데이터 유형 클래스에서만 이 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 예제는 &lt;a href=&quot;https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgJIEUCuB7SBvAKGWQEcwBPALhEwFsAjaAGiOSjkmrsagB8BnMFFABzFsTC44AGwD8XBtAFDRBAL4ECceoPYIwyBNLj9%20yAIJZcKYLQAO0iLQjgzGHPi06hiA-wgGZOQAFAAeCjwAlADcXrq%20yCIBpBTBkRHQsdrx%20sj%20BuyQYRl8uqIxcT65SQUcEGklysIgIlneen7JkmAyxTSKpSotFdlVBjXI3b3p-TxNqpp2UNb6EAAmyKMdyJh2a3UAKlLSDQBu2MBrlds1Rz3SAHJ0DbPQmuqaRiZmJB4oEKFICA1mZLH9CKwENgQLpMPpsFBgth6AArSjuayRQjEYj8XbQNKsCQAC2A-AAdEEALzIZEoykUImTUkUwooGl08ls1gaVj5FIhU4lLFMsAs8kAfSCyBpp1iOOZZPJu32kDu0x5mmIEyCaWxOKgAUwUBAiopUoo8pxmr5yTZwSFr0GzREIoVYqVErZMuQTwGDoq7vFKsOx0JxF52rtdT1TMNYGNppAEAA7mhwNJyX6eAAxBG0DjBADkLgAtABxABCRaYyDwgnIjkoyCLCGNhpACHINcM7ZcXebRarAAUi2pIuSYPnC9mCR7zWzIpEbbiumHHdwlGVhvqSZ6ptIfbPEadA8hI4k1-cXpvnaJd2wjSbkMm06gM1nb3moAWwMWy1WPb1hQTYtm2UAdl2PbgZBVAtiOY4TlOP4zrewTzpKB5Liul5gOqjzPG6BpPqax7oeKEpYThSwrJAGwhmqYZEXuFIHkeaEYV6dTIJEyAAFS%20hxFFBMuEZasgSzAKc3EWlQTpUgAjFaknSZAyBcZwTrzC0inKcIqkoJRxzyFp24iFSwRkZxi78WakoibEHzvF8pjIFYkDmBBcDkMgAJAiCFheeQAA8vzWAAfBCUZ4cc-A3gMD6OAYB45sAIjGhAJQygADKK4rIQAoogxJIlSkWiscqXpYaPopWlGXIAA1LS5K3Mcfrhji45WsQ8aJpMlX1YaNq8klmwQVQ7kQJ57DkFSr5uX8M3eWkjlwBN5J2Jg-AlQtYVFPqQSUAATOIbB1JQACs6jYVoG1bTtwR7X8wSHRQlAAMxnWyV03cu61QOQm3bbtqakC9b1UF9rA-dd47-fdINPWD%2031JDn3fRdcPYQDQMPaDaao69rBHdDvVY397yfNC-DYI45LSNgIjBLjFTUzCdMQAzTMsxtbX3HFt2aEAA&quot; papago-id=&quot;25-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;인터페이스, 추상, 확장이 있는&lt;/a&gt; 스크립트 &lt;a href=&quot;https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgJIEUCuB7SBvAKGWQEcwBPALhEwFsAjaAGiOSjkmrsagB8BnMFFABzFsTC44AGwD8XBtAFDRBAL4ECceoPYIwyBNLj9%20yAIJZcKYLQAO0iLQjgzGHPi06hiA-wgGZOQAFAAeCjwAlADcXrq%20yCIBpBTBkRHQsdrx%20sj%20BuyQYRl8uqIxcT65SQUcEGklysIgIlneen7JkmAyxTSKpSotFdlVBjXI3b3p-TxNqpp2UNb6EAAmyKMdyJh2a3UAKlLSDQBu2MBrlds1Rz3SAHJ0DbPQmuqaRiZmJB4oEKFICA1mZLH9CKwENgQLpMPpsFBgth6AArSjuayRQjEYj8XbQNKsCQAC2A-AAdEEALzIZEoykUImTUkUwooGl08ls1gaVj5FIhU4lLFMsAs8kAfSCyBpp1iOOZZPJu32kDu0x5mmIEyCaWxOKgAUwUBAiopUoo8pxmr5yTZwSFr0GzREIoVYqVErZMuQTwGDoq7vFKsOx0JxF52rtdT1TMNYGNppAEAA7mhwNJyX6eAAxBG0DjBADkLgAtABxABCRaYyDwgnIjkoyCLCGNhpACHINcM7ZcXebRarAAUi2pIuSYPnC9mCR7zWzIpEbbiumHHdwlGVhvqSZ6ptIfbPEadA8hI4k1-cXpvnaJd2wjSbkMm06gM1nb3moAWwMWy1WPb1hQTYtm2UAdl2PbgZBVAtiOY4TlOP4zrewTzpKB5Liul5gOqjzPG6BpPqax7oeKEpYThSwrJAGwhmqYZEXuFIHkeaEYV6dTIJEyAAFS%20hxFFBMuEZasgSzAKc3EWlQTpUgAjFaknSZAyBcZwTrzC0inKcIqkoJRxzyFp24iFSwRkZxi78WakoibEHzvF8pjIFYkDmBBcDkMgAJAiCFheeQAA8vzWAAfBCUZ4cc-A3gMD6OAYB45sAIjGhAJQygADKK4rIQAoogxJIlSkWiscqXpYaPopWlGXIAA1LS5K3Mcfrhji45WsQ8aJpMlX1YaNq8klmwQVQ7kQJ57DkFSr5uX8M3eWkjlwBN5J2Jg-AlQtYVFPqQSUAATOIbB1JQACs6jYVoG1bTtwR7X8wSHRQlAAMxnWyV03cu61QOQm3bbtqakC9b1UF9rA-dd47-fdINPWD%2031JDn3fRdcPYQDQMPaDaao69rBHdDvVY397yfNC-DYI45LSNgIjBLjFTUzCdMQAzTMsxtbX3HFt2aEAA&quot; papago-id=&quot;25-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;놀이터 예제&lt;/a&gt;에서 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;interface IQuote {

    qty: number,
    rate: number | string,
    total ? : number | string
}

abstract class AQuote implements IQuote {
  abstract set qty(x: number);
  abstract get qty(): number;
  abstract set rate(x: number | string);
  abstract get rate(): number | string;
  abstract set total(x: number | string);
  abstract get total(): number | string


  protected abstract updateTotal(): void
  abstract getTotalNum(): number


}

class quote extends AQuote {

  constructor(obj: IQuote) {
    super()
    this.qty = obj.qty
    this.rate = obj.rate
  }

  set qty(v: number) {
    this._qty = v;
    this.updateTotal()
  }

  get qty() {
    return this._qty;

  }

  set rate(v: number | string) {
    this._rate = Number(v);
    this.updateTotal()
  }

  get rate() {
    return new Intl.NumberFormat('en-GB', {
      style: 'currency',
      currency: 'GBP'
    }).format(Number(this._rate))
  }

  set total(v: number | string) {
    this._total = Number(v);
  }

  get total(): number | string {
    return new Intl.NumberFormat('en-GB', {
      style: 'currency',
      currency: 'GBP'
    }).format(Number(this._total))
  }

  getTotalNum() {
    return Number(this._total)
  }

  protected updateTotal() {
    this.total = Number(this._rate) * Number(this._qty)
  }

  private _qty: number = 1;
  private _rate: number | string = 1;
  private _total ? : number | string = (Number(this._rate) * this._qty);

}



class QuoteArray extends Array &amp;lt; quote &amp;gt; {

  getTotals(): number {
    let totalFigure: number = 0
    this.forEach(o =&amp;gt; {
      totalFigure = totalFigure + o.getTotalNum()
    });
    return totalFigure
  }

}

let arry: QuoteArray = new QuoteArray();

arry.push(new quote({
  qty: 2,
  rate: 5
}))

arry.push(new quote({
  qty: 3,
  rate: 5
}))
arry.push(new quote({
  qty: 3,
  rate: 5
}))
arry.push(new quote({
  qty: 3,
  rate: 5
}))
arry.push(new quote({
  qty: 3,
  rate: 5
}))




console.log(arry);


console.log(arry.getTotals())

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 예제는 배열처럼 조작할 수 있는 따옴표 배열을 만들지만 배열 유형을 확장하여 다음과 같은 메서드를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getTotals()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포맷된 통화를 출력할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래밍 언어에서는 일반적으로 부모로부터 상속받을 때 새 변수/함수/액세스자 이름이 이전 이름보다 우선하도록 지정할 때까지 동일한 변수/함수/액세스자 이름을 사용할 수 없지만 항상 이 이름은 동일한 유형이어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 부모와 자식의 접근자에 변수가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-ts prettyprint-override&quot;&gt;&lt;code&gt;class A {
  _foo: string = &quot;&quot;;
  set foo(name) {
    this._foo = name;
  }
  get foo() {
    return this._foo;
  }
}

export class B extends A {
  f1: any;
  set foo(name) {
    this.f1 = name;
  }
  get foo() {
    return this.f1;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형 제한을 생략할 수 있는 방법이 있다고 생각합니다(필요하다면). 하지만 저는 어떻게 해야 하는지도 모르고 그것이 좋은 방법이 아니라고 생각합니다(프로그램은 독자에게 명확해야 합니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 게시한 바와 같이 TS 4에서 새로 시행된 오류 검사입니다(여기 &lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#properties-overriding-accessors-and-vice-versa-is-an-error&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;참조&lt;/a&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 타사 라이브러리를 전적으로 다루기 때문에 솔루션은 다음과 같은 옵션으로 제한됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타사 라이브러리를 사용자의 유형 스크립트 버전과 호환되는 최신 버전으로 업그레이드할 수 있는지 확인합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 라이브러리를 포크하고 수정합니다(작성자가 검토할 PR 작성).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 도서관 대신에 포크를 사용하세요.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류 검사가 선택적인 버전으로 유형 스크립트를 다운그레이드합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류를 비활성화할 수 없는 경우가 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;유형 스크립트는 속성과 접근자를 d.ts로 구분할 수 없습니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/TypeScript/issues/41347&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;37-1&quot;&gt;논의&lt;/a&gt; 내용은 https://github.com/microsoft/TypeScript/issues/41347 에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수정/합병 2022/05/31, 그러나 아직 공개되지 않음 [유형 @4.7.4 기준]&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현이 올바른 것이 확실한 경우 다음을 수행하여 검사를 비활성화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;// @ts-nocheck&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ts 파일의 맨 위에 있는 줄입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#-ts-nocheck-in-typescript-files&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24-1&quot;&gt;@ts-nocheck in TypeScript 파일&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/63750710/&lt;a href=&quot;https://stackoverflow.com/questions/63750710/ts2611-foo-is-defined-as-a-property-in-class-a-but-is-overridden-here-in&quot; target=&quot;_blank&quot; papago-id=&quot;41-1&quot;&gt;ts2611-foo-is-defined-as-a-property-in-class-a-but-is-overridden-here-in&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>TypeScript</category>
      <author>showcode</author>
      <guid isPermaLink="true">https://showcode.tistory.com/491</guid>
      <comments>https://showcode.tistory.com/491#entry491comment</comments>
      <pubDate>Wed, 14 Jun 2023 22:00:10 +0900</pubDate>
    </item>
  </channel>
</rss>