<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Server on jaylab-log</title><link>https://jaylab.link/tags/server/</link><description>Recent content in Server on jaylab-log</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Mon, 14 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://jaylab.link/tags/server/index.xml" rel="self" type="application/rss+xml"/><item><title>쉘 스크립트 대신 Dockerode를 고른 이유: 멀티 테넌트 프로비저닝의 롤백과 동시성</title><link>https://jaylab.link/multi-tenant-provisioning-system/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>https://jaylab.link/multi-tenant-provisioning-system/</guid><description>docker run을 감싼 쉘로는 실패 원인도 롤백도 다룰 수 없어 Dockerode와 스키마 분리로 테넌트 생성을 자동화한 과정</description></item><item><title>Ubuntu 컨테이너 생성부터 ModSecurity WAF 구성 및 테스트까지</title><link>https://jaylab.link/modsecurity-waf-with-ubuntu-setting/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://jaylab.link/modsecurity-waf-with-ubuntu-setting/</guid><description>앞서 ModSecurity에 대해 간단히 다뤘다. 이번에는 우분투 컨테이너 생성부터 ModSecurity 구성과 테스트까지 진행했고 그 과정을 기록했다.</description></item><item><title>Docker ELK 구성에 Metricbeat 추가</title><link>https://jaylab.link/docker-elk-metricbeat/</link><pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.link/docker-elk-metricbeat/</guid><description>앞서 Docker를 활용한 ELK 구성에 이어서, 이번에는 Metricbeat를 붙여보았다</description></item><item><title>Docker를 활용한 ElasticSearch, Logstash, Kibana 구성</title><link>https://jaylab.link/elk-for-docker-setting/</link><pubDate>Sun, 07 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.link/elk-for-docker-setting/</guid><description>ELK 구성 방법 중에서도 Docker를 활용한 방법으로 진행해보았다.</description></item><item><title>Nginx Proxy Manager - Official Guide &amp; Local Setup for Customization</title><link>https://jaylab.link/npm-official-setup-and-customization/</link><pubDate>Fri, 05 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.link/npm-official-setup-and-customization/</guid><description>커스텀을 위해 코드 수정 후 Nginx Proxy Manager를 정상적으로 실행할 수 있어야했는데, 그 어디에서도 이를 위한 가이드를 찾을 수 없었다. 결국 직접 소스코드 분석 후 다음과 같은 내용들을 확인했다.</description></item><item><title>Tomcat 배포 방식의 올바른 이해와 구조적 분석</title><link>https://jaylab.link/tomcat-improve-cicd-pipeline/</link><pubDate>Thu, 11 May 2023 00:00:00 +0000</pubDate><guid>https://jaylab.link/tomcat-improve-cicd-pipeline/</guid><description>&lt;p&gt;Tomcat 서버의 애플리케이션 배포는 웹 애플리케이션 운영에서 가장 기본적인 영역이면서도, 실제로는 많은 개발자들이 정확한 동작 원리를 놓치고 있는 부분이다. 최근 고객사 운영 서버의 &lt;code&gt;server.xml&lt;/code&gt; 설정을 분석하던 중, &lt;code&gt;&amp;lt;Context&amp;gt;&lt;/code&gt; 태그와 &lt;code&gt;&amp;lt;Host&amp;gt;&lt;/code&gt;의 &lt;code&gt;appBase&lt;/code&gt; 속성이 혼재된 구성에서 WAR 파일 배포 과정에 대한 오해를 발견했다.&lt;/p&gt;
&lt;h3 id="기존의-배포-설정"&gt;기존의 배포 설정&lt;/h3&gt;
&lt;p&gt;운영 중인 서버의 &lt;code&gt;server.xml&lt;/code&gt; 설정:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Host&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;appBase=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/home/manager/eps/webapps&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;unpackWARs=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;autoDeploy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;Context&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;docBase=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/home/manager/eps/webapps/legacy&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;reloadable=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;false&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;Context&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/v5&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;docBase=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/home/manager/eps/webapps/ui5&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;reloadable=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;false&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- ... AccessLogValve 설정 ... --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/Host&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 설정에서 명시적인 &lt;code&gt;&amp;lt;Context&amp;gt;&lt;/code&gt; 배포와 &lt;code&gt;appBase&lt;/code&gt;를 통한 자동 배포가 공존하고 있었음.. 그런데 여기서 문제가 발생. 새로운 버전의 &lt;code&gt;ui5.war&lt;/code&gt; 파일을 배포하려 할 때, 기존 관리자는 다음과 같은 절차를 따르고 있었다.&lt;/p&gt;</description></item></channel></rss>