<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>정리하며 배우다.</title>
    <link>https://holjjack.tistory.com/</link>
    <description>정리하며 배우자</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 16:02:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>holjjack</managingEditor>
    <item>
      <title>[SVN] TortoiseSVN 저장소 주소 변경하는 방법, Relocate</title>
      <link>https://holjjack.tistory.com/330</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 진행하다가 보면, 얘기치 않게 SVN 저장소 주소가 변경되기도 하는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기에는 시스템을 크게 생각하지 않고, 뜻밖의 이사나 부득이한 장비 변경등으로 인해서 줄곳 저장소 주소가 변경되기도 합니다. 이를 예방하기 위해서는 도메인 주소를 이용하면 좋지만, 대부분 프로젝트에서는 IP를 이용한 주소체계를 사용하다 보니 빈번히 발생하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tortoise SVN 사용시 주소 변경하는 법이 어렵지는 않지만 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. TortoiseSVN Relocate 이용&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PSQ3K/btsGWPCkJb9/7WtB5lWVmhQD6sAWTbK04K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PSQ3K/btsGWPCkJb9/7WtB5lWVmhQD6sAWTbK04K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PSQ3K/btsGWPCkJb9/7WtB5lWVmhQD6sAWTbK04K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPSQ3K%2FbtsGWPCkJb9%2F7WtB5lWVmhQD6sAWTbK04K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;697&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVN 저장소에서, 마우스 오른쪽 버튼 클릭시, TortoiseSVN에 대한 메뉴가 보여지는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴 중 &quot;Relocate&quot; 메뉴를 선택하게 되면, 해당 저장소의 URL 이 보여지게 되는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 주소변경&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUekGp/btsGTyWI43X/8J0ECDulqqZFGDXU2PiQR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUekGp/btsGTyWI43X/8J0ECDulqqZFGDXU2PiQR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUekGp/btsGTyWI43X/8J0ECDulqqZFGDXU2PiQR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUekGp%2FbtsGTyWI43X%2F8J0ECDulqqZFGDXU2PiQR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;529&quot; height=&quot;188&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r5H0c/btsGUROXEDF/c3VSJkNHdhl25A587Myql0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r5H0c/btsGUROXEDF/c3VSJkNHdhl25A587Myql0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r5H0c/btsGUROXEDF/c3VSJkNHdhl25A587Myql0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr5H0c%2FbtsGUROXEDF%2Fc3VSJkNHdhl25A587Myql0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;529&quot; height=&quot;188&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;268&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUg1rz/btsGVvY1rgJ/JYgyewKPdfdD4XUgblBDbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUg1rz/btsGVvY1rgJ/JYgyewKPdfdD4XUgblBDbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUg1rz/btsGVvY1rgJ/JYgyewKPdfdD4XUgblBDbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUg1rz%2FbtsGVvY1rgJ%2FJYgyewKPdfdD4XUgblBDbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;268&quot; height=&quot;152&quot; data-origin-width=&quot;268&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;Relocate&quot; 메뉴 선택시 URL 변경 창이 나오며, 현재 URL 정보도 같이 보여지게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;From URL&lt;/span&gt;&quot; 을 확인 하시고, 변경하려는 URL을 &quot;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;To URL&lt;/span&gt;&quot; 부분에 적어주면 정상적으로 URL 변경이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주소 변경시, 내부적으로 사용중인 외부 참조 URL이 있다면 해장 영역도 같이 변경되어야 합니다~~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #8cb3be;&quot;&gt;END&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git, SVN</category>
      <category>relocate</category>
      <category>svn</category>
      <category>svn저장소</category>
      <category>svn저장소주소변경</category>
      <category>tortoise</category>
      <category>tortosesvn</category>
      <category>저장소변경</category>
      <category>저장소주소변경</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/330</guid>
      <comments>https://holjjack.tistory.com/330#entry330comment</comments>
      <pubDate>Thu, 25 Apr 2024 17:10:59 +0900</pubDate>
    </item>
    <item>
      <title>[.NET Core 6] ASP.NET Core 5.0에서 6.0으로 마이그레이션하기, Startup.cs 과 Configure 종속성 주입</title>
      <link>https://holjjack.tistory.com/327</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 한번 생성해서 개발을 하다가 새로운 버전의 프레임워크가 나오면, 속성에서 대상 프레임워크만 변경을 해주곤 했었는데요. 이런저런 테스트를 위해서 ASP.NET Core 6의 웹앱 템플릿을 새로 생성하는 과정에서 기존과는 다르게 Startup.cs 가 생성이 안되고, Configure 종속성도 보이질 않아서 찾아보던중에 최소 호스팅 모델에 대해서 알게되어 정리합니다. 추가로 ASP.NET Core 6 환경에서 지속적으로 사용하던 Startup 과 Configure 종속성 주입에 대해서도 같이 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 최소 호스팅 모델&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ASP.NET&amp;nbsp;Core&amp;nbsp;앱의&amp;nbsp;새&amp;nbsp;.NET&amp;nbsp;6&amp;nbsp;최소&amp;nbsp;호스팅&amp;nbsp;모델에는&amp;nbsp;파일&amp;nbsp;하나와&amp;nbsp;몇&amp;nbsp;줄의&amp;nbsp;코드만&amp;nbsp;필요합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6.0으로 마이그레이션하는 앱은 새 최소 호스팅 모델을 사용할 필요가 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713256366018&quot; class=&quot;stata&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet(&quot;/&quot;, () =&amp;gt; &quot;Hello World!&quot;);

app.Run();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소&amp;nbsp;호스팅&amp;nbsp;모델:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앱을 만드는 데 필요한 파일 수와 코드 줄이 대폭 줄어듭니다. 코드 4줄과 함께 파일이 하나만 있으면 됩니다.&lt;/li&gt;
&lt;li&gt;Startup.cs 및 Program.cs를 단일 Program.cs 파일로 통합합니다.&lt;/li&gt;
&lt;li&gt;최상위 문을 사용하여 앱에 필요한 코드를 최소화합니다.&lt;/li&gt;
&lt;li&gt;전역&amp;nbsp;using&amp;nbsp;지시문을&amp;nbsp;사용하여&amp;nbsp;필요한&amp;nbsp;using&amp;nbsp;문의&amp;nbsp;줄&amp;nbsp;수를&amp;nbsp;없애거나&amp;nbsp;최소화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. ASP.NET Core 5 의 구성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ASP.NET Core 5 에서 프로젝트 생성시 아래와 같은 구성으로 템플릿이 생성이 되는데요.&lt;/p&gt;
&lt;pre id=&quot;code_1713256454580&quot; class=&quot;pgsql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
// Unused usings removed.

namespace WebAppRPv5
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler(&quot;/Error&quot;);
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =&amp;gt;
            {
                endpoints.MapRazorPages();
            });
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Startup.cs&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713256461065&quot; class=&quot;cs&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
// Unused usings removed.

namespace WebAppRPv5
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =&amp;gt;
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =&amp;gt;
                {
                    webBuilder.UseStartup&amp;lt;Startup&amp;gt;();
                });
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Program.cs&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Startup.cs와 Program.cs 파일이,&amp;nbsp;ASP.NET Core 6 에서 아래의 형태의 코드로 대체 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711011415707&quot; class=&quot;stata&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler(&quot;/Error&quot;);
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의&amp;nbsp;ASP.NET&amp;nbsp;Core&amp;nbsp;6&amp;nbsp;샘플에서는&amp;nbsp;다음&amp;nbsp;방법을&amp;nbsp;보여&amp;nbsp;줍니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ConfigureServices가 WebApplication.Services로 바뀝니다.&lt;/li&gt;
&lt;li&gt;builder.Build()가&amp;nbsp;변수&amp;nbsp;app에&amp;nbsp;대해&amp;nbsp;구성된&amp;nbsp;WebApplication을&amp;nbsp;반환합니다.&amp;nbsp;Configure는&amp;nbsp;app을&amp;nbsp;사용하여&amp;nbsp;동일한&amp;nbsp;서비스에&amp;nbsp;대한&amp;nbsp;구성&amp;nbsp;호출로&amp;nbsp;대체됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 최소 호스팅 모델에서 Startup 사용하기&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1713257127916&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;namespace WebApp4
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.

            builder.Services.AddControllers();
            // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerGen();

            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (app.Environment.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI();
            }

            app.UseHttpsRedirection();

            app.UseAuthorization();


            app.MapControllers();

            app.Run();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ASP.NET Core 6의 WebApplication 을 생성시 위와 같은 형태의 템플릿이 구성이 되는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 보아왔던 Startup.cs 파일은 더이상 생성 되지 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ASP.NET Core 5에서 사용하던 Startup Class 를 지속적으로 사용하기 위해서는 추가 마이그레이션 작업을 진행해야하는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713257238800&quot; class=&quot;arduino&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;    public class Startup 
    {
        public IConfiguration Configuration { get; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (!env.IsDevelopment())
            {
                app.UseExceptionHandler(&quot;/Error&quot;);
                app.UseHsts();
            }
            
            app.UseStaticFiles();

        }

    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트마다 구성은 다르겠지만, 기본적으로 위와같은 형태로 기존의 Startup Class 를 생성해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713257304314&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Add services to the container.
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 위치는 다르겠지만, Startup Class 에 Configure 종속성을 수동으로 삽입해주면 되는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 되면, 기존 ASP.NET Core 5 에서 사용하던 구성대로 ASP.NET Core 6 로 마이그레이션이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. ASP.NET&amp;nbsp;Core&amp;nbsp;5&amp;nbsp;및&amp;nbsp;6&amp;nbsp;호스팅&amp;nbsp;모델의&amp;nbsp;차이점&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발 모드에서 개발자 예외 페이지 미들웨어는 기본적으로 사용하도록 설정되어 있습니다.&lt;/li&gt;
&lt;li&gt;앱 이름은 기본적으로 진입점 어셈블리의 이름인 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;Assembly.GetEntryAssembly().GetName().FullName&lt;/span&gt;으로 지정됩니다. 라이브러리에서 WebApplicationBuilder를 사용하는 경우 앱 이름을 라이브러리의 어셈블리로 명시적으로 변경하여 MVC의 애플리케이션 파트 검색이 작동되도록 합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;엔드포인트 라우팅 미들웨어는 전체 미들웨어 파이프라인을 래핑하므로 경로를 등록하기 위해 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;UseRouting&lt;/span&gt; 또는 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;UseEndpoints&lt;/span&gt;에 대한 명시적 호출이 필요하지 않습니다. &lt;span style=&quot;background-color: #dddddd;&quot;&gt;UseRouting&lt;/span&gt;은 경로 일치가 발생하는 위치를 지정하는 데 계속 사용할 수 있지만 미들웨어 파이프라인의 시작 부분에서 경로가 일치해야 하는 경우 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;UseRouting&lt;/span&gt;을 명시적으로 호출할 필요는 없습니다.&lt;/li&gt;
&lt;li&gt;파이프라인은 IStartupFilter가 실행되기 전에 생성되므로 파이프라인을 빌드하는 동안 발생한 예외는 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;IStartupFilter&lt;/span&gt; 호출 체인에 표시되지 않습니다.&lt;/li&gt;
&lt;li&gt;EF 마이그레이션과 같은 일부 도구는 앱의 컨텍스트에서 사용자 지정 논리를 실행하기 위해 Program.CreateHostBuilder를 사용하여 앱의 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;IServiceProvider&lt;/span&gt;에 액세스합니다. 이러한 도구는 앱의 컨텍스트에서 사용자 지정 논리를 실행하는 데 새 기술을 사용하도록 업데이트되었습니다. 이런 식으로 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;Program.CreateHostBuilder&lt;/span&gt;를 사용하는 도구로 Entity Framework 마이그레이션이 있습니다. 새 모델을 사용하도록 도구가 업데이트되었는지 확인하고 있습니다.&lt;/li&gt;
&lt;li&gt;클래스와 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;Startup&lt;/span&gt; 달리 최소 호스트는 서비스 공급자를 인스턴스화할 때 DI 범위를 자동으로 구성하지 않습니다. 범위가 필요한 컨텍스트의 경우 IServiceScopeFactory.CreateScope를 사용하여 호출 IServiceScope 하여 새 범위를 인스턴스화해야 합니다.&lt;/li&gt;
&lt;li&gt;WebApplicationBuilder를&amp;nbsp;만든&amp;nbsp;후에는&amp;nbsp;앱&amp;nbsp;이름,&amp;nbsp;환경&amp;nbsp;또는&amp;nbsp;콘텐츠&amp;nbsp;루트&amp;nbsp;같은&amp;nbsp;호스트&amp;nbsp;설정을&amp;nbsp;변경할&amp;nbsp;수&amp;nbsp;없습니다.&amp;nbsp;호스트&amp;nbsp;설정을&amp;nbsp;변경하는&amp;nbsp;방법에&amp;nbsp;대한&amp;nbsp;자세한&amp;nbsp;내용은&amp;nbsp;IHostBuilder&amp;nbsp;또는&amp;nbsp;IWebHostBuilder&amp;nbsp;사용자&amp;nbsp;지정을&amp;nbsp;참조하세요.&amp;nbsp;다음의&amp;nbsp;강조&amp;nbsp;표시된&amp;nbsp;API는&amp;nbsp;예외를&amp;nbsp;throw합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/aspnet/core/migration/50-to-60?view=aspnetcore-6.0&amp;amp;tabs=visual-studio&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/aspnet/core/migration/50-to-60?view=aspnetcore-6.0&amp;amp;tabs=visual-studio&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #8cb3be;&quot;&gt;END&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>.NET</category>
      <category>.NET Core</category>
      <category>asp.net</category>
      <category>ASP.NET Core</category>
      <category>ASP.NET Core 5</category>
      <category>ASP.NET Core 6</category>
      <category>ConfigureServices</category>
      <category>Program.cs</category>
      <category>Startup.cs</category>
      <category>마이그레이션</category>
      <category>최소호스팅모델</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/327</guid>
      <comments>https://holjjack.tistory.com/327#entry327comment</comments>
      <pubDate>Tue, 16 Apr 2024 18:03:47 +0900</pubDate>
    </item>
    <item>
      <title>[C#] C# List Shuffle 하는 방법, Random()으로 순서 섞기</title>
      <link>https://holjjack.tistory.com/313</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot; class=&quot;blue&quot;&gt;&lt;b&gt;1. Linq OrderBy()를 사용해서 목록 섞기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704973239115&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static List&amp;lt;string&amp;gt; Shuffle(List&amp;lt;string&amp;gt; values)
{
    Random rand = new Random();
    var shuffled = values.OrderBy(_ =&amp;gt; rand.Next()).ToList();

    return shuffled;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Linq의 OrderBy() 메소드를 이용하면, 지정된 비교자를 사용하여 시퀀스의 요소를 정렬&lt;/b&gt;&lt;/span&gt;합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Random()을 사용해서 순서를 무작위로 섞기 위해 위와 같이 메소드를 구성 할 수 있는데요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704973253905&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void Main(string[] args)
{
    List&amp;lt;string&amp;gt; values = new List&amp;lt;string&amp;gt;() { &quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;E&quot; };
    var valuse2 = EtcUtil.Shuffle(values);
    foreach (var item in valuse2)
    {
        Console.WriteLine(item);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;저는 Method를 구성해서 호출하는 방식을 이용했고, 위와같이 호출하면, 아래의 출력결과를 얻을 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력 :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c701xi/btsDkCOB1cE/Dms8Yt2otTdkXFtwXeeMfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c701xi/btsDkCOB1cE/Dms8Yt2otTdkXFtwXeeMfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c701xi/btsDkCOB1cE/Dms8Yt2otTdkXFtwXeeMfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc701xi%2FbtsDkCOB1cE%2FDms8Yt2otTdkXFtwXeeMfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;737&quot; height=&quot;414&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Fisher-Yates&amp;nbsp;Shuffle&amp;nbsp;알고리즘을&amp;nbsp;사용하여&amp;nbsp;목록&amp;nbsp;섞기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704973103038&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static class Extensions
{
    private static Random random = new Random();

    public static void Shuffle&amp;lt;T&amp;gt;(this IList&amp;lt;T&amp;gt; values)
    { 
        for (int i = values.Count - 1; i &amp;gt; 0; i--) 
        {
            int k = random.Next(i + 1);
            T value = values[k];
            values[k] = values[i];
            values[i] = value;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fisher-Yates 셔플 알고리즘은 C#에서 데이터 구조를 Shuffle합니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fisher-Yates 셔플 알고리즘은 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Random.Next() 함수를 사용해 얻은 인덱스값(k)을 현재의 순서 (i) 와 바꿔주는 역활을 합니다.&amp;nbsp;&lt;/span&gt;이 경우 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;편향되지 않은 배열을 생성&lt;/b&gt;&lt;/span&gt;해주며, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;시간 복잡도 O(n)&lt;/b&gt;&lt;/span&gt; 으로 빠른편에 속합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드는 C#에서 Fisher-Yates 셔플 알고리즘을 사용하여 목록을 셔플하는 방법을 보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704973136556&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void Main(string[] args)
{

    List&amp;lt;int&amp;gt; values = new List&amp;lt;int&amp;gt;() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    values.Shuffle();

    foreach (var item in values)
    {
        Console.WriteLine(item);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;static Method 를 이용해서 구현했고, Shuffle() Method 에 this 인자를 이용해서 구성하였기 때문에,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;외부 함수를 맴버 함수처럼 호출&lt;/b&gt; &lt;/span&gt;할 수 있게 해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 Extension Method 의 느낌을 더 잘 나타낼수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력 :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLguhh/btsDmpA5W1F/fAtxKKsKUfOwf2C8e81fKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLguhh/btsDmpA5W1F/fAtxKKsKUfOwf2C8e81fKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLguhh/btsDmpA5W1F/fAtxKKsKUfOwf2C8e81fKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLguhh%2FbtsDmpA5W1F%2FfAtxKKsKUfOwf2C8e81fKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;744&quot; height=&quot;368&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.delftstack.com/ko/howto/csharp/shuffle-a-list-in-csharp/&quot;&gt;https://www.delftstack.com/ko/howto/csharp/shuffle-a-list-in-csharp/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #8cb3be;&quot;&gt;END&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/C#</category>
      <category>C#</category>
      <category>Fisher-Yates</category>
      <category>list</category>
      <category>shuffle</category>
      <category>리스트</category>
      <category>무작위</category>
      <category>셔플</category>
      <category>순서섞기</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/313</guid>
      <comments>https://holjjack.tistory.com/313#entry313comment</comments>
      <pubDate>Mon, 22 Jan 2024 10:00:54 +0900</pubDate>
    </item>
    <item>
      <title>[IIS] IISRESET IIS 재시작하는 개선된 명령어 사용하기</title>
      <link>https://holjjack.tistory.com/312</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사이트에서 얘기하는 IISRESET을 사용하지 말아야 하는 이유에 대해서는,&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;점검 시간이 보장이되고 있는 케이스라면, 크게 신경쓰지 않아도 될 듯 합니다.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;또한,&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;사전에&amp;nbsp;유저의&amp;nbsp;진입을&amp;nbsp;차단할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;프로세스를&amp;nbsp;갖춘&amp;nbsp;웹사이트라면&amp;nbsp;신경쓰지&amp;nbsp;않아도&amp;nbsp;됩니다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;개선된 IISRESET 명령을 이용하면, 충분히 개선이 될 것으로 생각이 됩니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;하지만,&amp;nbsp;어떠한&amp;nbsp;이유에서&amp;nbsp;IISRESET&amp;nbsp;대신,&amp;nbsp;다른&amp;nbsp;명령어를&amp;nbsp;사용하라는것인지&amp;nbsp;핵심은&amp;nbsp;한번쯤&amp;nbsp;읽어볼만해서&amp;nbsp;정리하였습니다. &lt;br /&gt;또한, 하나의 IIS 웹서버를 이용해사 다중의 웹사이트를 이용하고 있는 사용자라면, 한번쯤은 참고하셔도 좋을 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IISRESET - IIS를 다시 시작하는 최악의 방법&lt;/h2&gt;
&lt;figure id=&quot;og_1704797802046&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;IISRESET: the WORST way to restart your IIS website&quot; data-og-description=&quot;IISRESET is a well-known tool used to restart your IIS services. Unfortunately, that is also its biggest problem: It is often used to pick up configuration changes/reset misbehaving IIS websites when it shouldn&amp;rsquo;t be. It actively hurts the availability of&quot; data-og-host=&quot;www.leansentry.com&quot; data-og-source-url=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot; data-og-url=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;IISRESET: the WORST way to restart your IIS website&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;IISRESET is a well-known tool used to restart your IIS services. Unfortunately, that is also its biggest problem: It is often used to pick up configuration changes/reset misbehaving IIS websites when it shouldn&amp;rsquo;t be. It actively hurts the availability of&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.leansentry.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 웹사이트 번역글입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;IISRESET&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IISRESET은 IIS 서비스를 다시 시작하는 데 사용되는 잘 알려진 도구입니다.&lt;br /&gt;불행히도&amp;nbsp;이는&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;문제이기도&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;구성&amp;nbsp;변경&amp;nbsp;사항을&amp;nbsp;선택하거나&amp;nbsp;잘못된&amp;nbsp;동작을&amp;nbsp;하는&amp;nbsp;IIS&amp;nbsp;웹&amp;nbsp;사이트를&amp;nbsp;재설정하는&amp;nbsp;데&amp;nbsp;종종&amp;nbsp;사용됩니다. &lt;br /&gt;이는&amp;nbsp;웹사이트의&amp;nbsp;가용성과&amp;nbsp;서버의&amp;nbsp;전반적인&amp;nbsp;안정성을&amp;nbsp;적극적으로&amp;nbsp;손상시킵니다. &lt;br /&gt;이&amp;nbsp;게시물에서는&amp;nbsp;이러한&amp;nbsp;경우가&amp;nbsp;발생하는&amp;nbsp;이유와&amp;nbsp;IISRESET이&amp;nbsp;IIS&amp;nbsp;서비스에&amp;nbsp;어떤&amp;nbsp;영향을&amp;nbsp;미치는지&amp;nbsp;자세히&amp;nbsp;살펴보겠습니다. &lt;br /&gt;&lt;br /&gt;IIS를&amp;nbsp;재설정하고,&amp;nbsp;응용&amp;nbsp;프로그램을&amp;nbsp;다시&amp;nbsp;시작하고,&amp;nbsp;응용&amp;nbsp;프로그램&amp;nbsp;풀을&amp;nbsp;재활용하는&amp;nbsp;올바른&amp;nbsp;방법에&amp;nbsp;대해&amp;nbsp;자세히&amp;nbsp;알아보려면&amp;nbsp;IIS&amp;nbsp;재설정,&amp;nbsp;다시&amp;nbsp;시작&amp;nbsp;및&amp;nbsp;재활용&amp;nbsp;가이드를&amp;nbsp;참조하세요. &lt;br /&gt;&lt;br /&gt;IISRESET을&amp;nbsp;사용하여&amp;nbsp;IIS를&amp;nbsp;다시&amp;nbsp;시작하면&amp;nbsp;웹&amp;nbsp;서버에&amp;nbsp;어떤&amp;nbsp;영향을&amp;nbsp;미치는지&amp;nbsp;자세히&amp;nbsp;알아보기&amp;nbsp;전에&amp;nbsp;IISRESET이&amp;nbsp;사용되는&amp;nbsp;이유를&amp;nbsp;검토해&amp;nbsp;보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;IISRESET&amp;nbsp;명령의&amp;nbsp;히스토리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IISRESET은&amp;nbsp;Windows&amp;nbsp;Server&amp;nbsp;2003에&amp;nbsp;IIS&amp;nbsp;6.0이&amp;nbsp;출시되기&amp;nbsp;이전에&amp;nbsp;사용되던&amp;nbsp;명령어입니다. &lt;br /&gt;&lt;br /&gt;IIS&amp;nbsp;5.0&amp;nbsp;및&amp;nbsp;이전버전의&amp;nbsp;IIS에서는&amp;nbsp;웹&amp;nbsp;서버가&amp;nbsp;모놀리식&amp;nbsp;단일&amp;nbsp;프로세스&amp;nbsp;였습니다.&amp;nbsp;응용프로그램에서&amp;nbsp;발생할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;성능&amp;nbsp;문제를&amp;nbsp;해결하기&amp;nbsp;위해&amp;nbsp;IIS&amp;nbsp;를&amp;nbsp;다시&amp;nbsp;시작&amp;nbsp;명령이&amp;nbsp;필요했습니다. &lt;br /&gt;&lt;br /&gt;IIS&amp;nbsp;6.0&amp;nbsp;에서는&amp;nbsp;응용프로그램&amp;nbsp;풀&amp;nbsp;아키텍처를&amp;nbsp;도입했습니다. &lt;br /&gt;&lt;br /&gt;요청&amp;nbsp;수신을&amp;nbsp;담당하는&amp;nbsp;IIS&amp;nbsp;시스템&amp;nbsp;프레임워크(Http.sys&amp;nbsp;커널&amp;nbsp;드라이버,&amp;nbsp;W3SVC&amp;nbsp;리스너&amp;nbsp;서비스)에서&amp;nbsp; &lt;br /&gt;&lt;br /&gt;웹사이트&amp;nbsp;응용&amp;nbsp;프로그램&amp;nbsp;코드&amp;nbsp;(호스팅에서&amp;nbsp;IIS&amp;nbsp;워커&amp;nbsp;프로세스,&amp;nbsp;w3wp.exe)가&amp;nbsp;분리되었습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;그래서,&amp;nbsp;응용프로그램&amp;nbsp;재시작할&amp;nbsp;경우&amp;nbsp;iisreset.exe&amp;nbsp;가&amp;nbsp;더이상&amp;nbsp;필요하지&amp;nbsp;않습니다.&amp;nbsp;iis를&amp;nbsp;재시작하는&amp;nbsp;쉬운방법으로는&amp;nbsp;남아있지만,&amp;nbsp;과도한&amp;nbsp;방법입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; IISRESET 명령이 사용되는 이유는 &lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Configuration&amp;nbsp;을&amp;nbsp;변경하기&amp;nbsp;위해&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IIS 7.0 이상 모든 IIS 서비스는 Configuration 변경 및 응용프로그램 콘텐츠 변경을 자동으로 감시하고 적용합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;이러한 변경 사항은 자동으로 처리되고, 응용 프로그램 또는 응용프로그램 풀이 다시 시작됩니다.&lt;/li&gt;
&lt;li&gt;즉, IISRESET 을 사용해서, configuration 변경 사항을 선택할 필요는 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IISReset의 사용은 IIS 6.0과 같은 IIS의 이전 버전에서 권장되었으며 IIS 7.0, IIS 7.5 또는 그 이후 버전에서는 지원되지 않습니다.&lt;/b&gt;&amp;nbsp;&lt;a href=&quot;https://techcommunity.microsoft.com/t5/iis-support-blog/iisreset-internals/ba-p/951578&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://techcommunity.microsoft.com/t5/iis-support-blog/iisreset-internals/ba-p/951578&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 성능 및 안정성 문제를 복구하기 위해 &lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹사이트가 정지가 되었거나, 성능적으로 문제가 있는 웹사이트를 복구하기위해 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시&amp;nbsp;시작하는&amp;nbsp;것이&amp;nbsp;전술적으로&amp;nbsp;유익한&amp;nbsp;경우에도,&amp;nbsp;IIS&amp;nbsp;를&amp;nbsp;재&amp;nbsp;설정하는&amp;nbsp;것은&amp;nbsp;올바른&amp;nbsp;방법이&amp;nbsp;아닙니다.&amp;nbsp; &lt;br /&gt;대신 올바른 응용 프로그램 풀을 이용해서 재활용 하는 것이 좋습니다.&amp;nbsp; &lt;br /&gt;응용프로그램풀을 재활용 하는 것은 아래와 같이 막대한 이점이 있습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;- 해당 응용 프로그램 풀에만 영향을 미칩니다. &lt;br /&gt;-&amp;nbsp;중첩된&amp;nbsp;IIS&amp;nbsp;재활용을&amp;nbsp;통해&amp;nbsp;제로&amp;nbsp;다운타임&amp;nbsp;재시작합니다. &lt;br /&gt;-&amp;nbsp;전체&amp;nbsp;워밍업으로&amp;nbsp;다시&amp;nbsp;시작하는&amp;nbsp;기능에&amp;nbsp;지연이&amp;nbsp;없습니다. &lt;br /&gt;-&amp;nbsp;다른&amp;nbsp;웹사이트에&amp;nbsp;영향이&amp;nbsp;없습니다.&amp;nbsp;&amp;nbsp;(다중&amp;nbsp;웹사이트&amp;nbsp;운영시) &lt;br /&gt;-&amp;nbsp;웹서버&amp;nbsp;전체에&amp;nbsp;잠재적인&amp;nbsp;결과가&amp;nbsp;없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; IISRESET 작동방식 &lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장&amp;nbsp;정확한&amp;nbsp;비유는&amp;nbsp;서버에서&amp;nbsp;전원&amp;nbsp;코드를&amp;nbsp;뽑아&amp;nbsp;특정&amp;nbsp;어플리케이션을&amp;nbsp;닫는&amp;nbsp;것이다.&amp;nbsp; &lt;br /&gt;최소한 서버를 다시 사용하려면, 서버가 다시 부팅 될 때 까지 기다려야 한다. &lt;br /&gt;아래 이미지는 IISRESET을 사용할 때 대략적으로 일어나는 일입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XfOEr/btsDit3LLTn/93dYzEm8miXXYdoU2knNR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XfOEr/btsDit3LLTn/93dYzEm8miXXYdoU2knNR1/img.png&quot; data-alt=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XfOEr/btsDit3LLTn/93dYzEm8miXXYdoU2knNR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXfOEr%2FbtsDit3LLTn%2F93dYzEm8miXXYdoU2knNR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;720&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Windows 정품 인증 서비스 (WPAS)인 WAS 를 중지하려고 시도합니다.&lt;/li&gt;
&lt;li&gt;W3SVC를 포함하여 WAS에 의존하는 모든 서비스가 중지됩니다.&lt;/li&gt;
&lt;li&gt;WAS는 모든 활성 응용 프로그램 풀을 중지하려고 시도합니다.&lt;/li&gt;
&lt;li&gt;이는 WAS가 중지되는 동안, 서버의 각 웹사이트에 대한 모든 수신요청이 503 Sevice Unavailable 을 반환하기 시작함을 의미합니다.&lt;/li&gt;
&lt;li&gt;이제 모든 IIS 작업자 프로세스가 중지되기를 기다리고 있습니다. shutdownTimeLimit(기본 90초)&lt;/li&gt;
&lt;li&gt;작업자 프로세스가 이 시간내에 중지되지 않으면 종료됩니다.&lt;/li&gt;
&lt;li&gt;마지막으로 90초 정도 후에 WAS 가 중지됩니다.&lt;/li&gt;
&lt;li&gt;그런 다음 IISRESET은 WAS 및 W3SVC 를 다시 시작하려고 시도합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, IISRESET이 WAS가 중지될 때 까지 대기 시간이 초과되지 않는 한 WAS를 강제로 종료합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 명령이 실패하고, 중지된 IIS 서비스를 다시 시작하지 못하여, 웹서버가 영구적으로 비활성화 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; IISRESET 이 웹서버 가용성을 해치는 방법 &lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 1. IISRESET으로 인해 웹사이트가 중단됨 &lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IISRESET으로 가장 먼저 발생하는 일은 W3SVC 서비스가 중지된다는 점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 웹사이트 바인딩을 듣는 사람이 없고, 연결이 거부 됩니다. 이는 해당 서버의 모든 웹사이트에서 즉시 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled1.png&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqqU95/btsDiOfKITr/RsKLjn5PW76vKKIKvkYvu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqqU95/btsDiOfKITr/RsKLjn5PW76vKKIKvkYvu1/img.png&quot; data-alt=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqqU95/btsDiOfKITr/RsKLjn5PW76vKKIKvkYvu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqqU95%2FbtsDiOfKITr%2FRsKLjn5PW76vKKIKvkYvu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;587&quot; height=&quot;451&quot; data-filename=&quot;Untitled1.png&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;451&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 2. IISRESET은 전체 서버에 긴 다운타임을 일으킴&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IISRESET이&amp;nbsp;특정&amp;nbsp;웹&amp;nbsp;사이트&amp;nbsp;또는&amp;nbsp;응용&amp;nbsp;프로그램&amp;nbsp;풀을&amp;nbsp;대상으로&amp;nbsp;하지&amp;nbsp;않기&amp;nbsp;때문에,&amp;nbsp;시스템의&amp;nbsp;모든&amp;nbsp;응용&amp;nbsp;프로그램&amp;nbsp;풀을&amp;nbsp;중지한다는&amp;nbsp;것입니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;즉,&amp;nbsp;모든&amp;nbsp;웹사이트의&amp;nbsp;중단&amp;nbsp;시간은&amp;nbsp;응용&amp;nbsp;프로그램&amp;nbsp;풀의&amp;nbsp;작업자&amp;nbsp;프로세스가&amp;nbsp;현재&amp;nbsp;실행&amp;nbsp;중인&amp;nbsp;요청을&amp;nbsp;완료하는&amp;nbsp;데&amp;nbsp;걸리는&amp;nbsp;가장&amp;nbsp;긴&amp;nbsp;시간입니다(종료&amp;nbsp;시간&amp;nbsp;제한까지).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled3.png&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kYioq/btsC9kOlLDc/zsUUvNvEaqIlJsJeXDm4Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kYioq/btsC9kOlLDc/zsUUvNvEaqIlJsJeXDm4Dk/img.png&quot; data-alt=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kYioq/btsC9kOlLDc/zsUUvNvEaqIlJsJeXDm4Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkYioq%2FbtsC9kOlLDc%2FzsUUvNvEaqIlJsJeXDm4Dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;673&quot; height=&quot;421&quot; data-filename=&quot;Untitled3.png&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면, 성능 문제가 있을때, IIS 재시작을 가장 자주 재설정 하기 때문에, 이러한 요청이 완료하는데 매우 오랜 시간이 걸릴 가능성이 높습니다. 따라서 IISRESET을 호출할 때 마다 전체 90초 지연이 예상됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 3. 서버를 중지 상태로 남을 수 있습니다. &lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IISRESET 에는 기본제한시간이 20초입니다. 기본 응용 프로그램 풀 종료 시간 제한과 같은 90초가 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 활성 시스템의 IISRESET 이 WAS가 중지되기 전에 매번 시간 초과됨을 의미합니다. 강제로 WAS 종료를 시도하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 IISRESET을 관리자 권한으로 실행하는 경우에도, IISRESET에 권한 오류가 발생 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704797678312&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Attempting stop...
Stop attempt failed.
Access denied, you must be an administrator of the remote computer to use this command. 
Either have your account added to the administrator local group of the remote 
computer or to the domain administrator global group.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 WAS 및 W3SVC 서비스가 이제 중지되고 서버가 영구적으로 다운됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FCZdD/btsDh8FwnpO/AJLWcGXTtV8DtG7eI0cNfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FCZdD/btsDh8FwnpO/AJLWcGXTtV8DtG7eI0cNfk/img.png&quot; data-alt=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FCZdD/btsDh8FwnpO/AJLWcGXTtV8DtG7eI0cNfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFCZdD%2FbtsDh8FwnpO%2FAJLWcGXTtV8DtG7eI0cNfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;504&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IISRESET NOFORCE 명령을 사용하고 있다고 가정해 보겠습니다&amp;nbsp;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/NOFORCE 명령은 시간 제한을 소진하고 서비스를 종료하지 않고 중지하여 동일한 중지 상태가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;개선된 IISRESET 명령&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IISRESET을 사용해야 하는 경우, IIS 7.0 이상에서 사용할 수 있는 실패 위험이 낮은 IIS cmd는 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1704797761132&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;iisreset /stop /timeout:60
taskkill /F /FI &quot;SERVICES eq was&quot;
iisreset /start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 더 잘 작동하는 이유는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;기본 IIS 재시작 cmd에서 발생하는 &quot;액세스 거부&quot; 오류를 방지하기 때문&lt;/b&gt;&lt;/span&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 긴 시간 초과를 사용하여 작동한 다음 IISRESET 중지가 시간 초과되면 WAS를 완전히 종료하고 나중에 다시 시작해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 웹 서버가 영구적으로 다운되는 것을 방지할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 4. IISRESET을 사용하면, 성능문제를 해결 할 수 없습니다. &lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버중단,&amp;nbsp;높은&amp;nbsp;CPU,&amp;nbsp;메모리&amp;nbsp;누수,&amp;nbsp;성능&amp;nbsp;저하는&amp;nbsp;IISRESET으로&amp;nbsp;해결&amp;nbsp;할&amp;nbsp;수&amp;nbsp;없습니다.&amp;nbsp; &lt;br /&gt;서버에 대한 로직을 검증하는 방법으로 수정해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 5. 중복 재활용 및 100% 예열의 이점을 거부합니다. &lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진지하게.&amp;nbsp;손상되었거나&amp;nbsp;어려움을&amp;nbsp;겪고&amp;nbsp;있는&amp;nbsp;응용&amp;nbsp;프로그램&amp;nbsp;풀을&amp;nbsp;다시&amp;nbsp;시작하려는&amp;nbsp;경우&amp;nbsp;재활용&amp;nbsp;방법은&amp;nbsp;대신&amp;nbsp;중단&amp;nbsp;시간이&amp;nbsp;없고&amp;nbsp;완전히&amp;nbsp;예열되며&amp;nbsp;시작&amp;nbsp;지연이&amp;nbsp;없는&amp;nbsp;다시&amp;nbsp;시작을&amp;nbsp;허용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 결론 &lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS가 서버를 재설정할 필요가 없으니, IISRESET 을 사용하지 마세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해서 웹사이트 가동 중단 시간이 길어지고, 웹 서버가 작동할 수 없는 상태가 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신 IIS 서비스를 적절하게 다시 시작하는 방법을 알아보고, Zero 시작 지연 작업을 위해 웹사이트를 구성하는 방법에 대해서 알아보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704797795327&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;IISRESET: the WORST way to restart your IIS website&quot; data-og-description=&quot;IISRESET is a well-known tool used to restart your IIS services. Unfortunately, that is also its biggest problem: It is often used to pick up configuration changes/reset misbehaving IIS websites when it shouldn&amp;rsquo;t be. It actively hurts the availability of&quot; data-og-host=&quot;www.leansentry.com&quot; data-og-source-url=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot; data-og-url=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.leansentry.com/guide/reset-restart-recycle-iis/dangers-of-iisreset#to-recover-from-performance-or-stability-issues&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;IISRESET: the WORST way to restart your IIS website&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;IISRESET is a well-known tool used to restart your IIS services. Unfortunately, that is also its biggest problem: It is often used to pick up configuration changes/reset misbehaving IIS websites when it shouldn&amp;rsquo;t be. It actively hurts the availability of&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.leansentry.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #8cb3be;&quot;&gt;END&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>iis</category>
      <category>iisreset</category>
      <category>WebServer</category>
      <category>번역</category>
      <category>웹서버</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/312</guid>
      <comments>https://holjjack.tistory.com/312#entry312comment</comments>
      <pubDate>Mon, 15 Jan 2024 10:50:58 +0900</pubDate>
    </item>
    <item>
      <title>[C#] 문자열 서식, string.Format() 및 보간을 이용한 간격 맞추기</title>
      <link>https://holjjack.tistory.com/303</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램을 개발하면서 소소하게 많이 접하게 되는것이 문자열관련, 날짜관련이 아닐까 싶은데요. 그중 Log 성 데이터를 다루다 보면 문자열 관련된 내용이 꼭 필요하게 됩니다. Log와 관련된 내용을 좀더 가독성이 좋게 만들면 좋을 거 같아서 보간을 이용한 간격을 맞췄는데요. 진행한 김에 같이 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. string.Format 을 이용한 문자열 출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;string.Format() 의 메소드 매개변수 형식은 아래와 같은데요.&lt;/p&gt;
&lt;pre id=&quot;code_1701857664835&quot; class=&quot;clojure&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{첨자, 맞춤:서식 문자열}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HYdKC/btszzCE0fOi/lLeOP1izzE8W9t1KIrHOh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HYdKC/btszzCE0fOi/lLeOP1izzE8W9t1KIrHOh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HYdKC/btszzCE0fOi/lLeOP1izzE8W9t1KIrHOh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHYdKC%2FbtszzCE0fOi%2FlLeOP1izzE8W9t1KIrHOh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;442&quot; height=&quot;338&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY3BYe/btszCoZ2SGK/hz4RHldV8AMNgPjoFlYDx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY3BYe/btszCoZ2SGK/hz4RHldV8AMNgPjoFlYDx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY3BYe/btszCoZ2SGK/hz4RHldV8AMNgPjoFlYDx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY3BYe%2FbtszCoZ2SGK%2Fhz4RHldV8AMNgPjoFlYDx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;448&quot; height=&quot;342&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메소드를 이용하면 위와같은 형태로 문자열을 출력할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;red&quot; data-ke-size=&quot;size26&quot;&gt;2. PadRight() PadLeft() 를 이용한 간격맞춤&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/InNyW/btszzJYqu3m/RISHp4AQKbjArBMLtQ9Ock/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/InNyW/btszzJYqu3m/RISHp4AQKbjArBMLtQ9Ock/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/InNyW/btszzJYqu3m/RISHp4AQKbjArBMLtQ9Ock/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FInNyW%2FbtszzJYqu3m%2FRISHp4AQKbjArBMLtQ9Ock%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;339&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQgnTE/btszzEixeUU/nIEKhOAXkrzKISntJskBG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQgnTE/btszzEixeUU/nIEKhOAXkrzKISntJskBG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQgnTE/btszzEixeUU/nIEKhOAXkrzKISntJskBG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQgnTE%2FbtszzEixeUU%2FnIEKhOAXkrzKISntJskBG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;341&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혹 문자열의 간격을 조정해야 하는 상황이 발생하게 되는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때는 PadRight(), PadLeft() 메소드를 이용하시면 우측간격과, 좌측간격을 조정해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 형태로 출력화면을 컨트롤 할 수 있는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;green&quot; data-ke-size=&quot;size26&quot;&gt;3. $을 이용한 문자열 보간&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ 문자는 문자열 리터럴을 보간된 문자열로 식별합니다. 보간된 문자열은 보간 식이 포함될 수 있는 문자열 리터럴입니다. 보간된 문자열이 결과 문자열로 해석되면 보간 식이 있는 항목이 식 결과의 문자열 표현으로 바뀝니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1698850928729&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var name = &quot;Mark&quot;;
var date = DateTime.Now;

// Composite formatting:
Console.WriteLine(&quot;Hello, {0}! Today is {1}, it's {2:HH:mm} now.&quot;, name, date.DayOfWeek, date);
// String interpolation:
Console.WriteLine($&quot;Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.&quot;);
// Both calls produce the same output that is similar to:
// Hello, Mark! Today is Wednesday, it's 19:40 now.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C#&amp;nbsp;10부터&amp;nbsp;보간된&amp;nbsp;문자열을&amp;nbsp;사용하여&amp;nbsp;상수&amp;nbsp;문자열을&amp;nbsp;초기화할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;보간된&amp;nbsp;문자열&amp;nbsp;내의&amp;nbsp;모든&amp;nbsp;보간&amp;nbsp;식이&amp;nbsp;상수&amp;nbsp;문자열인&amp;nbsp;경우에만&amp;nbsp;이&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;blue&quot; data-ke-size=&quot;size26&quot;&gt;4. 보간을 이용한 출력&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nnk2R/btszColuGR9/DTOMsK22YJn0xh1A0syPc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nnk2R/btszColuGR9/DTOMsK22YJn0xh1A0syPc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nnk2R/btszColuGR9/DTOMsK22YJn0xh1A0syPc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNnk2R%2FbtszColuGR9%2FDTOMsK22YJn0xh1A0syPc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;454&quot; height=&quot;354&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddmxLH/btszzEixhLV/zUnwoS5ZSS3mSyy2rq2Qqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddmxLH/btszzEixhLV/zUnwoS5ZSS3mSyy2rq2Qqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddmxLH/btszzEixhLV/zUnwoS5ZSS3mSyy2rq2Qqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddmxLH%2FbtszzEixhLV%2FzUnwoS5ZSS3mSyy2rq2Qqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;466&quot; height=&quot;317&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예제에서는 string.Format() 메소드를 이용했지만, 보간을 이용하면 간단하게 구문을 줄 일 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에 $ 리터럴 문자만 넣어주시면 보간을 이용 할 수 있는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩에 대한 부분이 간편해진 것을 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 보간을 이용한 간단한 줄맞춤 서식&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctEDid/btszCMl5nfJ/G1OX6iGkJt5typIFkLC7s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctEDid/btszCMl5nfJ/G1OX6iGkJt5typIFkLC7s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctEDid/btszCMl5nfJ/G1OX6iGkJt5typIFkLC7s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctEDid%2FbtszCMl5nfJ%2FG1OX6iGkJt5typIFkLC7s1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;335&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkjxjK/btszCp5J6al/2Xf59CbPtpmci6G1L0lwG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkjxjK/btszCp5J6al/2Xf59CbPtpmci6G1L0lwG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkjxjK/btszCp5J6al/2Xf59CbPtpmci6G1L0lwG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkjxjK%2FbtszCp5J6al%2F2Xf59CbPtpmci6G1L0lwG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;483&quot; height=&quot;317&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PadRight(), PadLeft() 메소드도 보간을 이용하면, 간편하게 +/- 정수형을 이용해서 좌측/우측 간격을 조절할 수 있어서 간편하게 이용할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참조&lt;/h2&gt;
&lt;figure id=&quot;og_1701857419702&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[C#] 문자열 서식 맞추기 (string.Format(), 문자열 보간)&quot; data-og-description=&quot;*이 글은 책을 바탕으로 공부한 글입니다. 숫자만큼 많이 다루는 게 문자열이라고 했다. 문자열을 다루다 보면, 서식을 갖출 필요가 있을 때가 있다. Publisher Author Title Marvel Stan Lee Iron Man Hanbit Sang&quot; data-og-host=&quot;daekyoulibrary.tistory.com&quot; data-og-source-url=&quot;https://daekyoulibrary.tistory.com/entry/C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%84%9C%EC%8B%9D-%EB%A7%9E%EC%B6%94%EA%B8%B0-stringFormat-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B3%B4%EA%B0%84&quot; data-og-url=&quot;https://daekyoulibrary.tistory.com/entry/C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%84%9C%EC%8B%9D-%EB%A7%9E%EC%B6%94%EA%B8%B0-stringFormat-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B3%B4%EA%B0%84&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Q8A9K/hyUIE8kHNq/pIoPH0ljE8jk8LWFDj0DsK/img.png?width=800&amp;amp;height=860&amp;amp;face=0_0_800_860,https://scrap.kakaocdn.net/dn/CMHhr/hyUItlpZz3/POM0xh2D7xnmjKDNh4kHcK/img.png?width=800&amp;amp;height=860&amp;amp;face=0_0_800_860&quot;&gt;&lt;a href=&quot;https://daekyoulibrary.tistory.com/entry/C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%84%9C%EC%8B%9D-%EB%A7%9E%EC%B6%94%EA%B8%B0-stringFormat-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B3%B4%EA%B0%84&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://daekyoulibrary.tistory.com/entry/C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%84%9C%EC%8B%9D-%EB%A7%9E%EC%B6%94%EA%B8%B0-stringFormat-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B3%B4%EA%B0%84&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Q8A9K/hyUIE8kHNq/pIoPH0ljE8jk8LWFDj0DsK/img.png?width=800&amp;amp;height=860&amp;amp;face=0_0_800_860,https://scrap.kakaocdn.net/dn/CMHhr/hyUItlpZz3/POM0xh2D7xnmjKDNh4kHcK/img.png?width=800&amp;amp;height=860&amp;amp;face=0_0_800_860');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[C#] 문자열 서식 맞추기 (string.Format(), 문자열 보간)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;*이 글은 책을 바탕으로 공부한 글입니다. 숫자만큼 많이 다루는 게 문자열이라고 했다. 문자열을 다루다 보면, 서식을 갖출 필요가 있을 때가 있다. Publisher Author Title Marvel Stan Lee Iron Man Hanbit Sang&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;daekyoulibrary.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/C#</category>
      <category>C#</category>
      <category>log</category>
      <category>padleft</category>
      <category>padright</category>
      <category>string</category>
      <category>String.Format()</category>
      <category>간격</category>
      <category>문자열</category>
      <category>문자열간격</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/303</guid>
      <comments>https://holjjack.tistory.com/303#entry303comment</comments>
      <pubDate>Mon, 18 Dec 2023 10:24:14 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 리눅스 종류 및 버전 확인하는 방법 - CentOS, Ubuntu</title>
      <link>https://holjjack.tistory.com/255</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-style=&quot;style10&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Linux는 버전에 대한 영향을 받는 OS 이다 보니, 이전에 설치한 버전을 확인해야 하는 경우가 빈번히 발생을 하는데요. 이때 알아두면 좋을 명령어 및 방법을 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;01. uname -a&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rOEKz/btrPAJaXRGK/O4XJnUHBcqNGXjkiSIWZp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rOEKz/btrPAJaXRGK/O4XJnUHBcqNGXjkiSIWZp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rOEKz/btrPAJaXRGK/O4XJnUHBcqNGXjkiSIWZp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrOEKz%2FbtrPAJaXRGK%2FO4XJnUHBcqNGXjkiSIWZp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ uname -a 옵션의 경우 모든 정보를 출력하는데요. --help 옵션으로 확인시 -a 옵션을 제외한 내용들이 순차적으로 출력이 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/De9Gc/btsAFZylfCN/DULkj72Z5nms3MLm4g6G10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/De9Gc/btsAFZylfCN/DULkj72Z5nms3MLm4g6G10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/De9Gc/btsAFZylfCN/DULkj72Z5nms3MLm4g6G10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDe9Gc%2FbtsAFZylfCN%2FDULkj72Z5nms3MLm4g6G10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;741&quot; height=&quot;482&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700548167967&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;커널이름 -s&lt;/b&gt; : Linux&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;호스트이름 -n&lt;/b&gt; : localhost.localdomain&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;커널릴리즈 -r&lt;/b&gt; : 3.10.0-957.el7.x86_64 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;커널 버전 -v&lt;/b&gt; : #1 SMP Thu Nov 8 23:39:32 UTC 2018 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하드웨어 -m&lt;/b&gt; : x86_64&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로세스 타입 -p&lt;/b&gt; : x86_64&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하드웨어 플랫폼 -i&lt;/b&gt; : x86_64&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;운영체제 -o&lt;/b&gt; : x86_64 GNU/Linux &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의 순서로 출력이 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;02. os-release 파일을 이용한 버전확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 os-release 파일을 이용해서도 버전 정보를 확인 할 수 있는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 두가지 명령어로 확인이 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1700552031866&quot; class=&quot;gradle&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ cat /etc/os-release

$ grep . /etc/os-release&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPxHwQ/btsAEpEQli2/x2kcQdHP4N24sqKJRrIOU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPxHwQ/btsAEpEQli2/x2kcQdHP4N24sqKJRrIOU1/img.png&quot; data-alt=&quot;CentOS 화면 / cat /etc/os-release&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPxHwQ/btsAEpEQli2/x2kcQdHP4N24sqKJRrIOU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPxHwQ%2FbtsAEpEQli2%2Fx2kcQdHP4N24sqKJRrIOU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;741&quot; height=&quot;482&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CentOS 화면 / cat /etc/os-release&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rkAI6/btsAJBQQ26c/iSP1PxQzDMoKLUsl9B4NaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rkAI6/btsAJBQQ26c/iSP1PxQzDMoKLUsl9B4NaK/img.png&quot; data-alt=&quot;Ubuntu 화면 /&amp;amp;nbsp;
 cat /etc/os-release&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rkAI6/btsAJBQQ26c/iSP1PxQzDMoKLUsl9B4NaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrkAI6%2FbtsAJBQQ26c%2FiSP1PxQzDMoKLUsl9B4NaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;741&quot; height=&quot;482&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Ubuntu 화면 /&amp;nbsp;
 cat /etc/os-release&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rUsmW/btsAGWO1Jua/ECV6A0AgN5xdrTHv5eBUl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rUsmW/btsAGWO1Jua/ECV6A0AgN5xdrTHv5eBUl1/img.png&quot; data-alt=&quot;grep . /etc/os-release&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rUsmW/btsAGWO1Jua/ECV6A0AgN5xdrTHv5eBUl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrUsmW%2FbtsAGWO1Jua%2FECV6A0AgN5xdrTHv5eBUl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;741&quot; height=&quot;482&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;grep . /etc/os-release&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;03. hostnamectl 을 이용한 버전확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hostnamectl 명령어를 이용해서도 버전을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hostnamectl 명령어는 호스트에 대한 정보 및 호스트 이름을 변경할 때 사용하는 명령어 인데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태를 확인 할때도 사용하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700552685147&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ hostnamectl status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oK66M/btrPDAcY6ie/h6voPJFAePBaj6HnjGATPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oK66M/btrPDAcY6ie/h6voPJFAePBaj6HnjGATPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oK66M/btrPDAcY6ie/h6voPJFAePBaj6HnjGATPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoK66M%2FbtrPDAcY6ie%2Fh6voPJFAePBaj6HnjGATPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;status 옵션은 생략가능한 기본 옵션이여서, 호스트 정보를 확인 할 때 사용도 되지만, OS 및 버전정보도 같이 보여주기 때문에 해당명령어를 이용해서도 버전정보를 확인 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;04. lsb_release&amp;nbsp;-a&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lsb_release 명령어는 리눅스의 배포판 버전을 확인하는 명령어 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 명령어로 확인이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700553706742&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ lsb_release -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OSeBY/btrPEoi6u1w/kBOEZ8fQhJkOvRkOh5iM81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OSeBY/btrPEoi6u1w/kBOEZ8fQhJkOvRkOh5iM81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OSeBY/btrPEoi6u1w/kBOEZ8fQhJkOvRkOh5iM81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOSeBY%2FbtrPEoi6u1w%2FkBOEZ8fQhJkOvRkOh5iM81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;05. lsb_release 가 설치 안되 있을 경우.&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혼, &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;lsb_release 명령어가 설치가 안되어 있을 경우가 있습니다. 해당 명령어를 입력할 경우 아래와 같이 명령어를 찾을 수 없다는 메시지가 출력되는 경우인데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c243gc/btrPDF6t6dG/xzZvlwhAmKvQL9t9q5n7n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c243gc/btrPDF6t6dG/xzZvlwhAmKvQL9t9q5n7n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c243gc/btrPDF6t6dG/xzZvlwhAmKvQL9t9q5n7n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc243gc%2FbtrPDF6t6dG%2FxzZvlwhAmKvQL9t9q5n7n1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 경우 yum 명령어를 이용해서 lsb 를 설치해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700553843279&quot; class=&quot;cmake&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ yum install redhat-lsb&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8ayFe/btrPC9twrmm/2gFnCrmzOBB5YmMzu6NX4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8ayFe/btrPC9twrmm/2gFnCrmzOBB5YmMzu6NX4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8ayFe/btrPC9twrmm/2gFnCrmzOBB5YmMzu6NX4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8ayFe%2FbtrPC9twrmm%2F2gFnCrmzOBB5YmMzu6NX4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TiJ4X/btrPEEMK9n3/nKvqiGSxqvEjKm5jina95K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TiJ4X/btrPEEMK9n3/nKvqiGSxqvEjKm5jina95K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TiJ4X/btrPEEMK9n3/nKvqiGSxqvEjKm5jina95K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTiJ4X%2FbtrPEEMK9n3%2FnKvqiGSxqvEjKm5jina95K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OSeBY/btrPEoi6u1w/kBOEZ8fQhJkOvRkOh5iM81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OSeBY/btrPEoi6u1w/kBOEZ8fQhJkOvRkOh5iM81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OSeBY/btrPEoi6u1w/kBOEZ8fQhJkOvRkOh5iM81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOSeBY%2FbtrPEoi6u1w%2FkBOEZ8fQhJkOvRkOh5iM81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;418&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://rhrhth23.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://rhrhth23.tistory.com/145&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>OS/Linux</category>
      <category>CentOS</category>
      <category>hostnamectl</category>
      <category>Linux</category>
      <category>lsb_release</category>
      <category>os-release</category>
      <category>ubuntu</category>
      <category>uname</category>
      <category>리눅스</category>
      <category>버전확인</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/255</guid>
      <comments>https://holjjack.tistory.com/255#entry255comment</comments>
      <pubDate>Mon, 11 Dec 2023 09:09:00 +0900</pubDate>
    </item>
    <item>
      <title>[.NET 8] ASP.NET Core MVC 새 프로젝트 생성 시, /Views/Home/Index.cshtml 를 찾지 못하는 상황 수정</title>
      <link>https://holjjack.tistory.com/306</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.NET 8 버전이 Preview 상태에서 장기지원 버전으로 상향됬다는 소식에, .NET 8.0 을 설치했는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 설치 후 Visual Studio 2022에서 ASP.NET Core 웹앱 (MVC 모델) 템플릿을 이용해서 프로젝트를 생성 하고 기본적인 실행을 했는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 실행이 되지 않고,&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/Views/Home/Index.cshtml&lt;/li&gt;
&lt;li&gt;/Views/Shared/Index.cshtml&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 찾지 못한다는 에러가 발생해서 원인을 찾아봤습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;red&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;01. 프로젝트 생성, MVC 템플릿&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1KDja/btsAxYMDe72/43cK9xiuEBlbz561VqfynK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1KDja/btsAxYMDe72/43cK9xiuEBlbz561VqfynK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1KDja/btsAxYMDe72/43cK9xiuEBlbz561VqfynK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1KDja%2FbtsAxYMDe72%2F43cK9xiuEBlbz561VqfynK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1014&quot; height=&quot;675&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.NET 8.0 을 설치 한 후, ASP.NET Core 웹앱 (Model - View - Controller) 템플릿을 이용해서 프로젝트를 생성하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbVhar/btsAyoYAxVv/kPtRUtbWVk9raoxgKKMxSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbVhar/btsAyoYAxVv/kPtRUtbWVk9raoxgKKMxSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbVhar/btsAyoYAxVv/kPtRUtbWVk9raoxgKKMxSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbVhar%2FbtsAyoYAxVv%2FkPtRUtbWVk9raoxgKKMxSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1014&quot; height=&quot;675&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직은 Preview 로 보여지는거 같지만, 프레임워크 버전을 8.0 으로 선택을하고 프로젝트를 정상적으로 만들었는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 컴파일 후 실행을 하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;green&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;02. /Views/Home/Index.cshtml not found 에러 발생&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rJ3nv/btsAw5SLgCl/tM5UH9fXgNY06m3rROssd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rJ3nv/btsAw5SLgCl/tM5UH9fXgNY06m3rROssd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rJ3nv/btsAw5SLgCl/tM5UH9fXgNY06m3rROssd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrJ3nv%2FbtsAw5SLgCl%2FtM5UH9fXgNY06m3rROssd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1392&quot; height=&quot;682&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700210088647&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;An unhandled exception occurred while processing the request.
InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable&amp;lt;string&amp;gt; originalLocations)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드 후 첫 실행을 진행했는데요. &quot;An unhandled exception occurred while processing the request.&quot; 에러가 발생을 하였습니다.&amp;nbsp; 거기다가 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Index 를 찾지 못한다는 에러&lt;/b&gt;&lt;/span&gt;였는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설마.. 기본적으로 Razor RuntimeCompilation 이 빠진건가요;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행은 되게끔 템플릿 구성을 해줘야 하는게 아닌지 싶었지만, 일단 오류를 잡아봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;blue&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;03. Razor.RuntimeCompilation Nuget 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 오류를 수정하기 위해서는 별도의 Nuget 패키지를 설치해야 하는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확한 명칭은 아래와 같습니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700210150933&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGYEva/btsAxcdiDrT/8kx2IiaUhkLK73vdLay6a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGYEva/btsAxcdiDrT/8kx2IiaUhkLK73vdLay6a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGYEva/btsAxcdiDrT/8kx2IiaUhkLK73vdLay6a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGYEva%2FbtsAxcdiDrT%2F8kx2IiaUhkLK73vdLay6a1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;964&quot; height=&quot;264&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RoKll/btsAuyIsCor/EFQ6fj4QKFvPTfe4NJwiGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RoKll/btsAuyIsCor/EFQ6fj4QKFvPTfe4NJwiGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RoKll/btsAuyIsCor/EFQ6fj4QKFvPTfe4NJwiGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRoKll%2FbtsAuyIsCor%2FEFQ6fj4QKFvPTfe4NJwiGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;443&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 패키지를 검색해서 설치를 진행해 줬고요. .NET 8.0 버전을 사용하고 있으니, 같은 버전으로 설치를 진행하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;04. 서비스 컨테이너 부분 수정.&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1700210266847&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;internal class Program
{
    private static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        // Add services to the container.
        builder.Services.AddControllersWithViews();

        var app = builder.Build();

        // Configure the HTTP request pipeline.
        if (!app.Environment.IsDevelopment())
        {
            app.UseExceptionHandler(&quot;/Home/Error&quot;);
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.MapControllerRoute(
            name: &quot;default&quot;,
            pattern: &quot;{controller=Home}/{action=Index}/{id?}&quot;);

        app.Run();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700210285685&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;builder.Services.AddControllersWithViews().AddRazorRuntimeCompilation();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후, 컨테이너 부분에 RazorRuntimeCompilation 을 추가적으로 붙여줘야 하는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 AddControllersWithViews() 뒤에 붙여주시면 정상적으로 동작하는 것을 확인 하실 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zDg84/btsArCq4tLA/SllcN0rk5Oux7Y3oOWqflK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zDg84/btsArCq4tLA/SllcN0rk5Oux7Y3oOWqflK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zDg84/btsArCq4tLA/SllcN0rk5Oux7Y3oOWqflK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzDg84%2FbtsArCq4tLA%2FSllcN0rk5Oux7Y3oOWqflK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1008&quot; height=&quot;684&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Footer 에 해당하는 부분이 상단에 붙어 있는데요. 해당 부분이 왜 이런지는 추가적으로 확인해 봐야겠네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 미흡한 부분이 있는 것인지, 호환이 되지 않는 것인지 확인이 필요해 보이지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;템플릿에 해당하는 예시적인 화면이다보니, 크게 중점을 두지는 않아도 될것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/dotnet/comments/14zd7zp/brand_new_default_aspnet_core_mvc_8_project/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.reddit.com/r/dotnet/comments/14zd7zp/brand_new_default_aspnet_core_mvc_8_project/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/aspnet/core/mvc/views/view-compilation?view=aspnetcore-8.0&amp;amp;tabs=visual-studio&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/aspnet/core/mvc/views/view-compilation?view=aspnetcore-8.0&amp;amp;tabs=visual-studio&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>.NET</category>
      <category>.net</category>
      <category>.NET 8.0</category>
      <category>ASP.NET Core</category>
      <category>C#</category>
      <category>Razor</category>
      <category>RuntimeCompilation</category>
      <category>webapp</category>
      <category>웹앱</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/306</guid>
      <comments>https://holjjack.tistory.com/306#entry306comment</comments>
      <pubDate>Mon, 4 Dec 2023 10:16:29 +0900</pubDate>
    </item>
    <item>
      <title>어떤</title>
      <link>https://holjjack.tistory.com/pages/%EC%96%B4%EB%96%A4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;페이지?&lt;/p&gt;</description>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/pages/%EC%96%B4%EB%96%A4</guid>
      <pubDate>Tue, 28 Nov 2023 17:38:04 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] GitLab API PlugIn을 이용한, 외부에서 젠킨스 빌드 유발하는 방법 - 2.4 버전 이상</title>
      <link>https://holjjack.tistory.com/304</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins의 보안상의 이슈로 Jenkins 버전을 2.3xx 에서, 2.4xx 이상의 버전으로 업데이트를 진행 하였습니다. 그 과정에서 예전에 사용하던 GitLab API PlugIn에 UI가 변경이 되었는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 2.3xx 대의 버전을 사용하시는 분들이라면, 이전 글을 참고 하시면 좋을 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://holjjack.tistory.com/288&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.05 - [CI] - [Jenkins] GitLab Webhooks를 이용한 젠킨스 연동 및 빌드유발&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698765518206&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Jenkins] GitLab Webhooks를 이용한 젠킨스 연동 및 빌드유발&quot; data-og-description=&quot;Summary Gitlab의 Webhooks은 프로젝트 내에서 어떠한 일이 발생할 때, 이벤트를 바인딩 하는데 사용 할 수 있습니다. 이 기능을 이용하면, 다양한 Event를 발생 시킬 수 있는데요. Gitlab에 있는 Webhooks 를 &quot; data-og-host=&quot;holjjack.tistory.com&quot; data-og-source-url=&quot;https://holjjack.tistory.com/288&quot; data-og-url=&quot;https://holjjack.tistory.com/288&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dV6lkD/hyUnVP6XWP/flYS2ok6uZjZ5e7fgTcVa0/img.png?width=800&amp;amp;height=1104&amp;amp;face=334_158_684_540,https://scrap.kakaocdn.net/dn/YIlL4/hyUnSy3UyV/KVPkZCHzY6YnVnkCBSkDWk/img.png?width=800&amp;amp;height=1104&amp;amp;face=334_158_684_540,https://scrap.kakaocdn.net/dn/dq9oTg/hyUnQgWJXY/1yPWe2WNDSTI7bxhwYd53K/img.png?width=1258&amp;amp;height=808&amp;amp;face=0_0_1258_808&quot;&gt;&lt;a href=&quot;https://holjjack.tistory.com/288&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://holjjack.tistory.com/288&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dV6lkD/hyUnVP6XWP/flYS2ok6uZjZ5e7fgTcVa0/img.png?width=800&amp;amp;height=1104&amp;amp;face=334_158_684_540,https://scrap.kakaocdn.net/dn/YIlL4/hyUnSy3UyV/KVPkZCHzY6YnVnkCBSkDWk/img.png?width=800&amp;amp;height=1104&amp;amp;face=334_158_684_540,https://scrap.kakaocdn.net/dn/dq9oTg/hyUnQgWJXY/1yPWe2WNDSTI7bxhwYd53K/img.png?width=1258&amp;amp;height=808&amp;amp;face=0_0_1258_808');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Jenkins] GitLab Webhooks를 이용한 젠킨스 연동 및 빌드유발&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Summary Gitlab의 Webhooks은 프로젝트 내에서 어떠한 일이 발생할 때, 이벤트를 바인딩 하는데 사용 할 수 있습니다. 이 기능을 이용하면, 다양한 Event를 발생 시킬 수 있는데요. Gitlab에 있는 Webhooks 를&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;holjjack.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;01. Jenkins&amp;nbsp;버전&amp;nbsp;업그레이드&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/94BZQ/btszvfbLjcj/13GlUDlfjEh7g0F44irtz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/94BZQ/btszvfbLjcj/13GlUDlfjEh7g0F44irtz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/94BZQ/btszvfbLjcj/13GlUDlfjEh7g0F44irtz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F94BZQ%2FbtszvfbLjcj%2F13GlUDlfjEh7g0F44irtz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;292&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins의 버전 업그레이드는, 관리 메뉴에서 진행하면 손쉽게 진행할 수 있어서 넘어가도록 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;02. 2.4&amp;nbsp;버전의&amp;nbsp;업그레이드&amp;nbsp;이후&amp;nbsp;PlugIn&amp;nbsp;변경&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLZO7x/btszqdZ0bxR/l8k857eodax7uKZ6cqzTe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLZO7x/btszqdZ0bxR/l8k857eodax7uKZ6cqzTe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLZO7x/btszqdZ0bxR/l8k857eodax7uKZ6cqzTe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLZO7x%2FbtszqdZ0bxR%2Fl8k857eodax7uKZ6cqzTe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1060&quot; height=&quot;322&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어떠한 이유인지는 모르겠으나, 2.3xx 버전에서 사용중이던 GitLab Plugin이 2.4xx 버전대에서는 검색이 안되고,&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다른 GitLab API Plugin 이 검색이 되었습니다. 한참을 검색하였지만 찾지 못해서, 해당 Plugin을 설치 하였는데요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;※ 단, 기존 GitLab Plugin이 설치된 상태에서 업그레이드를 했을 경우에는 기존 Plugin을 사용할 수 있었습니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;03. 빌드유발 변경하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1311&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r9s4Z/btszwbtbgj5/sdtGtVLUtWXkj28lKblQhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r9s4Z/btszwbtbgj5/sdtGtVLUtWXkj28lKblQhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r9s4Z/btszwbtbgj5/sdtGtVLUtWXkj28lKblQhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr9s4Z%2Fbtszwbtbgj5%2FsdtGtVLUtWXkj28lKblQhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1311&quot; height=&quot;720&quot; data-origin-width=&quot;1311&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nsw8e/btszwbNtKQl/guvo4ixwSHZbSkXs7WD5lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nsw8e/btszwbNtKQl/guvo4ixwSHZbSkXs7WD5lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nsw8e/btszwbNtKQl/guvo4ixwSHZbSkXs7WD5lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNsw8e%2FbtszwbNtKQl%2Fguvo4ixwSHZbSkXs7WD5lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1286&quot; height=&quot;639&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitLab Plugin과는 다르게, 빌드유발 탭에서는 Generic Webhook Trigger 의 체크박스로 표현이 되고 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호출 URL도&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;http://JENKINS_URL/generic-webhook-trigger/invoke&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 기존의 형태와는 다르게 표현이 되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 호출 방식이 크게 어렵지는 않고, Token 생성시, 하단의 Token 입력상자에 입력해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;04. 토큰 생성하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1115&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byfo6d/btszLWInX18/KKPWDhuZF3zkJRE5pzqFrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byfo6d/btszLWInX18/KKPWDhuZF3zkJRE5pzqFrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byfo6d/btszLWInX18/KKPWDhuZF3zkJRE5pzqFrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyfo6d%2FbtszLWInX18%2FKKPWDhuZF3zkJRE5pzqFrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1115&quot; height=&quot;545&quot; data-origin-width=&quot;1115&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 API 토큰은, 유저를 관리하는 메뉴에서 해당 프로젝트에 권한이 있는 계정에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;설정&amp;nbsp;&lt;/b&gt;메뉴에서 만드실 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;05. 외부호출 URL 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1700027421821&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://localhost:8080/generic-webhook-trigger/invoke?token=110a56287a6bdcd9a3b3055e9b6af3cdc7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 위에서 언급한 URL을 이용해서, 외부에서 호출할 URL을 만들면 되는데요.&amp;nbsp;&lt;br /&gt;&lt;b&gt;http://JENKINS_URL/generic-webhook-trigger/invoke&lt;/b&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 정보에, 위에서 만든 token 값을 추가해서 get 형식으로 URL을 작성해서 호출하면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 빌드가 동작합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CI</category>
      <category>gitlab</category>
      <category>Gitlab api plugin</category>
      <category>jenkins</category>
      <category>webhook</category>
      <category>외부호출</category>
      <category>젠킨스</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/304</guid>
      <comments>https://holjjack.tistory.com/304#entry304comment</comments>
      <pubDate>Mon, 27 Nov 2023 15:53:11 +0900</pubDate>
    </item>
    <item>
      <title>[IIS] DISM을 이용한 IIS 워크로드 설치방법 (IIS 8.5)</title>
      <link>https://holjjack.tistory.com/305</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows Server 계열에서 IIS를 설치하는 여러가지 방법이 있는데요. 지난번 포스팅에서는 PKGMGR (패키지매니저)를 이용했다면, 이번 포스팅은 DISM 배포 이미지 서비스를 이용해서 IIS 워크로드를 설치 및 설정하는 방법을 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전글&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://holjjack.tistory.com/226&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://holjjack.tistory.com/226&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699864924007&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[IIS] Pkgmgr(패키지매니저)를 이용한 IIS 워크로드 설치방법 (IIS 7.5)&quot; data-og-description=&quot;동일한 웹서버에 같은 환경의 IIS 를 여러대 설정해야할 경우, 스크립트를 사용해서 설치하는 방법이 매우 유용합니다. Cloud 환경에 웹서버를 구성할 경우 용이하게 이용하실 수 있습니다. 아래&quot; data-og-host=&quot;holjjack.tistory.com&quot; data-og-source-url=&quot;https://holjjack.tistory.com/226&quot; data-og-url=&quot;https://holjjack.tistory.com/226&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Frck3/hyUuTrODxV/aWy0ens1yFaw23bB5LhQdk/img.png?width=705&amp;amp;height=369&amp;amp;face=0_0_705_369,https://scrap.kakaocdn.net/dn/bJMsOU/hyUu4GSARK/ysD5zXCGQ6K8GQW9iePrL0/img.png?width=705&amp;amp;height=369&amp;amp;face=0_0_705_369&quot;&gt;&lt;a href=&quot;https://holjjack.tistory.com/226&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://holjjack.tistory.com/226&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Frck3/hyUuTrODxV/aWy0ens1yFaw23bB5LhQdk/img.png?width=705&amp;amp;height=369&amp;amp;face=0_0_705_369,https://scrap.kakaocdn.net/dn/bJMsOU/hyUu4GSARK/ysD5zXCGQ6K8GQW9iePrL0/img.png?width=705&amp;amp;height=369&amp;amp;face=0_0_705_369');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[IIS] Pkgmgr(패키지매니저)를 이용한 IIS 워크로드 설치방법 (IIS 7.5)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;동일한 웹서버에 같은 환경의 IIS 를 여러대 설정해야할 경우, 스크립트를 사용해서 설치하는 방법이 매우 유용합니다. Cloud 환경에 웹서버를 구성할 경우 용이하게 이용하실 수 있습니다. 아래&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;holjjack.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;red&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;01. DISM 이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포&amp;nbsp;이미지&amp;nbsp;서비스&amp;nbsp;및&amp;nbsp;관리(DISM.exe)는&amp;nbsp;Windows&amp;nbsp;PE,&amp;nbsp;Windows&amp;nbsp;RE(Windows&amp;nbsp;복구&amp;nbsp;환경)&amp;nbsp;및&amp;nbsp;Windows&amp;nbsp;설치&amp;nbsp;프로그램에&amp;nbsp;사용되는&amp;nbsp;이미지를&amp;nbsp;포함하여&amp;nbsp;Windows&amp;nbsp;이미지를&amp;nbsp;제공&amp;nbsp;및&amp;nbsp;준비하는&amp;nbsp;데&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;명령줄&amp;nbsp;도구입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DISM은&amp;nbsp;Windows&amp;nbsp;이미지(.wim)&amp;nbsp;또는&amp;nbsp;가상&amp;nbsp;하드&amp;nbsp;디스크(.vhd&amp;nbsp;또는&amp;nbsp;.vhdx)를&amp;nbsp;제공하는&amp;nbsp;데&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;DISM은&amp;nbsp;Windows에&amp;nbsp;기본&amp;nbsp;제공되며&amp;nbsp;명령줄&amp;nbsp;또는&amp;nbsp;Windows&amp;nbsp;PowerShell을&amp;nbsp;통해&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;green&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;02. PowerShell 에서 목록 확인하기&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1699865437006&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;PS&amp;gt; dism /online /get-features&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pXS2z/btszK3Bbo4z/YHQT8uBX177oRVYh9Vbf6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pXS2z/btszK3Bbo4z/YHQT8uBX177oRVYh9Vbf6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pXS2z/btszK3Bbo4z/YHQT8uBX177oRVYh9Vbf6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpXS2z%2FbtszK3Bbo4z%2FYHQT8uBX177oRVYh9Vbf6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;859&quot; height=&quot;732&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PowerShell 에서 해당 명령어를 이용해서 DISM으로 설치 가능한 목록을 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;blue&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;03. CMD 창에서 확인하기&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1699865557316&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/&amp;gt;  dism /online /get-features | find &quot;IIS&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co1G6s/btszGtaBcRW/IQ5UKkA4FujieooWCc8nWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co1G6s/btszGtaBcRW/IQ5UKkA4FujieooWCc8nWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co1G6s/btszGtaBcRW/IQ5UKkA4FujieooWCc8nWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco1G6s%2FbtszGtaBcRW%2FIQ5UKkA4FujieooWCc8nWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;512&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령 프롬프트 이용시에는 find 명령어를 사용할 수 있기 때문에, PowerShell 보다는 목록을 확인하는데 유용했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;971&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9fcBo/btszKByaxoK/VW9raVrTzJngU653pzkse0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9fcBo/btszKByaxoK/VW9raVrTzJngU653pzkse0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9fcBo/btszKByaxoK/VW9raVrTzJngU653pzkse0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9fcBo%2FbtszKByaxoK%2FVW9raVrTzJngU653pzkse0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;971&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;971&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;04. DISM 스크립트&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1699865633039&quot; class=&quot;csharp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;DISM.EXE /enable-feature /online /featureName:IIS-WebServerRole /featureName:IIS-WebServer 
/featureName:IIS-CommonHttpFeatures /featureName:IIS-StaticContent /featureName:IIS-DefaultDocument 
/featureName:IIS-DirectoryBrowsing /featureName:IIS-HttpErrors /featureName:IIS-HttpRedirect 
/featureName:IIS-ApplicationDevelopment /featureName:IIS-ASPNET /featureName:IIS-NetFxExtensibility 
/featureName:IIS-ASPNET45 /featureName:IIS-NetFxExtensibility45 /featureName:IIS-ASP /featureName:IIS-CGI 
/featureName:IIS-ISAPIExtensions /featureName:IIS-ISAPIFilter /featureName:IIS-ServerSideIncludes 
/featureName:IIS-HealthAndDiagnostics /featureName:IIS-HttpLogging /featureName:IIS-LoggingLibraries 
/featureName:IIS-RequestMonitor /featureName:IIS-HttpTracing /featureName:IIS-CustomLogging 
/featureName:IIS-ODBCLogging /featureName:IIS-Security /featureName:IIS-BasicAuthentication 
/featureName:IIS-WindowsAuthentication /featureName:IIS-DigestAuthentication 
/featureName:IIS-ClientCertificateMappingAuthentication /featureName:IIS-IISCertificateMappingAuthentication 
/featureName:IIS-URLAuthorization /featureName:IIS-RequestFiltering /featureName:IIS-IPSecurity 
/featureName:IIS-Performance /featureName:IIS-HttpCompressionStatic /featureName:IIS-HttpCompressionDynamic 
/featureName:IIS-WebDAV /featureName:IIS-WebServerManagementTools /featureName:IIS-ManagementScriptingTools 
/featureName:IIS-ManagementService /featureName:IIS-IIS6ManagementCompatibility /featureName:IIS-Metabase 
/featureName:IIS-WMICompatibility /featureName:IIS-LegacyScripts /featureName:IIS-FTPServer /featureName:IIS-FTPSvc 
/featureName:IIS-FTPExtensibility /featureName:NetFx4Extended-ASPNET45 /featureName:IIS-ApplicationInit 
/featureName:IIS-WebSockets /featureName:IIS-CertProvider /featureName:IIS-ManagementConsole /featureName:IIS-LegacySnapIn&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 스크립트를 이용하면, DISM 매니저를 이용해서 IIS 워크로드를 손쉽게 구성할 수 있습니다. PKGMGR 보다는 조금더 길이가 늘어났지만, 다른점이라고는 /featureName을 하나씩 명시적으로 입력해줘야 하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;해당 스크립트를 원격으로 실행시, 재시작을 대기하는 상황이 발생하는데요.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴경우에는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;/NoRestart&lt;/span&gt; 옵션을 사용해주면 재시작하지 않고 설치가 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705449744513&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DISM.EXE /enable-feature /online /NoRestart /featureName:IIS-WebServerRole /featureName:IIS-WebServer
...
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참조&lt;/h2&gt;
&lt;figure id=&quot;og_1699864751156&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/P8V0Q/hyUry9Mstg/WWvnepi3MXfuwhLVzieg1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bFcWrU/hyUu13xInS/K0AK3eTKVHcuCsvYrwLkH1/img.jpg?width=800&amp;amp;height=567&amp;amp;face=0_0_800_567,https://scrap.kakaocdn.net/dn/cdK9M0/hyUrBFqRGc/Bi5R7KcEZo6CWNOJOGg4hk/img.jpg?width=800&amp;amp;height=567&amp;amp;face=0_0_800_567&quot; data-og-url=&quot;https://learn.microsoft.com/en-us/iis/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2&quot; data-og-source-url=&quot;https://learn.microsoft.com/en-us/iis/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-description=&quot;This content describes how to install Internet Information Services (IIS) 8.5 on Windows Server 2012 R2 using Server Manager, DISM, or PowerShell.&quot; data-og-title=&quot;Installing IIS 8.5 on Windows Server 2012 R2&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://learn.microsoft.com/en-us/iis/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2&quot; data-source-url=&quot;https://learn.microsoft.com/en-us/iis/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/P8V0Q/hyUry9Mstg/WWvnepi3MXfuwhLVzieg1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bFcWrU/hyUu13xInS/K0AK3eTKVHcuCsvYrwLkH1/img.jpg?width=800&amp;amp;height=567&amp;amp;face=0_0_800_567,https://scrap.kakaocdn.net/dn/cdK9M0/hyUrBFqRGc/Bi5R7KcEZo6CWNOJOGg4hk/img.jpg?width=800&amp;amp;height=567&amp;amp;face=0_0_800_567');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Installing IIS 8.5 on Windows Server 2012 R2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;This content describes how to install Internet Information Services (IIS) 8.5 on Windows Server 2012 R2 using Server Manager, DISM, or PowerShell.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h3&gt;
&lt;hr data-ke-style=&quot;style7&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>dism</category>
      <category>iis</category>
      <category>IIS설치</category>
      <category>WebServer</category>
      <category>Windows Server</category>
      <category>웹서버</category>
      <category>패키지설치</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/305</guid>
      <comments>https://holjjack.tistory.com/305#entry305comment</comments>
      <pubDate>Mon, 20 Nov 2023 10:37:24 +0900</pubDate>
    </item>
    <item>
      <title>[IIS] Pkgmgr(패키지매니저)를 이용한 IIS 워크로드 설치방법 (IIS 7.5)</title>
      <link>https://holjjack.tistory.com/226</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 웹서버에 같은 환경의 IIS 를 여러대 설정해야할 경우, 스크립트를 사용해서 설치하는 방법이 매우 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cloud 환경에 웹서버를 구성할 경우 용이하게 이용하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 설치 방법은 Pkgmgr.exe 를 이용한 방법이며, IIS 8.5 이상에서는 DISM.exe 를이용한 설치방법을 권장하고 있으나,Pkgmgr.exe 로도 설치는 가능하니 참고하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;스크립트를 이용한 IIS 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크립트를 사용하여 IIS 7.5를 설치할 수도 있습니다.&amp;nbsp;이 스크립트를 사용하면 사용 가능한 모든 기능 패키지를 설치하는 전체 IIS 설치를 얻게 됩니다.&amp;nbsp;필요하지 않은 기능 패키지가 있는 경우 필요한 패키지만 설치하도록 스크립트를 편집해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크립트를 사용하여 IIS 설치를 자동화하는 것은 여러 웹 서버를 배포해야 하고 각 웹 서버가 동일한 구성 요소와 서비스로 설정되어 있는지 확인하려는 경우에 매우 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows Server 2008 및 Windows Vista 운영 체제에서 Pkgmgr.exe는 무인 스크립트에 사용되므로 명령 프롬프트 또는 스크립트에서 선택적 기능을 설치하거나 제거할 수 있습니다.&amp;nbsp;(참고: Pkgmgr.exe는 Windows Server&amp;reg; 2003에서 사용된 Sysocmgr.exe를 대체합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;스크립트&lt;/h3&gt;
&lt;pre id=&quot;code_1652678151843&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CMD /C START /w PKGMGR.EXE /l:log.etw /iu:IIS-WebServerRole;IIS-WebServer;
IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;
IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASP;IIS-CGI;
IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;
IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;
IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;
IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;
IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;
IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementScriptingTools;
IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;
WAS-WindowsActivationService;WAS-ProcessModel;IIS-ASPNET;IIS-NetFxExtensibility;
WAS-NetFxEnvironment;WAS-ConfigurationAPI;IIS-ManagementService;MicrosoftWindowsPowerShell;
IIS-ASPNET;IIS-ASPNET45;IIS-NetFxExtensibility45;NetFx4Extended-ASPNET45;IIS-ApplicationInit;
%windir%\system32\inetsrv\appcmd set config /section:httpLogging /dontLog:True&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 내용을 bat 파일로 만드셔서 이용하시면 편리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 추가적으로 설치가 필요한 부분은 IIS-xxx 형태의 옵션을 찾으셔서 포함하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 웹소켓 설치시,&lt;/p&gt;
&lt;pre id=&quot;code_1652678240083&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IIS-WebSockets;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 추가 하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/iis/install/installing-iis-7/installing-iis-7-and-above-on-windows-server-2008-or-windows-server-2008-r2&quot;&gt;https://docs.microsoft.com/en-us/iis/install/installing-iis-7/installing-iis-7-and-above-on-windows-server-2008-or-windows-server-2008-r2&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>iis</category>
      <category>IIS설치</category>
      <category>IIS스크립트설치</category>
      <category>Pkgmgr</category>
      <category>pkgmgr.exe</category>
      <category>스크립트설치</category>
      <category>웹서버</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/226</guid>
      <comments>https://holjjack.tistory.com/226#entry226comment</comments>
      <pubDate>Fri, 10 Nov 2023 21:17:22 +0900</pubDate>
    </item>
    <item>
      <title>IIS Worker Process (w3wp) 로 높은 CPU 사용량 문제를 해결하는 방법 (3)</title>
      <link>https://holjjack.tistory.com/297</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스트는 아래의 Blog를 번역한 글이며, 영어공부 겸, 지식을 전달하기 위한 목적으로 작성된 글입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;보시기 불편하시거나, 해당글의 무분별한 포스팅이 문제가 된다면, 삭제하겠습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot;&gt;https://stackify.com/w3wp-high-cpu-usage/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1695104147034&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Guide to w3wp.exe High CPU Usage for IIS Worker Processes&quot; data-og-description=&quot;If you're having problems with w3wp.exe high CPU usage, get tips to troubleshoot IIS worker process for your ASP.NET web app.&quot; data-og-host=&quot;stackify.com&quot; data-og-source-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; data-og-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5YzRV/hyTVUZG2UO/5Wq5BZxTtET7N29LIOeOXk/img.jpg?width=881&amp;amp;height=441&amp;amp;face=0_0_881_441&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5YzRV/hyTVUZG2UO/5Wq5BZxTtET7N29LIOeOXk/img.jpg?width=881&amp;amp;height=441&amp;amp;face=0_0_881_441');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Guide to w3wp.exe High CPU Usage for IIS Worker Processes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you're having problems with w3wp.exe high CPU usage, get tips to troubleshoot IIS worker process for your ASP.NET web app.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackify.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt; &lt;b&gt;6가지&amp;nbsp;공통된&amp;nbsp;원인과&amp;nbsp;IIS&amp;nbsp;작업자&amp;nbsp;프로세스의&amp;nbsp;높은&amp;nbsp;CPU문제를&amp;nbsp;해결하는&amp;nbsp;방법&lt;/b&gt;&amp;nbsp;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;w3wp.exe&lt;span&gt;&amp;nbsp;&lt;/span&gt;IIS 작업자 프로세스의 높은 CPU 점유율은 많은 이유가 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6개의 공통된 원인을 이 포스트에서 선택했습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;ASP.NET 어플리케이션의 높은 에러율&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;높은 CPU의 원인이 되는 웹 트래픽 증가.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;어플리케이션의 의존성 문제&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;u&gt;&lt;b&gt;GC (Garbage collection)&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;u&gt;&lt;b&gt;ASP.NET 파이프 라인에서 요청이 차된되거나, 중단된 경우&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;u&gt;&lt;b&gt;최적화가 필요한 비효율적인 .NET 코드&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 4. GC 가비지 컬렉션 (Garbage Collection)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Microsoft.NET 은 가비지 수집을 활용해서 메모리 할당 및 해제를 관리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어플리케이션이 수행하는 작업에 따라, 어플리케이션의 메모리 할당 및 정리에 많은 GC 활동이 발생 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어, 대형 개체 힙에 대형 문자열 변수를 많이 사용하면, 가비지 수집에 문제가 발생합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가비지 컬렉션이 어플리케이션에 문제를 일이킬 수 있는지 측정하려면, Windows의 성능 모니터를 확인하세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qaT8R/btsuIy0edzj/0TdR0seeBpEIVCP32EcdT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qaT8R/btsuIy0edzj/0TdR0seeBpEIVCP32EcdT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qaT8R/btsuIy0edzj/0TdR0seeBpEIVCP32EcdT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqaT8R%2FbtsuIy0edzj%2F0TdR0seeBpEIVCP32EcdT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;778&quot; height=&quot;314&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CYAtT/btsuGAEc6Tx/x0q89aMMNz1Lt3YENgDLk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CYAtT/btsuGAEc6Tx/x0q89aMMNz1Lt3YENgDLk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CYAtT/btsuGAEc6Tx/x0q89aMMNz1Lt3YENgDLk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCYAtT%2FbtsuGAEc6Tx%2Fx0q89aMMNz1Lt3YENgDLk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;828&quot; height=&quot;614&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUUwxJ/btsuJeAx7oX/2vwjakVM0AAzSR6nSaYHsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUUwxJ/btsuJeAx7oX/2vwjakVM0AAzSR6nSaYHsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUUwxJ/btsuJeAx7oX/2vwjakVM0AAzSR6nSaYHsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUUwxJ%2FbtsuJeAx7oX%2F2vwjakVM0AAzSR6nSaYHsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;828&quot; height=&quot;614&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;.NET CLR Memory -&amp;gt; % Time in GC&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 카운터는 어플리케이션이 가비지 컬렉션을 수행하는데 소요되는 시간 (%) 을 반영합니다. 만약 이 수치가 5~10%를 넘게 급증하면 메모리 사용량을 더 자세히 조사해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;.NET Framework 2.0 버전을 사용중이라면, 서버모드를 활성화 해야 할 수도 있습니다.&amp;nbsp;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1695100147071&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Configuring Garbage Collection on the Server&quot; data-og-description=&quot;Table of contents Configuring Garbage Collection on the Server Article 05/23/2014 In this article --&amp;gt; This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/en-us/previous-versions/office/developer/communication-server-2007-r2/dd167407(v=office.13)&quot; data-og-url=&quot;https://learn.microsoft.com/en-us/previous-versions/office/developer/communication-server-2007-r2/dd167407(v=office.13)&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AOLOw/hyTVRBTRen/OzybTpqy7Uve1KBnPqTwRK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/previous-versions/office/developer/communication-server-2007-r2/dd167407(v=office.13)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/en-us/previous-versions/office/developer/communication-server-2007-r2/dd167407(v=office.13)&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AOLOw/hyTVRBTRen/OzybTpqy7Uve1KBnPqTwRK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Configuring Garbage Collection on the Server&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Table of contents Configuring Garbage Collection on the Server Article 05/23/2014 In this article --&amp;gt; This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1695100159066&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;configuration
   &amp;lt;runtime&amp;gt;
      &amp;lt;gcServer enabled=&quot;true&quot;/&amp;gt;
   &amp;lt;/runtime&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;5. ASP.NET&amp;nbsp;파이프&amp;nbsp;라인에서&amp;nbsp;요청이&amp;nbsp;차된되거나,&amp;nbsp;중단된&amp;nbsp;경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ASP.NET request 의 lifecycle 에는 여러 단계가 있습니다. 여기에는 요청시작, 인증, 권한 부여, 올바른 HTTP 핸들러 평가 및 요청완료와 같은 기본적인 단계가 포함됩니다. 그 일환으로 사용 가능한 표준 및 사용자 정의 HTTP 모듈이 많이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능문제가 있는 경우 모든 요청이 특정 HTTP모듈에 정지된 것처럼 보이는지 살펴보는 것이 좋습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 모듈은 네이티브 코드이거나 관리되는 .NET 코드일 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FormsAuthenticaion&amp;nbsp;또는&amp;nbsp;SessionStateModule과&amp;nbsp;같은&amp;nbsp;표준&amp;nbsp;.NET&amp;nbsp;모듈일&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;많은&amp;nbsp;애플리케이션은&amp;nbsp;타사&amp;nbsp;또는&amp;nbsp;사용자&amp;nbsp;정의&amp;nbsp;HTTP&amp;nbsp;모듈도&amp;nbsp;사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;세션을&amp;nbsp;사용하고&amp;nbsp;있습니까?&lt;/b&gt; &lt;br /&gt;대부분의&amp;nbsp;사람들은&amp;nbsp;ASP.NET&amp;nbsp;세션으로&amp;nbsp;인해&amp;nbsp;얼마나&amp;nbsp;많은&amp;nbsp;성능&amp;nbsp;오버헤드가&amp;nbsp;발생하는지&amp;nbsp;알지&amp;nbsp;못합니다. &lt;br /&gt;페이지를 로드할 때마다 IIS 작업자 프로세스가 세션 개체를 검색하고 잠근 다음 요청이 끝나면 해제합니다. &lt;br /&gt;&lt;u&gt;&lt;b&gt;세션으로 인해 잠금이 발생하고 애플리케이션 내에서 병목 현상이 발생할 수 있습니다.&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;Redis 또는 SQL과 같은 세션 공급자를 사용하는 경우 성능 저하가 애플리케이션 성능에 영향을 미칩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;6. 최적화가&amp;nbsp;필요한&amp;nbsp;비효율적인&amp;nbsp;.NET&amp;nbsp;코드&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 일반적인 원인중 어느것도 문제가 되지 않는 경우, 코드를 자세히 살펴보고 개선해야 할 수 도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에서 호출되는 메서드와 소요시간을 캐처하려면 .NET 코드 프로파일러를 사용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로파일러는 코드에서 속도가 매우 느린 특정 메서드를 식별하는데 도움이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경고: 프로파일러는 어플리케이션의 오버헤드를 추가합니다. 따라서 어플리케이션의 CPU 사용량이 이미 매우 높으면 (90%+) 프로파일링이 매우 느려지고 어플리케이션 성능이 저하됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 수행중인 프로파일링의 세부수준과 프로파일링을 시작하기 전의 CPU 사용량에 따라 어플리케이션을 사용 할 수 없게 될 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.NET 프로파일러는 RedGate의 ANTS 성능프로파일러가 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.red-gate.com/products/ants-performance-profiler/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.red-gate.com/products/ants-performance-profiler/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1695101235753&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;.NET Profiler To Boost Application Performance| ANTS Performance Profiler&quot; data-og-description=&quot;Drill down to slow lines of code with line-level timings Profile C# or any other .NET code line by line, with precise timing data so you can find issues at a glance. Expensive lines of code are automatically highlighted for quick visual inspection.&quot; data-og-host=&quot;www.red-gate.com&quot; data-og-source-url=&quot;https://www.red-gate.com/products/ants-performance-profiler/&quot; data-og-url=&quot;https://www.red-gate.com/products/ants-performance-profiler/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5ez4I/hyTZeIYeuG/XVzEuB4mPKEdolmloekYR0/img.png?width=1202&amp;amp;height=1202&amp;amp;face=0_0_1202_1202,https://scrap.kakaocdn.net/dn/bQACPO/hyTZeCbZhT/i8SVRjobBhiPZvj9sNoYK0/img.png?width=900&amp;amp;height=254&amp;amp;face=0_0_900_254&quot;&gt;&lt;a href=&quot;https://www.red-gate.com/products/ants-performance-profiler/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.red-gate.com/products/ants-performance-profiler/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5ez4I/hyTZeIYeuG/XVzEuB4mPKEdolmloekYR0/img.png?width=1202&amp;amp;height=1202&amp;amp;face=0_0_1202_1202,https://scrap.kakaocdn.net/dn/bQACPO/hyTZeCbZhT/i8SVRjobBhiPZvj9sNoYK0/img.png?width=900&amp;amp;height=254&amp;amp;face=0_0_900_254');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;.NET Profiler To Boost Application Performance| ANTS Performance Profiler&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Drill down to slow lines of code with line-level timings Profile C# or any other .NET code line by line, with precise timing data so you can find issues at a glance. Expensive lines of code are automatically highlighted for quick visual inspection.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.red-gate.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 31px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 31px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 31px;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackify.com/w3wp-high-cpu-usage/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>.net</category>
      <category>asp.net</category>
      <category>garbage collection</category>
      <category>GC</category>
      <category>iis</category>
      <category>W3WP</category>
      <category>WebServer</category>
      <category>Worker Process</category>
      <category>성능</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/297</guid>
      <comments>https://holjjack.tistory.com/297#entry297comment</comments>
      <pubDate>Mon, 9 Oct 2023 10:16:45 +0900</pubDate>
    </item>
    <item>
      <title>IIS Worker Process (w3wp) 로 높은 CPU 사용량 문제를 해결하는 방법 (2)</title>
      <link>https://holjjack.tistory.com/171</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스트는 아래의 Blog를 번역한 글이며, 영어공부 겸, 지식을 전달하기 위한 목적으로 작성된 글입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;보시기 불편하시거나, 해당글의 무분별한 포스팅이 문제가 된다면, 삭제하겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot;&gt;https://stackify.com/w3wp-high-cpu-usage/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1695104018235&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Guide to w3wp.exe High CPU Usage for IIS Worker Processes&quot; data-og-description=&quot;If you're having problems with w3wp.exe high CPU usage, get tips to troubleshoot IIS worker process for your ASP.NET web app.&quot; data-og-host=&quot;stackify.com&quot; data-og-source-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; data-og-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5YzRV/hyTVUZG2UO/5Wq5BZxTtET7N29LIOeOXk/img.jpg?width=881&amp;amp;height=441&amp;amp;face=0_0_881_441&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5YzRV/hyTVUZG2UO/5Wq5BZxTtET7N29LIOeOXk/img.jpg?width=881&amp;amp;height=441&amp;amp;face=0_0_881_441');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Guide to w3wp.exe High CPU Usage for IIS Worker Processes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you're having problems with w3wp.exe high CPU usage, get tips to troubleshoot IIS worker process for your ASP.NET web app.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackify.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt; 6가지&amp;nbsp;공통된&amp;nbsp;원인과&amp;nbsp;IIS&amp;nbsp;작업자&amp;nbsp;프로세스의&amp;nbsp;높은&amp;nbsp;CPU문제를&amp;nbsp;해결하는&amp;nbsp;방법&amp;nbsp;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;w3wp.exe&lt;span&gt;&amp;nbsp;&lt;/span&gt;IIS 작업자 프로세스의 높은 CPU 점유율은 많은 이유가 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6개의 공통된 원인을 이 포스트에서 선택했습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ASP.NET 어플리케이션의 높은 에러율&lt;/li&gt;
&lt;li&gt;높은 CPU의 원인이 되는 웹 트래픽 증가.&lt;/li&gt;
&lt;li&gt;어플리케이션의 의존성 문제&lt;/li&gt;
&lt;li&gt;GC (Garbage collection)&lt;/li&gt;
&lt;li&gt;ASP.NET 파이프 라인에서 요청이 차된되거나, 중단된 경우&lt;/li&gt;
&lt;li&gt;최적화가 필요한 비효율적인 .NET 코드&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 1.&amp;nbsp;ASP.NET&amp;nbsp;어플리케이션의&amp;nbsp;높은&amp;nbsp;에러율&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응용프로그램에서 응용프로그램의 에러가 발생할 수 있으며, 사용자는 알지 못합니다. 일부 오류는 당신의 유저가 특정형식의 오류 메시지를 받는 원인이 될것입니다. 다른 오류가 발생할 수 있고, 그것에 대해 아무도 알지 못합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당신이 에러 모니터링 또는 응용프로그램 성능 관리 툴을 사용한다면, 높은 에러율을 체크할 수 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우즈 Event Viewr, IIS 로그 등에서 응용프로그램 에러율과 실제 에러를 찾을 수 있는 몇가지 위치가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8OXVl/btqLRk6Cbbf/ytgQlRh8NkcVLS0kAAP1t1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8OXVl/btqLRk6Cbbf/ytgQlRh8NkcVLS0kAAP1t1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8OXVl/btqLRk6Cbbf/ytgQlRh8NkcVLS0kAAP1t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8OXVl%2FbtqLRk6Cbbf%2FytgQlRh8NkcVLS0kAAP1t1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;240&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;에러율을 위한 윈도우즈 성능 카운터&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;높은 에러율을 검토할 것을 권장하는, 두가지 특정 성능 카운터를 추천한다. 윈도우즈에서 성능 모니터를 열고, 챠트보기에서 카운터를 추가하여야 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;.NET CLR Exceptions -&amp;gt; # of Exceps Thrown / Sec :&amp;nbsp;&lt;/b&gt;이것은 당신의 응용프로그램의 많은 예외 상황을 보여줄 겁니다. 당신의 응용프로그램에 큰 성능 문제의 원인이 되는 숨겨진 많은 오류가 있을 수 있습니다. 예외는 않좋으나, 그것을 피할 수는 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;W3SVC_W3WP -&amp;gt; %500 HTTP Response Sent :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;상태 코드가 500인 모든 요청은 내부 서버코드 에러 입니다. 이 확율이 매우 낮은지 확인하세요. 0~1% 여야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T0cvZ/btqLIGwz2KX/KkB0NVVelF5bQo7CrwKnO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T0cvZ/btqLIGwz2KX/KkB0NVVelF5bQo7CrwKnO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T0cvZ/btqLIGwz2KX/KkB0NVVelF5bQo7CrwKnO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT0cvZ%2FbtqLIGwz2KX%2FKkB0NVVelF5bQo7CrwKnO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;414&quot; height=&quot;328&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvTqgf/btqLYNBsQ5T/LI3T9kflgLLe3ObVVjTnz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvTqgf/btqLYNBsQ5T/LI3T9kflgLLe3ObVVjTnz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvTqgf/btqLYNBsQ5T/LI3T9kflgLLe3ObVVjTnz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvTqgf%2FbtqLYNBsQ5T%2FLI3T9kflgLLe3ObVVjTnz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;329&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 2.&amp;nbsp;높은&amp;nbsp;CPU의&amp;nbsp;원인이&amp;nbsp;되는&amp;nbsp;웹&amp;nbsp;트래픽&amp;nbsp;증가.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;w3wp.exe 의 높은 CPU 사용량에 대한 가장 간단한 설명 중 하나는 웹 트래픽 증가 입니다. 그러나 정상적인 트래픽 양에 대한 기준이 없는 경우, 트래픽이 증가했는지 알기 어려울 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트래픽을 추적하는 응용프로그램 모니터링 툴을 사용하는 경우, 이를 확인하고 트래픽 레벨이 변경되었는지 확인하십시오.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트레픽 레벨이 변경되었는지 알수있는 방법이 없는 경우, IIS 로그 파일을 사용해서 알아 볼 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;VisualLogParser 또는 Log Parser Lizard를 이용해서 질의할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또는 Requests / Sec 와 Requests Corrent 에 대한 윈도우 성능 카운터가 있어서 현재 트래픽 속도를 실시간으로 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;웹 트래픽 증가에 대한 가능한 이유&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트레픽 레벨이 높은경우, 당신은 그 수준이 높아야 하는지 평가해야 합니다. 트래픽 레벨 증가와 관련하여 고려해야 할 몇가지 사항은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고객 또는 유저 : 특별한 고객, 유저, 또는 자원으로 부터 트래픽이 급증했습니까? 아마도 가끔 당신의 사이트에 접속하는 것이 작동하지 않을 수 있습니다. 특정 IP 주소를 차단이 필요할 수 있습니다.&lt;/li&gt;
&lt;li&gt;Bots : 비슷한 특별한 유저가 많은 트래픽의 원인이라면, 그것은 봇일 수 있습니다. IIS 로그에서 당신의 사이트 접속하는데 사용되는 사용자 에이전트를 확인하세요.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;오프라 효과 : 오프라(오프라윈프리)나 누군가가 당신의 제품을 언급했나요? 방금 입소문을 냈나요? 엄청나게 많은 관심을 받는 것은 좋은 일이지만, 이를 처리하기 위해 성능을 확장해야 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;당신의 사이트가 많은 트래픽을 받을 경우, 대용량 서버(스케일업) 또는 다수의 서버(스케일아웃)이 필요할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그러나 초당 많은 요청을 받지 않을 경우, 트래픽이 문제가 되지 않을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;많은 ASP.NET 어플리케이션은 초당 10-30개 요청이 있습니다. 그러나 바쁜 앱에서 초당 100개 이상의 요청을 수행하는 가벼운 요청도 보았습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하나의 웹앱에서 다른 웹 앱으로의 트래픽 양과 관련해서, CPU 사용량은 크게 다릅니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 3.&amp;nbsp;어플리케이션의&amp;nbsp;의존성&amp;nbsp;문제&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘의 웹 어플리케이션은 다양한 유형의 외부 서비스 및 종속성을 활용합니다. SQL, NoSQL, 대기열, 캐싱 및 다양한 외부 HTTP 웹 서비스가 포함됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어플리케이션 종속송으로 인한 속도 저하로 인해 어플리케이션 성능문제가 발생할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가장 일반적인 문제는 느린 SQL 쿼리문 또는 외부 HTTP 웹 서비스 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 31px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 31px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 31px;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot;&gt;https://stackify.com/w3wp-high-cpu-usage/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>.net</category>
      <category>asp.net</category>
      <category>iis</category>
      <category>W3WP</category>
      <category>WebServer</category>
      <category>Worker Process</category>
      <category>성능</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/171</guid>
      <comments>https://holjjack.tistory.com/171#entry171comment</comments>
      <pubDate>Mon, 2 Oct 2023 16:15:26 +0900</pubDate>
    </item>
    <item>
      <title>IIS  Worker Process (w3wp) 로 높은 CPU 사용량 문제를 해결하는 방법 (1)</title>
      <link>https://holjjack.tistory.com/168</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스트는 아래의 Blog를 번역한 글이며, 영어공부 겸, 지식을 전달하기 위한 목적으로 작성된 글입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;보시기 불편하시거나, 해당글의 무분별한 포스팅이 문제가 된다면, 삭제하겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot;&gt;https://stackify.com/w3wp-high-cpu-usage/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1695103677927&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Guide to w3wp.exe High CPU Usage for IIS Worker Processes&quot; data-og-description=&quot;If you're having problems with w3wp.exe high CPU usage, get tips to troubleshoot IIS worker process for your ASP.NET web app.&quot; data-og-host=&quot;stackify.com&quot; data-og-source-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; data-og-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5YzRV/hyTVUZG2UO/5Wq5BZxTtET7N29LIOeOXk/img.jpg?width=881&amp;amp;height=441&amp;amp;face=0_0_881_441&quot;&gt;&lt;a href=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackify.com/w3wp-high-cpu-usage/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5YzRV/hyTVUZG2UO/5Wq5BZxTtET7N29LIOeOXk/img.jpg?width=881&amp;amp;height=441&amp;amp;face=0_0_881_441');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Guide to w3wp.exe High CPU Usage for IIS Worker Processes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you're having problems with w3wp.exe high CPU usage, get tips to troubleshoot IIS worker process for your ASP.NET web app.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackify.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt; IIS&amp;nbsp;&amp;nbsp;Worker&amp;nbsp;Process&amp;nbsp;(w3wp)&amp;nbsp;로&amp;nbsp;높은&amp;nbsp;CPU&amp;nbsp;사용량&amp;nbsp;문제를&amp;nbsp;해결하는&amp;nbsp;방법&amp;nbsp;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS 성능 문제가 있거나, w3wp 높은 사용량 문제가 있거나, 높은 CPU 사용량을 IIS Worker Process 로 해결하는 방법을 알고 싶다면, 이 문서가 도움이 될겁니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 포스트는, 당신의 ASP.NET Web Application의 높은 CPU 사용량의 원인이 무엇인지, 그를 식별하기 위한 몇가지 팁에 대해서 논의 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;당신의 IIS Worker Process (w3wp) 많은 CPU를 사용하는 데는 여러가지 이유가 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우리는 몇가지 주요 원인과, IIS 성능 문제를 해결하는 방법에 대해 설명합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; IIS&amp;nbsp;에서&amp;nbsp;실행중인&amp;nbsp;웹&amp;nbsp;요청을&amp;nbsp;보는&amp;nbsp;방법&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장먼저 해야 할 일중에 하나는, 당신은 현재 실행중인 웹 요청을 확인해야 한다. 이것은 문제를 일으키는, 특정 URL을 식별하는데 도움이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 매우 오래 걸리거나, 높은 CPU 문제를 일으키는 URL중에 하나를 인식하는 기회가 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이것은 대기열에 있는 많은 웹 요청을 보여줄수 있으며, 근본적인 원인으로 연결되지는 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; IIS&amp;nbsp;사용자&amp;nbsp;인터페이스를&amp;nbsp;통해&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS&amp;nbsp;관리&amp;nbsp;콘솔을&amp;nbsp;통해서,&amp;nbsp;당신은&amp;nbsp;실행중인&amp;nbsp;Worker&amp;nbsp;프로세스를&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;당신은&amp;nbsp;어떤&amp;nbsp;IIS&amp;nbsp;Application&amp;nbsp;pool&amp;nbsp;이&amp;nbsp;높은&amp;nbsp;CPU의&amp;nbsp;원인이&amp;nbsp;되는지와&amp;nbsp;현재&amp;nbsp;실행중인&amp;nbsp;Web&amp;nbsp;요청을&amp;nbsp;볼수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTK1o6/btqLwKDKNGr/hW86w3eOjRu6JNNqqgHuh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTK1o6/btqLwKDKNGr/hW86w3eOjRu6JNNqqgHuh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTK1o6/btqLwKDKNGr/hW86w3eOjRu6JNNqqgHuh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTK1o6%2FbtqLwKDKNGr%2FhW86w3eOjRu6JNNqqgHuh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1416&quot; height=&quot;772&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS 메인 메뉴로 부터 &quot;작업자 프로세스&quot;를 선택 하면 현재 실행중인 작업자 프로세스를 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvRHfs/btqLqk76IeH/O0T4bGvEMiNrZAdPQkwlI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvRHfs/btqLqk76IeH/O0T4bGvEMiNrZAdPQkwlI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvRHfs/btqLqk76IeH/O0T4bGvEMiNrZAdPQkwlI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvRHfs%2FbtqLqk76IeH%2FO0T4bGvEMiNrZAdPQkwlI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;194&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업자 프로세스를 더블클릭하면, 현재 실행중인 모든 요청을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 우리의 서버중 하나의 예입니다. 각 요청이 ASP.NET의 파이프라인의 다른 부분에 있으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;현재 실행중인 HTTP 모듈을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKCoeK/btqLpTpslbs/MsBNpAW1zGD3K0swq9mKlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKCoeK/btqLpTpslbs/MsBNpAW1zGD3K0swq9mKlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKCoeK/btqLpTpslbs/MsBNpAW1zGD3K0swq9mKlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKCoeK%2FbtqLpTpslbs%2FMsBNpAW1zGD3K0swq9mKlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;342&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; Command&amp;nbsp;Line을&amp;nbsp;통해&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;appcmd.exe&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;유틸은 현재 실행중인 웹 요청을 포함하여, 많은 작업을 하는데 유용하게 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1695103856047&quot; class=&quot;groovy&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd list requests
REQUEST &quot;f20000048000021c&quot; (url:GET /nopcommerce, time:6312 msec, client:localhost, 
stage:BeginRequest, module:IIS Web Core)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶ &lt;/span&gt;&lt;span&gt;결과&amp;nbsp;및&amp;nbsp;찾은&amp;nbsp;사항에&amp;nbsp;대한&amp;nbsp;이해.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS UI 및 Command Line을 통해 현재 실행중인 웹 요청을 볼 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각기 다른 방법으로 같은 정보를 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;URL :&amp;nbsp; 실행되었던 완성형 URL.&lt;/li&gt;
&lt;li&gt;Time : 웹 요청이 실행되었던 밀리초 단위의 시간의 총 합.&lt;/li&gt;
&lt;li&gt;Client : 요청을 시작했던 유저의 주소&lt;/li&gt;
&lt;li&gt;Stage : 현재 요청의 IIS 파이프라인 단계&lt;/li&gt;
&lt;li&gt;Module : 현재 실행중인 ASP.NET 모듈&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 요청을&amp;nbsp;볼&amp;nbsp;때,&amp;nbsp;주의해야할&amp;nbsp;몇가지가&amp;nbsp;있습니다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 요청이 동일한 URL 입니까? 아마도 해당 URL이 문제의 원인 일 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;같은 Client 로 부터 많은 수의 요청이 옵니까? 아마도 특정 유저가 당신의 서버에 트래픽을 보내고 있을 수 있습니다.&lt;/li&gt;
&lt;li&gt;모든 요청이 같은 단계나 모듈에 갇혀있습니까? 특정 IIS 파이프라인 단계에 요청이 중단되는 문제일 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 31px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 31px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 31px;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>asp.net</category>
      <category>C#</category>
      <category>iis</category>
      <category>W3WP</category>
      <category>WebServer</category>
      <category>Worker Process</category>
      <category>성능</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/168</guid>
      <comments>https://holjjack.tistory.com/168#entry168comment</comments>
      <pubDate>Tue, 19 Sep 2023 16:15:13 +0900</pubDate>
    </item>
    <item>
      <title>[Tips] Mermaid를 사용해서 각종 Diagram 및 개발문서 만들기</title>
      <link>https://holjjack.tistory.com/296</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt; Mermaid 란? &lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RIPFh/btstX9obveX/qdZbTnkamNgwtRdehTW8k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RIPFh/btstX9obveX/qdZbTnkamNgwtRdehTW8k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RIPFh/btstX9obveX/qdZbTnkamNgwtRdehTW8k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRIPFh%2FbtstX9obveX%2FqdZbTnkamNgwtRdehTW8k0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;204&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mermaid를 사용하면 텍스트와 코드를 사용하여 여러가지 다이어그램을 시각화할 수 있는데요.&amp;nbsp;&lt;br /&gt;Markdown에서 영감을 받아 텍스트 정의를 렌더링하여 다이어그램을 동적으로 생성하고 수정하는 JavaScript 기반 다이어그램 작성 및 차트 작성 도구입니다. &lt;br /&gt;&lt;br /&gt;Mermaid의 주요 목적은 문서가 개발 과정을 따라잡을 수 있도록 돕는 것입니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;다이어그램&amp;nbsp;작성&amp;nbsp;및&amp;nbsp;문서화는&amp;nbsp;개발자의&amp;nbsp;귀중한&amp;nbsp;시간을&amp;nbsp;소모하며&amp;nbsp;빠르게&amp;nbsp;구식이&amp;nbsp;됩니다.&amp;nbsp;그러나&amp;nbsp;다이어그램이나&amp;nbsp;문서가&amp;nbsp;없으면&amp;nbsp;생산성이&amp;nbsp;저하되고&amp;nbsp;조직&amp;nbsp;학습이&amp;nbsp;손상됩니다. &lt;br /&gt;Mermaid는&amp;nbsp;사용자가&amp;nbsp;쉽게&amp;nbsp;수정&amp;nbsp;가능한&amp;nbsp;다이어그램을&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;하여&amp;nbsp;이&amp;nbsp;문제를&amp;nbsp;해결합니다.&amp;nbsp;또한&amp;nbsp;이를&amp;nbsp;프로덕션&amp;nbsp;스크립트(및&amp;nbsp;기타&amp;nbsp;코드&amp;nbsp;조각)의&amp;nbsp;일부로&amp;nbsp;만들&amp;nbsp;수도&amp;nbsp;있습니다.&amp;nbsp;Mermaid를&amp;nbsp;사용하면&amp;nbsp;프로그래머가&amp;nbsp;아닌&amp;nbsp;사람이라도&amp;nbsp;Mermaid&amp;nbsp;Live&amp;nbsp;Editor를 &lt;br /&gt;&lt;br /&gt;통해&amp;nbsp;세부적인&amp;nbsp;다이어그램을&amp;nbsp;쉽게&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있습니다&amp;nbsp;.&amp;nbsp;튜토리얼에는&amp;nbsp;비디오&amp;nbsp;튜토리얼이&amp;nbsp;있습니다.&amp;nbsp;자주&amp;nbsp;사용하는&amp;nbsp;애플리케이션과&amp;nbsp;함께&amp;nbsp;Mermaid를&amp;nbsp;사용하고,&amp;nbsp;Mermaid의&amp;nbsp;통합&amp;nbsp;및&amp;nbsp;사용&amp;nbsp;목록을&amp;nbsp;확인하세요&amp;nbsp;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공식사이트 및 Live Editor&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mermaid는 아래 공식 사이트를 통해서 더욱 자세한 정보를 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mermaid.js.org/intro/&quot;&gt;https://mermaid.js.org/intro/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694747779567&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;About Mermaid | Mermaid&quot; data-og-description=&quot;&quot; data-og-host=&quot;mermaid.js.org&quot; data-og-source-url=&quot;https://mermaid.js.org/intro/&quot; data-og-url=&quot;https://mermaid.js.org/intro/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mermaid.js.org/intro/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mermaid.js.org/intro/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;About Mermaid | Mermaid&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mermaid.js.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Live Editor를 제공하고 있어서, 손쉽게 다이어그램을 작성 및 테스트 할 수 도 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mermaid.live/edit#pako:eNpVkM1qw0AMhF9F6NRC_AI-FBq7zSWlhebmzUF45eyS7A_ymhBsv3vXNoVWJzHzjRAzYhs0Y4ndLdxbQ5LgVCsPeV6byojtk6P-DEXxMh04gQueHxPsnw4BehNitP7yvPH7BYJqPC4YQzLWX-fNqtb8p-cJ6uZIMYV4_uuc7mGCt8Z-mXz-v2OEc-q96ajsqGhJoCJZEdyhY3FkdX5_XBSFybBjhWVeNclVofJz5mhI4fvhWyyTDLzDIWpKXFu6CLlfkbVNQT62OtZW5h_iO1v9&quot;&gt;https://mermaid.live/edit#pako:eNpVkM1qw0AMhF9F6NRC_AI-FBq7zSWlhebmzUF45eyS7A_ymhBsv3vXNoVWJzHzjRAzYhs0Y4ndLdxbQ5LgVCsPeV6byojtk6P-DEXxMh04gQueHxPsnw4BehNitP7yvPH7BYJqPC4YQzLWX-fNqtb8p-cJ6uZIMYV4_uuc7mGCt8Z-mXz-v2OEc-q96ajsqGhJoCJZEdyhY3FkdX5_XBSFybBjhWVeNclVofJz5mhI4fvhWyyTDLzDIWpKXFu6CLlfkbVNQT62OtZW5h_iO1v9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694747824894&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Online FlowChart &amp;amp; Diagrams Editor - Mermaid Live Editor&quot; data-og-description=&quot;&quot; data-og-host=&quot;mermaid.live&quot; data-og-source-url=&quot;https://mermaid.live/edit#pako:eNpVkM1qw0AMhF9F6NRC_AI-FBq7zSWlhebmzUF45eyS7A_ymhBsv3vXNoVWJzHzjRAzYhs0Y4ndLdxbQ5LgVCsPeV6byojtk6P-DEXxMh04gQueHxPsnw4BehNitP7yvPH7BYJqPC4YQzLWX-fNqtb8p-cJ6uZIMYV4_uuc7mGCt8Z-mXz-v2OEc-q96ajsqGhJoCJZEdyhY3FkdX5_XBSFybBjhWVeNclVofJz5mhI4fvhWyyTDLzDIWpKXFu6CLlfkbVNQT62OtZW5h_iO1v9&quot; data-og-url=&quot;https://mermaid.live/edit#pako:eNpVkM1qw0AMhF9F6NRC_AI-FBq7zSWlhebmzUF45eyS7A_ymhBsv3vXNoVWJzHzjRAzYhs0Y4ndLdxbQ5LgVCsPeV6byojtk6P-DEXxMh04gQueHxPsnw4BehNitP7yvPH7BYJqPC4YQzLWX-fNqtb8p-cJ6uZIMYV4_uuc7mGCt8Z-mXz-v2OEc-q96ajsqGhJoCJZEdyhY3FkdX5_XBSFybBjhWVeNclVofJz5mhI4fvhWyyTDLzDIWpKXFu6CLlfkbVNQT62OtZW5h_iO1v9&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mermaid.live/edit#pako:eNpVkM1qw0AMhF9F6NRC_AI-FBq7zSWlhebmzUF45eyS7A_ymhBsv3vXNoVWJzHzjRAzYhs0Y4ndLdxbQ5LgVCsPeV6byojtk6P-DEXxMh04gQueHxPsnw4BehNitP7yvPH7BYJqPC4YQzLWX-fNqtb8p-cJ6uZIMYV4_uuc7mGCt8Z-mXz-v2OEc-q96ajsqGhJoCJZEdyhY3FkdX5_XBSFybBjhWVeNclVofJz5mhI4fvhWyyTDLzDIWpKXFu6CLlfkbVNQT62OtZW5h_iO1v9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mermaid.live/edit#pako:eNpVkM1qw0AMhF9F6NRC_AI-FBq7zSWlhebmzUF45eyS7A_ymhBsv3vXNoVWJzHzjRAzYhs0Y4ndLdxbQ5LgVCsPeV6byojtk6P-DEXxMh04gQueHxPsnw4BehNitP7yvPH7BYJqPC4YQzLWX-fNqtb8p-cJ6uZIMYV4_uuc7mGCt8Z-mXz-v2OEc-q96ajsqGhJoCJZEdyhY3FkdX5_XBSFybBjhWVeNclVofJz5mhI4fvhWyyTDLzDIWpKXFu6CLlfkbVNQT62OtZW5h_iO1v9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Online FlowChart &amp;amp; Diagrams Editor - Mermaid Live Editor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mermaid.live&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 시퀀스 다이어그램&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dm2Xrd/btst84MFMYH/HSlZK0O2M63PpH89eaZUdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dm2Xrd/btst84MFMYH/HSlZK0O2M63PpH89eaZUdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dm2Xrd/btst84MFMYH/HSlZK0O2M63PpH89eaZUdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdm2Xrd%2Fbtst84MFMYH%2FHSlZK0O2M63PpH89eaZUdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;571&quot; height=&quot;483&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1694758106471&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sequenceDiagram
    Alice-&amp;gt;&amp;gt;+John: Hello John, how are you?
    Alice-&amp;gt;&amp;gt;+John: John, can you hear me?
    John--&amp;gt;&amp;gt;-Alice: Hi Alice, I can hear you!
    John--&amp;gt;&amp;gt;-Alice: I feel great!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시퀀스&amp;nbsp;다이어그램은&amp;nbsp;프로세스가&amp;nbsp;서로&amp;nbsp;어떻게&amp;nbsp;작동하고&amp;nbsp;어떤&amp;nbsp;순서로&amp;nbsp;작동하는지&amp;nbsp;보여주는&amp;nbsp;상호&amp;nbsp;작용&amp;nbsp;다이어그램입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;플로우차트&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfAYCO/btsudPVQiqL/Ovc7iBCP0Rcg1851GBusO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfAYCO/btsudPVQiqL/Ovc7iBCP0Rcg1851GBusO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfAYCO/btsudPVQiqL/Ovc7iBCP0Rcg1851GBusO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfAYCO%2FbtsudPVQiqL%2FOvc7iBCP0Rcg1851GBusO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;599&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1694758129175&quot; class=&quot;coq&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flowchart TD
    A[Christmas] --&amp;gt;|Get money| B(Go shopping)
    B --&amp;gt; C{Let me think}
    C --&amp;gt;|One| D[Laptop]
    C --&amp;gt;|Two| E[iPhone]
    C --&amp;gt;|Three| F[fa:fa-car Car]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서도는&amp;nbsp;노드&amp;nbsp;(기하학적&amp;nbsp;모양)와&amp;nbsp;가장자리&amp;nbsp;(화살표&amp;nbsp;또는&amp;nbsp;선)&amp;nbsp;로&amp;nbsp;구성됩니다&amp;nbsp;.&amp;nbsp;Mermaid&amp;nbsp;코드는&amp;nbsp;노드와&amp;nbsp;가장자리가&amp;nbsp;만들어지는&amp;nbsp;방법을&amp;nbsp;정의하고&amp;nbsp;다양한&amp;nbsp;화살표&amp;nbsp;유형,&amp;nbsp;다방향&amp;nbsp;화살표&amp;nbsp;및&amp;nbsp;하위&amp;nbsp;그래프와의&amp;nbsp;모든&amp;nbsp;연결을&amp;nbsp;수용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 클래스 다이어그램 &lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6KJFt/btsuejh2CrY/OaWWItuaypcL7y60j4bC20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6KJFt/btsuejh2CrY/OaWWItuaypcL7y60j4bC20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6KJFt/btsuejh2CrY/OaWWItuaypcL7y60j4bC20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6KJFt%2Fbtsuejh2CrY%2FOaWWItuaypcL7y60j4bC20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;517&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;517&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1694758153844&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;classDiagram
    Animal &amp;lt;|-- Duck
    Animal &amp;lt;|-- Fish
    Animal &amp;lt;|-- Zebra
    Animal : +int age
    Animal : +String gender
    Animal: +isMammal()
    Animal: +mate()
    class Duck{
      +String beakColor
      +swim()
      +quack()
    }
    class Fish{
      -int sizeInFeet
      -canEat()
    }
    class Zebra{
      +bool is_wild
      +run()
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스&amp;nbsp;다이어그램은&amp;nbsp;객체&amp;nbsp;지향&amp;nbsp;모델링의&amp;nbsp;주요&amp;nbsp;구성&amp;nbsp;요소입니다.&amp;nbsp;이는&amp;nbsp;애플리케이션&amp;nbsp;구조의&amp;nbsp;일반적인&amp;nbsp;개념&amp;nbsp;모델링과&amp;nbsp;모델을&amp;nbsp;프로그래밍&amp;nbsp;코드로&amp;nbsp;변환하는&amp;nbsp;세부&amp;nbsp;모델링에&amp;nbsp;사용됩니다.&amp;nbsp;클래스&amp;nbsp;다이어그램은&amp;nbsp;데이터&amp;nbsp;모델링에도&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;클래스&amp;nbsp;다이어그램의&amp;nbsp;클래스는&amp;nbsp;주요&amp;nbsp;요소,&amp;nbsp;애플리케이션의&amp;nbsp;상호&amp;nbsp;작용&amp;nbsp;및&amp;nbsp;프로그래밍할&amp;nbsp;클래스를&amp;nbsp;모두&amp;nbsp;나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 엔터티 관계 다이어그램&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H3rQF/btsueg6Hren/n9CzNetVxztQdN2uPcqiJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H3rQF/btsueg6Hren/n9CzNetVxztQdN2uPcqiJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H3rQF/btsueg6Hren/n9CzNetVxztQdN2uPcqiJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH3rQF%2Fbtsueg6Hren%2Fn9CzNetVxztQdN2uPcqiJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;620&quot; height=&quot;571&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1694758171534&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;erDiagram
    CUSTOMER }|..|{ DELIVERY-ADDRESS : has
    CUSTOMER ||--o{ ORDER : places
    CUSTOMER ||--o{ INVOICE : &quot;liable for&quot;
    DELIVERY-ADDRESS ||--o{ ORDER : receives
    INVOICE ||--|{ ORDER : covers
    ORDER ||--|{ ORDER-ITEM : includes
    PRODUCT-CATEGORY ||--|{ PRODUCT : contains
    PRODUCT ||--o{ ORDER-ITEM : &quot;ordered in&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개체-관계&amp;nbsp;모델(또는&amp;nbsp;ER&amp;nbsp;모델)은&amp;nbsp;특정&amp;nbsp;지식&amp;nbsp;영역에서&amp;nbsp;상호&amp;nbsp;관련된&amp;nbsp;관심&amp;nbsp;사항을&amp;nbsp;설명합니다.&amp;nbsp;기본&amp;nbsp;ER&amp;nbsp;모델은&amp;nbsp;관심&amp;nbsp;항목을&amp;nbsp;분류하는&amp;nbsp;엔터티&amp;nbsp;유형으로&amp;nbsp;구성되며&amp;nbsp;엔터티(해당&amp;nbsp;엔터티&amp;nbsp;유형의&amp;nbsp;인스턴스)&amp;nbsp;간에&amp;nbsp;존재할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;관계를&amp;nbsp;지정합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt; 간트 다이어그램&amp;nbsp;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JAOPk/btst5ORm6gD/Fji9RUmY2GYNEEkUe53KUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JAOPk/btst5ORm6gD/Fji9RUmY2GYNEEkUe53KUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JAOPk/btst5ORm6gD/Fji9RUmY2GYNEEkUe53KUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJAOPk%2Fbtst5ORm6gD%2FFji9RUmY2GYNEEkUe53KUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;166&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1694758194378&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gantt
    title A Gantt Diagram
    dateFormat  YYYY-MM-DD
    section Section
    A task           :a1, 2014-01-01, 30d
    Another task     :after a1  , 20d
    section Another
    Task in sec      :2014-01-12  , 12d
    another task      : 24d&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간트&amp;nbsp;차트(Gantt&amp;nbsp;Chart)는&amp;nbsp;1896년&amp;nbsp;Karol&amp;nbsp;Adamiecki가&amp;nbsp;처음&amp;nbsp;개발하고&amp;nbsp;1910년대&amp;nbsp;Henry&amp;nbsp;Gantt가&amp;nbsp;독립적으로&amp;nbsp;개발한&amp;nbsp;막대형&amp;nbsp;차트의&amp;nbsp;한&amp;nbsp;유형으로,&amp;nbsp;프로젝트&amp;nbsp;일정과&amp;nbsp;하나의&amp;nbsp;프로젝트를&amp;nbsp;완료하는&amp;nbsp;데&amp;nbsp;걸리는&amp;nbsp;시간을&amp;nbsp;보여줍니다.&amp;nbsp;간트&amp;nbsp;차트는&amp;nbsp;프로젝트의&amp;nbsp;최종&amp;nbsp;요소와&amp;nbsp;요약&amp;nbsp;요소의&amp;nbsp;시작&amp;nbsp;날짜와&amp;nbsp;종료&amp;nbsp;날짜&amp;nbsp;사이의&amp;nbsp;일수를&amp;nbsp;보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 마인드맵 (Mindmap) &lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Eapgp/btst6PvxMRG/ocwpaNCI0LwDRqDkeuAhXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Eapgp/btst6PvxMRG/ocwpaNCI0LwDRqDkeuAhXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Eapgp/btst6PvxMRG/ocwpaNCI0LwDRqDkeuAhXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEapgp%2Fbtst6PvxMRG%2FocwpaNCI0LwDRqDkeuAhXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;691&quot; height=&quot;604&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1694758207931&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mindmap
  root((mindmap))
    Origins
      Long history
      ::icon(fa fa-book)
      Popularisation
        British popular psychology author Tony Buzan
    Research
      On effectivness&amp;lt;br/&amp;gt;and features
      On Automatic creation
        Uses
            Creative techniques
            Strategic planning
            Argument mapping
    Tools
      Pen and paper
      Mermaid&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마인드&amp;nbsp;맵은&amp;nbsp;정보를&amp;nbsp;계층&amp;nbsp;구조로&amp;nbsp;시각적으로&amp;nbsp;구성하는&amp;nbsp;데&amp;nbsp;사용되는&amp;nbsp;다이어그램으로,&amp;nbsp;전체&amp;nbsp;조각&amp;nbsp;간의&amp;nbsp;관계를&amp;nbsp;보여줍니다.&amp;nbsp;종종&amp;nbsp;빈&amp;nbsp;페이지&amp;nbsp;중앙에&amp;nbsp;이미지로&amp;nbsp;그려지는&amp;nbsp;단일&amp;nbsp;개념을&amp;nbsp;중심으로&amp;nbsp;생성되며,&amp;nbsp;관련&amp;nbsp;표현이&amp;nbsp;여기에&amp;nbsp;표시됩니다.&amp;nbsp;이미지,&amp;nbsp;단어,&amp;nbsp;단어의&amp;nbsp;일부와&amp;nbsp;같은&amp;nbsp;아이디어가&amp;nbsp;추가됩니다.&amp;nbsp;주요&amp;nbsp;아이디어는&amp;nbsp;중심&amp;nbsp;개념에&amp;nbsp;직접&amp;nbsp;연결되고,&amp;nbsp;다른&amp;nbsp;아이디어는&amp;nbsp;이러한&amp;nbsp;주요&amp;nbsp;아이디어에서&amp;nbsp;파생됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 31px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 31px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 31px;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mermaid.js.org/intro/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mermaid.js.org/intro/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694758613319&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;About Mermaid | Mermaid&quot; data-og-description=&quot;&quot; data-og-host=&quot;mermaid.js.org&quot; data-og-source-url=&quot;https://mermaid.js.org/intro/&quot; data-og-url=&quot;https://mermaid.js.org/intro/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mermaid.js.org/intro/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mermaid.js.org/intro/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;About Mermaid | Mermaid&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mermaid.js.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips</category>
      <category>Mermaid</category>
      <category>개발문서툴</category>
      <category>다이어그램</category>
      <category>마인드맵</category>
      <category>시퀀스</category>
      <category>플로우챠트</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/296</guid>
      <comments>https://holjjack.tistory.com/296#entry296comment</comments>
      <pubDate>Mon, 18 Sep 2023 11:36:10 +0900</pubDate>
    </item>
    <item>
      <title>[C#] ObsoleteAttribute 특성을 사용하여, 사용안하는 메소드 표시</title>
      <link>https://holjjack.tistory.com/295</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램을 설계하고 코딩하는 과정에서, 각 어플리케이션의 요소 (클래스, 메소드, 구조체 등등) 를 변경하는 과정은 자주 발생하게 됩니다.&amp;nbsp;협업하는 과정에서 즉시 수정이 가능하면 좋지만, 시간을 두고 천천히 제외 해야 할 요소라면, 작업자 간의 자연스러운 공유 및 수정을 유도하는 것도 하나의 방법인데요.&lt;br /&gt;꼭 제외에만 초점을 맞춘다기 보다는 Framework 의 변경, 추가 Method 생성 등도 이유가 될 수 있을 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 사용하기 좋은 특성 중 에 하나가 [Obsolete] 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt; ObsoleteAttribute &lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 이상 사용하지 않거나, 그럴 예정인 어플리케이션 요소를 표시하는데 사용되는 특성이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Obsolete] 특성 (Attribute)을 붙여주는 방식으로 사용하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 기본 형식&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1693300483847&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Obsolete(&quot;사용안함&quot;, false)]
public bool TestMethods()
{
    return true;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 Method 나, Class 등등 어플리케이션 요소 상단에 [Obsolete] 특성을 기재하는 방식으로 사용하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Obsolete 옵션으로 Message 와 IsError 컴파일 에러 여부를 선택할 수 있는 옵션으로 구성되어져 있으며,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;true 로 선택할 경우, 컴파일시 Error을 발생하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt; 사용 예제 &lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T7LSq/btsshrK0z4K/7V6tQIaTTTFntUOvFhijI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T7LSq/btsshrK0z4K/7V6tQIaTTTFntUOvFhijI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T7LSq/btsshrK0z4K/7V6tQIaTTTFntUOvFhijI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT7LSq%2FbtsshrK0z4K%2F7V6tQIaTTTFntUOvFhijI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;252&quot; height=&quot;105&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBo8rw/btsswTy5L8K/xTfSBk9O0FPk0vMAXJkbd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBo8rw/btsswTy5L8K/xTfSBk9O0FPk0vMAXJkbd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBo8rw/btsswTy5L8K/xTfSBk9O0FPk0vMAXJkbd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBo8rw%2FbtsswTy5L8K%2FxTfSBk9O0FPk0vMAXJkbd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;514&quot; height=&quot;167&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IsError false 일 경우, ~~~~ 표시로 사용자에게 경고만 되며, 컴파일은 정상적으로 진행됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X13zJ/btssAKPvX0t/zYnMLqLkWce9OoJbl5KnhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X13zJ/btssAKPvX0t/zYnMLqLkWce9OoJbl5KnhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X13zJ/btssAKPvX0t/zYnMLqLkWce9OoJbl5KnhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX13zJ%2FbtssAKPvX0t%2FzYnMLqLkWce9OoJbl5KnhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;108&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEaXuU/btssquz7tj8/lnsENJiFSxLPUapvzJl6w0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEaXuU/btssquz7tj8/lnsENJiFSxLPUapvzJl6w0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEaXuU/btssquz7tj8/lnsENJiFSxLPUapvzJl6w0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEaXuU%2Fbtssquz7tj8%2FlnsENJiFSxLPUapvzJl6w0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;146&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, IsError true 일 경우, ~~~~ 붉은 색으로 표시되며 컴파일시 에러를 발생하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Obsolete의 어플리케이션 요소&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;303&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqqU8h/btssCvdbLPv/3ukLqBGQ5BwUk6U0E3xSTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqqU8h/btssCvdbLPv/3ukLqBGQ5BwUk6U0E3xSTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqqU8h/btssCvdbLPv/3ukLqBGQ5BwUk6U0E3xSTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqqU8h%2FbtssCvdbLPv%2F3ukLqBGQ5BwUk6U0E3xSTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;833&quot; height=&quot;303&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;303&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1693305135517&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[AttributeUsage(AttributeTargets.Class | 
        	AttributeTargets.Struct | 
                AttributeTargets.Enum | 
                AttributeTargets.Constructor | 
                AttributeTargets.Method | 
                AttributeTargets.Property | 
                AttributeTargets.Field | 
                AttributeTargets.Event | 
                AttributeTargets.Interface | 
                AttributeTargets.Delegate, Inherited = false)]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1KElo/btssB2a7dw7/GDY7vdaazZfx3kJ6li8AkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1KElo/btssB2a7dw7/GDY7vdaazZfx3kJ6li8AkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1KElo/btssB2a7dw7/GDY7vdaazZfx3kJ6li8AkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1KElo%2FbtssB2a7dw7%2FGDY7vdaazZfx3kJ6li8AkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;310&quot; height=&quot;357&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Obsolete 특성은 AttributeTargets Enum을 기준으로 동작하며,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Assembly, Module, Parameter, ReturnValue, GenericParameter, All 을 제외한 요소에서 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;span&gt;&amp;nbsp;적용대상&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFOsaf/btssCwiS5lc/Qy1ZsDPswvSHJYxN5cztZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFOsaf/btssCwiS5lc/Qy1ZsDPswvSHJYxN5cztZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFOsaf/btssCwiS5lc/Qy1ZsDPswvSHJYxN5cztZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFOsaf%2FbtssCwiS5lc%2FQy1ZsDPswvSHJYxN5cztZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;279&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 31px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 31px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 31px;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://learn.microsoft.com/ko-kr/dotnet/api/system.obsoleteattribute?view=net-7.0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/C#</category>
      <category>.net</category>
      <category>C#</category>
      <category>obsolete</category>
      <category>ObsoleteAttribute</category>
      <category>사용안하는</category>
      <category>사용안하는메소드</category>
      <category>사용안하는변수</category>
      <category>사용안하는클래스</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/295</guid>
      <comments>https://holjjack.tistory.com/295#entry295comment</comments>
      <pubDate>Mon, 11 Sep 2023 10:14:56 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파이썬 핵심만 정리한 반복문 for/while</title>
      <link>https://holjjack.tistory.com/293</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.3023%; height: 14px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍을 진행할때 가장 많이 사용하는 구문이 제어문과 반복문인데요. python에서 사용되는 반복문의 종류에는 for 문과 while 문이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.348%; height: 32px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 32px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 32px;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;/b&gt;&amp;nbsp;반복문 &lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문은&amp;nbsp;제어문중의&amp;nbsp;하나로,&amp;nbsp;프로그램&amp;nbsp;소스&amp;nbsp;코드내에서&amp;nbsp;특정한&amp;nbsp;부분의&amp;nbsp;코드가&amp;nbsp;반복적으로&amp;nbsp;수행&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;하는&amp;nbsp;구문입니다. &lt;br /&gt;프로그램이 처리하는 대부분의 코드는 반복적인 형태가 많으므로, 가장 많이 사용되는 제어문 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 에서는 for 문과, while 문이 반복문에 해당이 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.001%; height: 46px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;/b&gt; for 문 &lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문은 특정 값들의 집합의 대해 코드의 일부분을 반복하는 구문입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 문의 기본적인 구문은 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687256158306&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for item in list of items:
	# do something&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 list 자료형을 이용해서 for 문을 구현하며, 순차적인 리스트를 반환하는 range 함수와 같이 사용되기도 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687256782437&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 샘플
fruits = [&quot;Apple&quot;, &quot;Peach&quot;, &quot;Pear&quot;]
for fruit in fruits:
	print(fruit)


&amp;gt;&amp;gt;&amp;gt;
Apple
Peach
Pear&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 54px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 28px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 28px;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt; for 문과 자주 사용되는 range 함수 &lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;range(start, end, step) 함수는 start 와 end 사이의 연속적인 숫자들을 리턴하는 함수 이며, for 문과 자주 사용되는 함수 입니다. &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;&lt;b&gt;유의사항은 end의 숫자는 포함되지 않은 숫자까지 리턴&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;된다는 점입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687332570833&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;range(start, end, step)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;range의 syntax는 위와 같고 stop과 step은 생략 가능합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;start : start로 시작되는 숫자부터 리턴됩니다.&lt;/li&gt;
&lt;li&gt;end : &lt;u&gt;end가 포함되지 않는 숫자까지 리턴&lt;/u&gt;됩니다.&lt;/li&gt;
&lt;li&gt;step : 연속적인 숫자들 중에, step의 간격에 해당되는 숫자들만 리턴됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687332661746&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for item in range(a, b):
	print(item)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 문과 같이 사용할 경우, 위 예시처럼 사용가능하며, 자세한 예시는 아래 첨부 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687332647158&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1부터 10까지의 개념이며, 10을 포함하지 않음
for number in range(1,10):
	print(number)


total = 0
for number in range(1, 101):
    if number % 2 == 0:
        total += number

print(total)




total = 0
for number in range(2, 101, 2):
	total += number

print(total)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 53px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;▶&lt;/span&gt;&lt;/b&gt;&amp;nbsp;while 문 &lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;◀&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건이 참일 때마다, 들여쓰기 된 코드들을 실행하는 반복 실행문.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문은 end 조건이 정해져 있지만, while loop 는 infinite loop 개념이라, 조건문에 유의 해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1687256810355&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while someting_is_true:
	# do something&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적은 구문은 위의 내용과 같으며, 아래는 이를 이용한 예시입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687256821625&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 샘플
i = 0
while i &amp;lt; 100:
	print(f&quot;i = {i}&quot;)
	i += 1


# 출력
i = 0
i = 1
...
i = 99&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 50px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://velog.io/@chappi/파이썬을-배워보자-9일차-반복문while-for&quot;&gt;https://velog.io/@chappi/파이썬을-배워보자-9일차-반복문while-for&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.freecodecamp.org/korean/news/python-for-loop-for-i-in-range-example/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.freecodecamp.org/korean/news/python-for-loop-for-i-in-range-example/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/Python</category>
      <category>FOR</category>
      <category>Python</category>
      <category>range</category>
      <category>While</category>
      <category>반복문</category>
      <category>파이썬</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/293</guid>
      <comments>https://holjjack.tistory.com/293#entry293comment</comments>
      <pubDate>Mon, 4 Sep 2023 10:42:08 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파이썬 핵심만 정리한 조건문 if/else</title>
      <link>https://holjjack.tistory.com/290</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문은 모든 언어에서 가장 많이 사용하는 프로그래밍 구문중에 하나입니다. Python 에서 사용되는 조건문 형식에 대해서 간략하게 핵심만 정리해 보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 조건문이란?&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문이란 어떤 조건이 주어질 때 어떤 동작을 수행하도록 할지, 즉 조건에 따라 실행이 달라지게 할 때 사용되는 문장입니다.&lt;br /&gt;&lt;u&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;Boolean&amp;nbsp;자료형&amp;nbsp;조건이&amp;nbsp;참인지,&amp;nbsp;혹은&amp;nbsp;거짓인지에&amp;nbsp;따라&amp;nbsp;달라지는&amp;nbsp;상황을&amp;nbsp;수행하는&amp;nbsp;명령문&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 조건문형식&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1685609533619&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if condition:
	do A
else:
	do B&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if/else의 기본 조건문은 위 화면과 같습니다. 해당 조건문 옆에 : 콜론으로 타 언어의 { } 를 대체합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1685614380622&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if condition1:
	do A
elif condition2:
	do B
else:
	do C&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;else if 의 조건문 형태는 elif 구문으로 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 조건문 유형 : 비교연산자&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;gt; : 왼쪽의 값이 클경우&lt;/li&gt;
&lt;li&gt;&amp;lt; : 왼쪽의 값이 작을 경우&lt;/li&gt;
&lt;li&gt;&amp;gt;= : 왼쪽의 값이 크거나 같을 경우&lt;/li&gt;
&lt;li&gt;&amp;lt;= : 왼쪽의 값이 작거나 같을 경우&lt;/li&gt;
&lt;li&gt;== : 두 값이 같을 경우&lt;/li&gt;
&lt;li&gt;!=&amp;nbsp;:&amp;nbsp;두&amp;nbsp;값이&amp;nbsp;다를&amp;nbsp;경우&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1685614509507&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if 5 &amp;gt; 1:
	do A


if 5 &amp;lt; 1:
	do A


if 5 &amp;gt;= 1:
	do A


if 5 &amp;lt;= 1:
	do A


if 5 == 5:
	do A
    
    
if 5 != 1:
	do A&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 조건문 유형 : 논리연산자&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;and : 두가지 조건문 모두 참일 경우 True, 아니면 False&lt;/li&gt;
&lt;li&gt;or : 두가지 조건문 중 하나라도 참일 경우 True, 아니면 False&lt;/li&gt;
&lt;li&gt;not&amp;nbsp;:&amp;nbsp;조건문이&amp;nbsp;거짓이면&amp;nbsp;True,&amp;nbsp;참이면&amp;nbsp;False&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1685614548248&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 두 조건일 참일 경우
if condition1 and condition2:
	do A
else:
	do B


// 두가지 조건중 하나만 참일 경우
if condition1 or condition2:
	do A
else:
	do B


// 조건이 False 일 경우 do A
if not condition1:
	do A
else:
	do B&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 50px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/Python</category>
      <category>elif</category>
      <category>if/else</category>
      <category>Python</category>
      <category>조건문</category>
      <category>파이썬</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/290</guid>
      <comments>https://holjjack.tistory.com/290#entry290comment</comments>
      <pubDate>Mon, 12 Jun 2023 14:43:13 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] GitLab Webhooks를 이용한 젠킨스 연동 및 빌드유발</title>
      <link>https://holjjack.tistory.com/288</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gitlab의 Webhooks은 프로젝트 내에서 어떠한 일이 발생할 때, 이벤트를 바인딩 하는데 사용 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기능을 이용하면, 다양한 Event를 발생 시킬 수 있는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;Gitlab에 있는 Webhooks 를 이용해서 Push Event를 보내 Jenkins의 빌드를 유발시킬 수 있는 내용을 정리했습니다.&amp;nbsp;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스 버전은&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;Jenkins 2.399&lt;/u&gt;&lt;/span&gt;&amp;nbsp;&lt;/b&gt;을 사용하고 있어서 UI 및 PlugIn 내용이 조금 다를수 있으니 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## PlugIn 설치&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMfrCI/btsgYBqey9a/kgi6Ql5yTpR8EEJM1GdlQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMfrCI/btsgYBqey9a/kgi6Ql5yTpR8EEJM1GdlQK/img.png&quot; data-alt=&quot;Jenkins 플러그인 설치 : GitLab Plugin 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMfrCI/btsgYBqey9a/kgi6Ql5yTpR8EEJM1GdlQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMfrCI%2FbtsgYBqey9a%2Fkgi6Ql5yTpR8EEJM1GdlQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;732&quot; height=&quot;307&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jenkins 플러그인 설치 : GitLab Plugin 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 Jenkins에서 Plugin을 하나 설치 해야 하는데요. 이전 버전에서는 해당 플러그인이 아니였었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바뀐 Jenkins 버전에서는 &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;Gitlab Plugin&lt;/u&gt;&lt;/span&gt; 으로 통합된 거 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서를 자세히 보지 않았으나, 해당 플러그인을 설치해주니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gitlab의 Webhooks 이벤트를 받을 수 있는 설정화면을 찾을 수 있었어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 프로젝트 구성 수정&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpp6Ox/btsgUtstPfn/M6MGxolkCEqk9dqdROFSxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpp6Ox/btsgUtstPfn/M6MGxolkCEqk9dqdROFSxK/img.png&quot; data-alt=&quot;Jenkins 빌드 유발 설정 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpp6Ox/btsgUtstPfn/M6MGxolkCEqk9dqdROFSxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpp6Ox%2FbtsgUtstPfn%2FM6MGxolkCEqk9dqdROFSxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;895&quot; height=&quot;386&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jenkins 빌드 유발 설정 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 플러그인을 설치하면, 그 전에 보이지 않았던, 빌드유발 메뉴에 선택사항이 하나 추가 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;Build when a change is pushed to GitLab. GitLab webhook URL: xxx&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 위 내용인데요. &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;변경사항이 GitLab에 푸쉬될때 빌드&lt;/u&gt;&lt;/span&gt; 된다는 내용이며, 별도의 URL을 제공해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URL 내용이, GitLab 설정시 필요하니 확인해주시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1684835760173&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://000.000.000.000:8080/project/&amp;lt;ProjectName&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G4cXF/btsgKpqCG6N/xgfUKb738uRuQgfoDyHd81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G4cXF/btsgKpqCG6N/xgfUKb738uRuQgfoDyHd81/img.png&quot; data-alt=&quot;Jenkins 빌드 유발 설정 이미지 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G4cXF/btsgKpqCG6N/xgfUKb738uRuQgfoDyHd81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG4cXF%2FbtsgKpqCG6N%2FxgfUKb738uRuQgfoDyHd81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;700&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jenkins 빌드 유발 설정 이미지 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴를 선택하면, 위 화면같이 추가 구성이 나오게 되는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희는 Push Events 를 사용할 것이여서, Default 로 선택되어져 있는 체크박스를 유지해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래에 있는 고급 탭을 선택해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYEY2Z/btsgGlov8LP/PKYNwzMeAJkkUZ2ZcUbjk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYEY2Z/btsgGlov8LP/PKYNwzMeAJkkUZ2ZcUbjk1/img.png&quot; data-alt=&quot;Jenkins 빌드 유발 설정 이미지 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYEY2Z/btsgGlov8LP/PKYNwzMeAJkkUZ2ZcUbjk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYEY2Z%2FbtsgGlov8LP%2FPKYNwzMeAJkkUZ2ZcUbjk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1258&quot; height=&quot;808&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jenkins 빌드 유발 설정 이미지 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고급탭 선택시, 하단에 &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;Secret Token&lt;/u&gt;&lt;/span&gt; 이 보여지게 되는데요. Default 로 빈값이 존재합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;Generate&lt;/b&gt; &lt;/span&gt;버튼을 클릭하면, 문자열이 생성이 되는데요. 이 값도 GitLab 설정시 필요한 값이니 적어둡니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## GitLab WebHook 설정&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bt6db/btsgKpqCuPB/8IfRzQ7nk1XnGzKMA1MgMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bt6db/btsgKpqCuPB/8IfRzQ7nk1XnGzKMA1MgMK/img.png&quot; data-alt=&quot;GitLab Webhooks 설정 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bt6db/btsgKpqCuPB/8IfRzQ7nk1XnGzKMA1MgMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBt6db%2FbtsgKpqCuPB%2F8IfRzQ7nk1XnGzKMA1MgMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1323&quot; height=&quot;856&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;856&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitLab Webhooks 설정 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FT7zv/btsgNWPdjlt/K4zAVtGFFK79xTbgzc8juK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FT7zv/btsgNWPdjlt/K4zAVtGFFK79xTbgzc8juK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FT7zv/btsgNWPdjlt/K4zAVtGFFK79xTbgzc8juK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFT7zv%2FbtsgNWPdjlt%2FK4zAVtGFFK79xTbgzc8juK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;221&quot; height=&quot;240&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins 에서 설정이 완료가 되었다면, 이제는 GitLab에서 설정을 해주면 되는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;프로젝트 설정 화면에 있는 Settings 메뉴의 Integrations 메뉴에서 Webhooks 를 설정 할 수 있습니다.&amp;nbsp;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqEXFl/btsgYBjstZe/rhhCB0CKLyu5WqiZkkjKx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqEXFl/btsgYBjstZe/rhhCB0CKLyu5WqiZkkjKx1/img.png&quot; data-alt=&quot;GitLab Webhooks Push Events 설정 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqEXFl/btsgYBjstZe/rhhCB0CKLyu5WqiZkkjKx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqEXFl%2FbtsgYBjstZe%2FrhhCB0CKLyu5WqiZkkjKx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1122&quot; height=&quot;628&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitLab Webhooks Push Events 설정 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf454e/btsg8bLTR2G/niWwFAAmkD8zIEKXqkTShK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf454e/btsg8bLTR2G/niWwFAAmkD8zIEKXqkTShK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf454e/btsg8bLTR2G/niWwFAAmkD8zIEKXqkTShK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf454e%2Fbtsg8bLTR2G%2FniWwFAAmkD8zIEKXqkTShK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;225&quot; height=&quot;113&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 화면에서, Jenkins에서 체크한 &lt;b&gt;URL 및 Secret Token&lt;/b&gt; 값을 입력해주고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Push Event를 체크&lt;/b&gt;하며, 어떠한 branch 에 push가 발생했을때 Push Event 를 발생할지 입력해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우에는 &lt;b&gt;dev 브런치&lt;/b&gt;를 이용하고 있어서 dev를 입력했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 하단에 &lt;b&gt;Add webhook&lt;/b&gt; 버튼을 클릭해주면 기본적인 설정은 완료가 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## WebHook 테스트&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TphH3/btsg2ZDkIME/otWrf18qmf93NYQrpKCZNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TphH3/btsg2ZDkIME/otWrf18qmf93NYQrpKCZNK/img.png&quot; data-alt=&quot;GitLab Webhooks Test 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TphH3/btsg2ZDkIME/otWrf18qmf93NYQrpKCZNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTphH3%2Fbtsg2ZDkIME%2FotWrf18qmf93NYQrpKCZNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;276&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitLab Webhooks Test 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WBq1Y/btsg1tkxkqp/Z8MEag6QPKG9g4sdUGKWs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WBq1Y/btsg1tkxkqp/Z8MEag6QPKG9g4sdUGKWs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WBq1Y/btsg1tkxkqp/Z8MEag6QPKG9g4sdUGKWs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWBq1Y%2Fbtsg1tkxkqp%2FZ8MEag6QPKG9g4sdUGKWs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;340&quot; height=&quot;167&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정이 완료가 되었다면, Push Events 가 잘 발생이 되는지 테스트를 해 볼 수 있는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 화면처럼 &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;&lt;b&gt;Test 드롭다운 박스&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;를 클릭하면, Push Event 및 다양한 테스트를 해볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 이벤트를 클릭하면, Jenkins에 정상적으로 빌드가 유발되는 화면을 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 설정을 해 놓으면,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitLab repository 'dev' 브런치에 push 를 할 경우, 자동적으로 Jenkins 가 호출이 되고요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 이용해서 &lt;u&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;자동 빌드 및 배포, 다양한 기능을 활용&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;할 수 있으니, 꼭 한번 활용해 보시면 좋을거 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 50px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CI</category>
      <category>gitlab</category>
      <category>jenkins</category>
      <category>push event</category>
      <category>webhooks</category>
      <category>빌드유발</category>
      <category>자동빌드</category>
      <category>젠킨스</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/288</guid>
      <comments>https://holjjack.tistory.com/288#entry288comment</comments>
      <pubDate>Mon, 5 Jun 2023 11:09:03 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] Windows 에 Redis 설치하기</title>
      <link>https://holjjack.tistory.com/206</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEs9ox/btrSZ4oEJZj/eV6w6E1mbszx25aj8Us3I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEs9ox/btrSZ4oEJZj/eV6w6E1mbszx25aj8Us3I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEs9ox/btrSZ4oEJZj/eV6w6E1mbszx25aj8Us3I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEs9ox%2FbtrSZ4oEJZj%2FeV6w6E1mbszx25aj8Us3I0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis 를 UNIX 기반의 OS에 설치 하지만, 테스트 및 개발환경이 Windows 라면, 임시적으로 사용하기 편한게 Windows Redis 인데요. 최신버전이 아니라는 단점이 있지만, 기본적인 테스트 용도로는 적절하게 사용 가능 할 것 같아서 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 다운로드&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoftarchive/redis/releases&quot;&gt;https://github.com/microsoftarchive/redis/releases&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1685083167154&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Releases &amp;middot; microsoftarchive/redis&quot; data-og-description=&quot;Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoftarchive/redis/releases&quot; data-og-url=&quot;https://github.com/microsoftarchive/redis/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2DW3L/hyMcjd17Gt/RkGkqxaXFsQNKHJEO8pDaK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://github.com/microsoftarchive/redis/releases&quot; data-source-url=&quot;https://github.com/microsoftarchive/redis/releases&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2DW3L/hyMcjd17Gt/RkGkqxaXFsQNKHJEO8pDaK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Releases &amp;middot; microsoftarchive/redis&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;u&gt;Last 버전이 3.0.504 버전이라는 점은 꼭, 설치전 확인해주세요&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 7.0 버전까지 나왔으니까요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 설치&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HOYfo/btrjJ8FgVHY/Z5q0KKm2usRcq4whKLUknK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HOYfo/btrjJ8FgVHY/Z5q0KKm2usRcq4whKLUknK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HOYfo/btrjJ8FgVHY/Z5q0KKm2usRcq4whKLUknK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHOYfo%2FbtrjJ8FgVHY%2FZ5q0KKm2usRcq4whKLUknK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AXaB7/btrjJ8rIorZ/CsG2IEiO4SK7ESkVADOCOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AXaB7/btrjJ8rIorZ/CsG2IEiO4SK7ESkVADOCOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AXaB7/btrjJ8rIorZ/CsG2IEiO4SK7ESkVADOCOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAXaB7%2FbtrjJ8rIorZ%2FCsG2IEiO4SK7ESkVADOCOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8zsMP/btrjHU2i0dF/qMFki1uDHdgfa0WsoG1Jd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8zsMP/btrjHU2i0dF/qMFki1uDHdgfa0WsoG1Jd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8zsMP/btrjHU2i0dF/qMFki1uDHdgfa0WsoG1Jd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8zsMP%2FbtrjHU2i0dF%2FqMFki1uDHdgfa0WsoG1Jd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca511c/btrjJkTJUte/Kt8TAgprmaUKmtvolKl1F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca511c/btrjJkTJUte/Kt8TAgprmaUKmtvolKl1F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca511c/btrjJkTJUte/Kt8TAgprmaUKmtvolKl1F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca511c%2FbtrjJkTJUte%2FKt8TAgprmaUKmtvolKl1F1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1vhZB/btrjIZ96PmU/ReTtGDAkIQHzpQcg1lXVK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1vhZB/btrjIZ96PmU/ReTtGDAkIQHzpQcg1lXVK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1vhZB/btrjIZ96PmU/ReTtGDAkIQHzpQcg1lXVK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1vhZB%2FbtrjIZ96PmU%2FReTtGDAkIQHzpQcg1lXVK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGJCU3/btrjJ8SNNEa/COCTWh2D91453jCauNzNyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGJCU3/btrjJ8SNNEa/COCTWh2D91453jCauNzNyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGJCU3/btrjJ8SNNEa/COCTWh2D91453jCauNzNyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGJCU3%2FbtrjJ8SNNEa%2FCOCTWh2D91453jCauNzNyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3GJW7/btrjJklTmTD/Pk0K10kKkP64uKTO6bivs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3GJW7/btrjJklTmTD/Pk0K10kKkP64uKTO6bivs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3GJW7/btrjJklTmTD/Pk0K10kKkP64uKTO6bivs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3GJW7%2FbtrjJklTmTD%2FPk0K10kKkP64uKTO6bivs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치하는 방법은 크게 어렵지 않습니다. 기본적인 포트 및 메모리 설치 위치 정도 설정해주면 되며, 중간에 환경변수 등록도 체크해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 완료시 Service에 등록되니 바로 사용 하 실 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## redis-cli&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcbn8V/btrjJzJVgtA/td0BcVq2m4WuS34F7faPc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcbn8V/btrjJzJVgtA/td0BcVq2m4WuS34F7faPc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcbn8V/btrjJzJVgtA/td0BcVq2m4WuS34F7faPc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdcbn8V%2FbtrjJzJVgtA%2Ftd0BcVq2m4WuS34F7faPc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;582&quot; height=&quot;295&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CMD 창을 이용해서, redis-cli 를 실행시킨 후, ping을 때리니 정상적으로 &quot;PONG&quot; 응답이 오네요!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가볍게 테스트 용도에서의 레디스로 사용하긴 편리합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 50px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>Redis</category>
      <category>3.0.504</category>
      <category>redis</category>
      <category>windows</category>
      <category>레디스</category>
      <category>윈도우</category>
      <category>최신버전아님</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/206</guid>
      <comments>https://holjjack.tistory.com/206#entry206comment</comments>
      <pubDate>Mon, 29 May 2023 16:48:41 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] 젠킨스 Agent 노드 추가 및 설정 방법</title>
      <link>https://holjjack.tistory.com/275</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 43px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 43px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 43px;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스의 경우, 젠킨스를 이용해서 지속적으로 프로젝트를 빌드하고, 배포를 하고, 그 이외에도 다양한 업무를 수행하는 목적으로 사용을 합니다. 이런 젠킨스를 각 머신마다 설치를 하고 설정을 하기는 번거로운데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인으로 사용할 젠킨스에서 각각의 빌드머신, 혹은 개발환경을 컨트롤 할 수 있게끔 Agent 노드를 제공하는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 방법에 대해서 정리했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 개발, QA, 핫픽스 등등 각각의 개발머신에 배포하는 환경을 하나의 젠킨스 장비에서 관리를 하고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 신규 노드 (Agent) 추가&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pNEpP/btseAa8EiKC/DmHHfkEmKglCRLMPUVxKVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pNEpP/btseAa8EiKC/DmHHfkEmKglCRLMPUVxKVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pNEpP/btseAa8EiKC/DmHHfkEmKglCRLMPUVxKVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpNEpP%2FbtseAa8EiKC%2FDmHHfkEmKglCRLMPUVxKVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;362&quot; height=&quot;482&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTJiW8/btsexgI4qnU/KXlzHF4hkukYNe0sUQI6kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTJiW8/btsexgI4qnU/KXlzHF4hkukYNe0sUQI6kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTJiW8/btsexgI4qnU/KXlzHF4hkukYNe0sUQI6kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTJiW8%2FbtsexgI4qnU%2FKXlzHF4hkukYNe0sUQI6kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;527&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins 관리 메뉴에서 노드관리 메뉴를 선택합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MKDvX/btrZbONwKd5/89V07ni3J2EcC00EgOKwvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MKDvX/btrZbONwKd5/89V07ni3J2EcC00EgOKwvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MKDvX/btrZbONwKd5/89V07ni3J2EcC00EgOKwvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMKDvX%2FbtrZbONwKd5%2F89V07ni3J2EcC00EgOKwvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1120&quot; height=&quot;504&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신규 노드를 추가 하는 버튼을 선택합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pY0GB/btseBcymEBD/ltekFJ10Ws61b0vBAuJ7wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pY0GB/btseBcymEBD/ltekFJ10Ws61b0vBAuJ7wK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pY0GB/btseBcymEBD/ltekFJ10Ws61b0vBAuJ7wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpY0GB%2FbtseBcymEBD%2FltekFJ10Ws61b0vBAuJ7wK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;409&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;br /&gt;노드명을 입력해주고, Type은 Permanent Agent 를 선택해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;Permanent Agent&lt;/b&gt;&lt;br /&gt;Jenkins에&amp;nbsp;일반&amp;nbsp;영구&amp;nbsp;에이전트를&amp;nbsp;추가합니다.&amp;nbsp;Jenkins는&amp;nbsp;동적&amp;nbsp;프로비저닝과&amp;nbsp;같은&amp;nbsp;이러한&amp;nbsp;에이전트와의&amp;nbsp;높은&amp;nbsp;수준의&amp;nbsp;통합을&amp;nbsp;제공하지&amp;nbsp;않기&amp;nbsp;때문에&amp;nbsp;이를&amp;nbsp;&quot;영구적&quot;이라고&amp;nbsp;합니다.&amp;nbsp;다른&amp;nbsp;에이전트&amp;nbsp;유형이&amp;nbsp;적용되지&amp;nbsp;않는&amp;nbsp;경우(예:&amp;nbsp;실제&amp;nbsp;컴퓨터를&amp;nbsp;추가하는&amp;nbsp;경우,&amp;nbsp;Jenkins&amp;nbsp;외부에서&amp;nbsp;관리되는&amp;nbsp;가상&amp;nbsp;머신&amp;nbsp;등)&amp;nbsp;이&amp;nbsp;유형을&amp;nbsp;선택하십시오.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ThRIn/btseztgCNpl/LAgVVK1qfAkU4ttCShdznk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ThRIn/btseztgCNpl/LAgVVK1qfAkU4ttCShdznk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ThRIn/btseztgCNpl/LAgVVK1qfAkU4ttCShdznk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FThRIn%2FbtseztgCNpl%2FLAgVVK1qfAkU4ttCShdznk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;883&quot; height=&quot;705&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 노드 (Agent)의 이름 및 설명, 라벨을 입력해야 하는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중점적으로 체크해야 할 부분은&amp;nbsp;&lt;b&gt;Remote root directory&lt;/b&gt; 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드로 사용할 원격 서버의 디렉토리를 설정해주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우는 C:\Jenkins 폴더를 이용해서 디렉토리를 설정하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins 가 설치된 장소의 디렉토리가 아닌,&amp;nbsp; Agent 노드가 실행될 서버의 디렉토리를 기입해줘야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bStBjK/btrZchJQlls/2ZtGexfrKFAQALBRqDIX11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bStBjK/btrZchJQlls/2ZtGexfrKFAQALBRqDIX11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bStBjK/btrZchJQlls/2ZtGexfrKFAQALBRqDIX11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbStBjK%2FbtrZchJQlls%2F2ZtGexfrKFAQALBRqDIX11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;870&quot; height=&quot;515&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Launch method는 &lt;b&gt;Launch agent by connection it to the controller&lt;/b&gt; 로 설정 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에이전트가 준비될때마다, Jenkins 컨트롤러에 연결 할 수 있는 기능입니다. 에이전트 머신이 TCP 연결을 설정하게 되는데요. WebSocket 모드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 사용을 하면, TCP 수신포트를 설정하지 않아도 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 91.7442%; height: 304px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ooqY1/btrZag47RT3/TPeay8kF1GMp0IpDJC1ZX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ooqY1/btrZag47RT3/TPeay8kF1GMp0IpDJC1ZX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ooqY1/btrZag47RT3/TPeay8kF1GMp0IpDJC1ZX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FooqY1%2FbtrZag47RT3%2FTPeay8kF1GMp0IpDJC1ZX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;767&quot; height=&quot;286&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 과정을 설정하게 되면, 추가한 노드가 화면에 보여지게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨 위에 있는 Built-In Node는 젠킨스가 설치된 서버의 노드이기 때문에 무시하셔도 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## Agent 관련 port 설정&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 96.2791%; height: 297px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUWiiM/btrZbrd8yZg/uJDyVARBkKGkvvxD8rihE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUWiiM/btrZbrd8yZg/uJDyVARBkKGkvvxD8rihE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUWiiM/btrZbrd8yZg/uJDyVARBkKGkvvxD8rihE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUWiiM%2FbtrZbrd8yZg%2FuJDyVARBkKGkvvxD8rihE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;807&quot; height=&quot;279&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가한 Agent 노드를 선택했을때, 위와 같은 메시지를 보게될 경우, port 관련해서 설정을 확인하셔야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 WebSocket을 사용하기로 하였지만, 글로벌 보안설정을 수정해줘야 설정할 수 있는 command line 메시지를 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JppF6/btseAe4noTu/g5ELhCcwQsOmGKQPoM0Srk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JppF6/btseAe4noTu/g5ELhCcwQsOmGKQPoM0Srk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JppF6/btseAe4noTu/g5ELhCcwQsOmGKQPoM0Srk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJppF6%2FbtseAe4noTu%2Fg5ELhCcwQsOmGKQPoM0Srk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;198&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스 관리에 있는 Security 메뉴 중 Configure Global Security&amp;nbsp; 메뉴를 선택하시면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9K8kA/btsex3J4t50/7YGQpJ9FjK4KzPhck5iT80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9K8kA/btsex3J4t50/7YGQpJ9FjK4KzPhck5iT80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9K8kA/btsex3J4t50/7YGQpJ9FjK4KzPhck5iT80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9K8kA%2Fbtsex3J4t50%2F7YGQpJ9FjK4KzPhck5iT80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;363&quot; height=&quot;324&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Agent 에 관련된 TCP port 관련한 설정을 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj70HK/btsexgI49BU/HF8DHZcesmx5aoueLZZkBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj70HK/btsexgI49BU/HF8DHZcesmx5aoueLZZkBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj70HK/btsexgI49BU/HF8DHZcesmx5aoueLZZkBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj70HK%2FbtsexgI49BU%2FHF8DHZcesmx5aoueLZZkBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;370&quot; height=&quot;335&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우는 Random으로 설정을 하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;인바운드 에이전트를 사용하지 않는 경우 기본 설치 동작인 이 기능을 완전히 비활성화하는 것이 좋습니다. Jenkins는 TCP 포트를 사용하여 인바운드에 연결된 에이전트와 통신합니다. 인바운드 에이전트를 사용하려는 경우 시작 시 시스템이 임의로 포트를 선택하도록 허용할 수 있습니다(이렇게 하면 다른 Jenkins 인스턴스를 비롯한 다른 프로그램을 방해하지 않습니다). 방화벽은 임의의 포트를 보호하기 어렵기 때문에 대신 고정 포트 번호를 지정하고 그에 따라 방화벽을 구성할 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;&lt;span&gt;## Agent 연결&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP4EUA/btrZbrLXvyR/7XijC2trXCcIFHBLyCuyVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP4EUA/btrZbrLXvyR/7XijC2trXCcIFHBLyCuyVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP4EUA/btrZbrLXvyR/7XijC2trXCcIFHBLyCuyVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP4EUA%2FbtrZbrLXvyR%2F7XijC2trXCcIFHBLyCuyVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;824&quot; height=&quot;573&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;port를 설정한 뒤 다시 Agent 노드를 선택할 경우, 위처럼 해당 Agent 장비에서 실행해줄 command line 명령어가 노출이 됩니다. 해당 명령줄을 가지고 신규 Agent 장비로 가서 실행해주면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v906u/btrZc8snyBA/wkkuPZfvUC2LK6yCEPuqzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v906u/btrZc8snyBA/wkkuPZfvUC2LK6yCEPuqzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v906u/btrZc8snyBA/wkkuPZfvUC2LK6yCEPuqzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv906u%2FbtrZc8snyBA%2FwkkuPZfvUC2LK6yCEPuqzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;982&quot; height=&quot;515&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 관리자 모드로 cmd를 실행 후, 해당 명령어를 입력하게 되면, jar 파일을 다운로드 받고 해당 파일을 이용해서 WebSoket을 이용해서 연결 한 것을 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 87.907%; height: 310px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AT6Wp/btrZjzIQ2s9/iWdlcCK9iocxRMAMeBHhgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AT6Wp/btrZjzIQ2s9/iWdlcCK9iocxRMAMeBHhgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AT6Wp/btrZjzIQ2s9/iWdlcCK9iocxRMAMeBHhgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAT6Wp%2FbtrZjzIQ2s9%2FiWdlcCK9iocxRMAMeBHhgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;291&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 dev-qa-155 이름의 sample Agent 노드에 정상적으로 연결이 된 것을 확인 할 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 50px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CI</category>
      <category>jenkins</category>
      <category>노드 추가</category>
      <category>젠킨스</category>
      <category>젠킨스 Agent</category>
      <category>젠킨스 노드</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/275</guid>
      <comments>https://holjjack.tistory.com/275#entry275comment</comments>
      <pubDate>Tue, 23 May 2023 14:49:17 +0900</pubDate>
    </item>
    <item>
      <title>[Tips] Visual Studio 2022 올인원 검색 기능 사용하기 - 버전 17.5.4 업데이트 필요</title>
      <link>https://holjjack.tistory.com/285</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Visual Studio 를 사용하면서 유용하게 사용하는 단축어 가운데 하나가 Ctrl + T 단축어 입니다. 각종 Class 및 Method 파일등을 빠르게 검색해주고, 해당파일로 바로 이동할 수 있는 기능인데요. 이번 Visual Studio 2022 에서 17.5.4 로 업데이트 이후, &lt;b&gt;올인원 검색&lt;/b&gt;으로 업그레이드가 되어서 정리합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.7677%; height: 75px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 기존 버전의 CTRL + T&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KyLpZ/btsbNUu8NNt/IK6lKOwSO7tIeGPSQAFbW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KyLpZ/btsbNUu8NNt/IK6lKOwSO7tIeGPSQAFbW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KyLpZ/btsbNUu8NNt/IK6lKOwSO7tIeGPSQAFbW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKyLpZ%2FbtsbNUu8NNt%2FIK6lKOwSO7tIeGPSQAFbW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;734&quot; height=&quot;204&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에도 CTRL + T 단축어 사용에 크게 불편함은 없었지만, 자세한 내용을 확인 하기 위해서는 UI 적으로나 디테일한 부분이 조금 부족했었는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 올인원 검색으로 업그레이드 되면서, 좀더 세부적인 내용을 직관적으로 볼 수 있도록 변경되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 73px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 19px;&quot;&gt;&lt;b&gt;## Visual Studio 2022 버전 17.5.4 업그레이드&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;555&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fr5Oo/btsbNVgwbZL/lGrlCEpgrsFnNyQiTSpupk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fr5Oo/btsbNVgwbZL/lGrlCEpgrsFnNyQiTSpupk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fr5Oo/btsbNVgwbZL/lGrlCEpgrsFnNyQiTSpupk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFr5Oo%2FbtsbNVgwbZL%2FlGrlCEpgrsFnNyQiTSpupk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;555&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;555&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올인원 검색을 이용하기 위해서는 &lt;b&gt;17.5.4&lt;/b&gt; 버전으로 업그레이드가 필요합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업그레이드는 &lt;b&gt;도움말 - 업그레이드 확인&lt;/b&gt; 메뉴에서 확인 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 76px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;## 올인원 검색 기능 사용하기&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zhx7D/btsbPJtgmTn/9szXrXcHysOKumCRSitnOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zhx7D/btsbPJtgmTn/9szXrXcHysOKumCRSitnOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zhx7D/btsbPJtgmTn/9szXrXcHysOKumCRSitnOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzhx7D%2FbtsbPJtgmTn%2F9szXrXcHysOKumCRSitnOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;845&quot; height=&quot;653&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트 이후, Visual Studio 2022를 실행하면, &lt;b&gt;새로운 기능&lt;/b&gt; 을 소개하는 화면이 나옵니다,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 안나오게 되면, &lt;b&gt;도움말 - 새로운기능&lt;/b&gt; 메뉴를 이용해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 기능을 사용하고 싶으시면, &lt;b&gt;이 기능 사용&lt;/b&gt; 버튼을 클릭 후, Visual Studio 2022를 재 실행해 주거나,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beqjJ5/btsbFihKXWl/2X8V4AvdBBtnCeNhrfxBKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beqjJ5/btsbFihKXWl/2X8V4AvdBBtnCeNhrfxBKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beqjJ5/btsbFihKXWl/2X8V4AvdBBtnCeNhrfxBKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeqjJ5%2FbtsbFihKXWl%2F2X8V4AvdBBtnCeNhrfxBKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;744&quot; height=&quot;434&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;도구 - 옵션 - 환경 - 미리 보기 기능&lt;/b&gt; 메뉴로 접근해서 &lt;b&gt;새로운 Visual Studio 검색 환경(restart이(가) 필요함)&lt;/b&gt; 체크박스를 활성화 해주고, Visual Studio 2022를 재시작 해주면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 73px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;## 올인원 검색 사용하기&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSnebB/btsbI2GY2Xx/ner0cnDgn8p8Dwa2OaIUx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSnebB/btsbI2GY2Xx/ner0cnDgn8p8Dwa2OaIUx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSnebB/btsbI2GY2Xx/ner0cnDgn8p8Dwa2OaIUx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSnebB%2FbtsbI2GY2Xx%2Fner0cnDgn8p8Dwa2OaIUx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1022&quot; height=&quot;527&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V8ZE0/btsbQRp4Km1/MRFQ7DfMbJhCEJSW0bRVc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V8ZE0/btsbQRp4Km1/MRFQ7DfMbJhCEJSW0bRVc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V8ZE0/btsbQRp4Km1/MRFQ7DfMbJhCEJSW0bRVc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV8ZE0%2FbtsbQRp4Km1%2FMRFQ7DfMbJhCEJSW0bRVc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1022&quot; height=&quot;527&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;올인원 검색&lt;/b&gt;기능은 기존대로 CTRL + T 단축어를 이용해서 사용가능하며, 좌/우 UI가 분리되어 왼쪽은 검색결과와, 오른쪽 부분은 해당 파일, Class, Method 등이 포함된 세부적인 내용을 같이 확인 할 수 있어서, 좀 더 정확한 확인이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips</category>
      <category>Visual Studio 2022</category>
      <category>VS2022</category>
      <category>비쥬얼스튜디오 업데이트</category>
      <category>업데이트</category>
      <category>올인원검색</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/285</guid>
      <comments>https://holjjack.tistory.com/285#entry285comment</comments>
      <pubDate>Mon, 15 May 2023 10:20:51 +0900</pubDate>
    </item>
    <item>
      <title>[IIS] PHP 업로드 용량 관련 설정하기</title>
      <link>https://holjjack.tistory.com/281</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS 에 설치한 Php 프로젝트는 대용량 파일을 올려놓는 프로젝트였는데요. 그렇다 보니 IIS 설정과 PHP 에 대용량 파일을 올리기 위한 설정을 진행해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;01. IIS 요청 필터링 설정&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB2bME/btr8xWuCGoA/ksG5hD9LlDikJKZszb3pK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB2bME/btr8xWuCGoA/ksG5hD9LlDikJKZszb3pK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB2bME/btr8xWuCGoA/ksG5hD9LlDikJKZszb3pK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB2bME%2Fbtr8xWuCGoA%2FksG5hD9LlDikJKZszb3pK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1149&quot; height=&quot;662&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb1vgf/btr8vwcoigz/UrrY4xP4S1FNtOiFQtWBR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb1vgf/btr8vwcoigz/UrrY4xP4S1FNtOiFQtWBR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb1vgf/btr8vwcoigz/UrrY4xP4S1FNtOiFQtWBR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb1vgf%2Fbtr8vwcoigz%2FUrrY4xP4S1FNtOiFQtWBR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1149&quot; height=&quot;662&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS 의 서버 설정 중, 요청 필터링 메뉴에 접근 합니다. 해당 메뉴에서 &quot;&lt;b&gt;기능 설정 편집&quot;&lt;/b&gt; 메뉴를 선택합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 설정 편집 메뉴를 클릭하면, 허용되는 최대 콘텐츠 길이 (바이트)를 편집할 수 있는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 30MB 로 설정이 되어 있는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분에 최대 바이트 길이는 4.2GB 까지입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs8MVc/btr8wPJjZcU/92gLKCJpRRrtRK1flZBd9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs8MVc/btr8wPJjZcU/92gLKCJpRRrtRK1flZBd9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs8MVc/btr8wPJjZcU/92gLKCJpRRrtRK1flZBd9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs8MVc%2Fbtr8wPJjZcU%2F92gLKCJpRRrtRK1flZBd9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;476&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 입력값의 한계값인 &lt;b&gt;4294967295&lt;/b&gt; 값을 입력합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;02. php.ini 파일 수정&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 php 를 설치한 위치는 D:\\ 쪽인데요. 해당 php 설치 폴더에 접근하게 되면,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;php.ini 파일을 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCI5R6/btr8IxwmzRs/5x1PGMQqxuXtwuDmE1UYO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCI5R6/btr8IxwmzRs/5x1PGMQqxuXtwuDmE1UYO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCI5R6/btr8IxwmzRs/5x1PGMQqxuXtwuDmE1UYO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCI5R6%2Fbtr8IxwmzRs%2F5x1PGMQqxuXtwuDmE1UYO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;839&quot; height=&quot;537&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680860302935&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 스크립트가 사용할 수 있는 최대 메모리 양
memory_limit = 4G



# PHP가 허용하는 POST 데이터의 최대 크기.
post_max_size = 4G



# 업로드된 파일의 최대 허용 크기.
upload_max_filesize = 4G



# 각 스크립트의 최대 실행 시간(초)
max_execution_time = 60000



# 단일 요청을 통해 업로드할 수 있는 최대 파일 수
max_file_uploads = 20



# 각 스크립트가 요청 데이터를 구문 분석하는 데 사용할 수 있는 최대 시간입니다.
# (-1) 제한없음
max_input_time = -1&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;해당 ini 파일을 열고, 각각에 해당하는 파일을 수정하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 IIS를 재시작 하게 되면, 적용됩니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>iis</category>
      <category>php</category>
      <category>WebServer</category>
      <category>대용량업로드설정</category>
      <category>업로드설정</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/281</guid>
      <comments>https://holjjack.tistory.com/281#entry281comment</comments>
      <pubDate>Mon, 8 May 2023 09:00:00 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] Jenkins 복구 후, git cloning remote repo 'origin' 오류 해결</title>
      <link>https://holjjack.tistory.com/283</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마 전, Jenkins를 설치 했던 장비의 노후화로 인해서 부득이 하게 장비를 변경해야 하는 이슈가 발생을 했었습니다. 그래서 Jenkins의 ThinBackup 플러그인을 이용해서 백업을 떠놓고, 새로운 장비로 OS 설치 후 복구를 진행했는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지속적으로 Error cloning remote repo 'origin' 에러가 발생해서 찾던 중, 사사로운 부분임을 발견하고 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;## Jenkins 빌드 시 에러 git 에러 발생&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3xFq9/btr9kQu06I6/ph0KFTkV1giVWWAjkyxX50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3xFq9/btr9kQu06I6/ph0KFTkV1giVWWAjkyxX50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3xFq9/btr9kQu06I6/ph0KFTkV1giVWWAjkyxX50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3xFq9%2Fbtr9kQu06I6%2Fph0KFTkV1giVWWAjkyxX50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;858&quot; height=&quot;438&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins를 하루 이틀 사용 한 것도 아닌데, 복구 후 계속해서 Error cloning remote repo 'origin' 에러가 발생하고 있었는데요. 몇 가지 가능성을 염두해 두고 테스트를 진행 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;Jenkins 서버의 git 설치 여부&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;git 서버의 접근 관련 or 계정관련 이슈&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;... 뭘까...&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시나 1, 2번의 문제는 아니였는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins가 설치되 어 있는 장비에서 git clone을 해봐도 정상 적이였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 복구 과정에 설정이 잘못되진 않았을까 하는 마음에 Tool의 Configuration을 확인해 봤습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;## Global Tool Configuration 확인&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDqDXB/btsaRxmnJgD/eJYVxHiOnlWmQ6DmIFAAXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDqDXB/btsaRxmnJgD/eJYVxHiOnlWmQ6DmIFAAXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDqDXB/btsaRxmnJgD/eJYVxHiOnlWmQ6DmIFAAXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDqDXB%2FbtsaRxmnJgD%2FeJYVxHiOnlWmQ6DmIFAAXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;330&quot; height=&quot;114&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/miXFa/btsaRv9WwbH/C04yft07LyxHNqy1xVNNT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/miXFa/btsaRv9WwbH/C04yft07LyxHNqy1xVNNT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/miXFa/btsaRv9WwbH/C04yft07LyxHNqy1xVNNT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmiXFa%2FbtsaRv9WwbH%2FC04yft07LyxHNqy1xVNNT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;374&quot; height=&quot;106&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전마다 차이가 있는 것 같지만, &lt;b&gt;Tools&lt;/b&gt; 또는 &lt;b&gt;Global Tool Configuration&lt;/b&gt; 메뉴에 접속하시면, 설치한 툴에 대한 설정을 진행 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8S1qT/btr821df5CR/M3MpLjmOjcUOrGMksz6ISk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8S1qT/btr821df5CR/M3MpLjmOjcUOrGMksz6ISk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8S1qT/btr821df5CR/M3MpLjmOjcUOrGMksz6ISk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8S1qT%2Fbtr821df5CR%2FM3MpLjmOjcUOrGMksz6ISk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;873&quot; height=&quot;515&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴에서 Git Intallations 메뉴에 접근 하니, 역시나 ! 느낌표가 발생되어 있는 상태였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치시 환경변수로 등록이 되어 있을텐데, 절대 경로를 기입해 달라는 메시지가 보이네요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 버전의 Jenkins 에는 절대경로를 기입하지 않아도 정상적으로 동작을 했는데, 정확인 이유는 찾지 못하고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 절대 경로을 기입했더니 정상적으로 동작 하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk4w9X/btr9ppCOJNh/4HDcHLOkJlu5RPOA2kFnKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk4w9X/btr9ppCOJNh/4HDcHLOkJlu5RPOA2kFnKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk4w9X/btr9ppCOJNh/4HDcHLOkJlu5RPOA2kFnKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk4w9X%2Fbtr9ppCOJNh%2F4HDcHLOkJlu5RPOA2kFnKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;466&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;절대 경로 기입했더니, 역시나! 오류가 없어지고 정상적으로 동작하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시나 같은 이슈가 발생하신다면, 위와 같은 해결 방법도 고려해보시면 좋을거 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CI</category>
      <category>CI</category>
      <category>cloning remote repo</category>
      <category>Git clone error</category>
      <category>git에러</category>
      <category>jenkins</category>
      <category>젠킨스</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/283</guid>
      <comments>https://holjjack.tistory.com/283#entry283comment</comments>
      <pubDate>Tue, 2 May 2023 15:45:56 +0900</pubDate>
    </item>
    <item>
      <title>[TIP] ping 요청 시간 만료시 방화벽 허용하는 방법</title>
      <link>https://holjjack.tistory.com/284</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분 네트워크 연결 테스트를 위해서 ping 으로 체크하는 경우가 많이 있는데요. 분명 연결은 되어 있는데 ping 으로 해당 IP 나 도메인 요청시 &quot;요청 시간이 만료되었습니다&quot; 라는 메시지를 보게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴경우에는 서버측에서 해당 포트의 방화벽이 막혀있거나, 사용안함으로 설정되어 있을 경우가 있는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해제하거나 방화벽 규칙을 등록하는 방법을 정리했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 101.628%; height: 59px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;## 요청 시간이 만료되었습니다.&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eeTR77/btsaeYMOfEe/5HeJpWDWS2uNLjqwyvNPFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eeTR77/btsaeYMOfEe/5HeJpWDWS2uNLjqwyvNPFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eeTR77/btsaeYMOfEe/5HeJpWDWS2uNLjqwyvNPFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeeTR77%2FbtsaeYMOfEe%2F5HeJpWDWS2uNLjqwyvNPFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;783&quot; height=&quot;437&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;명령 프롬프트를 이용해서 해당 IP 주소에 ping 요청을 했을때, 아래와 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&quot;요청 시간이 만료되었습니다.&quot;&amp;nbsp;&lt;/b&gt;메시지가 출력될 경우, ping요청을 받는 서버에 방화벽을 확인 할 필요가 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TwwAY/btsakhRg8sI/YzV3lkpLFOmDDZ5i2mstGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TwwAY/btsakhRg8sI/YzV3lkpLFOmDDZ5i2mstGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TwwAY/btsakhRg8sI/YzV3lkpLFOmDDZ5i2mstGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTwwAY%2FbtsakhRg8sI%2FYzV3lkpLFOmDDZ5i2mstGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;786&quot; height=&quot;682&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;고급 보안이 포함된 Windows Defender 방화벽&amp;nbsp;&lt;/b&gt;을 윈도우 검색 메뉴에 입력하시면, 위와 같이 메뉴로 바로 가실 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BD0uE/btsafehzNdS/TdvbPyHx0wdY7gmPdKjDc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BD0uE/btsafehzNdS/TdvbPyHx0wdY7gmPdKjDc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BD0uE/btsafehzNdS/TdvbPyHx0wdY7gmPdKjDc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBD0uE%2FbtsafehzNdS%2FTdvbPyHx0wdY7gmPdKjDc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;917&quot; height=&quot;530&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 제어판에서 &lt;b&gt;Windows Defender 방화벽&lt;/b&gt; 메뉴을 이용하셔도 같은 결과를 얻으실 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.116%; height: 58px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 35px;&quot;&gt;&lt;span&gt;&lt;b&gt;## 방화벽 사용으로 변경&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l5P2H/btsafPu29dN/cuJADGySoQ5NVfgKYgsGj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l5P2H/btsafPu29dN/cuJADGySoQ5NVfgKYgsGj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l5P2H/btsafPu29dN/cuJADGySoQ5NVfgKYgsGj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl5P2H%2FbtsafPu29dN%2FcuJADGySoQ5NVfgKYgsGj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;917&quot; height=&quot;530&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Windows Defender 방화벽&lt;/b&gt; 메뉴에서, &lt;b&gt;고급설정&lt;/b&gt; 메뉴를 선택합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lwSu1/btsafpwK0uv/7lVIGdIVkGCeiJa27KszW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lwSu1/btsafpwK0uv/7lVIGdIVkGCeiJa27KszW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lwSu1/btsafpwK0uv/7lVIGdIVkGCeiJa27KszW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlwSu1%2FbtsafpwK0uv%2F7lVIGdIVkGCeiJa27KszW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1135&quot; height=&quot;661&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴 선택시, 고급 보안이 포함된 Windows Defender 방화벽 메뉴가 나오는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 및 프린터 공유 (에코요청 - ICMPv4-in)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 및 프린터 공유 (에코요청 - ICMPv6-in) &lt;/b&gt;을 사용으로 변경해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pqi24/btsai54FmsE/TQEPfsIiZyVXsGyvfTLRJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pqi24/btsai54FmsE/TQEPfsIiZyVXsGyvfTLRJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pqi24/btsai54FmsE/TQEPfsIiZyVXsGyvfTLRJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPqi24%2Fbtsai54FmsE%2FTQEPfsIiZyVXsGyvfTLRJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;783&quot; height=&quot;437&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 Ping 테스트가 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.698%; height: 65px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;&lt;b&gt;## 인바운드 규칙에 없다면??&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCgPKP/btsai4EHCZK/qgsxP5pKdSOzd07mZEt1aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCgPKP/btsai4EHCZK/qgsxP5pKdSOzd07mZEt1aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCgPKP/btsai4EHCZK/qgsxP5pKdSOzd07mZEt1aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCgPKP%2Fbtsai4EHCZK%2FqgsxP5pKdSOzd07mZEt1aK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1135&quot; height=&quot;661&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴경우는 없을 것 같은데, 만약에 해당 규칙이 존재 하지 않을 경우, &lt;b&gt;인바운드 규칙 -&amp;gt; 새 규칙&amp;nbsp;&lt;/b&gt;메뉴를 이용해서 규칙을 추가 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6OPzJ/btsahJuk7GP/4fySkN18RLTpGZIS7EnhjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6OPzJ/btsahJuk7GP/4fySkN18RLTpGZIS7EnhjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6OPzJ/btsahJuk7GP/4fySkN18RLTpGZIS7EnhjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6OPzJ%2FbtsahJuk7GP%2F4fySkN18RLTpGZIS7EnhjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;539&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 규칙 메뉴를 선택시, 규칙을 추가하는 마법사가 나타나게 되는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 &lt;b&gt;미리 정의됨&lt;/b&gt; 메뉴를 선택하면됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lmXUq/btsae6RGohc/Lha4ync3zA4oLZdKL0J0g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lmXUq/btsae6RGohc/Lha4ync3zA4oLZdKL0J0g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lmXUq/btsae6RGohc/Lha4ync3zA4oLZdKL0J0g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlmXUq%2Fbtsae6RGohc%2FLha4ync3zA4oLZdKL0J0g0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;959&quot; height=&quot;644&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴 선택시,&amp;nbsp;&lt;b&gt;파일 및 프린터 공유&lt;/b&gt; 리스트가 나타나게 되고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴를 선택해 줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HNlgR/btsagOCD823/4rHo2HVHqhhWX16wZ9raxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HNlgR/btsagOCD823/4rHo2HVHqhhWX16wZ9raxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HNlgR/btsagOCD823/4rHo2HVHqhhWX16wZ9raxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHNlgR%2FbtsagOCD823%2F4rHo2HVHqhhWX16wZ9raxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;539&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면, 위에서 정의한 것처럼&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 및 프린터 공유 (에코요청 - ICMPv4-in)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 및 프린터 공유 (에코요청 - ICMPv6-in)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;를 체크박스로 선택해서 등록할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips</category>
      <category>ping</category>
      <category>Ping Test</category>
      <category>방화벽</category>
      <category>방화벽허용</category>
      <category>요청시간만료</category>
      <category>요청시간이만료되었습니다</category>
      <category>핑테스트</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/284</guid>
      <comments>https://holjjack.tistory.com/284#entry284comment</comments>
      <pubDate>Fri, 28 Apr 2023 12:35:39 +0900</pubDate>
    </item>
    <item>
      <title>[Github]  Windows Git 이용 시 Logon failed 오류 해결 방법</title>
      <link>https://holjjack.tistory.com/258</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적인 프로젝트의 경우에는 Github를 이용해서 git Repository를 구성해서 사용하고 있습니다. 한동안 사용을 못하고 있다가 오랜만에 github 프로젝트를 접근 했었는데요. Site 상에서는 로그인이 정상적으로 진행이 되는데, 저장소 pull 을 땡기면,&amp;nbsp; &lt;b&gt;failed to excute prompt script (exit code 1)&lt;/b&gt; 오류가 발생해서 한참을 검색했는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;01. 오류화면&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 메시지에 대한 내용은 아래 화면과 같았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oUiPD/btrRqGvsAS7/xqyf98PNWsvWidJCNI2500/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oUiPD/btrRqGvsAS7/xqyf98PNWsvWidJCNI2500/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oUiPD/btrRqGvsAS7/xqyf98PNWsvWidJCNI2500/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoUiPD%2FbtrRqGvsAS7%2Fxqyf98PNWsvWidJCNI2500%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;556&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1681287542874&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Logon failed, use ctrl+c to cancel basic credential prompt.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;원인을 찾아보니, 바로 Windows의 Git 버전때문이였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;꽤 오랜시간 Git의 버전을 업데이트 하지 않은 상태이긴 했었는데요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;버전이 문제가 될 지는 몰랐네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;02. Windows의 Git 버전 업데이트&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git Bash 창을 열어주고, 아래의 명령어를 입력해주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680595419841&quot; class=&quot;elixir&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$&amp;gt; git update-git-for-windows&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/db5Bit/btrRtg4PXyL/Xbbu1GBfErA1b52IHukgpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/db5Bit/btrRtg4PXyL/Xbbu1GBfErA1b52IHukgpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/db5Bit/btrRtg4PXyL/Xbbu1GBfErA1b52IHukgpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdb5Bit%2FbtrRtg4PXyL%2FXbbu1GBfErA1b52IHukgpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;370&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 명령어를 입력하게 되면, 위와 같은 화면이 보여지고, 설치하겠냐는 질문에 y 를 입력해서 진행하시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 일반적인 git 설치 화면이 나오게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cApiR9/btrRo3Scd6j/KZYaY2w6kTro1phdemBvu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cApiR9/btrRo3Scd6j/KZYaY2w6kTro1phdemBvu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cApiR9/btrRo3Scd6j/KZYaY2w6kTro1phdemBvu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcApiR9%2FbtrRo3Scd6j%2FKZYaY2w6kTro1phdemBvu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;556&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나서, 다시 pull 을 땡기면, 로그인 화면이 보여지고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 github을 이용하실 수 있습니다.!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git, SVN</category>
      <category>git</category>
      <category>git update</category>
      <category>git windows</category>
      <category>github</category>
      <category>Logon failed</category>
      <category>깃허브</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/258</guid>
      <comments>https://holjjack.tistory.com/258#entry258comment</comments>
      <pubDate>Mon, 24 Apr 2023 10:21:52 +0900</pubDate>
    </item>
    <item>
      <title>[IIS] Php 설정 시, &amp;lt;handler&amp;gt; scriptProcessor를 &amp;lt;fastCGI&amp;gt; 애플리케이션 구성에서 찾을 수 없습니다. 오류해결</title>
      <link>https://holjjack.tistory.com/280</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS 서버를 이용해서 PHP 프로젝트를 설정할 경우 아래와 같은 오류가 발생했을때, 해결하는 방법을 정리했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러메시지는 아래와 같은데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Internal&amp;nbsp;Server&amp;nbsp;Error&amp;nbsp;&amp;lt;handler&amp;gt;&amp;nbsp;scriptProcessor&amp;nbsp;could&amp;nbsp;not&amp;nbsp;be&amp;nbsp;found&amp;nbsp;in&amp;nbsp;&amp;lt;fastCGI&amp;gt;&amp;nbsp;application&amp;nbsp;configuration.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;b&gt;01. 500.0 - Internal Server Error&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sByRR/btr8IvxVkUW/kuvsllkO7z2Oh5mqpsIfmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sByRR/btr8IvxVkUW/kuvsllkO7z2Oh5mqpsIfmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sByRR/btr8IvxVkUW/kuvsllkO7z2Oh5mqpsIfmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsByRR%2Fbtr8IvxVkUW%2FkuvsllkO7z2Oh5mqpsIfmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;897&quot; height=&quot;412&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS에 PHP로 구성된 프로젝트를 설정하고 있던 도중, 위와 같은 에러메시지가 나타 났는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;&amp;lt;handler&amp;gt; scriptProcessor를 &amp;lt;fastCGI&amp;gt; 애플리케이션 구성에서 찾을 수 없습니다.&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680854307567&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;자세한 오류 정보:
모듈    FastCgiModule
알림    ExecuteRequestHandler
처리기    PHP FastCgi
오류 코드    0x80070585&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 보는 에러 메시지여서, 차근차근 확인해 봤는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;web.config 파일에 대한 이슈인 듯 해서 해당 부분에 대해서 확인 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;02. web.config 파일 확인&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUh2Ex/btr8keYyeW2/BJrECSyxOBeoKFQVhq4rk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUh2Ex/btr8keYyeW2/BJrECSyxOBeoKFQVhq4rk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUh2Ex/btr8keYyeW2/BJrECSyxOBeoKFQVhq4rk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUh2Ex%2Fbtr8keYyeW2%2FBJrECSyxOBeoKFQVhq4rk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;401&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FastCgiModule 를 설정 하는 파일에 위치가 잘못 되었을까 해서, 확인 했는데 정상적이였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 혹시나 싶어 web.config 파일을 열어봤는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCt8Lx/btr8tCEf8B7/NkjXEKyAySe5ofaayvG4g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCt8Lx/btr8tCEf8B7/NkjXEKyAySe5ofaayvG4g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCt8Lx/btr8tCEf8B7/NkjXEKyAySe5ofaayvG4g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCt8Lx%2Fbtr8tCEf8B7%2FNkjXEKyAySe5ofaayvG4g1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1104&quot; height=&quot;216&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fast CGI 경로를 설정하면서, Web.config 파일에 경로가 잘못 들어갔으며, 중복으로 두개가 들어가 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;&lt;b&gt;03. php-cgi 경로 수정&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1103&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oOhWq/btr8uUECCA9/3QQ3ZUPUTxZJUQHEaLarq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oOhWq/btr8uUECCA9/3QQ3ZUPUTxZJUQHEaLarq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oOhWq/btr8uUECCA9/3QQ3ZUPUTxZJUQHEaLarq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoOhWq%2Fbtr8uUECCA9%2F3QQ3ZUPUTxZJUQHEaLarq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1103&quot; height=&quot;172&quot; data-origin-width=&quot;1103&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복으로 들어가있던, 하나의 CGI 경로는 주석처리를 했고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 하나의 php-cgi 경로는 실제 존재하는 위치로 수정했더니, 500.0 에러 없이 정상적으로 접속이 가능했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WebServer</category>
      <category>fastcgi</category>
      <category>iis</category>
      <category>php</category>
      <category>php-cgi</category>
      <category>scriptProcessor</category>
      <category>WebServer</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/280</guid>
      <comments>https://holjjack.tistory.com/280#entry280comment</comments>
      <pubDate>Mon, 17 Apr 2023 10:15:31 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] 외부에서 Jenkins 호출하기</title>
      <link>https://holjjack.tistory.com/278</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins를 이용해서 간단한 DevOps 환경을 구성하다 보면, 권한을 부여해서 컨트롤 할 수 도 있지만, 시스템 자동화를 위해서 외부에서 API를 이용해서 Jenkins를 호출 해야 하는 상황이 발생하기 도 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간편하게 Plug In을 설치하면, 외부에서 Jenkins를 호출 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;01 Jenkins 플러그인 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dP8W0t/btr64lLyzfj/kNQ5deKKVCbqVNK8tiVK0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dP8W0t/btr64lLyzfj/kNQ5deKKVCbqVNK8tiVK0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dP8W0t/btr64lLyzfj/kNQ5deKKVCbqVNK8tiVK0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdP8W0t%2Fbtr64lLyzfj%2FkNQ5deKKVCbqVNK8tiVK0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;150&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dg9E6x/btr65rdquvR/k4CrB6wwdwmJCEf8cKppsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dg9E6x/btr65rdquvR/k4CrB6wwdwmJCEf8cKppsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dg9E6x/btr65rdquvR/k4CrB6wwdwmJCEf8cKppsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdg9E6x%2Fbtr65rdquvR%2Fk4CrB6wwdwmJCEf8cKppsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1042&quot; height=&quot;435&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부에서 Jenkins 를 호출하기 위해서는 먼저, Build Authorization Token Root Plugin 을 설치해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins 관리 &amp;gt; 플러그인 관리 메뉴에 들어가서, Available Plugins 를 선택해서 &lt;br /&gt;&quot;Build Authorization Token Root&quot; 해당 플러그인을 검색해서 설치 해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;02 빌드 유발 수정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JhDgm/btr6707Z2FG/ozbbPBOtbyqg1IXJHeaIH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JhDgm/btr6707Z2FG/ozbbPBOtbyqg1IXJHeaIH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JhDgm/btr6707Z2FG/ozbbPBOtbyqg1IXJHeaIH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJhDgm%2Fbtr6707Z2FG%2FozbbPBOtbyqg1IXJHeaIH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;772&quot; height=&quot;402&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플러그인 설치가 준비가 되었다면, 외부에서 호출을 하려는 프로젝트 관리메뉴에 접속합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간에 위치한&amp;nbsp;&lt;b&gt;빌드 유발&lt;/b&gt; 설정 부분에 &quot;빌드를 원격으로 유발&quot; 을 선택해주고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Authentication Token 을 작성해 줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면서, 원격 빌드 유발에 Sample URL 이 명시가 되어 있는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 아래와 같은 형태입니다. &amp;lt;&amp;gt; 괄호안에 내용은 각 프로젝트에 맞게 변경되어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1680244301798&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://&amp;lt;JENKINS_URL&amp;gt;/job/&amp;lt;PROJECT_NAME&amp;gt;/build?token=&amp;lt;TOKEN_NAME&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;03 외부에서 호출시 로그인 화면 출력&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/60Y5r/btr7dNTJ8Il/TW8uxu9Oq3qoJcm4FoEsp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/60Y5r/btr7dNTJ8Il/TW8uxu9Oq3qoJcm4FoEsp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/60Y5r/btr7dNTJ8Il/TW8uxu9Oq3qoJcm4FoEsp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F60Y5r%2Fbtr7dNTJ8Il%2FTW8uxu9Oq3qoJcm4FoEsp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;548&quot; height=&quot;469&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격환경에서 URL을 호출하게 되면, 위와 같이 로그인 화면이 출력되어, 원하는 Jenkins가 정상적으로 호출 되지 않는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://plugins.jenkins.io/build-token-root/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://plugins.jenkins.io/build-token-root/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1680244409719&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Build Authorization Token Root&quot; data-og-description=&quot;Lets &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; and related REST build triggers be accessed even when anonymous users cannot see Jenkins.&quot; data-og-host=&quot;plugins.jenkins.io&quot; data-og-source-url=&quot;https://plugins.jenkins.io/build-token-root/&quot; data-og-url=&quot;https://plugins.jenkins.io/build-token-root&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fSGhB/hyR6MInsy3/buTVzyuIg9vnvUGtYtEfc0/img.png?width=796&amp;amp;height=398&amp;amp;face=80_109_160_197,https://scrap.kakaocdn.net/dn/4OFxk/hyR6I626iv/wKUVfyXhJvsCxgufliUt3K/img.png?width=796&amp;amp;height=398&amp;amp;face=80_109_160_197&quot;&gt;&lt;a href=&quot;https://plugins.jenkins.io/build-token-root/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://plugins.jenkins.io/build-token-root/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fSGhB/hyR6MInsy3/buTVzyuIg9vnvUGtYtEfc0/img.png?width=796&amp;amp;height=398&amp;amp;face=80_109_160_197,https://scrap.kakaocdn.net/dn/4OFxk/hyR6I626iv/wKUVfyXhJvsCxgufliUt3K/img.png?width=796&amp;amp;height=398&amp;amp;face=80_109_160_197');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Build Authorization Token Root&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Lets &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; and related REST build triggers be accessed even when anonymous users cannot see Jenkins.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;plugins.jenkins.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 플러그인 사이트에 방문하게 되면, URL 형식이 다르다는 것을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;04 호출 URL 변경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680247552196&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://&amp;lt;JENKINS_URL&amp;gt;/buildByToken/build?job=&amp;lt;PROJECT_NAME&amp;gt;&amp;amp;token=&amp;lt;TOKEN_NAME&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호출하는 URL을 Build Authorization Token Root 에서 제공하는 방식으로 변경했더니, 별도의 로그인 없이도 Jenkins를 외부에서 호출 할 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://plugins.jenkins.io/build-token-root/&quot;&gt;https://plugins.jenkins.io/build-token-root/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CI</category>
      <category>CI</category>
      <category>jenkins</category>
      <category>원격빌드</category>
      <category>원격호출</category>
      <category>젠킨스</category>
      <category>플러그인설치</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/278</guid>
      <comments>https://holjjack.tistory.com/278#entry278comment</comments>
      <pubDate>Mon, 3 Apr 2023 10:30:28 +0900</pubDate>
    </item>
    <item>
      <title>[C#] C#에서 TLS 1.2를 사용하도록 변경하기</title>
      <link>https://holjjack.tistory.com/276</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.NET Framework 4.8 개발 환경에서, 기본적인 TLS 전송에 대한 프로토콜 버전이 1.0으로 전송된다는 얘기를 전해들었습니다. 이와 관련해서 서버에서는 1.2 를 지원하고 있어서 원활한 통신이 안되고 있다는 얘기에, 관련상황을 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;TLS란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TLS(전송&amp;nbsp;계층&amp;nbsp;보안)&amp;nbsp;프로토콜은&amp;nbsp;인터넷을&amp;nbsp;통해&amp;nbsp;전달되는&amp;nbsp;개인&amp;nbsp;정보를&amp;nbsp;보호하는&amp;nbsp;데&amp;nbsp;도움이&amp;nbsp;되도록&amp;nbsp;설계된&amp;nbsp;업계&amp;nbsp;표준입니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;TLS는&amp;nbsp;국제&amp;nbsp;표준&amp;nbsp;기구인&amp;nbsp;IETF(Internet&amp;nbsp;Engineering&amp;nbsp;Task&amp;nbsp;Force)에&amp;nbsp;의해&amp;nbsp;제안되었으며&amp;nbsp;프로토콜의&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;버전은&amp;nbsp;1999년에&amp;nbsp;발표되었습니다.&amp;nbsp;가장&amp;nbsp;최신&amp;nbsp;버전은&amp;nbsp;2018년에&amp;nbsp;발표된&amp;nbsp;TLS&amp;nbsp;1.3입니다. &lt;br /&gt;&lt;br /&gt;TLS는&amp;nbsp;Netscape가&amp;nbsp;개발한&amp;nbsp;SSL(Secure&amp;nbsp;Sockets&amp;nbsp;Layer)이라고&amp;nbsp;불리는&amp;nbsp;이전의&amp;nbsp;암호화&amp;nbsp;프로토콜에서&amp;nbsp;발전한&amp;nbsp;것입니다.&amp;nbsp; &lt;br /&gt;TLS&amp;nbsp;버전&amp;nbsp;1.0은&amp;nbsp;SSL&amp;nbsp;버전&amp;nbsp;3.1로서&amp;nbsp;개발을&amp;nbsp;시작했지만&amp;nbsp;Netscape와&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;연관이&amp;nbsp;없음을&amp;nbsp;명시하기&amp;nbsp;위해&amp;nbsp;발표&amp;nbsp;전에&amp;nbsp;프로토콜의&amp;nbsp;이름이&amp;nbsp;변경되었습니다.&amp;nbsp; &lt;br /&gt;이러한&amp;nbsp;역사&amp;nbsp;때문에&amp;nbsp;용어&amp;nbsp;TLS와&amp;nbsp;SSL은&amp;nbsp;가끔&amp;nbsp;서로&amp;nbsp;바꿔서&amp;nbsp;사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;.NET Framework TLS 1.2에 대한 지원&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱이&amp;nbsp;TLS&amp;nbsp;1.2를&amp;nbsp;협상하려면&amp;nbsp;OS&amp;nbsp;및&amp;nbsp;.NET&amp;nbsp;Framework&amp;nbsp;버전이&amp;nbsp;모두&amp;nbsp;TLS&amp;nbsp;1.2를&amp;nbsp;지원해야&amp;nbsp;합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjpe9X/btr5e6UZlYD/NqWDpdGsltf7HPaizZA9RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjpe9X/btr5e6UZlYD/NqWDpdGsltf7HPaizZA9RK/img.png&quot; data-alt=&quot;https://learn.microsoft.com/ko-kr/dotnet/framework/network-programming/tls#support-for-tls-12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjpe9X/btr5e6UZlYD/NqWDpdGsltf7HPaizZA9RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjpe9X%2Fbtr5e6UZlYD%2FNqWDpdGsltf7HPaizZA9RK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;876&quot; height=&quot;470&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://learn.microsoft.com/ko-kr/dotnet/framework/network-programming/tls#support-for-tls-12&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #161616; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;TLS 1.2의 경우 앱에서 .NET Framework 4.7 이상 버전을 대상으로 하고, WCF 앱에서 .NET Framework 4.7.1 이상 버전을 대상으로 합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;TLS 1.3의 경우 .NET Framework 4.8 이상을 대상으로 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;현 상황&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 표를 보게 되면 Windows Server 2012 상위 버전은 기본적으로 사용하도록 설정된다고 하였으나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실질적으로 테스트 했을때는 그러지 않았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 현상에 대해서 테스한 코드가 있어서 참조하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679386584757&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string url = &quot;https://www.google.com&quot;;
var req = (HttpWebRequest)WebRequest.Create(url);
req.Method = &quot;GET&quot;;
 
var resp = req.GetResponse();
var outStream = resp.GetResponseStream();
string output = &quot;&quot;;
using (StreamReader rdr = new StreamReader(outStream))
{
    output = rdr.ReadToEnd();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIEtm/btr5dd1BTeI/DMDcZho7oERTnlr0xpT4E0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIEtm/btr5dd1BTeI/DMDcZho7oERTnlr0xpT4E0/img.png&quot; data-alt=&quot;http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIEtm/btr5dd1BTeI/DMDcZho7oERTnlr0xpT4E0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIEtm%2Fbtr5dd1BTeI%2FDMDcZho7oERTnlr0xpT4E0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;617&quot; height=&quot;251&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희 코드의 개발환경은 2016 Server에 .NET Framework 4.8 이였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;TLS 1.2 활성화&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 처럼 진행했을 경우, TLS 가 1.0 버전으로 통신이 되어, 아래처럼 코드를 수정해서 테스트 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679386626850&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
 
var req = (HttpWebRequest)WebRequest.Create(url);
req.Method = &quot;GET&quot;;
...
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqGfL1/btr45lTLd6h/nkKNyKKJJdje3M9IxFQhW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqGfL1/btr45lTLd6h/nkKNyKKJJdje3M9IxFQhW1/img.png&quot; data-alt=&quot;http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqGfL1/btr45lTLd6h/nkKNyKKJJdje3M9IxFQhW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqGfL1%2Fbtr45lTLd6h%2FnkKNyKKJJdje3M9IxFQhW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;239&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(HttpWebRequest)WebRequest.Create(url) 이전에&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 프로토콜을 명시해 줌으로써, TLS 1.2 로 통신하는 모습을 확인 할 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 현상을 겪었으나, 이미지 캡쳐본이 사라져서 타 blog 의 이미지를 첨부하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;MSDN&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSDN 에서는 .NET Framework 애플리케이션이 안전하게 유지되도록 하려면, TLS 버전을 하드 코드 하면 안된다고 합니다. .NET Framework 애플리케이션에서는 OS가 지원하는 TLS 버전을 사용해야 한다고 하지만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 사용하도록 설정된다고 하는데, 실질적으로는 코드상에서 프로토콜을 명시해줬어야 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 설정이 필요한것인지는 모르겠으나, regist 파일까지 수정해가면서 하고싶진 않아서, 코드상에서 처리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/framework/network-programming/tls#support-for-tls-12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://learn.microsoft.com/ko-kr/dotnet/framework/network-programming/tls#support-for-tls-12&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/C#</category>
      <category>.NET FRAMEWORK</category>
      <category>C#</category>
      <category>tls</category>
      <category>TLS1.2</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/276</guid>
      <comments>https://holjjack.tistory.com/276#entry276comment</comments>
      <pubDate>Fri, 24 Mar 2023 15:47:02 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파이썬 입력 함수 - input()</title>
      <link>https://holjjack.tistory.com/277</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;Python을 공부 하면서 그때마다의 내용을 정리하고, 복습해보려고 합니다. 전반적으로 내용을 정리해서 작성하는게 아니여서 중복된 내용이 작성될 수 있습니다. 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;input()&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679299045165&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;input(&quot;Age : &quot;)

print(&quot;Age is &quot; + input(&quot;Age : &quot;))


//결과화면
Age : 16
Age : 16
Age is 16&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서 데이터에 대한 입력은 input() 메소드를 이용해서 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input 메소드에 문자열 형태의 prompt가 있는 경우, 줄바꿈 없이 화면에 출력됩니다. 그런 다음 입력에서 한 줄을 읽고 문자열로 변한 후 반환합니다. (자동적으로 줄바꿈 제거)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 input 으로 입력받은 데이터는 기본적으로 문자열 형태여서, 형 변환 후 이용해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;변수를 이용한 입력&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 입력에 대한 부분은 input() 메소드에 대한 기본적인 내용이며, 변수를 이용해서 입력된 내용을 사용 할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1679299431873&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;name = input(&quot;Age : &quot;)

print(&quot;Age is &quot; + name)


// 출력
Age : 16
Age is 16&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://docs.python.org/3/library/functions.html?highlight=input#input&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/Python</category>
      <category>input</category>
      <category>Python</category>
      <category>입력</category>
      <category>파이선</category>
      <category>파이썬</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/277</guid>
      <comments>https://holjjack.tistory.com/277#entry277comment</comments>
      <pubDate>Tue, 21 Mar 2023 18:05:37 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파이썬 출력 함수 - print()</title>
      <link>https://holjjack.tistory.com/274</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python을 공부 하면서 그때마다의 내용을 정리하고, 복습해보려고 합니다. 전반적으로 내용을 정리해서 작성하는게 아니여서 중복된 내용이 작성될 수 있습니다. 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;print()&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676286703618&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print ( * objects , sep = ' ' , end = '\n' , file = None , flush = False )&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;print 메소드는 위와 같은 인자를 가지고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체를 텍스트 스트림 파일 에 인쇄하며, sep 로 구분 하고 end 가 뒤에 옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sep , end , file 및 flush 는 키워드 인수로 제공되어야 합니다. &lt;br /&gt;&lt;br /&gt;키워드가 아닌 모든 인수는 str()&amp;nbsp; 같은 문자열로 변환되고 스트림에 기록되며 sep 로 구분되고 뒤에 end 가 옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sep 와 end는 모두 문자열이어야 합니다. None의 경우 기본 값의 사용을 의미합니다.&lt;br /&gt;&lt;br /&gt;file 인수는 write(string) 메서드 가 있는 객체여야 합니다. None 또는 값을 제공하지 않는 경우 sys.stdout을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인쇄된 인수는 텍스트 문자열로 변환되기 때문에 print()는 바이너리 모드 파일 객체와 함께 사용할 수 없습니다. 이를&amp;nbsp;위해&amp;nbsp;file.write(...)를&amp;nbsp;대신&amp;nbsp;사용하십시오.&lt;br /&gt;&lt;br /&gt;출력이&amp;nbsp;버퍼링되는지&amp;nbsp;여부는&amp;nbsp;일반적으로&amp;nbsp;파일에&amp;nbsp;의해&amp;nbsp;결정되지만&amp;nbsp;flush&amp;nbsp;키워드&amp;nbsp;인수가&amp;nbsp;true이면&amp;nbsp;스트림이&amp;nbsp;강제로&amp;nbsp;플러시됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 3.3에서 변경: flush 키워드 인수를 추가했습니다 .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 print() 출력 샘플&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676286748429&quot; class=&quot;stylus&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(&quot;Hello world&quot;)
print(&quot;My Name is \&quot;Jeff\&quot;&quot;)
print('My Name is &quot;Jeff&quot;')
print(&quot;My Name is 'Jeff'&quot;)
print(&quot;My Name is &quot; + &quot;Jeff&quot;)
print(1, 2, 3, 4, 5)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1676286752769&quot; class=&quot;pgsql&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hello world
My Name is &quot;Jeff&quot;
My Name is &quot;Jeff&quot;
My Name is 'Jeff'
My Name is Jeff
1 2 3 4 5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sep, end&amp;nbsp; 인자값을 이용한 출력&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676286892008&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(1, 2, 3, 4, 5, sep=&quot; : &quot;, end=&quot;,&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1676286949850&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 : 2 : 3 : 4 : 5,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간의 구분되는 문자열을 sep 인자로 설정 할 수 있으며, end 인자로는 출력의 마지막 문자열을 설정 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;file 인자값의 이용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676287202648&quot; class=&quot;livecodeserver&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;with open('test.txt', 'w') as file:
    print('Hello World!', file=file)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file 인자값을 이용할 경우, 위에서 언급한 대로, 표준출력이 아닌, 파일에 해당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;flush 인자값의 이용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 입력의 경우 buffer의 영역에 데이터가 입력이 되고, 일정양, 혹은 일정 시간동안 보관된 buffer 의 내용이 화면에 노출이 되게 됩니다. flush의 인자값을 사용할 경우, buffer에 보관하지 말고 바로 출력하라는 의미로 해석 될 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 내용을 어떻게 샘플링 할 수 있을까 했는데, 다른 블로그 분이 샘플링 한게 있어서 URL을 참조 영역에 첨부 하오니 참고 부탁드립니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676288387218&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time
for i in range(10):
    print(i, end=' ', flush=False)
    time.sleep(0.1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 인자가 False의 경우에는 한번에 화면에 출력되지만, True 일 경우에는 0 ~ 9까지 순차적으로 표기됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/functions.html?highlight=print#print&quot;&gt;https://docs.python.org/3/library/functions.html?highlight=print#print&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@janeljs/python-print-sep-end-file-flush&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@janeljs/python-print-sep-end-file-flush&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/Python</category>
      <category>print</category>
      <category>Python</category>
      <category>출력</category>
      <category>파이선</category>
      <category>파이썬</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/274</guid>
      <comments>https://holjjack.tistory.com/274#entry274comment</comments>
      <pubDate>Fri, 17 Feb 2023 10:44:06 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 데이터 타입 - Geospatial</title>
      <link>https://holjjack.tistory.com/267</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfaYUS/btrTz0yZp2O/uJcmxrDlS0PxYfk3HwMrEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfaYUS/btrTz0yZp2O/uJcmxrDlS0PxYfk3HwMrEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfaYUS/btrTz0yZp2O/uJcmxrDlS0PxYfk3HwMrEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfaYUS%2FbtrTz0yZp2O%2FuJcmxrDlS0PxYfk3HwMrEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Geospatial&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Geospatial 인덱스를 사용하면 좌표를 저장하고 검색 할 수 있다.&lt;/li&gt;
&lt;li&gt;이 데이터 구조는 주어진 반경 또는 경계상자 내에서 가까운 지점을 찾는데 유용하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 명령어&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1670930422046&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 지리공간 인덱스 위치를 추가한다 (경도, 위도)
GEOADD &amp;lt;key&amp;gt; &amp;lt;longitude&amp;gt; &amp;lt;latitude&amp;gt; &amp;lt;member&amp;gt;


-- geospatial 인덱스에서 두 맴버간 거리를 반환한다.  unit : [m, km, pt, mi] 
GEODIST &amp;lt;key&amp;gt; &amp;lt;member1&amp;gt; &amp;lt;member2&amp;gt; &amp;lt;unit&amp;gt;


-- 지정된 반경 또는 경계상자가 있는 위치를 반환 (6.2 이후)
GEOSEARCH &amp;lt;key&amp;gt; &amp;lt;startscore&amp;gt; &amp;lt;endscore&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/docs/data-types/geospatial/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://redis.io/docs/data-types/geospatial/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/commands/?group=geo&quot;&gt;https://redis.io/commands/?group=geo&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <category>geospatial</category>
      <category>redis</category>
      <category>데이터타입</category>
      <category>레디스</category>
      <category>자료구조</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/267</guid>
      <comments>https://holjjack.tistory.com/267#entry267comment</comments>
      <pubDate>Fri, 3 Feb 2023 17:54:53 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 가볍게 파이썬 학습 및 디버깅하기 좋은 툴 추천! Thonny</title>
      <link>https://holjjack.tistory.com/269</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 파이썬 하면 Pycharm 툴을 많이 사용하는데요. 가볍게 학습을 하거나, 가볍게 디버깅할때 좋은 툴이 있어서 정리해봅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Thonny&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://thonny.org/&quot;&gt;https://thonny.org/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674210483913&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Thonny, Python IDE for beginners&quot; data-og-description=&quot;Thonny 4 is dedicated to Ukraine fighting the Russian invasion.   Please support Ukraine!   Download version 4.0.1 for &amp;nbsp;&amp;bull;&amp;nbsp; &amp;nbsp;&amp;bull;&amp;nbsp; Thonny Python IDE for beginners Features Easy to get started. Thonny comes with Python 3.10 built in, so ju&quot; data-og-host=&quot;thonny.org&quot; data-og-source-url=&quot;https://thonny.org/&quot; data-og-url=&quot;https://thonny.org/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/caNn4q/hyRlzWZvhp/c1rKPqQXlzFzCzKTa4SH1K/img.png?width=250&amp;amp;height=230&amp;amp;face=0_0_250_230&quot;&gt;&lt;a href=&quot;https://thonny.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://thonny.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/caNn4q/hyRlzWZvhp/c1rKPqQXlzFzCzKTa4SH1K/img.png?width=250&amp;amp;height=230&amp;amp;face=0_0_250_230');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Thonny, Python IDE for beginners&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Thonny 4 is dedicated to Ukraine fighting the Russian invasion.   Please support Ukraine!   Download version 4.0.1 for &amp;nbsp;&amp;bull;&amp;nbsp; &amp;nbsp;&amp;bull;&amp;nbsp; Thonny Python IDE for beginners Features Easy to get started. Thonny comes with Python 3.10 built in, so ju&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;thonny.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thonny 라는 툴인데요. UI 도 복잡하지 않고, 무겁지 않아서 가볍게 학습하기 좋고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디버깅을 하면서, 바로바로 데이터의 흐름을 판단하기 좋은 툴입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;774&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgZFoc/btrVpvKqZL4/zAA3ZHDFZERyRQTEcvGFw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgZFoc/btrVpvKqZL4/zAA3ZHDFZERyRQTEcvGFw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgZFoc/btrVpvKqZL4/zAA3ZHDFZERyRQTEcvGFw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgZFoc%2FbtrVpvKqZL4%2FzAA3ZHDFZERyRQTEcvGFw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;634&quot; height=&quot;774&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;774&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다운로드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cioPHW/btrVjQ3FOGF/dxc4VNAKSxdBUlqqHdRtk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cioPHW/btrVjQ3FOGF/dxc4VNAKSxdBUlqqHdRtk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cioPHW/btrVjQ3FOGF/dxc4VNAKSxdBUlqqHdRtk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcioPHW%2FbtrVjQ3FOGF%2Fdxc4VNAKSxdBUlqqHdRtk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;658&quot; height=&quot;542&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Installer with 64-bit Python 3.10&lt;/b&gt;&lt;span style=&quot;background-color: #fafafa; color: #000000;&quot;&gt;, requires 64-bit Windows 8.1 / 10 / 11&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/thonny/thonny/releases/download/v4.0.1/thonny-4.0.1.exe&quot;&gt;thonny-4.0.1.exe (20.4 MB)&lt;/a&gt;&lt;span style=&quot;background-color: #fafafa; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lArr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;recommended for you&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 윈도우 환경이여서, 해당 파일을 다운받아서 설치하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MQwUt/btrVpZR4pSh/u9FGmsDOh6kD9A15cXEtpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MQwUt/btrVpZR4pSh/u9FGmsDOh6kD9A15cXEtpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MQwUt/btrVpZR4pSh/u9FGmsDOh6kD9A15cXEtpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMQwUt%2FbtrVpZR4pSh%2Fu9FGmsDOh6kD9A15cXEtpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;392&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m2MHc/btrVqfN3TKe/9yUNoFicYYekZcNFErR3nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m2MHc/btrVqfN3TKe/9yUNoFicYYekZcNFErR3nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m2MHc/btrVqfN3TKe/9yUNoFicYYekZcNFErR3nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm2MHc%2FbtrVqfN3TKe%2F9yUNoFicYYekZcNFErR3nk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;392&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ay7C/btrVoFGPhoQ/akeqXjkQote8BZnuFElBBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ay7C/btrVoFGPhoQ/akeqXjkQote8BZnuFElBBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ay7C/btrVoFGPhoQ/akeqXjkQote8BZnuFElBBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ay7C%2FbtrVoFGPhoQ%2FakeqXjkQote8BZnuFElBBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;392&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qqVvh/btrVmfV7fF5/iHRoEG3Ul0kK22SwnhxQk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qqVvh/btrVmfV7fF5/iHRoEG3Ul0kK22SwnhxQk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qqVvh/btrVmfV7fF5/iHRoEG3Ul0kK22SwnhxQk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqqVvh%2FbtrVmfV7fF5%2FiHRoEG3Ul0kK22SwnhxQk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;392&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWmg2f/btrVkWvHv6b/lOrheLjaURmX9V2u1Gjlz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWmg2f/btrVkWvHv6b/lOrheLjaURmX9V2u1Gjlz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWmg2f/btrVkWvHv6b/lOrheLjaURmX9V2u1Gjlz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWmg2f%2FbtrVkWvHv6b%2FlOrheLjaURmX9V2u1Gjlz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;566&quot; height=&quot;292&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치하는 과정이 어렵지 않아서, 캡쳐 화면만 첨부합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇을 준비해야 하는지만 참고하세요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;실행화면&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b27nEl/btrVk6x69St/PdI8iJW5gXBcq1AOBVptP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b27nEl/btrVk6x69St/PdI8iJW5gXBcq1AOBVptP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b27nEl/btrVk6x69St/PdI8iJW5gXBcq1AOBVptP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb27nEl%2FbtrVk6x69St%2FPdI8iJW5gXBcq1AOBVptP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;802&quot; height=&quot;702&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어플을 실행하면, 위와 같이 심플한 구성으로 되어 있고요. UI도 직관적이여서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하는데 불편함이 없으실 겁니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;디버깅&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FQs1H/btrWP9NQ9or/1PGMzUavehiPxSAQeRgSZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FQs1H/btrWP9NQ9or/1PGMzUavehiPxSAQeRgSZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FQs1H/btrWP9NQ9or/1PGMzUavehiPxSAQeRgSZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFQs1H%2FbtrWP9NQ9or%2F1PGMzUavehiPxSAQeRgSZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;776&quot; height=&quot;512&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상단에 있는 벌레(거미) 모양의 버튼을 누르면 디버깅이 진행이 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴경우, 각 단계별로 하이라이팅 되며, 실행되는 모습을 바로바로 확인 할 수 있는 것이 장점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 파이썬을 학습하시거나, 처음 프로그램 코딩에 입문하시는 분들이라면, 데이터의 흐름이 궁금하실텐데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 통해 학습이 조금 쉬워질수 있을것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D8zgd/btrWQK01wZv/q0PkaHGQ0aGWyav3odHXt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D8zgd/btrWQK01wZv/q0PkaHGQ0aGWyav3odHXt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D8zgd/btrWQK01wZv/q0PkaHGQ0aGWyav3odHXt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD8zgd%2FbtrWQK01wZv%2Fq0PkaHGQ0aGWyav3odHXt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;892&quot; height=&quot;296&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/seQ42/btrWQsM6pmA/r8GTExKLdRjbK4cm0AkKh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/seQ42/btrWQsM6pmA/r8GTExKLdRjbK4cm0AkKh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/seQ42/btrWQsM6pmA/r8GTExKLdRjbK4cm0AkKh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FseQ42%2FbtrWQsM6pmA%2Fr8GTExKLdRjbK4cm0AkKh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1008&quot; height=&quot;460&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F7 펑션키를 누르게 되면, 한 단계씩 진행되며, 데이터가 어떠한 과정으로 변하게 되는지,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떠한 모듈을 참조하게 되는지 과정을 볼 수 있으니, 초보자 분들은 한번씩 경험해 보는게 좋을거 같아요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/Python</category>
      <category>Python</category>
      <category>Thonny</category>
      <category>디버깅툴</category>
      <category>툴</category>
      <category>파이썬</category>
      <category>학습툴</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/269</guid>
      <comments>https://holjjack.tistory.com/269#entry269comment</comments>
      <pubDate>Wed, 1 Feb 2023 20:38:26 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 데이터 타입 - Sorted Set</title>
      <link>https://holjjack.tistory.com/265</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xm1zz/btrSXq7mAIR/4yAQxQdP2BVDsD8zcrr1v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xm1zz/btrSXq7mAIR/4yAQxQdP2BVDsD8zcrr1v0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xm1zz/btrSXq7mAIR/4yAQxQdP2BVDsD8zcrr1v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxm1zz%2FbtrSXq7mAIR%2F4yAQxQdP2BVDsD8zcrr1v0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Sorted Set&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연관된 점수로 정렬된 고유한 문자열의 모음이다.&lt;/li&gt;
&lt;li&gt;Set과 동일하게 Key 하나에 중복되지 않는 여러 맴버를 저장하지만, 각각의 맴버는 Score 에 연결된다.&lt;/li&gt;
&lt;li&gt;모든 데이터는 Score 값으로 정렬되며, Score가 같다면 문자열의 사전 순서로 정렬된다.&lt;/li&gt;
&lt;li&gt;정렬이 필요한 곳에 사용되며, 주로 Rank를 생성할때 이용한다.&lt;/li&gt;
&lt;li&gt;Score는 double 이기 때문에 부동 소수점에 주의 해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 명령어&lt;/h3&gt;
&lt;pre id=&quot;code_1670324619730&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--이미 value 가 있다면 score 값만 변경한다.
ZADD &amp;lt;key&amp;gt; &amp;lt;score&amp;gt; &amp;lt;value&amp;gt;


-- 해당 index 범위의 모든 value를 반환한다. 0, -1 일경우 전체
ZRANGE &amp;lt;key&amp;gt; &amp;lt;startindex&amp;gt; &amp;lt;endindex&amp;gt;


-- 해당 Score 범위의 모든 값을 반환, endsocre가 +inf 일 경우 끝까지
ZRANGEBYSCORE &amp;lt;key&amp;gt; &amp;lt;startscore&amp;gt; &amp;lt;endscore&amp;gt;


-- 오름차순 기준의 맴버 순위 제공 (index 0 부터)
ZRANK &amp;lt;key&amp;gt; &amp;lt;member&amp;gt;


-- 내림차순 기준의 맴버 순위 제공 (index 0 부터)
ZREVRANK &amp;lt;key&amp;gt; &amp;lt;member&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;성능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 정렬된 집합 연산은 O(log(n))이며 여기서&amp;nbsp;n&amp;nbsp;은 구성원 수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/commands/zrange&quot;&gt;ZRANGE&lt;/a&gt;큰 반환 값(예: 수만 이상)으로 명령을&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행할 때는 주의를 기울여야 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 명령의 시간 복잡도는 O(log(n) + m)입니다. 여기서&lt;span&gt;&amp;nbsp;&lt;/span&gt;m&lt;span&gt;&amp;nbsp;&lt;/span&gt;은 반환된 결과의 수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/docs/data-types/sorted-sets/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://redis.io/docs/data-types/sorted-sets/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/commands/?group=sorted-set&quot;&gt;https://redis.io/commands/?group=sorted-set&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <category>redis</category>
      <category>SortedSet</category>
      <category>데이터타입</category>
      <category>레디스</category>
      <category>자료구조</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/265</guid>
      <comments>https://holjjack.tistory.com/265#entry265comment</comments>
      <pubDate>Mon, 30 Jan 2023 16:43:14 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Windows 환경에 Python 설치하기!</title>
      <link>https://holjjack.tistory.com/236</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 만들어보고 싶은 프로젝트가 있어서 알아보던중, 파이썬이 적합 할 것 같아서 개인적으로 공부를 하고 있는데요. 공부하는 김에 내용을 같이 정리하고자 기록합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다 보니 두서없이 알아본 내용 중심으로 기록할 것 같습니다. 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Python 다운로드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.python.org/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.python.org/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674039260806&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download Python&quot; data-og-description=&quot;The official home of the Python Programming Language&quot; data-og-host=&quot;www.python.org&quot; data-og-source-url=&quot;https://www.python.org/downloads/&quot; data-og-url=&quot;https://www.python.org/downloads/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhFqPn/hyRkvAhbl3/mLfkWCweRQ81AqgJLkQEN1/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://www.python.org/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.python.org/downloads/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhFqPn/hyRkvAhbl3/mLfkWCweRQ81AqgJLkQEN1/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download Python&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The official home of the Python Programming Language&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 사용하려면, 파이썬을 설치해야 하는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 사이트접속해서 다운로드를 진행하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;윈도우 버전 다운로드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LkFta/btrF8SAgKWI/EwsQN2GkeJHCS7ZTB5KkA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LkFta/btrF8SAgKWI/EwsQN2GkeJHCS7ZTB5KkA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LkFta/btrF8SAgKWI/EwsQN2GkeJHCS7ZTB5KkA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLkFta%2FbtrF8SAgKWI%2FEwsQN2GkeJHCS7ZTB5KkA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;454&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;454&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 환경별로 다운로드가 가능하지만, 사이트에 접속하면, 접속한 PC환경에 따라 추천을 해주니 버튼을 클릭해서 다운로드 받으면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;설치 진행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnnvl/btrF8TMIwG9/c0oZB91LWjNKZsNTPuTPV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnnvl/btrF8TMIwG9/c0oZB91LWjNKZsNTPuTPV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnnvl/btrF8TMIwG9/c0oZB91LWjNKZsNTPuTPV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flnnvl%2FbtrF8TMIwG9%2Fc0oZB91LWjNKZsNTPuTPV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;410&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1ZNPY/btrF4gCpyh2/ghyJwpcPCmTJm3pmLIIWuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1ZNPY/btrF4gCpyh2/ghyJwpcPCmTJm3pmLIIWuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1ZNPY/btrF4gCpyh2/ghyJwpcPCmTJm3pmLIIWuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1ZNPY%2FbtrF4gCpyh2%2FghyJwpcPCmTJm3pmLIIWuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;410&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치를 하는 방법은 크게 어렵진 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 파일을 클릭하면 되며, 환경변수 등록과 관련한 체크박스만 선택하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;환경변수 등록이 안되었다면?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCwakw/btrWDP1YUxr/Jyrr09qNvJqB8uc2kSHkM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCwakw/btrWDP1YUxr/Jyrr09qNvJqB8uc2kSHkM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCwakw/btrWDP1YUxr/Jyrr09qNvJqB8uc2kSHkM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCwakw%2FbtrWDP1YUxr%2FJyrr09qNvJqB8uc2kSHkM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;479&quot; height=&quot;533&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 환경 변수를 선택하지 못했다면, 수동으로 선택하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 &amp;gt; 고급설정의 환경변수를 선택하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python (파이썬)이 설치되는 위치는 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고해주세요!&lt;/p&gt;
&lt;pre id=&quot;code_1674039882948&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Users\xxxxxx\AppData\Local\Programs\Python\Python310&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Program Language/Python</category>
      <category>Python</category>
      <category>windows</category>
      <category>윈도우</category>
      <category>윈도우파이썬설치</category>
      <category>파이썬</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/236</guid>
      <comments>https://holjjack.tistory.com/236#entry236comment</comments>
      <pubDate>Fri, 27 Jan 2023 21:06:42 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 데이터 타입 - Hash</title>
      <link>https://holjjack.tistory.com/264</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDFaA4/btrS09QkCUf/0PHD46zGV1L5zVnLeTaVlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDFaA4/btrS09QkCUf/0PHD46zGV1L5zVnLeTaVlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDFaA4/btrS09QkCUf/0PHD46zGV1L5zVnLeTaVlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDFaA4%2FbtrS09QkCUf%2F0PHD46zGV1L5zVnLeTaVlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;field-value 쌍의 컬렉션으로 구성된 레코드 유형입니다.&lt;/li&gt;
&lt;li&gt;해시를 사용하여 기본 개체를 나타내고, 카운터 그룹을 저장할 수 있습니다.&lt;/li&gt;
&lt;li&gt;key 에 대한 field 의 개수에는 제한이 없으므로, 여러 방법으로 사용이 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 명령어&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1670324394047&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 주어진 필드의 값을 반환한다. 
HGET &amp;lt;key&amp;gt; &amp;lt;field&amp;gt;
HMGET &amp;lt;key&amp;gt; &amp;lt;field1&amp;gt; &amp;lt;field2&amp;gt;


-- 해시에서 하나 이상의 필드값을 설정한다.
HSET &amp;lt;key&amp;gt; &amp;lt;field&amp;gt; &amp;lt;value&amp;gt;
MHSET &amp;lt;key&amp;gt; &amp;lt;field1&amp;gt; &amp;lt;value1&amp;gt; &amp;lt;field2&amp;gt; &amp;lt;value2&amp;gt;


-- 해당 key의 모든 field value 조회
HGETALL &amp;lt;key&amp;gt;


-- 주어진 필드의 값을 제공된 value 만큼 증가시킨다. 
HINCRBY &amp;lt;key&amp;gt; &amp;lt;field&amp;gt; &amp;lt;value&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;성능 및 제한&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 Redis 해시 명령은 O(1)입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/commands/hkeys&quot;&gt;HKEYS&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://redis.io/commands/hvals&quot;&gt;HVALS&lt;/a&gt;및 -&lt;span&gt;&amp;nbsp;&lt;/span&gt;와 같은 몇 가지 명령&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://redis.io/commands/hgetall&quot;&gt;HGETALL&lt;/a&gt;은 O(n)이며 여기서&lt;span&gt;&amp;nbsp;&lt;/span&gt;n&lt;span&gt;&amp;nbsp;&lt;/span&gt;은 필드-값 쌍의 수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 해시는 최대 4,294,967,295(2^32 - 1) 필드-값 쌍을 저장할 수 있습니다.&amp;nbsp;실제로 해시는 Redis 배포를 호스팅하는 VM의 전체 메모리에 의해서만 제한됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://redis.io/commands/?group=hash&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <category>HASH</category>
      <category>redis</category>
      <category>데이터타입</category>
      <category>레디스</category>
      <category>자료구조</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/264</guid>
      <comments>https://holjjack.tistory.com/264#entry264comment</comments>
      <pubDate>Wed, 25 Jan 2023 18:36:38 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 데이터 타입 - Set</title>
      <link>https://holjjack.tistory.com/263</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JtvyU/btrSZSIJtiW/LBv97jICyvbFJAlXS2jp5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JtvyU/btrSZSIJtiW/LBv97jICyvbFJAlXS2jp5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JtvyU/btrSZSIJtiW/LBv97jICyvbFJAlXS2jp5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJtvyU%2FbtrSZSIJtiW%2FLBv97jICyvbFJAlXS2jp5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Set&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아이템이 중복되지 않고, 정렬되지 않은 문자열의 모음입니다.&lt;/li&gt;
&lt;li&gt;고유한 항목을 추적합니다.&lt;/li&gt;
&lt;li&gt;교집합, 합집합, 차집합 연산을 레디스에서 수행 할 수 있기 때문에 객체 간의 관계를 표현할 때 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본명령어&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1670320861795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--이미 value 가 있다면 추가 하지 않음
SADD &amp;lt;key&amp;gt; &amp;lt;value1&amp;gt; &amp;lt;value2&amp;gt;


-- key 안에 value 삭제
SREM &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;


-- 모든 value를 반환
SMEMBERS &amp;lt;key&amp;gt;


-- value 가 존재하면 1, 없으면 0
SISMEMBERS &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;


-- SET의 크기를 반환
SCARD &amp;lt;key&amp;gt;


-- 두개 이상의 세트에 공통적으로 갖는 맴버를 반환
SINTER &amp;lt;key1&amp;gt; &amp;lt;key2&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;성능&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가, 제거 및 항목이 집합 구성원인지 여부를 확인하는 등 대부분의 집합 작업은 O(1)입니다.&amp;nbsp;이것은 그들이 매우 효율적이라는 것을 의미합니다.&amp;nbsp;그러나 구성원이 수십만 명 이상인 대규모 집합의 경우&amp;nbsp;&lt;a href=&quot;https://redis.io/commands/smembers&quot; data-token-index=&quot;1&quot; data-reactroot=&quot;&quot;&gt;&lt;span&gt;SMEMBERS&lt;/span&gt;&lt;/a&gt;명령을 실행할 때 주의해야 합니다.&amp;nbsp;이 명령은 O(n)이며 전체 집합을 단일 응답으로 반환합니다.&amp;nbsp;대안&amp;nbsp;&lt;a href=&quot;https://redis.io/commands/sscan&quot; data-token-index=&quot;3&quot; data-reactroot=&quot;&quot;&gt;&lt;span&gt;SSCAN&lt;/span&gt;&lt;/a&gt;으로 집합의 모든 구성원을 반복적으로 검색할 수 있는 를 고려하십시오.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://redis.io/commands/?group=set&quot;&gt;https://redis.io/commands/?group=set&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <category>redis</category>
      <category>set</category>
      <category>데이터타입</category>
      <category>레디스</category>
      <category>자료구조</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/263</guid>
      <comments>https://holjjack.tistory.com/263#entry263comment</comments>
      <pubDate>Mon, 23 Jan 2023 09:02:40 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 데이터 타입 - List</title>
      <link>https://holjjack.tistory.com/272</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdIchl/btrV5n6rDZx/j1ITFv0SCzAksEo5rsoF9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdIchl/btrV5n6rDZx/j1ITFv0SCzAksEo5rsoF9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdIchl/btrV5n6rDZx/j1ITFv0SCzAksEo5rsoF9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdIchl%2FbtrV5n6rDZx%2Fj1ITFv0SCzAksEo5rsoF9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;List&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Linked List 형태이며, Head 와 Tail 에 요소를 추가할 때 동일한 시간이 소요됩니다.&lt;/li&gt;
&lt;li&gt;특정 값이나 인덱스로 데이터를 찾거나 삭제할 수 있습니다.&lt;/li&gt;
&lt;li&gt;List는 다음과 같은 용도로 자주 사용됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stack, queue 를 구현합니다.&lt;/li&gt;
&lt;li&gt;백드라운드 작업자 시스템을 위한 대기열 관리를 구축합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pub/sub, job queue 로 활용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;Redis List의 최대 길이는 2^32 - 1(4,294,967,295) 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본명령&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1673509379816&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;LPUSH &amp;lt;key&amp;gt; &amp;lt;Element1&amp;gt; &amp;lt;Element2&amp;gt; : 앞쪽에 Push
RPUSH &amp;lt;key&amp;gt; &amp;lt;Element1&amp;gt; &amp;lt;Element2&amp;gt; : 뒤쪽에 Push


LPOP &amp;lt;key&amp;gt; : 앞쪽에서부터 꺼냄
RPOP &amp;lt;key&amp;gt; : 뒤쪽에서부터 꺼냄

LLEN &amp;lt;key&amp;gt; : List의 크기를 반환

LRANGE &amp;lt;key&amp;gt; &amp;lt;start&amp;gt; &amp;lt;end&amp;gt; : 범위 내에 값 확인 &amp;lt;end&amp;gt; -1 일 경우, 전체&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1673509409604&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;LPUSH &amp;lt;key&amp;gt; &amp;lt;Element1&amp;gt; &amp;lt;Element2&amp;gt; : 앞쪽에 Push
LPOP &amp;lt;Element&amp;gt; : 앞쪽에서부터 꺼냄


RPUSH &amp;lt;key&amp;gt; &amp;lt;Element1&amp;gt; &amp;lt;Element2&amp;gt; : 뒤쪽에 Push
RPOP &amp;lt;Element&amp;gt; : 뒤쪽에서부터 꺼냄&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;성능&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헤드 또는 테일에 액세스하는 목록 작업은 O(1)이므로 매우 효율적입니다.&amp;nbsp;그러나 목록 내의 요소를 조작하는 명령은 일반적으로 O(n)입니다.&amp;nbsp;이러한 예에는&amp;nbsp;&lt;a href=&quot;https://redis.io/commands/lindex&quot; data-token-index=&quot;1&quot;&gt;&lt;span&gt;LINDEX&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://redis.io/commands/linsert&quot; data-token-index=&quot;3&quot;&gt;&lt;span&gt;LINSERT&lt;/span&gt;&lt;/a&gt;및 가 포함&amp;nbsp;&lt;a href=&quot;https://redis.io/commands/lset&quot; data-token-index=&quot;5&quot;&gt;&lt;span&gt;LSET&lt;/span&gt;&lt;/a&gt;됩니다.&amp;nbsp;주로 큰 목록에서 작업할 때 이러한 명령을 실행할 때 주의하십시오.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://redis.io/commands/?group=list&quot;&gt;https://redis.io/commands/?group=list&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <category>list</category>
      <category>redis</category>
      <category>데이터타입</category>
      <category>레디스</category>
      <category>자료구조</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/272</guid>
      <comments>https://holjjack.tistory.com/272#entry272comment</comments>
      <pubDate>Fri, 20 Jan 2023 10:00:46 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 데이터 타입 - String</title>
      <link>https://holjjack.tistory.com/271</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM430M/btrVQod8iVw/7xCNLJj5SMtdKhoPtY7wdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM430M/btrVQod8iVw/7xCNLJj5SMtdKhoPtY7wdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM430M/btrVQod8iVw/7xCNLJj5SMtdKhoPtY7wdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM430M%2FbtrVQod8iVw%2F7xCNLJj5SMtdKhoPtY7wdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;String&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트, 직렬화된 개체 및 이진 배열을 포함하여 바이트 시퀀스를 저장합니다.&lt;/li&gt;
&lt;li&gt;문자열은 Redis 에서 가장 기본적인 데이터 유형입니다.&lt;/li&gt;
&lt;li&gt;캐싱에 자주 사용되며, 카우터를 구현하고 비트연산을 수행할 수 있는 추가 기능도 지원&lt;/li&gt;
&lt;li&gt;단일 Redis 문자열은 최대 512MB 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본명령&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1673336399517&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 단일 문자열 저장
SET &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;
GET &amp;lt;key&amp;gt;


-- 다중 문자열 저장
MSET &amp;lt;key1&amp;gt; &amp;lt;value1&amp;gt; &amp;lt;key2&amp;gt; &amp;lt;value2&amp;gt; &amp;lt;key3&amp;gt; &amp;lt;value3&amp;gt; ...
MGET &amp;lt;key1&amp;gt; &amp;lt;key2&amp;gt; &amp;lt;key3&amp;gt; ...


-- 키가 아직 존재 하지 않을 경우에만 문자열 값 저장
SETNX &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Value 가 숫자형태라면, 증감도 가능하다. INCR, INCRBY, INCRBYFLOAT&lt;/li&gt;
&lt;li&gt;atomic 하게 증감하는 커멘드이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1673336422843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 정수
INCR &amp;lt;key&amp;gt;
INCRBY &amp;lt;key&amp;gt; &amp;lt;number&amp;gt;


-- 부동소수점
INCRBYFLOAT &amp;lt;key&amp;gt; &amp;lt;number&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://redis.io/commands/?group=string&quot;&gt;https://redis.io/commands/?group=string&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <category>redis</category>
      <category>string</category>
      <category>데이터타입</category>
      <category>레디스</category>
      <category>문자열</category>
      <category>자료구조</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/271</guid>
      <comments>https://holjjack.tistory.com/271#entry271comment</comments>
      <pubDate>Wed, 18 Jan 2023 10:43:31 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 Collections 알아보기</title>
      <link>https://holjjack.tistory.com/270</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U4nhi/btrVNgmIcBe/BMx1Hsr8TCI11wOCYKtTek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U4nhi/btrVNgmIcBe/BMx1Hsr8TCI11wOCYKtTek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U4nhi/btrVNgmIcBe/BMx1Hsr8TCI11wOCYKtTek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU4nhi%2FbtrVNgmIcBe%2FBMx1Hsr8TCI11wOCYKtTek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 적으로 좀 더 정리하고자 늦은감은 있지만 Redis에 대해서 정리 중입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis 에서 가장 많이 사용되는 Collection에 대한 내용과, 데이터 타입의 종류에 대해서 간략하게 정리해보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Collection 이 중요한 이유&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 자료구조를 지원합니다.&lt;/li&gt;
&lt;li&gt;다양한 자료구조를 Key-Value 형태로 저장합니다.&lt;/li&gt;
&lt;li&gt;개발의 편의성과 난이도 제공.&lt;/li&gt;
&lt;li&gt;외부의 Collections을 잘 이용하는 것만으로 개발 시간 단축이 가능하고, 생각하지 못한 여러가지 문제를 줄여줄 수 있으므로 개발자는 비즈니스 로직에 집중할 수 있다는 큰 장점이 존재합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;주된 Redis 사용처&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 데이터 저장소로 사용되며, 각 서버의 데이터를 공유하고 싶을 때 사용됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증 및 토큰 저장소&lt;/li&gt;
&lt;li&gt;랭킹&lt;/li&gt;
&lt;li&gt;유저 세션관리&lt;/li&gt;
&lt;li&gt;Pub/Sub 을 이용한 Backplane&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Redis Collections 주의사항&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 컬렉션을 잘못 선택해서 속도 차이가 날 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Expire는 Collection의 아이템 개별로 걸리지 않고 전체 Collection에 대해서만 걸린다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;하나의 컬렉션에 너무 많은 아이템을 담지 않는 것이 좋음. 예를 들어 리스트에 요소가 100000개 들어 있다던가, hash에 key가 10000개 있다던가.&amp;nbsp;&lt;b&gt;한 컬렉션에는 아이템 n천개 수준이 좋음. 가능하면 1만개를 넘어가지 않게 하자.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;레디스 자료 구조&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자열 (Strings)&lt;/li&gt;
&lt;li&gt;리스트 (Lists)&lt;/li&gt;
&lt;li&gt;집합 (Sets)&lt;/li&gt;
&lt;li&gt;해시 (Hashes)&lt;/li&gt;
&lt;li&gt;정렬된 집합 (Sorted Sets)&lt;/li&gt;
&lt;li&gt;스트림 (Streams)&lt;/li&gt;
&lt;li&gt;지리공간 인덱스 (Geospatial Indexes)&lt;/li&gt;
&lt;li&gt;하이퍼로그로그 (HyperLogLog)&lt;/li&gt;
&lt;li&gt;비트맵 (Bitmaps)&lt;/li&gt;
&lt;li&gt;비트필드 (Bitfields)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ict-nroo.tistory.com/133&quot;&gt;https://ict-nroo.tistory.com/133&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sjh836.tistory.com/178&quot;&gt;https://sjh836.tistory.com/178&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/garimoo/개발자를-위한-레디스-튜토리얼-01-92aaa24ca8cc&quot;&gt;https://medium.com/garimoo/개발자를-위한-레디스-튜토리얼-01-92aaa24ca8cc&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <category>collections</category>
      <category>redis</category>
      <category>데이터타입</category>
      <category>레디스</category>
      <category>컬렉션</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/270</guid>
      <comments>https://holjjack.tistory.com/270#entry270comment</comments>
      <pubDate>Mon, 16 Jan 2023 10:00:09 +0900</pubDate>
    </item>
    <item>
      <title>[Redis] 레디스 개요</title>
      <link>https://holjjack.tistory.com/259</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WXh2D/btrS0LIHiqM/w46eW63vF4k8Ms6uLT4ts0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WXh2D/btrS0LIHiqM/w46eW63vF4k8Ms6uLT4ts0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WXh2D/btrS0LIHiqM/w46eW63vF4k8Ms6uLT4ts0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWXh2D%2FbtrS0LIHiqM%2Fw46eW63vF4k8Ms6uLT4ts0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;173&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 서버 환경을 구성하는 단계에서 빠지지 않는 구성중에 하나라고 생각이 듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 적으로 좀 더 정리하고자 늦은감은 있지만 Redis에 대해서 정리하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Redis 란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레디스는 &lt;b&gt;RE&lt;/b&gt;mote &lt;b&gt;DI&lt;/b&gt;ctionary &lt;b&gt;S&lt;/b&gt;erver 를 나타내는 약자로서, 2009년 살바토르 산필리포(Salvatore Sanfilippo)가 C언어로 레디스를 개발했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Key-Value 형식의 고성능의 In-memory 데이터베이스로서, 모든 데이터를 메모리에 저장하기 때문에 읽기와 쓰기 명령이 매우 빠른 장점을 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2015년부터 Redis Labs이 지원하고 있으며, 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개방형 소스 (BSD 라이선스) 를 따른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Redis의 주요 특징&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디스크가 아닌 메모리 기반의 데이터 저장소이다. (In-Memory Data Structure Store)&lt;/li&gt;
&lt;li&gt;레디스는 싱글 스레드로 동작한다.&lt;/li&gt;
&lt;li&gt;싱글 스레드로 동작하는 서버의 모든 자료구조는 Atomic 하기 때문에 Race Condition을 피해 데이터의 정합성을 보장하기 쉽다.&lt;/li&gt;
&lt;li&gt;레디스는 빠른 데이터 접근 속도와 데이터의 일관성 (Consistency) 를 보장하기 때문에, 캐싱과 Session 에 많이 사용된다.&lt;/li&gt;
&lt;li&gt;레디스는 데이터를 디스크에 저장 할 수 있다.&lt;/li&gt;
&lt;li&gt;레디스의 데이터 영속성 (Data Persistence)은 저장된 데이터를 바이너리 스냅샷으로 생성하거나, 시간에 결쳐 실행된 모든 커맨드를 순서대로 저장해 사람이 읽을 수 있는 파일로 생성함으로써 이루어질 수 있다. 이 두 방식은 스냅샷 (Snapshotting)과 저널링(Journaling) 이다.&lt;/li&gt;
&lt;li&gt;레디스는 키 만료 (Key Expiration)와, 트랜젝션 (Transaction), 게시/구독(publish/subscribe) 기능을 설정 할 수 있다.&lt;/li&gt;
&lt;li&gt;부하 분산에 용이한, Master / Slave (Replication) 이 가능하다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Redis의 활용&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Load Balance 개발 환경에서의 User Session 처리&lt;/li&gt;
&lt;li&gt;게임서버에서의 Ranking 처리&lt;/li&gt;
&lt;li&gt;3-Tier (Web - WAS - DB) 구조에서의 DB 성능부하를 줄여 줄 Cache 처리&lt;/li&gt;
&lt;li&gt;웹소켓 환경에서의 각 서버와의 데이터 BroadCast 및 BackPlane 처리를 위한 Redis의 Pub/Sub 기능&lt;/li&gt;
&lt;li&gt;In-Memeory 디비만을 이용한 데이터 저장소 처리&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://meetup.toast.com/posts/224&quot;&gt;https://meetup.toast.com/posts/224&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@hyeondev/Redis-란-무엇일까&quot;&gt;https://velog.io/@hyeondev/Redis-란-무엇일까&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@mu1616/레디스-Redis의-개념-특징&quot;&gt;https://velog.io/@mu1616/레디스-Redis의-개념-특징&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Redis</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/259</guid>
      <comments>https://holjjack.tistory.com/259#entry259comment</comments>
      <pubDate>Fri, 13 Jan 2023 10:27:42 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] 매개변수를 이용한 Git Tag 빌드</title>
      <link>https://holjjack.tistory.com/268</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git을 이용해서 프로젝트의 Binary 파일을 관리하고 있는데요. 이렇게 관리할 경우 이점은, 필요시에 Binary를 원하는 환경으로 롤백할 수 있다는 이점이 있습니다. 물론 Binary만 교체할 경우에 한해서 입니다.^^ 다른 것과 연결되어 있다면 같이 롤백되어야 하겠지만 간혹 유용하게 사용되고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꼭 이런 경우가 아니더라도, Tag 를 이용해서 관리가 필요한 프로젝트에 용이하게 사용할 수 있을것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Git Parameter 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 Git의 Parameter Type 을 이용하려면, Git Parameter 플러그 인 설치가 되어 있어야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주 메뉴의 Jenkins 관리 메뉴에 들어가면, 플러그인을 설치 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ3J9T/btrUTKB2rxl/j3jYAsJIovUo70ga4whSKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ3J9T/btrUTKB2rxl/j3jYAsJIovUo70ga4whSKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ3J9T/btrUTKB2rxl/j3jYAsJIovUo70ga4whSKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ3J9T%2FbtrUTKB2rxl%2Fj3jYAsJIovUo70ga4whSKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;326&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nwTrj/btrURkc5wTz/pCyfIknnkZc7n4jAxqZThK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nwTrj/btrURkc5wTz/pCyfIknnkZc7n4jAxqZThK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nwTrj/btrURkc5wTz/pCyfIknnkZc7n4jAxqZThK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnwTrj%2FbtrURkc5wTz%2FpCyfIknnkZc7n4jAxqZThK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;377&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNzozg/btrUYqvP9Gu/dOjSOhFuu1dYJc6RQ8DEOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNzozg/btrUYqvP9Gu/dOjSOhFuu1dYJc6RQ8DEOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNzozg/btrUYqvP9Gu/dOjSOhFuu1dYJc6RQ8DEOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNzozg%2FbtrUYqvP9Gu%2FdOjSOhFuu1dYJc6RQ8DEOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;908&quot; height=&quot;106&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git Parameter 를 검색하시면, 설치 여부를 확인 할 수 있으며, 없을 경우 설치 해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Jenkins 프로젝트 구성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git Parameter 가 설치 되어 있다면, 이제 프로젝트 구성시에 해당 기능을 이용할 수 있는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개변수를 이용할 경우, 해당 체크박스를 선택하면 이용할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEfgD8/btrUQbtUksY/Fr5Ucmsw43B1B3ANNIlZ90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEfgD8/btrUQbtUksY/Fr5Ucmsw43B1B3ANNIlZ90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEfgD8/btrUQbtUksY/Fr5Ucmsw43B1B3ANNIlZ90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEfgD8%2FbtrUQbtUksY%2FFr5Ucmsw43B1B3ANNIlZ90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;258&quot; height=&quot;334&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C6uP3/btrUVjjQLDh/vRYfwWmgYg541RDfPcsry1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C6uP3/btrUVjjQLDh/vRYfwWmgYg541RDfPcsry1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C6uP3/btrUVjjQLDh/vRYfwWmgYg541RDfPcsry1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC6uP3%2FbtrUVjjQLDh%2FvRYfwWmgYg541RDfPcsry1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;793&quot; height=&quot;668&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git Parameter 설정시, 변수 이름을 지정 할 수 있는데, 저의 경우는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;TAG_NAME&lt;/b&gt;&lt;/span&gt; 이라는 변수명을 이용했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한것은 &lt;b&gt;Parameter Type&lt;/b&gt; 인데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Branch, Tag, Revision 등 원하는 내용을 선택해서 사용 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 배포 목적으로 구성된 프로젝트여서, Tag 로 선택을 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Tag 를 이용한 빌드 진행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git Parameter 에 사용할 &lt;b&gt;Type&lt;/b&gt; 과 &lt;b&gt;Name&lt;/b&gt; 이 정해졌다면, &lt;b&gt;소스 코드 관리&lt;/b&gt; 메뉴에서 Git 을 선택해서 기본적인 셋팅을 진행합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2PFAa/btrUVam1otM/fK7LqJWNTAEffLQICaeSJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2PFAa/btrUVam1otM/fK7LqJWNTAEffLQICaeSJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2PFAa/btrUVam1otM/fK7LqJWNTAEffLQICaeSJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2PFAa%2FbtrUVam1otM%2FfK7LqJWNTAEffLQICaeSJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;796&quot; height=&quot;599&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ifupx/btrUYpjpYh3/bdMhYjrsi6ngN3CSK52M21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ifupx/btrUYpjpYh3/bdMhYjrsi6ngN3CSK52M21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ifupx/btrUYpjpYh3/bdMhYjrsi6ngN3CSK52M21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIfupx%2FbtrUYpjpYh3%2FbdMhYjrsi6ngN3CSK52M21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;764&quot; height=&quot;234&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한 부분은 &lt;u&gt;&lt;b&gt;Branches to Build&lt;/b&gt;&lt;/u&gt; 라는 영역인데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 Git Parameter 에서 선택한 Name 을 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;${변수명}&lt;/b&gt;&lt;/span&gt; 형태로 기입해주면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Branch 의 경우도 동일하게 셋팅하시면되요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우측에 있는 &lt;b&gt;(?)&lt;/b&gt; 버튼을 누르면, 자세한 사항이 보이니 참고하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 매개변수를 이용한 빌드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 프로젝트의 빌드 버튼을 선택할 경우, 아래와 같이 Tag 이름이 보여지게 되며, 해당 Tag를 선택 후 빌드버튼을 누를경우, Tag로 빌드가 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;269&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O1dCm/btrUTJwoonI/MdtNG5BAyx12Q4A5Ln97zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O1dCm/btrUTJwoonI/MdtNG5BAyx12Q4A5Ln97zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O1dCm/btrUTJwoonI/MdtNG5BAyx12Q4A5Ln97zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO1dCm%2FbtrUTJwoonI%2FMdtNG5BAyx12Q4A5Ln97zk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;269&quot; height=&quot;328&quot; data-origin-width=&quot;269&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CI</category>
      <category>git</category>
      <category>Git Parameter</category>
      <category>jenkins</category>
      <category>매개변수빌드</category>
      <category>젠킨스</category>
      <category>젠킨스빌드</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/268</guid>
      <comments>https://holjjack.tistory.com/268#entry268comment</comments>
      <pubDate>Wed, 11 Jan 2023 10:00:17 +0900</pubDate>
    </item>
    <item>
      <title>[gRPC] C# gRPC 서버(Service) 샘플 만들어보기</title>
      <link>https://holjjack.tistory.com/252</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcKLct/btrUV3naYgx/fM5mutlGRwKgB8p9KLyTA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcKLct/btrUV3naYgx/fM5mutlGRwKgB8p9KLyTA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcKLct/btrUV3naYgx/fM5mutlGRwKgB8p9KLyTA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcKLct%2FbtrUV3naYgx%2FfM5mutlGRwKgB8p9KLyTA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;156&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gRPC에 대한 내용을 간단하게 정리해봤으나, 실질적으로 동작하는 부분까지 확인을 직접 해보는게 좋을거 같아서 직접 프로젝트를 구성해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘의 서버는 다양한 개발환경으로 구성이 되어 있는데요. 각 서버간의 통신에 RESTFul API를 이용해서 구성하기도 하지만,&amp;nbsp; gRPC를 이용해서 보다 빠른 환경으로 구성할 수 있을 거 같네요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Service 프로젝트 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ex1h/btrOvcyx67h/RMgwWoDuXHFpie2IVBksek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ex1h/btrOvcyx67h/RMgwWoDuXHFpie2IVBksek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ex1h/btrOvcyx67h/RMgwWoDuXHFpie2IVBksek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ex1h%2FbtrOvcyx67h%2FRMgwWoDuXHFpie2IVBksek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1028&quot; height=&quot;642&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 프로젝트를 만들때, gRPC 서비스 템플릿을 이용해서 프로젝트를 생성 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLNvFX/btrOxSyx4hn/vfLFFkasAsw5DUbMKRNkwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLNvFX/btrOxSyx4hn/vfLFFkasAsw5DUbMKRNkwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLNvFX/btrOxSyx4hn/vfLFFkasAsw5DUbMKRNkwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLNvFX%2FbtrOxSyx4hn%2FvfLFFkasAsw5DUbMKRNkwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1028&quot; height=&quot;642&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 기본적인 위치 및 프로젝트 이름을 생성해서 프로젝트를 만들 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNWju/btrURPbkPTZ/KBRJY8yzxz2v3zTLxSQfK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNWju/btrURPbkPTZ/KBRJY8yzxz2v3zTLxSQfK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNWju/btrURPbkPTZ/KBRJY8yzxz2v3zTLxSQfK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNWju%2FbtrURPbkPTZ%2FKBRJY8yzxz2v3zTLxSQfK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;290&quot; height=&quot;227&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Client 프로젝트 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFl3Oy/btrOw2BXaDn/M5uziZKmNiswulva9MCki1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFl3Oy/btrOw2BXaDn/M5uziZKmNiswulva9MCki1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFl3Oy/btrOw2BXaDn/M5uziZKmNiswulva9MCki1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFl3Oy%2FbtrOw2BXaDn%2FM5uziZKmNiswulva9MCki1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1028&quot; height=&quot;642&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 프로젝트의 경우에는, 콘솔 어플리케이션 템플릿으로 생성 하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후, 아래의 내용을 참고해서 Nuget Package 를 설치해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;.proto&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일에 대한 C# 도구 지원&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;.proto&lt;/span&gt;&amp;nbsp;파일에서&amp;nbsp;C#&amp;nbsp;자산을&amp;nbsp;생성하려면&amp;nbsp;도구&amp;nbsp;패키지&amp;nbsp;Grpc.Tools가&amp;nbsp;필요합니다.&amp;nbsp;생성된&amp;nbsp;자산(파일)과&amp;nbsp;관련해서&amp;nbsp;다음&amp;nbsp;사항을&amp;nbsp;확인합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로젝트를 빌드할 때마다 필요에 따라 생성됩니다.&lt;/li&gt;
&lt;li&gt;프로젝트에 추가되거나 소스 제어에 체크 인되지 않습니다.&lt;/li&gt;
&lt;li&gt;obj&lt;span&gt;&amp;nbsp;&lt;/span&gt;디렉터리에 포함된 빌드 아티팩트입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzbNZ8/btrUN1DM2w3/T5r8LCs7PJknKOx8uMjfx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzbNZ8/btrUN1DM2w3/T5r8LCs7PJknKOx8uMjfx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzbNZ8/btrUN1DM2w3/T5r8LCs7PJknKOx8uMjfx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzbNZ8%2FbtrUN1DM2w3%2FT5r8LCs7PJknKOx8uMjfx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;303&quot; height=&quot;149&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CGoXc/btrUOQWk472/D8Fzx0g29sPD6rKFdBAhIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CGoXc/btrUOQWk472/D8Fzx0g29sPD6rKFdBAhIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CGoXc/btrUOQWk472/D8Fzx0g29sPD6rKFdBAhIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCGoXc%2FbtrUOQWk472%2FD8Fzx0g29sPD6rKFdBAhIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;888&quot; height=&quot;185&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 프로젝트의 경우에는 Grpc.AspNetCore 패키지가 포함되어 있고, 해당 패키지 안에 Grpc.Tools 에 대한 참조가 포함되어 있어서, 별도로 추가 할 필요는 없습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSkhfU/btrOxmfRwOq/BzkxjVhauDuSK7Ozpzxpi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSkhfU/btrOxmfRwOq/BzkxjVhauDuSK7Ozpzxpi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSkhfU/btrOxmfRwOq/BzkxjVhauDuSK7Ozpzxpi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSkhfU%2FbtrOxmfRwOq%2FBzkxjVhauDuSK7Ozpzxpi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;563&quot; height=&quot;183&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;183&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YiD6k/btrOvdkcVlq/vmowqAtiWPr1GtCuTXU2EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YiD6k/btrOvdkcVlq/vmowqAtiWPr1GtCuTXU2EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YiD6k/btrOvdkcVlq/vmowqAtiWPr1GtCuTXU2EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYiD6k%2FbtrOvdkcVlq%2FvmowqAtiWPr1GtCuTXU2EK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;618&quot; height=&quot;179&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/plEms/btrOtG7Z8sk/DHDlDfOvwf4zkpyuRY0Yzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/plEms/btrOtG7Z8sk/DHDlDfOvwf4zkpyuRY0Yzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/plEms/btrOtG7Z8sk/DHDlDfOvwf4zkpyuRY0Yzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FplEms%2FbtrOtG7Z8sk%2FDHDlDfOvwf4zkpyuRY0Yzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;561&quot; height=&quot;181&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 프로젝트의 경우에는 Grpc.Tools 가 따로 포함이 되어 있지 않기 때문에 Nuget.Package 에서 위 내용을 검색 후 설치해 주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665652677557&quot; class=&quot;ada&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Install-Package Grpc.Net.Client
Install-Package Google.Protobuf
Install-Package Grpc.Tools&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 패키지 관리자 콘솔에서, Install-Package 해주세요~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Client 프로토콜 파일 추가&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSyYIp/btrOw1QB5aC/k4lByVLX6BzbO48kabIHQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSyYIp/btrOw1QB5aC/k4lByVLX6BzbO48kabIHQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSyYIp/btrOw1QB5aC/k4lByVLX6BzbO48kabIHQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSyYIp%2FbtrOw1QB5aC%2Fk4lByVLX6BzbO48kabIHQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;93&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1672213511359&quot; class=&quot;thrift&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;syntax = &quot;proto3&quot;;

option csharp_namespace = &quot;GrpcGreeterClient&quot;;

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버에서 정의한 proto 파일을 클라이언트에도 정의를 해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;namespace 는 클라이언트에서 사용하도록 변경해주고요. 다른 부분은 동일하게 정의 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665652851845&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Project Sdk=&quot;Microsoft.NET.Sdk&quot;&amp;gt;

  &amp;lt;PropertyGroup&amp;gt;
    &amp;lt;OutputType&amp;gt;Exe&amp;lt;/OutputType&amp;gt;
    &amp;lt;TargetFramework&amp;gt;net5.0&amp;lt;/TargetFramework&amp;gt;
  &amp;lt;/PropertyGroup&amp;gt;

  &amp;lt;ItemGroup&amp;gt;
    &amp;lt;PackageReference Include=&quot;Google.Protobuf&quot; Version=&quot;3.21.7&quot; /&amp;gt;
    &amp;lt;PackageReference Include=&quot;Grpc.Net.Client&quot; Version=&quot;2.49.0&quot; /&amp;gt;
    &amp;lt;PackageReference Include=&quot;Grpc.Tools&quot; Version=&quot;2.49.1&quot;&amp;gt;
      &amp;lt;PrivateAssets&amp;gt;all&amp;lt;/PrivateAssets&amp;gt;
      &amp;lt;IncludeAssets&amp;gt;runtime; build; native; contentfiles; analyzers; buildtransitive&amp;lt;/IncludeAssets&amp;gt;
    &amp;lt;/PackageReference&amp;gt;

    &amp;lt;Protobuf Include=&quot;Protos\greet.proto&quot; GrpcServices=&quot;Client&quot; /&amp;gt;
    
  &amp;lt;/ItemGroup&amp;gt;

&amp;lt;/Project&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;Client에서 생성한 파일은&amp;nbsp; 빌드에 포함되지 않다보니, 추가적으로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;프로젝트를 마우스 오른쪽 단추로 클릭하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;프로젝트 파일 편집&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;을 선택합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;해당 파일을 Protobuf 속성을 사용해서 Include 해줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라이언트 코드 추가&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1665734638979&quot; class=&quot;routeros&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Threading.Tasks;
using Grpc.Net.Client;
using GrpcGreeterClient;

namespace GrpcSampleClient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using var channel = GrpcChannel.ForAddress(&quot;https://localhost:5001&quot;);
            var client = new Greeter.GreeterClient(channel);
            var reply = await client.SayHelloAsync(
                              new HelloRequest { Name = &quot;GreeterClient&quot; });
            Console.WriteLine(&quot;Greeting: &quot; + reply.Message);
            Console.WriteLine(&quot;Press any key to exit...&quot;);
            Console.ReadKey();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 코드는, gRPC 서버에 SayHello Method를 호출하도록 구성하였으며, Request 로 &quot;GreeterClient&quot; 를 인자로 넘기도록 구성된 샘플 코드를 사용하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Response 로 받은 내용을 찍어주는 심플한 코드입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;서버 코드 추가&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1665734671474&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;syntax = &quot;proto3&quot;;

option csharp_namespace = &quot;GrpcSampleService&quot;;

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버쪽 proto 파일입니다. namespace를 제외하고는 동일합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665734661305&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using Grpc.Core;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GrpcSampleService
{
    public class GreeterService : Greeter.GreeterBase
    {
        private readonly ILogger&amp;lt;GreeterService&amp;gt; _logger;
        public GreeterService(ILogger&amp;lt;GreeterService&amp;gt; logger)
        {
            _logger = logger;
        }

        public override Task&amp;lt;HelloReply&amp;gt; SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply
            {
                Message = &quot;Hello &quot; + request.Name
            });
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버쪽 코드는 샘플 예제를 참조하였으며, Request 로 들어온 이름에 &quot;Hello &quot; 텍스트를 붙여서 Response 해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;결과&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t01xq/btrOCKnhUv8/qzTV8QaZ8ihkzLM5wknbv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t01xq/btrOCKnhUv8/qzTV8QaZ8ihkzLM5wknbv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t01xq/btrOCKnhUv8/qzTV8QaZ8ihkzLM5wknbv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft01xq%2FbtrOCKnhUv8%2FqzTV8QaZ8ihkzLM5wknbv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;844&quot; height=&quot;461&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gRPC 서버를 먼저 시작해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eEi5ex/btrODftv64T/hOeXJeqwHaSHOGwRCwbFgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eEi5ex/btrODftv64T/hOeXJeqwHaSHOGwRCwbFgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eEi5ex/btrODftv64T/hOeXJeqwHaSHOGwRCwbFgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeEi5ex%2FbtrODftv64T%2FhOeXJeqwHaSHOGwRCwbFgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;733&quot; height=&quot;464&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 클라이언트를 실행했으며, 서버로 부터 받은 Response 데이터를 정상적으로 출력해주고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T6ERF/btrOC4FA94W/uYJ8KkUQC3XVodvgpuEF6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T6ERF/btrOC4FA94W/uYJ8KkUQC3XVodvgpuEF6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T6ERF/btrOC4FA94W/uYJ8KkUQC3XVodvgpuEF6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT6ERF%2FbtrOC4FA94W%2FuYJ8KkUQC3XVodvgpuEF6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;844&quot; height=&quot;461&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버쪽으로도, 요청이 들어온 Log가 정상적으로 보여지네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 샘플 코드를 이용해서, 다양하게 활용하면 좋을 거 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming</category>
      <category>C# gRPC</category>
      <category>gRCP서버</category>
      <category>gRPC</category>
      <category>gRPC서비스</category>
      <category>샘플</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/252</guid>
      <comments>https://holjjack.tistory.com/252#entry252comment</comments>
      <pubDate>Mon, 9 Jan 2023 10:00:18 +0900</pubDate>
    </item>
    <item>
      <title>[gRPC] C# 프로토콜 버퍼 사용하기</title>
      <link>https://holjjack.tistory.com/254</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEKy03/btrUIm9hiHb/lkRW30dNnVHlyYkJf1lMGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEKy03/btrUIm9hiHb/lkRW30dNnVHlyYkJf1lMGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEKy03/btrUIm9hiHb/lkRW30dNnVHlyYkJf1lMGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEKy03%2FbtrUIm9hiHb%2FlkRW30dNnVHlyYkJf1lMGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;156&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;protobuf-net 이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;protobuf-net은 .NET 코드용 계약 기반 직렬 변환기로, Google에서 설계한 &quot;프로토콜 버퍼&quot; 직렬화 형식으로 데이터를 작성합니다. 그러나 API는 Google과 매우 다르며 일반적인 .NET 패턴을 따릅니다. (사용 면에서 XmlSerializer, DataContractSerializer, 등) 표준 유형을 작성하고 특성을 사용할 수 있는 대부분의 .NET 언어에서 작동해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.proto 파일을 생성 하지 않아도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;NuGet&amp;nbsp; 패키지 다운로드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;protobuf-net 은 Nuget Package 관리자를 통해서 다운로드 받을 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 받았을때 버전은 3.1.17 이였네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled1.png&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qwlSM/btrODvcmolC/dAtWbmpkqdLotfieq2HGHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qwlSM/btrODvcmolC/dAtWbmpkqdLotfieq2HGHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qwlSM/btrODvcmolC/dAtWbmpkqdLotfieq2HGHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqwlSM%2FbtrODvcmolC%2FdAtWbmpkqdLotfieq2HGHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1100&quot; height=&quot;583&quot; data-filename=&quot;Untitled1.png&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;583&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;사용방법&lt;/h3&gt;
&lt;pre id=&quot;code_1665739575512&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[ProtoContract]
public class Account
{
    [ProtoMember(1)]
    public string UserID { get; set; }
    [ProtoMember(2)]
    public int Age { get; set; }
    public int Num { get; set; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용방법은 크게 어렵지 않았습니다.&amp;nbsp; 사용하려는 프로토콜 Class 에 ProtoContract 라는 Attribute를 선언해주고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 Property에 ProtoMember Attribute를 추가적으로 선언해주면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스는 1 번 부터 시작합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665739593583&quot; class=&quot;reasonml&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void Main(string[] args)
{
    Account account = new Account
    {
        UserID = &quot;Martin&quot;,
        Age = 1337, 
        Num = 1
    };



    //  serialize
    MemoryStream serialize = new MemoryStream();
    ProtoBuf.Serializer.Serialize&amp;lt;Account&amp;gt;(serialize, account);
    byte[] byteData = serialize.ToArray();
    Console.WriteLine($&quot;Serialize : {BitConverter.ToString(byteData)}&quot;);
    //Console.WriteLine($&quot;Json : {}&quot;)


    //  deserialize
    MemoryStream deserialize = new MemoryStream(byteData);
    Account result = ProtoBuf.Serializer.Deserialize&amp;lt;Account&amp;gt;(deserialize);
    Console.WriteLine($&quot;DeSerialize : {result.UserID}, {result.Age}, {result.Num}&quot;);


    Console.ReadLine();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bido4y/btrOCcSFDMn/y997dDAkls6tIXbOvN3WN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bido4y/btrOCcSFDMn/y997dDAkls6tIXbOvN3WN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bido4y/btrOCcSFDMn/y997dDAkls6tIXbOvN3WN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbido4y%2FbtrOCcSFDMn%2Fy997dDAkls6tIXbOvN3WN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;644&quot; height=&quot;315&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간략하게 Serialize, Deserialize 하는 방법입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;protobuf-net 을 사용해서 C# 내에서는 사용방법이 간략하네요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;참조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://reqres.tistory.com/6&quot;&gt;https://reqres.tistory.com/6&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dotnetcoretutorials.com/2022/01/13/protobuf-in-c-net-part-2-serializing-deserializing/&quot;&gt;https://dotnetcoretutorials.com/2022/01/13/protobuf-in-c-net-part-2-serializing-deserializing/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming</category>
      <category>C#</category>
      <category>gRPC</category>
      <category>protobuf-net</category>
      <category>Protocol buffer</category>
      <category>프로토콜버퍼</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/254</guid>
      <comments>https://holjjack.tistory.com/254#entry254comment</comments>
      <pubDate>Fri, 6 Jan 2023 10:00:48 +0900</pubDate>
    </item>
    <item>
      <title>[gRPC] 프로토콜 버퍼 (Protocol Buffers) 알아보기.</title>
      <link>https://holjjack.tistory.com/253</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GFEnF/btrUDifLJwp/8Vkc2L1QFhQm2nS2JvKGK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GFEnF/btrUDifLJwp/8Vkc2L1QFhQm2nS2JvKGK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GFEnF/btrUDifLJwp/8Vkc2L1QFhQm2nS2JvKGK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGFEnF%2FbtrUDifLJwp%2F8Vkc2L1QFhQm2nS2JvKGK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;156&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;들어가며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gRPC를 보다보니, gRPC는 기본적으로 프로토콜 버퍼를 함께 사용합니다. 저도 아직 실무에서 사용해본적은 없지만 이번기회에 개념을 같이 정리해보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜 버퍼는 구조화된 데이터를 직렬화하기 위한 구글에서 개발하고, 공개한 언어 중립적, 플랫폼 중립적,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확장 가능한 구조입니다. (Serialized Data Structure)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 언어를 지원하며, XML 보다 작고, 빠르고, 간단하며,&amp;nbsp;일반적으로 RESTFul API 사용시 JSON을 많이 사용하며, 이와 유사한 직렬화 데이터 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON, XML의 경우 일반 사람들이 육안으로 데이터 확인이 가능하다면, 프로토콜 버퍼의 구조는 16진수로 인코딩 하기때문에, 직접적인 확인은 불가능하다는 단점이 있지만,&amp;nbsp;데이터 구조화 를 한번 정의한 다음, 특수 생성 소스 코드를 사용하여 다양한 데이터 스트림과 다양한 언어를 사용하여 구조화된 데이터를 쉽게 쓰고 읽을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;사용범위&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로토콜 버퍼는 언어 중립적, 플랫폼 중립적, 확장 가능한 방식으로 구조화된 레코드와 같은 유형 데이터를 직렬화해야 하는 모든 상황에 이상적입니다.&lt;/li&gt;
&lt;li&gt;통신 프로토콜 정의(gRPC와 함께) 및 데이터 저장에 가장 자주 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴팩트한 데이터 스토리지&lt;/li&gt;
&lt;li&gt;빠른 구문 분석&lt;/li&gt;
&lt;li&gt;많은 프로그래밍 언어에서 사용 가능&lt;/li&gt;
&lt;li&gt;자동 생성 클래스를 통한 최적화된 기능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;16진수 형태의 byte 로 변환되기 때문에, 직관적으로 데이터를 읽기 어렵습니다.&lt;/li&gt;
&lt;li&gt;타 언어의 경우 .proto 확장자 파일이 있어야, protobuf 로 쓰여진 데이터를 읽을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;언어 간 호환성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지원되는 모든 프로그래밍 언어로 작성된 코드로 동일한 메시지를 읽을 수 있습니다.&amp;nbsp;한 플랫폼의 Java 프로그램이 한 소프트웨어 시스템에서 데이터를 캡처하고&amp;nbsp;.proto정의에 따라 직렬화한 다음 다른 플랫폼에서 실행되는 별도의 Python 응용 프로그램에서 직렬화된 데이터에서 특정 값을 추출하도록 할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C++, C#, Java, Kotlin, Objective-C, PHP, Python, Ruby&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0zWcE/btrOCxIjuzJ/ie8vOvAQl5ztfq94pOCtS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0zWcE/btrOCxIjuzJ/ie8vOvAQl5ztfq94pOCtS0/img.png&quot; data-alt=&quot;https://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0zWcE/btrOCxIjuzJ/ie8vOvAQl5ztfq94pOCtS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0zWcE%2FbtrOCxIjuzJ%2Fie8vOvAQl5ztfq94pOCtS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;230&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;적합하지 않은 경우&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로토콜 버퍼가 직렬화가 되면, 동일한 데이터여도 다양한 이진 직렬화를 가질 수 있습니다. 이진데이터를 비교해야 할 경우 다른 솔루션을 고려해야 합니다.&lt;/li&gt;
&lt;li&gt;메시지는 압축되지 않습니다. gzip으로는 압축할 수 있지만, 특수 목적 압축 알고리즘에는 적합하지 않습니다.&lt;/li&gt;
&lt;li&gt;비 객체지향 언어에서 잘 지원되지 않습니다. (언어 호환 확인 필요)&lt;/li&gt;
&lt;li&gt;공식적인 표준이 아닙니다. 표준을 따라야 하는 프로젝트에서는 부적합합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;참조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://developers.google.com/protocol-buffers/docs/overview&quot;&gt;https://developers.google.com/protocol-buffers/docs/overview&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming</category>
      <category>gRPC</category>
      <category>Protocol buffer</category>
      <category>프로토콜버퍼</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/253</guid>
      <comments>https://holjjack.tistory.com/253#entry253comment</comments>
      <pubDate>Wed, 4 Jan 2023 10:00:49 +0900</pubDate>
    </item>
    <item>
      <title>[gRPC] gRPC 알아보기</title>
      <link>https://holjjack.tistory.com/251</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9o9Cr/btrUIgH1Dh6/r9ohuv0VNiKJ7vKQg2jKsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9o9Cr/btrUIgH1Dh6/r9ohuv0VNiKJ7vKQg2jKsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9o9Cr/btrUIgH1Dh6/r9ohuv0VNiKJ7vKQg2jKsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9o9Cr%2FbtrUIgH1Dh6%2Fr9ohuv0VNiKJ7vKQg2jKsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;156&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;들어가며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Web 서버로 구성된 프로젝트에서, 서버 클라이언트간에 데이터를 전송하는 방식으로 RESTFul API 에 Json 데이터 포멧을 이용해서 많이 사용합니다. 분명한 장/단점이 있는데요. 클라이언트와의 데이터 포멧은 데이터 파악의 용이한 점으로 인해서 Json 포멧을 많이 사용하고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버끼리의 통신에도 Json 방식으로 데이터 포멧을 유지하고 있었는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 구조를 노출하지 않고 (물론 다양한 방법이 존재하지만요.), 서버간의 통신을 gRPC를 이용해서 좀더 빠른 통신을 구성해보는 것이 어떨까 해서 gRPC 에 대해 알아보기로 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;gRPC 개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gRPC는 google Remote Procedure Call 의 약자로서, 이름에서 보이듯 구글에서 만든, 모든 환경에서 실행할수 있는 최신 오픈 소스 고성능의 원격 프로시져 호출 프래임워크 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RPC는 프로세스 간에 통신을 하기 위한 프레임워크인데, 이를 구글에서 HTTP/2 기반으로 구현한 것이 gRPC 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드밸런싱, 추척, 상태확인 및 인증을 위한 플러그형 지원을 통해 데이터 센터 안밖에서 서비스를 효율적으로 연결할 수 있습니다. 또한 디바이스, 모바일 앱, 브라우저의 백앤드 서비스에 연결하기 위한 분산 컴퓨팅의 라스트 마일에도 적용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gRPC에서 클라이언트는 로컬 개체인것처럼 다른 서버 응용프로그램의 메서드를 직접 호출할 수 있으므로, 분산 응용 프로그램 및 서비스를 더 쉽게 만들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버측에서 인터페이스를 구현하고 gRPC 서버를 실행하여, 클라이언트 호출을 처리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.svg&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gj8rp/btrOw1CDJwb/ZOAbhtpD0jcoZQpIpiTJ5k/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gj8rp/btrOw1CDJwb/ZOAbhtpD0jcoZQpIpiTJ5k/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gj8rp/btrOw1CDJwb/ZOAbhtpD0jcoZQpIpiTJ5k/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGj8rp%2FbtrOw1CDJwb%2FZOAbhtpD0jcoZQpIpiTJ5k%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;552&quot; height=&quot;327&quot; data-filename=&quot;image.svg&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;프로토콜 버퍼&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 gRPC는 프로토콜 버퍼를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 proto2(현재 기본 프로토콜 버퍼 버전)를 사용할 수 있지만 proto3를 gRPC와 함께 사용하면 gRPC 지원 언어의 전체 범위를 사용할 수 있고 proto2 클라이언트와 통신하는 호환성 문제를 피할 수 있으므로 gRPC와 함께 사용하는 것이 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proto3 서버와 그 반대의 경우도 마찬가지입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;주요 사용 시나리오&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마이크로 서비스 스타일의 설계에서 폴리글랏 서비스의 효율적인 연결&lt;/li&gt;
&lt;li&gt;모바일 장비, 브라우저 클라이언트의 백엔드 서비스에 연결&lt;/li&gt;
&lt;li&gt;효율적인 클라이언트 라이브러리 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;핵심 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;11개 언어로 된 관용적 클라이언트 라이브러리&lt;/li&gt;
&lt;li&gt;간단한 서비스 정의 프레임워크로 매우 효율적입니다.&lt;/li&gt;
&lt;li&gt;http/2 기반 전송을 통한 양방향 스트리밍&lt;/li&gt;
&lt;li&gt;플러그인 형 인증, 추적, 로드밸런싱 및 상태확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;지원 언어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Language&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;OS&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Compilers / SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C/C++&lt;/td&gt;
&lt;td&gt;Linux, Mac&lt;/td&gt;
&lt;td&gt;GCC 6.3+, Clang 6+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C/C++&lt;/td&gt;
&lt;td&gt;Windows 10+&lt;/td&gt;
&lt;td&gt;Visual Studio 2017+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C#&lt;/td&gt;
&lt;td&gt;Linux, Mac&lt;/td&gt;
&lt;td&gt;.NET Core, Mono 4+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C#&lt;/td&gt;
&lt;td&gt;Windows 10+&lt;/td&gt;
&lt;td&gt;.NET Core, NET 4.5+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dart&lt;/td&gt;
&lt;td&gt;Windows, Linux, Mac&lt;/td&gt;
&lt;td&gt;Dart 2.12+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;Windows, Linux, Mac&lt;/td&gt;
&lt;td&gt;Go 1.13+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;Windows, Linux, Mac&lt;/td&gt;
&lt;td&gt;Java 8+ (KitKat+ for Android)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;td&gt;Windows, Linux, Mac&lt;/td&gt;
&lt;td&gt;Kotlin 1.3+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;Windows, Linux, Mac&lt;/td&gt;
&lt;td&gt;Node v8+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Objective-C&lt;/td&gt;
&lt;td&gt;macOS 10.10+, iOS 9.0+&lt;/td&gt;
&lt;td&gt;Xcode 12+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;Linux, Mac&lt;/td&gt;
&lt;td&gt;PHP 7.0+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Windows, Linux, Mac&lt;/td&gt;
&lt;td&gt;Python 3.5+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ruby&lt;/td&gt;
&lt;td&gt;Windows, Linux, Mac&lt;/td&gt;
&lt;td&gt;Ruby 2.3+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;참조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://narup.tistory.com/119?category=925261&quot;&gt;https://narup.tistory.com/119?category=925261&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://grpc.io/docs/what-is-grpc/introduction/&quot;&gt;https://grpc.io/docs/what-is-grpc/introduction/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming</category>
      <category>gRPC</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/251</guid>
      <comments>https://holjjack.tistory.com/251#entry251comment</comments>
      <pubDate>Mon, 2 Jan 2023 10:00:11 +0900</pubDate>
    </item>
    <item>
      <title>[Tips] Gmail SMTP 이용시, 535-5.7.8 에러 해결 방법</title>
      <link>https://holjjack.tistory.com/243</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;들어가며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사내에서 Issue Tracking System 툴로 JIRA, Redmine 을 병행해서 사용중에 있습니다. 서로 장단점이 있는 툴로서 각 직군에 맞게 사용중인데요. 2022년 06월 이후로 메일 Notification 이 발송이 안되고 있었습니다. 오랜시간 해당 부분에 대해서는 아예 잊고 있을만큼 메일 발송이 잘 되고 있었는데, 해당 년월 이후로 발송이 안되서 확인해봤습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;보안 수준이 낮은 앱!!&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://support.google.com/accounts/answer/6010255?hl=ko&quot;&gt;https://support.google.com/accounts/answer/6010255?hl=ko&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1661507895656&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;보안 수준이 낮은 앱 및 Google 계정 - Google 계정 고객센터&quot; data-og-description=&quot;도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요&quot; data-og-host=&quot;support.google.com&quot; data-og-source-url=&quot;https://support.google.com/accounts/answer/6010255?hl=ko&quot; data-og-url=&quot;https://support.google.com/accounts/answer/6010255?hl=ko&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://support.google.com/accounts/answer/6010255?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://support.google.com/accounts/answer/6010255?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;보안 수준이 낮은 앱 및 Google 계정 - Google 계정 고객센터&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;support.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRbc9i/btrKFfF79rS/xytxbZJwnK8Kk1hJqmkStK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRbc9i/btrKFfF79rS/xytxbZJwnK8Kk1hJqmkStK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRbc9i/btrKFfF79rS/xytxbZJwnK8Kk1hJqmkStK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRbc9i%2FbtrKFfF79rS%2FxytxbZJwnK8Kk1hJqmkStK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;854&quot; height=&quot;414&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엇! 언제 이런 공지가 있었을까요. 2022년 05월 30일 부터 사용자 이름과 비밀번호만 사용해서 로그인 하는 서드파티 앱을 지원 안한다니!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시기도 딱 맞아 떨어지네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글은 열심히 알렸겠지만, 메일발송과 연관이 있을거라고 생각 못하고 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;해결방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 내용을 해결 하려면, 2차 인증을 완료해서, 앱 비밀번호를 생성해서 이용하면 해결 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5B9zS/btrKF777o9Z/Co8AcxaiBWURwZF9SP3a51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5B9zS/btrKF777o9Z/Co8AcxaiBWURwZF9SP3a51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5B9zS/btrKF777o9Z/Co8AcxaiBWURwZF9SP3a51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5B9zS%2FbtrKF777o9Z%2FCo8AcxaiBWURwZF9SP3a51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;332&quot; height=&quot;332&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정관리 메뉴에 들어가면, 왼쪽에 보안메뉴를 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴를 선택해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cd2ysc/btrKGyEnlWZ/N8o9jDHHOCP0GW5g4MgaBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cd2ysc/btrKGyEnlWZ/N8o9jDHHOCP0GW5g4MgaBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cd2ysc/btrKGyEnlWZ/N8o9jDHHOCP0GW5g4MgaBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcd2ysc%2FbtrKGyEnlWZ%2FN8o9jDHHOCP0GW5g4MgaBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;849&quot; height=&quot;322&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 메뉴에 들어가면, 2단계 인증과 관련한 부분이 보이며, 해당 부분을 완료해주시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JQyZA/btrKFQFxSSF/uiFSXoQspj9aob6amXz6xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JQyZA/btrKFQFxSSF/uiFSXoQspj9aob6amXz6xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JQyZA/btrKFQFxSSF/uiFSXoQspj9aob6amXz6xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJQyZA%2FbtrKFQFxSSF%2FuiFSXoQspj9aob6amXz6xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;688&quot; height=&quot;384&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음, 앱 비밀 번호를 만들면 되는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 이미지 처럼 &quot;메일&quot;, &quot;Windows 컴퓨터&quot; 를 선택 후 생성 하면, 아래와 같이 비밀번호가 생성됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E4MiT/btrKFvu8u7O/x5UWGOzwtjYkSPhlvMiBa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E4MiT/btrKFvu8u7O/x5UWGOzwtjYkSPhlvMiBa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E4MiT/btrKFvu8u7O/x5UWGOzwtjYkSPhlvMiBa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE4MiT%2FbtrKFvu8u7O%2Fx5UWGOzwtjYkSPhlvMiBa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;657&quot; height=&quot;556&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호가 정상적으로 생성되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 비빌번호를 복사해서 사용하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1661503731689&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;email_delivery:
    delivery_method: :smtp
    smtp_settings:
      enable_starttls_auto: true
      address: &quot;smtp.gmail.com&quot;
      port: 587
      domain: &quot;smtp.gmail.com&quot;
      authentication: :plain
      user_name: &quot;*****@gmail.com&quot;
      password: &quot;******&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redmine의 경우 smtp 설정 부분에, password 에 넣어주시면, 정상적으로 메일이 발송됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips</category>
      <category>535-5.7.8</category>
      <category>535-5.7.8에러</category>
      <category>gmail</category>
      <category>Google</category>
      <category>Redmine</category>
      <category>SMTP</category>
      <category>smtp설정</category>
      <category>구글</category>
      <category>메일오류</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/243</guid>
      <comments>https://holjjack.tistory.com/243#entry243comment</comments>
      <pubDate>Mon, 29 Aug 2022 08:00:43 +0900</pubDate>
    </item>
    <item>
      <title>[Windows] PowerShell로 Hyper-V 설치 및 Windows 10 MSIX packaging 설치</title>
      <link>https://holjjack.tistory.com/241</link>
      <description>&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;들어가며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hyper-V를 사용할 일이 생겨서 예전에 설치된 Hyper-V를 실행하려고 했는데.. 포맷했다는걸 잊어버렸네요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시한번 Hyper-V 를 설치하려고 하던 중 PowerShell 로도 설치가 가능하거 같아서 정리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더불어 Windows 10 MSIX packaging 도 빠른 설치가 가능한거 같아서 같이 정리했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;Hyper-V 설치 요구사항&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 10 Enterprise, Pro 또는 Education&lt;/li&gt;
&lt;li&gt;두 번째 수준 주소 변환(SLAT)을 사용하는 64비트 프로세서.&lt;/li&gt;
&lt;li&gt;VM 모니터 모드 확장(Intel CPU의 VT-c)에 대한 CPU 지원.&lt;/li&gt;
&lt;li&gt;최소&amp;nbsp;4GB의&amp;nbsp;메모리.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;PowerShell 을 사용하여 Hyper-V 설치&lt;/h3&gt;
&lt;pre id=&quot;code_1658820134651&quot; class=&quot;pgsql&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYz9Jf/btrIbMzuqNc/JG6FCwistcHYO030FpGMZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYz9Jf/btrIbMzuqNc/JG6FCwistcHYO030FpGMZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYz9Jf/btrIbMzuqNc/JG6FCwistcHYO030FpGMZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYz9Jf%2FbtrIbMzuqNc%2FJG6FCwistcHYO030FpGMZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;884&quot; height=&quot;345&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PowerShell 을 실행 후~ 위 명령을 복사 붙여넣기 후 실행해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 아래와 같이 Hyper-v 설치 화면이 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwBJJK/btrIdx2EAEK/OPZ3NDiRx10JgpMLrLD4jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwBJJK/btrIdx2EAEK/OPZ3NDiRx10JgpMLrLD4jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwBJJK/btrIdx2EAEK/OPZ3NDiRx10JgpMLrLD4jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwBJJK%2FbtrIdx2EAEK%2FOPZ3NDiRx10JgpMLrLD4jk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;884&quot; height=&quot;345&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdqQ50/btrIfRTFDU4/KnKfHCP21RlRPD7KmDX3x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdqQ50/btrIfRTFDU4/KnKfHCP21RlRPD7KmDX3x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdqQ50/btrIfRTFDU4/KnKfHCP21RlRPD7KmDX3x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdqQ50%2FbtrIfRTFDU4%2FKnKfHCP21RlRPD7KmDX3x1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;884&quot; height=&quot;345&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 모두 완료가 되면, 컴퓨터 재시작 메시지가 보여지면서,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y 를 눌러 PC를 재시작 해주시면 설치가 완료됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재시작 이후, 별도의 창은 실행되지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;MSIX란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSIX는 모든 Windows 앱에 최신 패키징 환경을 제공하는 Windows 앱 패키징 형식입니다. MSIX 패키지 형식은 Win32, WPF 및 Windows Forms 앱에 새로운 최신 패키지 및 배포 기능을 사용할 수 있도록 하며, 기존 앱 패키지 및/또는 설치 파일의 기능도 유지합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSIX를 사용하면 엔터프라이즈를 최신 상태를 유지하고, 애플리케이션도 항상 최신 상태로 유지할 수 있습니다. 이를 통해 IT 전문가와 개발자는 사용자 중심의 솔루션을 제공할 수 있으며, 다시 패키징할 필요성이 줄어들어 애플리케이션의 소유 비용을 절감할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/windows/msix/overview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/ko-kr/windows/msix/overview&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658820517433&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MSIX란? - MSIX&quot; data-og-description=&quot;이 문서에서는 모든 Windows 앱에 대한 최신 패키징 환경인 MSIX 패키징 형식의 기본 사항을 소개합니다.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/windows/msix/overview&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/windows/msix/overview&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/suJ44/hyPc6QEAOt/e2812y2fVQnGOPTZuEfxxk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bIJDCH/hyPdgMtzkb/Hk8zfIwBZsntwyIVlyMi6k/img.png?width=225&amp;amp;height=376&amp;amp;face=0_0_225_376&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/windows/msix/overview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/windows/msix/overview&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/suJ44/hyPc6QEAOt/e2812y2fVQnGOPTZuEfxxk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bIJDCH/hyPdgMtzkb/Hk8zfIwBZsntwyIVlyMi6k/img.png?width=225&amp;amp;height=376&amp;amp;face=0_0_225_376');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MSIX란? - MSIX&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 문서에서는 모든 Windows 앱에 대한 최신 패키징 환경인 MSIX 패키징 형식의 기본 사항을 소개합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;Windows 10 MSIX Packaging 설치&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnpY6k/btrIejQWZvG/gpAjb1HOuxnbBJRsslyNB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnpY6k/btrIejQWZvG/gpAjb1HOuxnbBJRsslyNB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnpY6k/btrIejQWZvG/gpAjb1HOuxnbBJRsslyNB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnpY6k%2FbtrIejQWZvG%2FgpAjb1HOuxnbBJRsslyNB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;778&quot; height=&quot;633&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1658808582.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSuuZz/btrIfSlsKp5/aJJ1KKDsHB0nHpxJMzTo80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSuuZz/btrIfSlsKp5/aJJ1KKDsHB0nHpxJMzTo80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSuuZz/btrIfSlsKp5/aJJ1KKDsHB0nHpxJMzTo80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSuuZz%2FbtrIfSlsKp5%2FaJJ1KKDsHB0nHpxJMzTo80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1092&quot; height=&quot;713&quot; data-filename=&quot;1658808582.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Hyper-v 관리자에서 빨리 만들기를 선택하면, 아래와 같이 가상 컴퓨터 만들기 창이 생성이 되는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상단에 Windows 10 MSIX packaging 을 설치할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu Linux 도 설치가 가능한거 같네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1658808594.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X6PkK/btrIdxCmUta/6TXpaqVMMDuJt23pRMU4M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X6PkK/btrIdxCmUta/6TXpaqVMMDuJt23pRMU4M1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X6PkK/btrIdxCmUta/6TXpaqVMMDuJt23pRMU4M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX6PkK%2FbtrIdxCmUta%2F6TXpaqVMMDuJt23pRMU4M1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;822&quot; height=&quot;514&quot; data-filename=&quot;1658808594.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상 컴퓨터 만들기 버튼을 선택하면, 아래와 같이 이미지를 다운로드 하고, 설치까지 진행을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특별히 어려운 점 없이 진행이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1658808607.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mvkTB/btrIio5d72K/4UwgNNrSI6z1IF1Ubk8Nh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mvkTB/btrIio5d72K/4UwgNNrSI6z1IF1Ubk8Nh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mvkTB/btrIio5d72K/4UwgNNrSI6z1IF1Ubk8Nh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmvkTB%2FbtrIio5d72K%2F4UwgNNrSI6z1IF1Ubk8Nh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;822&quot; height=&quot;497&quot; data-filename=&quot;1658808607.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1658808956.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VtDv0/btrIhj4cSBo/4M7ZGHhBEiBKLtX0FO4zzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VtDv0/btrIhj4cSBo/4M7ZGHhBEiBKLtX0FO4zzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VtDv0/btrIhj4cSBo/4M7ZGHhBEiBKLtX0FO4zzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVtDv0%2FbtrIhj4cSBo%2F4M7ZGHhBEiBKLtX0FO4zzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;822&quot; height=&quot;481&quot; data-filename=&quot;1658808956.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;481&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1658808975.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDiFHu/btrIio5d71i/vBUczXzMdCZHZCWc0lQIeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDiFHu/btrIio5d71i/vBUczXzMdCZHZCWc0lQIeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDiFHu/btrIio5d71i/vBUczXzMdCZHZCWc0lQIeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDiFHu%2FbtrIio5d71i%2FvBUczXzMdCZHZCWc0lQIeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;642&quot; height=&quot;504&quot; data-filename=&quot;1658808975.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료가 되면, 해당 서버를 실행해주면 Windows 셋팅 화면이 나오며, 온라인 계정이 없으신 분은 로컬계정으로 생성이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적인 내용이 있다면! 이미지 다운로드시 언어팩이 설치가 되지는 않아서 영문 윈도우 화면으로 설정을 진행하셔야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>OS/Windows</category>
      <category>Hyper-V</category>
      <category>MSIX</category>
      <category>PowerShell</category>
      <category>윈도우설치</category>
      <category>파워쉘</category>
      <category>하이퍼v</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/241</guid>
      <comments>https://holjjack.tistory.com/241#entry241comment</comments>
      <pubDate>Mon, 1 Aug 2022 10:00:58 +0900</pubDate>
    </item>
    <item>
      <title>[SignalR 2.0] SignalR 성능 튜닝하기</title>
      <link>https://holjjack.tistory.com/222</link>
      <description>&lt;h3 class=&quot;red&quot; data-ke-size=&quot;size23&quot;&gt;들어가며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음으로 SignalR 을 이용해서 채팅 서버를 구현한 것이라, 이를 위해 성능을 검증해야 하는 상황이 생겼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어찌보면 당연한 프로세스 였는데요.&amp;nbsp;저희가 진행한 성능검증은, 1대의 IIS 서버에 어느정도의 Request를 감당할 수 있는지, 최대 동접인원을 기준으로 한대의 서버에 몇명의 유저를 감당할 수 있는지 등등 이였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;진행하는 과정에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;SignalR의 성능 튜닝을 아래와 같이 진행하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;※ SignalR 2.x 버전의 IIS 환경임을 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;green&quot; data-ke-size=&quot;size23&quot;&gt;IIS 구성 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SignalR의 성능 튜닝을 위해서는, 어플리케이션당 최대 동시 요청자 수를 늘립니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1AFU4/btrFzOrYdl8/qA2INCgFKKtvgEDvXF6CU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1AFU4/btrFzOrYdl8/qA2INCgFKKtvgEDvXF6CU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1AFU4/btrFzOrYdl8/qA2INCgFKKtvgEDvXF6CU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1AFU4%2FbtrFzOrYdl8%2FqA2INCgFKKtvgEDvXF6CU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;186&quot; height=&quot;115&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IIS 관리자에서 SignalR로 설정되어 있는 사이트 선택시, 하단부에 구성편집기 메뉴를 선택하면, 아래와 같은 화면이 보여집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLbJli/btrFyRP41D4/f4Fn8W8Tj7Hnav7Kkz6kZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLbJli/btrFyRP41D4/f4Fn8W8Tj7Hnav7Kkz6kZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLbJli/btrFyRP41D4/f4Fn8W8Tj7Hnav7Kkz6kZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLbJli%2FbtrFyRP41D4%2Ff4Fn8W8Tj7Hnav7Kkz6kZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;397&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메뉴에서 구성편집기의 system.webServer/serverRuntime 섹션의 &lt;b&gt;appConcurrentRequestLimit&amp;nbsp;&lt;/b&gt;수를 기본값 5000 에서 20,000 으로 수정하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 class=&quot;blue&quot; data-ke-size=&quot;size23&quot;&gt;ASP.NET Configuration 의 CPU당 최대 동시요청 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로&amp;nbsp; ASP.NET 4.0 의 최대 동시 연결 수는 CPU당 5000 으로 설정되어 있습니다. 더 많은 동시 연결이 필요할 경우 설정값을 늘려야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당되는 키 이름은 maxConcurrentRequestPerCPU 이며,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Aspnet.config&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 수정하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 각 설치 환경 (32비트, 64비트) 따라 폴더위치는 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVCU6o/btrFzwkFyQ3/U6AVkBKLtEsJUpeo6ObBzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVCU6o/btrFzwkFyQ3/U6AVkBKLtEsJUpeo6ObBzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVCU6o/btrFzwkFyQ3/U6AVkBKLtEsJUpeo6ObBzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVCU6o%2FbtrFzwkFyQ3%2FU6AVkBKLtEsJUpeo6ObBzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;797&quot; height=&quot;575&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Aspnet.config&lt;/p&gt;
&lt;pre id=&quot;code_1655963218555&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;configuration&amp;gt;
    &amp;lt;runtime&amp;gt;
        &amp;lt;legacyUnhandledExceptionPolicy enabled=&quot;false&quot; /&amp;gt;
        &amp;lt;legacyImpersonationPolicy enabled=&quot;true&quot;/&amp;gt;
        &amp;lt;alwaysFlowImpersonationPolicy enabled=&quot;false&quot;/&amp;gt;
        &amp;lt;SymbolReadingPolicy enabled=&quot;1&quot; /&amp;gt;
        &amp;lt;shadowCopyVerifyByTimestamp enabled=&quot;true&quot;/&amp;gt;
    &amp;lt;/runtime&amp;gt;
    &amp;lt;startup useLegacyV2RuntimeActivationPolicy=&quot;true&quot; /&amp;gt;
&amp;lt;/configuration&amp;gt;


&amp;lt;!-- 위 내용을 아래와 같이 수정합니다. --&amp;gt;


&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;configuration&amp;gt;
    &amp;lt;runtime&amp;gt;
        &amp;lt;legacyUnhandledExceptionPolicy enabled=&quot;false&quot; /&amp;gt;
        &amp;lt;legacyImpersonationPolicy enabled=&quot;true&quot;/&amp;gt;
        &amp;lt;alwaysFlowImpersonationPolicy enabled=&quot;false&quot;/&amp;gt;
        &amp;lt;SymbolReadingPolicy enabled=&quot;1&quot; /&amp;gt;
        &amp;lt;shadowCopyVerifyByTimestamp enabled=&quot;true&quot;/&amp;gt;
    &amp;lt;/runtime&amp;gt;
    &amp;lt;startup useLegacyV2RuntimeActivationPolicy=&quot;true&quot; /&amp;gt;
    
    &amp;lt;!--추가내용--&amp;gt;
    &amp;lt;system.web&amp;gt;
        &amp;lt;applicationPool maxConcurrentRequestsPerCPU=&quot;20000&quot; /&amp;gt;
    &amp;lt;/system.web&amp;gt;
    
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ASP.NET Configuration 의 요청 대기열 제한 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 연결 량이 maxConcurrentRequestsPerCPU 설정을 초과하면, ASP.NET 은 대기열을 사용하여 요청을 조절합니다. 대기열 크기를 제어하려면, 아래의 설정을 변경해 줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(총 연결량은 maxConcurrentRequestsPerCPU * 논리 프로세스 수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일의 processModel 의 속성을 변경합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B7zw9/btrFvVssd2x/5FVGXk7sAKZOLnixhRBqNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B7zw9/btrFvVssd2x/5FVGXk7sAKZOLnixhRBqNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B7zw9/btrFvVssd2x/5FVGXk7sAKZOLnixhRBqNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB7zw9%2FbtrFvVssd2x%2F5FVGXk7sAKZOLnixhRBqNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;851&quot; height=&quot;478&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/20Y3f/btrFzF2RbhR/KrMmYH6HeLE7KJ4hPWrj6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/20Y3f/btrFzF2RbhR/KrMmYH6HeLE7KJ4hPWrj6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/20Y3f/btrFzF2RbhR/KrMmYH6HeLE7KJ4hPWrj6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F20Y3f%2FbtrFzF2RbhR%2FKrMmYH6HeLE7KJ4hPWrj6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;769&quot; height=&quot;374&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;machine.config&lt;/p&gt;
&lt;pre id=&quot;code_1655963337193&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;system.web&amp;gt;
        &amp;lt;processModel autoConfig=&quot;true&quot;/&amp;gt;

        &amp;lt;httpHandlers/&amp;gt;
        
        
&amp;lt;!-- 위 내용을 아래와 같이 수정 --&amp;gt;

        
&amp;lt;system.web&amp;gt;
        &amp;lt;processModel autoConfig=&quot;false&quot; requestQueueLimit=&quot;250000&quot; /&amp;gt;

        &amp;lt;httpHandlers/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와같이 SignalR의 성능 튜닝을 진행하였으며, 자세한 성능카운트 설정 관련해선 참조링크를 참조해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SignalR/SignalR/wiki/Performance&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SignalR/SignalR/wiki/Performance&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #9d9d9d;&quot;&gt;END&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SignalR</category>
      <category>C#</category>
      <category>iis</category>
      <category>Performance</category>
      <category>SignalR</category>
      <category>SignalR2.0</category>
      <category>websocket</category>
      <category>성능튜닝</category>
      <category>채팅</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/222</guid>
      <comments>https://holjjack.tistory.com/222#entry222comment</comments>
      <pubDate>Mon, 27 Jun 2022 10:00:59 +0900</pubDate>
    </item>
    <item>
      <title>[SignalR 2.0] SignalR 서버의 스케일 아웃을 위한 Redis Backplane</title>
      <link>https://holjjack.tistory.com/231</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot; class=&quot;red&quot;&gt;들어가며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일 서버로 구성을 하게 된다면, 여러뭐로 고민할 내용이 줄어들지만 현실은 그렇지 않죠. &lt;br /&gt;다양한&amp;nbsp;failover&amp;nbsp;상황을&amp;nbsp;고려해야&amp;nbsp;하고,&amp;nbsp;부하분산&amp;nbsp;상황에&amp;nbsp;대한&amp;nbsp;상황도&amp;nbsp;같이&amp;nbsp;고려해야&amp;nbsp;합니다.&amp;nbsp; &lt;br /&gt;SignalR을&amp;nbsp;이용하여&amp;nbsp;채팅서버를&amp;nbsp;구성할&amp;nbsp;때에도&amp;nbsp;위와같은&amp;nbsp;상황을&amp;nbsp;고려해서&amp;nbsp;설계를&amp;nbsp;진행해야&amp;nbsp;하는데요.&amp;nbsp; &lt;br /&gt;IIS&amp;nbsp;환경에서&amp;nbsp;웹서버는&amp;nbsp;스케일&amp;nbsp;아웃,&amp;nbsp;그리고&amp;nbsp;그&amp;nbsp;안에서&amp;nbsp;메시지를&amp;nbsp;전달하는&amp;nbsp;부분은&amp;nbsp;Redis&amp;nbsp;의&amp;nbsp;Pub/Sub을&amp;nbsp;이용한&amp;nbsp;BackPlane&amp;nbsp;을&amp;nbsp;이용해서&amp;nbsp;설계를&amp;nbsp;진행했었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 SignalR 채팅 시스템을 개발했을때, 고려했던 내용을 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot; class=&quot;green&quot;&gt;웹서버 스케일 아웃&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SignalR은 웹서버로 IIS를 사용하는데요. 일반적으로 웹서버의 경우 성능을 확장하기 위한 방식으로 스케일 업, 스케일 아웃 방식중에 선택을 하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;스케일 업&lt;/b&gt;의 경우는, 장비의 사양을 올린다고 생각하시면 되고,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스케일 아웃&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;의 경우는, 동일한 장비를 여러대로 구성해서 분산처리 한다고 생각하시면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희는 Load Balancer를 이용해서 스케일 아웃을 하는 방식으로 웹서버의 확장을 고려하여 설계하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xV3cb/btrC1SRSnBf/1K1IBMfGvza9FkKgx1akwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xV3cb/btrC1SRSnBf/1K1IBMfGvza9FkKgx1akwk/img.png&quot; data-alt=&quot;출처 : MSDN&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xV3cb/btrC1SRSnBf/1K1IBMfGvza9FkKgx1akwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxV3cb%2FbtrC1SRSnBf%2F1K1IBMfGvza9FkKgx1akwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;339&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : MSDN&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면, 각각의 웹서버들은 서로다른 서버에 붙은 클라이언트에게 어떻게 전달받은 메시지를 전달할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것은 &lt;b&gt;백플레인 (BackPlane)&lt;/b&gt; 을 이용해서 메시지를 주고 받을 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot; class=&quot;blue&quot;&gt;백플레인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Load Balancer를 이용해서 웹서버를 확장할 경우, 각각의 서버에 Message를 보내야 하는 방식이 필요한데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 백플레인 (BakcPlane) 이라고 부릅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SignalR 에서는 3가지의 백플레인 (BackPlane) 을 제공하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Azure Cloud를 이용해서 SignalR을 서비스 할 경우에는 Azure Service Bus를 이용하는 것이 효율적이라고 MSDN에서 얘기하고 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Azure Service Bus.&lt;/li&gt;
&lt;li&gt;Redis.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;SQL Server. SQL Server&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;제한&amp;nbsp;사항&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSDN에서는 몇가지 제한 사항에서도 명시가 되어 있는데요. 백플레인을 사용하면 클라이언트가 단일 서버 노드와 직접 통신할 때보다 최대 메시지 처리량이 낮다고 합니다. 백플레인은 모든 메시지를 모든 노드에 전달하므로 백플레인은 병목 상태가 될 수 있기 때문입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버 브로드캐스트 (예: 주식 시세): 백플레인은 이 시나리오에서 잘 작동합니다. 서버는 메시지가 전송되는 속도를 제어하기 때문입니다.&lt;/li&gt;
&lt;li&gt;클라이언트 간 (예: 채팅): 이 시나리오에서는 메시지 수가 클라이언트 수로 확장될 경우 백플레인에 병목 현상이 발생할 수 있습니다. 즉, 더 많은 클라이언트가 조인할 때 메시지 비율이 비례적으로 증가하는 경우입니다.&lt;/li&gt;
&lt;li&gt;빈도가 높은 실시간 (예: 실시간 게임): 이 시나리오에서는 백플레인을 사용하지 않는 것이 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot; class=&quot;red&quot;&gt;메시징 처리를 위한 Redis BackPlane&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SignalR에서 모든 메시지는 메시지 버스를 통해 전송됩니다. 메시지 버스는 Pub/Sub 구독 추상화 기능을 제공하는 IMessageBus 인터페이스를 구현합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희는 Redis를 이용하여 RedisMessageBus인 Pub/Sub 매커니즘을 사용하는 방식으로 백플레인 (BackPlane)을 구성하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boU8av/btrC1iws06j/osT49UAiIENVWr8A8obhLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boU8av/btrC1iws06j/osT49UAiIENVWr8A8obhLk/img.png&quot; data-alt=&quot;출처 : MSDN&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boU8av/btrC1iws06j/osT49UAiIENVWr8A8obhLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboU8av%2FbtrC1iws06j%2FosT49UAiIENVWr8A8obhLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;471&quot; height=&quot;377&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : MSDN&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot; class=&quot;green&quot;&gt;Pub/Sub&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis는 메시지를 보내기 위한 방식으로 게시/구독 패턴을 지원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희는 이 기능을 이용해서 백플레인 (BackPlane) 을 구성하기로 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot; class=&quot;blue&quot;&gt;Sticky Session&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SignalR 웹서버를 Load Balancer를 이용해서 스케일 아웃 할 경우, 일반적인 Round Robin 방식으로 하면 접속이 되지 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SignalR의 경우, 두가지 패턴, 즉 협상이후 접속을 하는 방식을 사용하게 되는데, 최초 커넥션 아이디를 가져오는 협상 단계에서의 웹서버와 커넥셕이 맺어지는 웹서버가 다를 경우 연결이 되지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해서는 Load Balancer의 Sticky Session 방식으로 설정을 해야 하는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 협상 및 연결이 단일 서버에서 유지하게 해주는 역활을 하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;END&lt;br /&gt;&lt;/span&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SignalR</category>
      <category>BackPlain</category>
      <category>C#</category>
      <category>pubsub</category>
      <category>redis</category>
      <category>SignalR</category>
      <category>채팅</category>
      <author>holjjack</author>
      <guid isPermaLink="true">https://holjjack.tistory.com/231</guid>
      <comments>https://holjjack.tistory.com/231#entry231comment</comments>
      <pubDate>Wed, 15 Jun 2022 19:09:40 +0900</pubDate>
    </item>
  </channel>
</rss>