<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>내맘대로 개발일지</title>
    <link>https://8735.tistory.com/</link>
    <description>Jeong Hyeon Development Blog</description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 17:32:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>eulBlue</managingEditor>
    <image>
      <title>내맘대로 개발일지</title>
      <url>https://tistory1.daumcdn.net/tistory/5425453/attach/a0db95da14bc4d819b63870045575b0f</url>
      <link>https://8735.tistory.com</link>
    </image>
    <item>
      <title>[iTerm2] 커스텀 하기</title>
      <link>https://8735.tistory.com/201</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;회사 맥은 커스텀 해놨는데 집에는 안해놨기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기에 설정한거 정리해놓고 집가서 그대로 따라할 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;iterm2 설치하기&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1773886110787&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;iTerm2 - macOS Terminal Replacement&quot; data-og-description=&quot;iTerm2 by George Nachman. Website by Matthew Freeman, George Nachman, and James A. Rosen. Website updated and optimized by HexBrain Sponsors&quot; data-og-host=&quot;iterm2.com&quot; data-og-source-url=&quot;https://iterm2.com/&quot; data-og-url=&quot;https://iterm2.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vcLLH/dJMb9iIF9hN/QVz5W3Mh4Xv0xWpG4jjPbk/img.jpg?width=1600&amp;amp;height=624&amp;amp;face=0_0_1600_624&quot;&gt;&lt;a href=&quot;https://iterm2.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iterm2.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vcLLH/dJMb9iIF9hN/QVz5W3Mh4Xv0xWpG4jjPbk/img.jpg?width=1600&amp;amp;height=624&amp;amp;face=0_0_1600_624');&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;iTerm2 - macOS Terminal Replacement&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;iTerm2 by George Nachman. Website by Matthew Freeman, George Nachman, and James A. Rosen. Website updated and optimized by HexBrain Sponsors&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iterm2.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;cmd + , 눌러서 설정 들어가기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQH3DG/dJMcagdK5ww/iIOZPcJNLptJH2u8COuaq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQH3DG/dJMcagdK5ww/iIOZPcJNLptJH2u8COuaq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQH3DG/dJMcagdK5ww/iIOZPcJNLptJH2u8COuaq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQH3DG%2FdJMcagdK5ww%2FiIOZPcJNLptJH2u8COuaq0%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;282&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Theme : Dark&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Tab bar location : Top&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Status bar location Buttom 선택&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT8VqK/dJMcahwX86y/s2IyKgvhAyfa8HG4HBEWAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT8VqK/dJMcahwX86y/s2IyKgvhAyfa8HG4HBEWAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT8VqK/dJMcahwX86y/s2IyKgvhAyfa8HG4HBEWAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT8VqK%2FdJMcahwX86y%2Fs2IyKgvhAyfa8HG4HBEWAK%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;1058&quot; height=&quot;597&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Font: Osaka Regular-Mono 14pt&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;항상 글씨가 작아서 거북목했는데 좀 나아진것같아 기분이 좋다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p2fug/dJMcaaq4sOs/liKwbWFhFLPu6hrPq7dCjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p2fug/dJMcaaq4sOs/liKwbWFhFLPu6hrPq7dCjK/img.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;598&quot; data-is-animation=&quot;false&quot; style=&quot;width: 42.9651%; margin-right: 10px;&quot; data-widthpercent=&quot;43.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p2fug/dJMcaaq4sOs/liKwbWFhFLPu6hrPq7dCjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp2fug%2FdJMcaaq4sOs%2FliKwbWFhFLPu6hrPq7dCjK%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;937&quot; height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VUM8Y/dJMcafFUFHn/7kgMAsZbCg1uLUHKdOVGW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VUM8Y/dJMcafFUFHn/7kgMAsZbCg1uLUHKdOVGW0/img.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;266&quot; data-is-animation=&quot;false&quot; style=&quot;width: 55.8721%;&quot; data-widthpercent=&quot;56.53&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VUM8Y/dJMcafFUFHn/7kgMAsZbCg1uLUHKdOVGW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVUM8Y%2FdJMcafFUFHn%2F7kgMAsZbCg1uLUHKdOVGW0%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;542&quot; height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Transparency : 1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Blur : Blur content behind the window 클릭 15&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사실 블러 안줘도된다. 어차피 1 줘서 투명해보이지 않으니까 ..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;New windows : 150 columns by 40 rows&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcIi9P/dJMcagEP2lr/eI5ekhgikPzMKHjVpThkfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcIi9P/dJMcagEP2lr/eI5ekhgikPzMKHjVpThkfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcIi9P/dJMcagEP2lr/eI5ekhgikPzMKHjVpThkfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcIi9P%2FdJMcagEP2lr%2FeI5ekhgikPzMKHjVpThkfK%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;955&quot; height=&quot;536&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Scrollback lines : Unlimited scrollback 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Cluade Code 사용하다보면 긴 코드줄을 줄때 있는데 그때 초기화 되지않게 하기위함이다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KhBmK/dJMcafy9DVO/D2F0em4KtHQarqktexVOBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KhBmK/dJMcafy9DVO/D2F0em4KtHQarqktexVOBk/img.png&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;537&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.1264%; margin-right: 10px;&quot; data-widthpercent=&quot;51.73&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KhBmK/dJMcafy9DVO/D2F0em4KtHQarqktexVOBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKhBmK%2FdJMcafy9DVO%2FD2F0em4KtHQarqktexVOBk%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;1020&quot; height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xjaav/dJMcab4zdBg/ovgru2ZeaGgHJyoUXLz1S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xjaav/dJMcab4zdBg/ovgru2ZeaGgHJyoUXLz1S0/img.png&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;510&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.7109%;&quot; data-widthpercent=&quot;48.27&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xjaav/dJMcab4zdBg/ovgru2ZeaGgHJyoUXLz1S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxjaav%2FdJMcab4zdBg%2Fovgru2ZeaGgHJyoUXLz1S0%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;904&quot; height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Configure Status Bar 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필요한거 밑으로 끌어서 보여줄거 고르고 / Auto-Rainbow : Automatic 해놓으면 알아서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;알록달록하게 만들어준다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 터미널 작업&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1773885947700&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi ~/.zshrc

#Oh My Zsh
export ZSH=&quot;$HOME/.oh-my-zsh&quot;

plugins=(
    git
    zsh-autosuggestions
    zsh-syntax-highlighting
)

source $ZSH/oh-my-zsh.sh&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773886034061&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sh -c &quot;$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&quot;

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1773886042559&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT</category>
      <category>iterm2</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/201</guid>
      <comments>https://8735.tistory.com/201#entry201comment</comments>
      <pubDate>Thu, 19 Mar 2026 11:07:53 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 기본 명령어 이건 알아야 한다 ( + 리눅스 )</title>
      <link>https://8735.tistory.com/200</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;진짜 오랜만에 글을 쓰는데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;요즘에는 &lt;b&gt;AI 가 다해주다 보니까&lt;/b&gt; 딱히 .. 그리고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AI 로 학습하다 보니까 기록을 할게 없다보니 안쓰다 시피 하다가 정말 오랜만에 글을 써본다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;최근에 도커로 배포하고 하는데 애를 너무많이먹고 .. &lt;b&gt;AI 로만 딸깍 하다보니 다까먹어서&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이래서 기록이 중요하다 하는구나~ 를 다시한번 새삼 깨닫는다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size23&quot;&gt;1. Docker Compose (가장 많이 쓰는 배포 명령어)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;최근 배포 메타는 단일 컨테이너보다 docker-compose.yml을 활용하는 경우가 대부분이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;9&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,0,0&quot;&gt;실행 (백그라운드)&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQPw&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,1,0&quot;&gt;정지 및 삭제&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQQA&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker compose down
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,0&quot;&gt;로그 확인 (실시간)&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQQQ&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker compose logs -f
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,3,0&quot;&gt;컨테이너 재시작&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQQg&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker compose restart
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;10&quot; data-ke-size=&quot;size23&quot;&gt;2. Docker 핵심 관리 명령어&lt;/h3&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;도커 엔진의 상태를 확인하고 관리할 때 필수다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,0,0&quot;&gt;실행 중인 컨테이너 목록 확인&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQQw&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,1,0&quot;&gt;전체 컨테이너 목록 확인 (정지된 것 포함)&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQRA&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker ps -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,2,0&quot;&gt;컨테이너 내부 접속 (터미널)&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQRQ&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;docker exec -it [컨테이너_이름] /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,3,0&quot;&gt;이미지 목록 확인&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQRg&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,4,0&quot;&gt;사용하지 않는 데이터 삭제 (용량 확보)&lt;/b&gt;&lt;/li&gt;
&lt;li data-ved=&quot;0CAAQhtANahcKEwiWp_aW-KiTAxUAAAAAHQAAAAAQRw&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;span&gt;Bash&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;docker system prune -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-path-to-node=&quot;13&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-path-to-node=&quot;14&quot; data-ke-size=&quot;size23&quot;&gt;3. 필수 기초 리눅스 명령어&lt;/h3&gt;
&lt;p data-path-to-node=&quot;15&quot; data-ke-size=&quot;size16&quot;&gt;도커를 쓰려면 결국 리눅스 서버 환경에 익숙해져야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;16&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,0,0&quot;&gt;경로 이동 및 확인&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;16,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;pwd: 현재 내가 위치한 절대 경로 출력&lt;/li&gt;
&lt;li&gt;cd [경로]: 해당 디렉토리로 이동&lt;/li&gt;
&lt;li&gt;ls -al: 현재 폴더의 모든 파일 목록 확인 (숨겨진 파일 포함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,1,0&quot;&gt;파일 및 폴더 조작&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;16,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mkdir [이름]: 폴더 생성&lt;/li&gt;
&lt;li&gt;rm [파일]: 파일 삭제&lt;/li&gt;
&lt;li&gt;rm -rf [폴더]: 폴더 강제 삭제 (주의해서 사용)&lt;/li&gt;
&lt;li&gt;cp [원본] [대상]: 파일 복사&lt;/li&gt;
&lt;li&gt;mv [원본] [대상]: 파일 이동 또는 이름 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,2,0&quot;&gt;파일 내용 확인&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;16,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cat [파일명]: 파일 내용 전체 출력&lt;/li&gt;
&lt;li&gt;tail -f [파일명]: 파일의 마지막 부분을 실시간으로 감시 (로그 확인 시 유용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT</category>
      <category>docker</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/200</guid>
      <comments>https://8735.tistory.com/200#entry200comment</comments>
      <pubDate>Wed, 18 Mar 2026 16:39:33 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] Jenkins 로 배포하기 [Spring]</title>
      <link>https://8735.tistory.com/199</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1764036738926&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;[AWS] Jenkins 로 배포하기 [Node]&quot; data-og-description=&quot;[Jenkins] EC2 안에서 설치하고 실행하기[EC2] 안에서 nginx 사용하기[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는&quot; data-og-host=&quot;8735.tistory.com&quot; data-og-source-url=&quot;https://8735.tistory.com/198&quot; data-og-url=&quot;https://8735.tistory.com/198&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gy4yq/hyZOh9qQwP/iydBQBUh7hDTy2Gw2eO1hK/img.png?width=313&amp;amp;height=161&amp;amp;face=0_0_313_161,https://scrap.kakaocdn.net/dn/JXR9U/hyZNBfpVtE/rnkTzCEdDdxEOHmS2ucT70/img.png?width=313&amp;amp;height=161&amp;amp;face=0_0_313_161,https://scrap.kakaocdn.net/dn/bn2ucG/hyZNIFA0Kt/MxKjDbqHeHn9Ydj1Whi4J1/img.png?width=1620&amp;amp;height=689&amp;amp;face=0_0_1620_689&quot;&gt;&lt;a href=&quot;https://8735.tistory.com/198&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://8735.tistory.com/198&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gy4yq/hyZOh9qQwP/iydBQBUh7hDTy2Gw2eO1hK/img.png?width=313&amp;amp;height=161&amp;amp;face=0_0_313_161,https://scrap.kakaocdn.net/dn/JXR9U/hyZNBfpVtE/rnkTzCEdDdxEOHmS2ucT70/img.png?width=313&amp;amp;height=161&amp;amp;face=0_0_313_161,https://scrap.kakaocdn.net/dn/bn2ucG/hyZNIFA0Kt/MxKjDbqHeHn9Ydj1Whi4J1/img.png?width=1620&amp;amp;height=689&amp;amp;face=0_0_1620_689');&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;[AWS] Jenkins 로 배포하기 [Node]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[Jenkins] EC2 안에서 설치하고 실행하기[EC2] 안에서 nginx 사용하기[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;8735.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;드디어 여기까지왔다....&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로 Spring 서버를 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;무중단&lt;/span&gt;&lt;/b&gt;으로 해볼 예정이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기본적인 설정은 프론트를 배포하면서 다 해놓은 상태이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;서버도 프론트와 동일하게 Pipeline 으로 만들고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;스크립트를 작성해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1764036868000&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any
    options { timestamps() }

    environment {
        PROJECT_NAME   = &quot;PROJECT_NAME&quot;
        GIT_URL        = &quot;GIT_URL&quot;
        GIT_BRANCH     = &quot;GIT_BRANCH&quot;
        CREDENTIALS_ID = &quot;github_ssh&quot;

        DOCKER_IMAGE   = &quot;DOCKER_IMAGE:latest&quot;

        BLUE_PORT      = &quot;8080&quot;
        GREEN_PORT     = &quot;8082&quot;

        NGINX_CONF     = &quot;/etc/nginx/conf.d/default.conf&quot;

        // sudo 비번 없이 실행 (sudoers 에 ec2-user NOPASSWD 설정 필요)
        SUDO           = &quot;sudo -n&quot;
    }

    stages {

        stage('Clone Repository') {
            steps {
                sh &quot;git --version&quot;
                git branch: &quot;${GIT_BRANCH}&quot;,
                    credentialsId: &quot;${CREDENTIALS_ID}&quot;,
                    url: &quot;${GIT_URL}&quot;
            }
        }

        stage('Build JAR') {
            steps {
                sh 'chmod +x ./gradlew'
                sh './gradlew clean build -x test'
            }
        }

        stage('Build Docker Image') {
            steps {
                sh &quot;&quot;&quot;
                  echo &quot;  build image: ${DOCKER_IMAGE}&quot;
                  docker build -t ${DOCKER_IMAGE} .
                &quot;&quot;&quot;
            }
        }

        stage('Blue-Green Deploy') {
            steps {
                script {
                    // 1) nginx 에서 현재 LIVE 포트(8080 or 8082) 확인
                    def currentPort = sh(
                        script: &quot;grep -o '127.0.0.1:808[0-9]' ${NGINX_CONF} | head -n1 | sed 's/127.0.0.1://' || echo ''&quot;,
                        returnStdout: true
                    ).trim()

                    if (!currentPort) {
                        // 처음 셋업 시에는 8080 기준
                        currentPort = BLUE_PORT
                    }

                    echo &quot;현재 LIVE PORT = ${currentPort}&quot;

                    def bluePort  = currentPort
                    def greenPort = (currentPort == BLUE_PORT) ? GREEN_PORT : BLUE_PORT

                    def blueName  = &quot;${PROJECT_NAME}-${bluePort}&quot;
                    def greenName = &quot;${PROJECT_NAME}-${greenPort}&quot;

                    echo &quot;BLUE  (현재 LIVE) : ${blueName} / ${bluePort}&quot;
                    echo &quot;GREEN(새 버전)   : ${greenName} / ${greenPort}&quot;

                    // 2) 기존 GREEN 컨테이너 정리
                    sh &quot;&quot;&quot;
                      echo &quot;  기존 GREEN 컨테이너 정리: ${greenName}&quot;
                      docker stop ${greenName} || true
                      docker rm   ${greenName} || true

                      # 예전에 쓰던 이름이 있으면 같이 정리
                      docker stop backend || true
                      docker rm   backend || true
                    &quot;&quot;&quot;

                    // 3) 새 버전을 GREEN 포트로 먼저 기동
                    sh &quot;&quot;&quot;
                      echo &quot;  새 버전(${greenPort}) 기동: ${greenName}&quot;
                      docker run -d \\
                        --name ${greenName} \\
                        --network host \\
                        -e SPRING_PROFILES_ACTIVE=prod \\
                        -e SERVER_PORT=${greenPort} \\
                        ${DOCKER_IMAGE}
                    &quot;&quot;&quot;

                    // 4) GREEN 헬스체크 (/api 사용)
                    sh &quot;&quot;&quot;
                      echo &quot;  새 버전(포트 ${greenPort}) 헬스체크 시작&quot;

                      for i in {1..30}; do
                        if curl -sf http://127.0.0.1:${greenPort}/api &amp;gt; /dev/null; then
                          echo &quot;✅ 새 버전(포트 ${greenPort}) 헬스체크 통과&quot;
                          exit 0
                        fi
                        echo &quot;⏳ 대기중 (\$i)...&quot;
                        sleep 2
                      done

                      echo &quot;❌ 새 버전(포트 ${greenPort}) 헬스체크 실패&quot;
                      echo &quot;------ 컨테이너 로그 (${greenName}) ------&quot;
                      docker logs ${greenName} || true
                      exit 1
                    &quot;&quot;&quot;

                    // 5) nginx proxy_pass 808X &amp;rarr; GREEN 포트로 변경
                    sh &quot;&quot;&quot;
                      echo &quot;  Nginx proxy_pass ${bluePort} &amp;rarr; ${greenPort} 변경&quot;

                      ${SUDO} sed -i 's/127.0.0.1:${bluePort}/127.0.0.1:${greenPort}/' ${NGINX_CONF}

                      echo &quot;  nginx 설정 테스트&quot;
                      ${SUDO} nginx -t

                      echo &quot;  nginx reload&quot;
                      ${SUDO} systemctl reload nginx
                    &quot;&quot;&quot;

                    // 6) 옛날 BLUE 컨테이너 종료/삭제
                    sh &quot;&quot;&quot;
                      echo &quot;  기존 BLUE 컨테이너 정리: ${blueName}&quot;
                      docker stop ${blueName} || true
                      docker rm   ${blueName} || true
                    &quot;&quot;&quot;

                    echo &quot;  blue-green 배포 완료 (LIVE PORT = ${greenPort})&quot;
                }
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;스크립트가 길어서 어려운데 간단하게 보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;포트를 8080 과 8082 를 번갈아가면서 새로운게 올라올때까지&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기다렸다가 헬스체크가 끝나고나면 포트를 변경해 연결해주는 것으로 해서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;실제 웹에서는 무중단처럼 느낄 수 있게끔 해주는 방식이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;스크립트를 작성하고 다음은 nginx 를 수정해줘야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1764037091965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name _;

    root /var/www/frontend;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:8082/;
        proxy_http_version 1.1;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 5s;
        proxy_send_timeout    60s;
        proxy_read_timeout    60s;
    }

    gzip on;
    gzip_types text/plain text/css application/json application/javascript application/xml+rss;
    gzip_min_length 256;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1764037160781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ps aux | grep jenkins | head

jenkins ...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 명령어를 통해 Jenkins 가 어떤 계정으로 돌아가는지 확인하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;맨앞에 나오는 이름이 유저이름이다 나같은경우는 jenkins 였고&lt;/p&gt;
&lt;pre id=&quot;code_1764037220297&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 파일 열고
sudo visudo -f /etc/sudoers.d/jenkins

// 입력 하고
jenkins ALL=(ALL) NOPASSWD: /usr/bin/sed, /usr/sbin/nginx, /usr/bin/systemctl

// 문법 체크
sudo visudo -c

// 결과
/etc/sudoers.d/jenkins: OK

// 적용 테스트
sudo -n echo &quot;sudo works&quot;

// 결과
sudo works&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 파일로 들어가서 해당 명령을 입력해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이를 통해서 Jenkins 가 서버권한을 갖고 설정 파일을 건드릴 수 있게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게해서 젠킨스가서 빌드를 실행해보면 무중단처럼 배포를 진행할 수 있게된다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>AWS</category>
      <category>Jenkins</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/199</guid>
      <comments>https://8735.tistory.com/199#entry199comment</comments>
      <pubDate>Tue, 25 Nov 2025 11:22:40 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] Jenkins 로 배포하기 [Node]</title>
      <link>https://8735.tistory.com/198</link>
      <description>&lt;figure id=&quot;og_1763515527896&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] EC2 안에서 설치하고 실행하기&quot; data-og-description=&quot;[EC2] 안에서 nginx 사용하기[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데 &quot; data-og-host=&quot;8735.tistory.com&quot; data-og-source-url=&quot;https://8735.tistory.com/196&quot; data-og-url=&quot;https://8735.tistory.com/196&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cw4IVk/hyZNVrFj7W/w9p9U7CDSjMutvbyvuS8f1/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/dHLju4/hyZNLO8aJ2/gPybDRk2gxGkeciMrcJZwK/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/1DC92/hyZObGqZDa/BsJJyydZI5LklKiJKoIMM1/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200&quot;&gt;&lt;a href=&quot;https://8735.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://8735.tistory.com/196&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cw4IVk/hyZNVrFj7W/w9p9U7CDSjMutvbyvuS8f1/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/dHLju4/hyZNLO8aJ2/gPybDRk2gxGkeciMrcJZwK/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/1DC92/hyZObGqZDa/BsJJyydZI5LklKiJKoIMM1/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200');&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] EC2 안에서 설치하고 실행하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[EC2] 안에서 nginx 사용하기[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;8735.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 Jenkins 로 배포하는 연습을 해볼거다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나는 Spring BackEnd 와 Vue FrontEnd 총 2개를 배포해야하는데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저 FrontEnd 먼저 배포하도록 하겠다!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfpNwM/dJMcagRsHIi/kzH4GjePo8KgSEQVGOuSA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfpNwM/dJMcagRsHIi/kzH4GjePo8KgSEQVGOuSA0/img.png&quot; data-alt=&quot;Jenkins 설정 &amp;amp;gt; Credentials&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfpNwM/dJMcagRsHIi/kzH4GjePo8KgSEQVGOuSA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfpNwM%2FdJMcagRsHIi%2FkzH4GjePo8KgSEQVGOuSA0%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;1824&quot; height=&quot;429&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jenkins 설정 &amp;gt; Credentials&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오른쪽 상단에 있는 톱니바퀴의 Jenkins 설정 누르고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Security 에 Credentials 누르고 나면&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RS9dl/dJMcac2yuWd/fJZ0AklHmt3O1VBEfGhfH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RS9dl/dJMcac2yuWd/fJZ0AklHmt3O1VBEfGhfH0/img.png&quot; data-alt=&quot;global&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RS9dl/dJMcac2yuWd/fJZ0AklHmt3O1VBEfGhfH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRS9dl%2FdJMcac2yuWd%2FfJZ0AklHmt3O1VBEfGhfH0%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;1612&quot; height=&quot;128&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;global&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음과 같은 화면이 있는데 여기서 &lt;span style=&quot;color: #006dd7;&quot;&gt;(global)&lt;/span&gt; 버튼마냥 &lt;span style=&quot;color: #006dd7;&quot;&gt;파란색&lt;/span&gt;버튼 있는데 눌러주면된다&lt;/span&gt;&lt;/p&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;1631&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqeQae/dJMb99LzCYD/phrrvNx3FomzdkEGAuPMyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqeQae/dJMb99LzCYD/phrrvNx3FomzdkEGAuPMyK/img.png&quot; data-alt=&quot;Add Credentials&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqeQae/dJMb99LzCYD/phrrvNx3FomzdkEGAuPMyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqeQae%2FdJMb99LzCYD%2FphrrvNx3FomzdkEGAuPMyK%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;1631&quot; height=&quot;278&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Add Credentials&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오른쪽 상단의 &lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;Add Credentials 버튼&lt;/span&gt; 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;689&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Bqye/dJMcadAnYk2/xJGAL7bKi1o6pyiEkcKKcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Bqye/dJMcadAnYk2/xJGAL7bKi1o6pyiEkcKKcK/img.png&quot; data-alt=&quot;SSH Username with private key&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Bqye/dJMcadAnYk2/xJGAL7bKi1o6pyiEkcKKcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Bqye%2FdJMcadAnYk2%2FxJGAL7bKi1o6pyiEkcKKcK%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;1620&quot; height=&quot;689&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;689&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SSH Username with private key&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Kind 에서 SSH Username with private key 누르고나서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Private Key &amp;gt; Enter directly 누르면 &lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;Add&lt;/span&gt; 버튼이 보인다 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;젠킨스 터미널로 돌아가서&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1763948059728&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh-keygen -t ed25519 -C &quot;jenkins&quot; -f ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

// 결과
ssh-ed25519 ...

cat ~/.ssh/id_ed25519

// 결과
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;첫번째 결과는 깃허브에 가서 SSH 등록해주고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두번째 나온 결과를 Add 누른 화면에 Key 에 입력해주면된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그다음 &lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;Create 버튼&lt;/span&gt; 클릭&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1763948131832&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh -T git@github.com

// 결과
Hi {깃헙닉네임}! You've successfully authenticated, but GitHub does not provide shell access.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; 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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이런 결과를 반환받았다면 정상적으로 연결된걸 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그다음 Node 를 확인해야하는데,&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1763948301197&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;node -v
yarn -v&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;했을때 결과가 나오지 않는다면 설치해주면된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1763948353977&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo npm install -g yarn&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나같은경우는 노드는 있어서 yarn 만 추가적으로 설치해줬다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설정이 완료되었으니 다음으로 프로젝트를 등록해보도록 하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;341&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drxoqN/dJMb995SFJX/q57U0TmbpNvX6mDQ9KzMmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drxoqN/dJMb995SFJX/q57U0TmbpNvX6mDQ9KzMmK/img.png&quot; data-alt=&quot;새로운 Item&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drxoqN/dJMb995SFJX/q57U0TmbpNvX6mDQ9KzMmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrxoqN%2FdJMb995SFJX%2Fq57U0TmbpNvX6mDQ9KzMmK%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;341&quot; height=&quot;367&quot; data-origin-width=&quot;341&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;새로운 Item&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로운 아이템 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;802&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3SL2U/dJMcaacDSCm/Iczej5IvG7GKfR0TldXxl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3SL2U/dJMcaacDSCm/Iczej5IvG7GKfR0TldXxl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3SL2U/dJMcaacDSCm/Iczej5IvG7GKfR0TldXxl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3SL2U%2FdJMcaacDSCm%2FIczej5IvG7GKfR0TldXxl1%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;1081&quot; height=&quot;802&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;802&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Enter an item name 에 이름 적고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Pipeline 선택하고 &lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;OK&lt;/span&gt; 버튼 클릭&lt;/span&gt;&lt;/p&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;1283&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2mobS/dJMcaiuV8GN/o5ExehHNnHpx2Yfs7bAKE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2mobS/dJMcaiuV8GN/o5ExehHNnHpx2Yfs7bAKE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2mobS/dJMcaiuV8GN/o5ExehHNnHpx2Yfs7bAKE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2mobS%2FdJMcaiuV8GN%2Fo5ExehHNnHpx2Yfs7bAKE1%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;1283&quot; height=&quot;674&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1283&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기에 이제 스크립트를 작성하면되는데&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1763948967043&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any
    options { timestamps() }

    environment {
        PROJECT_NAME = '{PROJECT_NAME}'                    // 예: my-frontend
        GIT_URL      = '{GIT_REPOSITORY_SSH_URL}'         // 예: git@github.com:ORG/REPO.git
        GIT_BRANCH   = '{BRANCH_NAME}'                    // 예: main, dev, release
        CREDENTIALS = '{CREDENTIAL_ID}'                  // Jenkins Git Credential ID (SSH Key or PAT)
        DEPLOY_PATH = '{DEPLOY_DIRECTORY}'               // 예: /var/www/my-frontend
        BUILD_CMD   = '{BUILD_COMMAND}'                  // 예: yarn build or npm run build
    }

    stages {

        stage('Clone Repository') {
            steps {
                sh &quot;node -v&quot;
                sh &quot;git --version&quot;
                sh &quot;yarn -v || npm -v&quot;

                git branch: &quot;${GIT_BRANCH}&quot;, credentialsId: &quot;${CREDENTIALS}&quot;, url: &quot;${GIT_URL}&quot;
            }
        }

        stage('Install Dependencies') {
            steps {
                sh 'yarn install || npm install'
            }
        }

        stage('Build') {
            steps {
                sh &quot;${BUILD_CMD}&quot;
            }
        }

        stage('Deploy') {
            steps {
                sh &quot;&quot;&quot;
                    echo &quot;  Deploying ${PROJECT_NAME} &amp;rarr; ${DEPLOY_PATH}&quot;

                    rm -rf ${DEPLOY_PATH}/*

                    cp -r dist/* ${DEPLOY_PATH}/ || cp -r build/* ${DEPLOY_PATH}/ || echo &quot;⚠️ dist/build 폴더 없음&quot;

                    # Optional: enable after visudo setup
                    # sudo systemctl reload nginx

                    echo &quot;  Deployment completed!&quot;
                &quot;&quot;&quot;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;중괄호 처리한건 알아서 맞춰서 설정하면되고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 중요한건 sudo systemctl reload nginx 인데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;배포가 끝나면 자동으로 재시작 하기위함이다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이를 위해서 몇가지 설정이 필요한데&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1763949035545&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. 권한추가
sudo chown -R jenkins:jenkins /var/www/{프로젝트명}
sudo chmod -R 755 /var/www/{프로젝트명}

2. visudo 열기
sudo visudo

3. 추가 후 저장
jenkins ALL=NOPASSWD: /usr/bin/systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게해주면 이제 배포가끝나면 Nginx 가 재실행되면서 배포가 완료된다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT</category>
      <category>AWS</category>
      <category>Jenkins</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/198</guid>
      <comments>https://8735.tistory.com/198#entry198comment</comments>
      <pubDate>Mon, 24 Nov 2025 10:52:07 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] 고정 IP 할당받기</title>
      <link>https://8735.tistory.com/197</link>
      <description>&lt;figure id=&quot;og_1763515527896&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] EC2 안에서 설치하고 실행하기&quot; data-og-description=&quot;[EC2] 안에서 nginx 사용하기[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데 &quot; data-og-host=&quot;8735.tistory.com&quot; data-og-source-url=&quot;https://8735.tistory.com/196&quot; data-og-url=&quot;https://8735.tistory.com/196&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cw4IVk/hyZNVrFj7W/w9p9U7CDSjMutvbyvuS8f1/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/dHLju4/hyZNLO8aJ2/gPybDRk2gxGkeciMrcJZwK/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/1DC92/hyZObGqZDa/BsJJyydZI5LklKiJKoIMM1/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200&quot;&gt;&lt;a href=&quot;https://8735.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://8735.tistory.com/196&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cw4IVk/hyZNVrFj7W/w9p9U7CDSjMutvbyvuS8f1/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/dHLju4/hyZNLO8aJ2/gPybDRk2gxGkeciMrcJZwK/img.jpg?width=398&amp;amp;height=256&amp;amp;face=194_40_243_94,https://scrap.kakaocdn.net/dn/1DC92/hyZObGqZDa/BsJJyydZI5LklKiJKoIMM1/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200');&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] EC2 안에서 설치하고 실행하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[EC2] 안에서 nginx 사용하기[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;8735.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지금 여기까지 했는데 처음엔 연습삼아 해보라더니&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이걸로 그냥 다 쓰자고 하셔서 고정 IP 받고 .. 사용하게 생겼다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 이제 고정 IP 하는 방법을 해보겠다 ..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpflqO/dJMcacuJx5B/IijWWVmOWF5I2aYksdGiE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpflqO/dJMcacuJx5B/IijWWVmOWF5I2aYksdGiE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpflqO/dJMcacuJx5B/IijWWVmOWF5I2aYksdGiE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpflqO%2FdJMcacuJx5B%2FIijWWVmOWF5I2aYksdGiE0%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;217&quot; height=&quot;173&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EC2 들어가서 왼쪽 목록의 네트워크 및 보안 &amp;gt; 탄력적 IP 로 들어간다&lt;/span&gt;&lt;/p&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;1658&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6TPn3/dJMcaap9ieS/Yhz0Y44OeTAE6u1lXdAN21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6TPn3/dJMcaap9ieS/Yhz0Y44OeTAE6u1lXdAN21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6TPn3/dJMcaap9ieS/Yhz0Y44OeTAE6u1lXdAN21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6TPn3%2FdJMcaap9ieS%2FYhz0Y44OeTAE6u1lXdAN21%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;1658&quot; height=&quot;448&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1658&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 탄력적 IP 주소 할당 버튼 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lMxrV/dJMcaap9ipP/DSvA4CYfA648HHxTWZwCN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lMxrV/dJMcaap9ipP/DSvA4CYfA648HHxTWZwCN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lMxrV/dJMcaap9ipP/DSvA4CYfA648HHxTWZwCN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlMxrV%2FdJMcaap9ipP%2FDSvA4CYfA648HHxTWZwCN1%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;1648&quot; height=&quot;651&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이대로 할당 누르고 나면 만들어지고&lt;/span&gt;&lt;/p&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;1639&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXI6k8/dJMcafLLbrU/yutng8M8Hjn5747lkPUaCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXI6k8/dJMcafLLbrU/yutng8M8Hjn5747lkPUaCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXI6k8/dJMcafLLbrU/yutng8M8Hjn5747lkPUaCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXI6k8%2FdJMcafLLbrU%2Fyutng8M8Hjn5747lkPUaCK%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;1639&quot; height=&quot;643&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1639&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상세에 들어가서 탄력적 IP 주소 연결 클릭&lt;/span&gt;&lt;/p&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;1652&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MHTyp/dJMcagDT0CI/dNgTvJRlMMzJPOq9EMpnr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MHTyp/dJMcagDT0CI/dNgTvJRlMMzJPOq9EMpnr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MHTyp/dJMcagDT0CI/dNgTvJRlMMzJPOq9EMpnr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMHTyp%2FdJMcagDT0CI%2FdNgTvJRlMMzJPOq9EMpnr1%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;1652&quot; height=&quot;577&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1652&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인스턴스 연결해주면 끝&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아이피 할당해주는건 아주 쉽고 간단해서 맘에든다 헤헤&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;리전당 IP 가 5개로 한정되어있기때문에 추가적으로 필요하면 요청하면 열어주기 때문에 참고하면 좋을것같다&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT</category>
      <category>AWS</category>
      <category>고정ip</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/197</guid>
      <comments>https://8735.tistory.com/197#entry197comment</comments>
      <pubDate>Wed, 19 Nov 2025 10:39:11 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins] EC2 안에서 설치하고 실행하기</title>
      <link>https://8735.tistory.com/196</link>
      <description>&lt;figure id=&quot;og_1762921780170&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;[EC2] 안에서 nginx 사용하기&quot; data-og-description=&quot;[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데 이번에 기회가 생겨서 처음&quot; data-og-host=&quot;8735.tistory.com&quot; data-og-source-url=&quot;https://8735.tistory.com/195&quot; data-og-url=&quot;https://8735.tistory.com/195&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cokkNK/hyZNkdxBRi/tpTWiEBAd5Da3Ruqeqdia1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/KRcX1/hyZNu8lX7D/379W9KwYEozNKiWlTlVE61/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/IwZjy/hyZNy9pden/tqcMlLwte33SJs4qLcd9x0/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200&quot;&gt;&lt;a href=&quot;https://8735.tistory.com/195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://8735.tistory.com/195&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cokkNK/hyZNkdxBRi/tpTWiEBAd5Da3Ruqeqdia1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/KRcX1/hyZNu8lX7D/379W9KwYEozNKiWlTlVE61/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/IwZjy/hyZNy9pden/tqcMlLwte33SJs4qLcd9x0/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200');&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;[EC2] 안에서 nginx 사용하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데 이번에 기회가 생겨서 처음&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;8735.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EC2 만드는것부터 해서 많이왔다 ..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 젠킨스만 설치하고 배포만 테스트해보면 끝난다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762921887238&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dnf update -y&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;젠킨스 설치 전에 시스템 업데이트 해주고 나서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;자바를 반드시 설치해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762921905047&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dnf install java-17-amazon-corretto -y&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;젠킨스 저장소를 등록해주고 GPG 키를 추가해줘야하는데&lt;/p&gt;
&lt;pre id=&quot;code_1762921925007&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762921932515&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dnf install jenkins -y&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나는 8080 을 이미 사용중이라 8081 로 변경해줬는데&lt;/p&gt;
&lt;pre id=&quot;code_1762921963940&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/systemd/system/jenkins.service.d

# 포트 8081로 설정
printf &quot;[Service]\nEnvironment=\&quot;JENKINS_PORT=8081\&quot;\n&quot; | \
  sudo tee /etc/systemd/system/jenkins.service.d/override.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기까지 하면 이제 모든준비는 끝났고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;테스트만 진행하면되는데&lt;/p&gt;
&lt;pre id=&quot;code_1762921990491&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl restart jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762922015084&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설정이 적용됐는지
systemctl cat jenkins | sed -n '1,120p' | grep -A2 -n &quot;JENKINS_PORT&quot;

# 8081 리스닝 중인지
sudo ss -lntp | grep 8081

# 로컬 응답 확인
curl -I http://127.0.0.1:8081/ || true&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이제 정상적인 응답이왔다면 해당 경로로 접속해보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;키를 입력하라고 뜰꺼다.&lt;/p&gt;
&lt;pre id=&quot;code_1762922044024&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해서 나온 키 복사해서 넣어주고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Install suggested plugins 클릭하면 이제 기본 세팅 완료&lt;/p&gt;</description>
      <category>IT</category>
      <category>Jenkins</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/196</guid>
      <comments>https://8735.tistory.com/196#entry196comment</comments>
      <pubDate>Wed, 12 Nov 2025 13:34:50 +0900</pubDate>
    </item>
    <item>
      <title>[EC2] 안에서 nginx 사용하기</title>
      <link>https://8735.tistory.com/195</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1762903233630&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;[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx&quot; data-og-description=&quot;진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데 이번에 기회가 생겨서 처음부터 해보려고 하는데 진짜 아무것도 몰라서 &quot; data-og-host=&quot;8735.tistory.com&quot; data-og-source-url=&quot;https://8735.tistory.com/194&quot; data-og-url=&quot;https://8735.tistory.com/194&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bKwUcQ/hyZNsP58po/xGJZMOCsqesHaWMAfl2aZ1/img.png?width=740&amp;amp;height=320&amp;amp;face=0_0_740_320,https://scrap.kakaocdn.net/dn/f7iKp/hyZNjZTZve/UTHhLkakEuXt8vmxUz4ZNK/img.png?width=740&amp;amp;height=320&amp;amp;face=0_0_740_320,https://scrap.kakaocdn.net/dn/rQcJx/hyZNzf9PF9/1HvscmTIPaD5VqT71mG4uk/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200&quot;&gt;&lt;a href=&quot;https://8735.tistory.com/194&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://8735.tistory.com/194&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bKwUcQ/hyZNsP58po/xGJZMOCsqesHaWMAfl2aZ1/img.png?width=740&amp;amp;height=320&amp;amp;face=0_0_740_320,https://scrap.kakaocdn.net/dn/f7iKp/hyZNjZTZve/UTHhLkakEuXt8vmxUz4ZNK/img.png?width=740&amp;amp;height=320&amp;amp;face=0_0_740_320,https://scrap.kakaocdn.net/dn/rQcJx/hyZNzf9PF9/1HvscmTIPaD5VqT71mG4uk/img.jpg?width=1600&amp;amp;height=1200&amp;amp;face=0_0_1600_1200');&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;[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx&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;8735.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기에 이어서 Nginx 를 추가적으로 설정해보려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지금 내 EC2 안에는 프론트 + 백 + DB 가 같이있다. 테스트 서버라 다 뭉쳐있지만&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;원래는 이렇게 안한다는 점을 기억해두고 진행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어제 nginx 백앤드 띄워놓고 오늘 다시하려고 하니 어디다가 만들어놨는지 기억이 안나더라.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그런 나를 위한 찾는 방법&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762903349365&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nginx -t&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762903357308&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nginx: [warn] conflicting server name &quot;_&quot; on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 명령어를 통해서 내가 만든 파일이 어디있는지 찾을 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 저기서는 백앤드만 띄우는 연습을 했어서 새롭게 conf 를 작성해보려고 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기존꺼는 지우거나 하나만 남겨놓는 방식으로 진행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762903683615&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /etc/nginx/conf.d/{파일명}.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762903827856&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ===============================
# FRONT + BACKEND SERVER
# ===============================

server {
    listen 80;
    server_name _;

    # -------------------------------
    # FRONTEND (React/Vue/Next etc.)
    # -------------------------------
    # 빌드된 dist 경로 (Docker로 배포했을 경우 Nginx 루트 또는 /var/www)
    root /var/www/{프로젝트명};
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # -------------------------------
    # BACKEND (Spring Boot running in Docker)
    # -------------------------------
    location /api/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 안정성 향상용 옵션
        proxy_connect_timeout 5s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # -------------------------------
    # GZIP (선택)
    # -------------------------------
    gzip on;
    gzip_types text/plain text/css application/json application/javascript application/xml+rss;
    gzip_min_length 256;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이후 :wq ( Write + Quit ) 하면 탈출할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;만약 프론트 접근이안된다면 프로젝트에서 빌드는 했는지 확인해보자.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안했다면 npm install + npm build&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내가 깜빡하고 안하고 빌드안돼서 놀랐기 때문이다 ㅎ&lt;/p&gt;
&lt;pre id=&quot;code_1762904035655&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /var/www/{프로젝트명}
sudo rsync -av --delete dist/ /var/www/{프로젝트명}/&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;파일을 nginx 루트로 복사하고&lt;/p&gt;
&lt;pre id=&quot;code_1762904049011&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nginx -t
sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;nginx 를 재시작해주면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;curl 로도 확인해보고 실제 웹 도메인영역에 입력해서도 테스트해보면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이제 EC2 가 꺼지고 재기동되면 nginx, docker, mariadb 다 같이 죽어버리니까&lt;/p&gt;
&lt;pre id=&quot;code_1762908406524&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable --now nginx
sudo systemctl enable --now docker
sudo systemctl enable --now mariadb&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;docker run 할때 --restart unless-stopped 추가해주자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;+ 기본적인 명령어들을 적어두려고 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;필요해서 매번 찾아보는것도 귀찮고 이정돈 외워둬야할것같기도하다.&lt;/p&gt;
&lt;pre id=&quot;code_1763519363124&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// nginx 파일 수정 할때 -&amp;gt; i 누르고 고치고, :wq 해서 저장
sudo vi /etc/nginx/conf.d/default.conf

// nginx 재실행
sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT</category>
      <category>EC2</category>
      <category>nginx</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/195</guid>
      <comments>https://8735.tistory.com/195#entry195comment</comments>
      <pubDate>Wed, 12 Nov 2025 08:32:28 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx</title>
      <link>https://8735.tistory.com/194</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;진짜 아무것도 모른다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;개발만 해봤지 인프라 처음해본다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;근데 이번에 기회가 생겨서 처음부터 해보려고 하는데 진짜 아무것도 몰라서 처음부터 끝까지&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기록을 좀 해놓으려고 한다. 해당 페이지에서 다 해놓으려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나처럼 아무것도 모르면 따라하면 될것같다 ㅎ&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;1. EC2 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tbRCQ/dJMcahW3lIs/yZy6bBQlEWbJ5lXi02ZulK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tbRCQ/dJMcahW3lIs/yZy6bBQlEWbJ5lXi02ZulK/img.png&quot; data-alt=&quot;보통 Amazon Linux 를 선택하는 것 같다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tbRCQ/dJMcahW3lIs/yZy6bBQlEWbJ5lXi02ZulK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtbRCQ%2FdJMcahW3lIs%2FyZy6bBQlEWbJ5lXi02ZulK%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;1105&quot; height=&quot;712&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보통 Amazon Linux 를 선택하는 것 같다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qh57G/dJMcahW3lJa/zTZ2phDippQR47PZtinuZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qh57G/dJMcahW3lJa/zTZ2phDippQR47PZtinuZ0/img.png&quot; data-alt=&quot;테스트용 서버로 구축할꺼라서 싸게싸게 잡는것이 필수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qh57G/dJMcahW3lJa/zTZ2phDippQR47PZtinuZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqh57G%2FdJMcahW3lJa%2FzTZ2phDippQR47PZtinuZ0%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;1111&quot; height=&quot;416&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테스트용 서버로 구축할꺼라서 싸게싸게 잡는것이 필수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;키체인은 없으면 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;새 키 페어 생성&lt;/b&gt;&lt;/span&gt;을 통해서 만들면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WYxG4/dJMcaeeXnRx/K5SyZeAUVhKtRaMI7urG01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WYxG4/dJMcaeeXnRx/K5SyZeAUVhKtRaMI7urG01/img.png&quot; data-alt=&quot;0.0.0.0/0 으로 하면 털려서 요금폭탄 맞으니까 반드시 보안그룹을 설정할 수 있도록 하자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WYxG4/dJMcaeeXnRx/K5SyZeAUVhKtRaMI7urG01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWYxG4%2FdJMcaeeXnRx%2FK5SyZeAUVhKtRaMI7urG01%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;620&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;0.0.0.0/0 으로 하면 털려서 요금폭탄 맞으니까 반드시 보안그룹을 설정할 수 있도록 하자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y65qX/dJMb99Y1iXp/jRipJjQkr5ShwRtpMbhWP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y65qX/dJMb99Y1iXp/jRipJjQkr5ShwRtpMbhWP0/img.png&quot; data-alt=&quot;테스트용이라 40 정도로만 잡고 늘리는건 되는데 줄이는건 안된다고 들어서 보수적인게 좋은것같다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y65qX/dJMb99Y1iXp/jRipJjQkr5ShwRtpMbhWP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY65qX%2FdJMb99Y1iXp%2FjRipJjQkr5ShwRtpMbhWP0%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;1095&quot; height=&quot;373&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테스트용이라 40 정도로만 잡고 늘리는건 되는데 줄이는건 안된다고 들어서 보수적인게 좋은것같다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2. 접속하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1762827500862&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 400 /{경로}/*.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이건 반드시 해줘야하는데 보안상 위험하니까 400 으로 막아버려주고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;경로를 입력할때는 중괄호는 빼고 ... 입력하면된다 ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;키는 진짜 절대 무슨일이 있어도 잃어버리면 안되니까 모아놓도록 하자&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762827715682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh -i /{경로}/{키체인이름}.pem {사용자이름}@{자동 할당된 IP 주소 퍼블릭 IP}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EC2 만들고 상세 페이지로 넘어가면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 필요한 정보들은 다 보일꺼다 맞춰서 입력해주면 접속완료!&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762827808169&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '-&amp;gt;
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;접속완료하면 이런 귀여운 새가 마주해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 다음부터가 걱정되는건데 힘내서 함 해보자고&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;3. 깃 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;깃 레포지토리를 클론해와야하니까 먼저 깃 설치해주시고&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762828145195&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install git -y&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나는 비공개 레포지토리라서 ssh 접속이 필요해서 키 만들어줘야한다 :(&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762828266856&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh-keygen -t ed25519 -C &quot;이메일&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762828275275&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Enter file in which to save the key (/home/ec2-user/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ec2-user/.ssh/id_ed25519
Your public key has been saved in /home/ec2-user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:...
The key's randomart image is:
+--[ED25519 256]--+
|     .o      . oE|
|    o. .     .o..|
|   . oo .   o .. |
|    o+.=   . +.. |
| . .+=o S . o =. |
|  =.=..o o   = ..|
|.=.. o.       o .|
|+ .o.          o |
| .+B*.          .|
+----[SHA256]-----+&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대충 엔터 갈겨주면 키가 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그다음 키를 확인해야 등록하니까&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762828300741&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat ~/.ssh/id_ed25519.pub&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해주면 이제 키를 확인할 수 있는데 이거 복사해서 깃에 등록해주고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클론 해주면 레포지토리 복사는 끝&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;3. MariaDB 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1762834155048&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install mariadb105-server -y
sudo systemctl enable mariadb
sudo systemctl start mariadb&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;세개의 명령어를 입력해주면 mariaDB 설치는 완료&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762834267793&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mysql -u root&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;입력했을 때&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762834279646&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.29-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음과 같이 뜬다면 일단 설치하고 접속하는거 까지는 완료된 상태이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나갈때는 \q 헤헤 ..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;원격으로 들어가기 위해서 user 설정이 필요한데&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762834389499&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE USER 'root'@'{IP}' IDENTIFIED BY '{패스워드}';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'{IP}' WITH GRANT OPTION;
FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게 하면 생성 완료&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;4. PM2 설치&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 pm2 를 설치해야하는데 애는 Node 가 필요해서 먼저 설치해줘야한다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762835423105&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762835506321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo npm install -g pm2&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일단 설치만 해놓고 추가적인 설정은 Docker 띄우고 나서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마저 진행하도록 하자&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5. Doker 설치&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1762835675061&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum update -y
sudo yum install -y docker
sudo systemctl enable --now docker
sudo groupadd docker            # docker 그룹이 없는 경우 만듦
sudo usermod -aG docker ec2-user&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762835921494&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /usr/libexec/docker/cli-plugins/
sudo curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m) \
  -o /usr/libexec/docker/cli-plugins/docker-compose
sudo chmod +x /usr/libexec/docker/cli-plugins/docker-compose
docker compose version&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기까지하면 이제 필요한 설치는 다 한것같고 ..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두근두근 실제 띄우기 시간이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6. 컨테이너 띄우기&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선 나는 서버가 Java Spring 이라서 JDK 를 설치해줘야한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762836725065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dnf install -y java-17-amazon-corretto&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자바버전은 자신의 환경에 맞게 설치를 해주고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;dokerfile&lt;/b&gt; 을 작성해주면된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762837178712&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +x ./gradlew
./gradlew clean bootJar -x&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하면 이제 JAR 빌드파일을 만들어주고나서&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762837217735&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker build -t {클론받은폴더명} .&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그다음에 이미지 빌드해주면&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762837279487&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[internal] load build definition from Dockerfile
...
naming to docker.io/library/{프로젝트명}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뭐 이런식으로 쭉 실행된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762837299504&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d --name {컨테이너명} \
  -p 8080:8080 \
  -e JAVA_TOOL_OPTIONS=&quot;-XX:MaxRAMPercentage=70 -XX:+UseContainerSupport -XX:+UseG1GC&quot; \
{프로젝트명}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게하면 이제 도커가 뜨는데 성공한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762841323601&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;를 실행해보면 내가 만든 컨테이너가 띄워져있으면 성공!&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;7. nginx 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 도메인을 nginx 를 설치하고 띄울 준비를 해보자&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762841421316&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dnf install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설치를 완료하고나면&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762841508081&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nano /etc/nginx/conf.d/bsms-backend.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;입력하고나면 이제 .conf 입력할 수 있게 변하는데&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762841527946&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
  listen 80;
  server_name _;

  location /api/ {
    proxy_pass http://127.0.0.1:8080/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 120s;
    proxy_connect_timeout 5s;
    proxy_send_timeout 120s;
  }

  location = / {
    return 200 &quot;OK - Nginx is running\n&quot;;
    add_header Content-Type text/plain;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;작성하고&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762841535737&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nginx -t
sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저장하면 기본적인 설정은 완료되는 듯 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 curl 로 확인해보면 정상적인 응답이 내려오는지 확인해볼수도 있고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;퍼블릭 IP 로 들어가면 &lt;span style=&quot;color: #1c1c14; text-align: start;&quot;&gt;OK - Nginx is running 뜨면 엔진엑스 설정은 끝난듯하다.&lt;/span&gt;&lt;/span&gt;&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>IT</category>
      <category>AWS</category>
      <category>docker</category>
      <category>EC2</category>
      <category>nginx</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/194</guid>
      <comments>https://8735.tistory.com/194#entry194comment</comments>
      <pubDate>Tue, 11 Nov 2025 11:26:14 +0900</pubDate>
    </item>
    <item>
      <title>[RN] Storybook 연결하기</title>
      <link>https://8735.tistory.com/193</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 테스트 환경&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1730965672467&quot; class=&quot;1c&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;react&quot;: &quot;19.0.0&quot;,
&quot;react-native&quot;: &quot;0.79.2&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;storybook 사용하는 방법을 작성해보도록 하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;진짜 ChatGPT 에게 2일을 넘게 물어봤는데 안된다고만하고 그짓말만 쳐서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;진짜 삽질이란 삽질은 다하고 구글링을 통해 열심히 뒤져서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;겨우겨우 완성했다 ..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나는 CLI 환경에서 개발을 하고있고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;스토리북은 8.5 버전을 사용했으니 참고 부탁한다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1752045659417&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;Storybook 8.5&quot; data-og-description=&quot;Accessibility at your fingertips&quot; data-og-host=&quot;storybook.js.org&quot; data-og-source-url=&quot;https://storybook.js.org/blog/storybook-8-5/&quot; data-og-url=&quot;https://storybook.js.org/blog/storybook-8-5/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdLeNg/hyZjCq9Sdw/An2t4D59pAwip5qL8BvuK1/img.jpg?width=1921&amp;amp;height=1000&amp;amp;face=0_0_1921_1000,https://scrap.kakaocdn.net/dn/bPAGS9/hyZjBTkOVJ/PrTiTAOBAdNichrt3jXlh0/img.jpg?width=1921&amp;amp;height=1000&amp;amp;face=0_0_1921_1000,https://scrap.kakaocdn.net/dn/beSTTY/hyZf8ZwxHo/nAOqzgVykDlUiqfcsfAUf1/img.png?width=2000&amp;amp;height=1205&amp;amp;face=0_0_2000_1205&quot;&gt;&lt;a href=&quot;https://storybook.js.org/blog/storybook-8-5/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://storybook.js.org/blog/storybook-8-5/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdLeNg/hyZjCq9Sdw/An2t4D59pAwip5qL8BvuK1/img.jpg?width=1921&amp;amp;height=1000&amp;amp;face=0_0_1921_1000,https://scrap.kakaocdn.net/dn/bPAGS9/hyZjBTkOVJ/PrTiTAOBAdNichrt3jXlh0/img.jpg?width=1921&amp;amp;height=1000&amp;amp;face=0_0_1921_1000,https://scrap.kakaocdn.net/dn/beSTTY/hyZf8ZwxHo/nAOqzgVykDlUiqfcsfAUf1/img.png?width=2000&amp;amp;height=1205&amp;amp;face=0_0_2000_1205');&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;Storybook 8.5&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Accessibility at your fingertips&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;storybook.js.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre class=&quot;kotlin&quot; style=&quot;background-color: #f7fafc; color: #2e3438; text-align: start;&quot;&gt;&lt;code&gt;npx storybook@latest init&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;을 해주면 .rnstorybook 을 만들어준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&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;400&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI75ZW/btsPbyfqIp8/Glx3kIl1L9UQ8rx4gTAkW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI75ZW/btsPbyfqIp8/Glx3kIl1L9UQ8rx4gTAkW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI75ZW/btsPbyfqIp8/Glx3kIl1L9UQ8rx4gTAkW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI75ZW%2FbtsPbyfqIp8%2FGlx3kIl1L9UQ8rx4gTAkW1%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;400&quot; height=&quot;284&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하고나면 이런 폴더가 생길건데, 이제 컴포넌트들은 &lt;b&gt;stories&lt;/b&gt; 에 넣어놓고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용하면된다. 해당 컴포넌트들은 기본예제로 같이 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1752045855598&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// metro.config.js

const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
const path = require('path');
const withStorybook = require('@storybook/react-native/metro/withStorybook');
const defaultConfig = getDefaultConfig(__dirname);
const { assetExts, sourceExts } = defaultConfig.resolver;

/**
 * Metro configuration
 * https://reactnative.dev/docs/metro
 *
 * @type {import('metro-config').MetroConfig}
 */
const config = {
  transformer: {
    babelTransformerPath: require.resolve('react-native-svg-transformer'),
  },
  resolver: {
    assetExts: assetExts.filter(ext =&amp;gt; ext !== 'svg'),
    sourceExts: [...sourceExts, 'svg'],
  },
};
// set your own config here  

const finalConfig = mergeConfig(defaultConfig, config);

module.exports = withStorybook(finalConfig, {
  // Set to false to remove storybook specific options
  // you can also use a env variable to set this
  enabled: true,
  // Path to your storybook config
  configPath: path.resolve(__dirname, './.rnstorybook'),

  // Optional websockets configuration
  // Starts a websocket server on the specified port and host on metro start
  // websockets: {
  //   port: 7007,
  //   host: 'localhost',
  // },
});&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;요고 그대로 가져다가 쓰고&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;&quot;storybook-generate&quot;: &quot;sb-rn-get-stories&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;package.json&lt;/b&gt; 을 확인해보면 &lt;b&gt;scripts&lt;/b&gt; 쪽에 이런게 있을것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이걸 실행하게되면 자동으로 .stories.tsx 파일들을 수집해준다고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이러고 이제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;yarn ios&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;yarn android&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;를 해주면 끝~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 화면은 이런식으로 조절해가면서 쓰면된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1752046022806&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import StorybookUIRoot from './.rnstorybook';
...

const SHOW_STORYBOOK = __DEV__ &amp;amp;&amp;amp; true;

...

const App = () =&amp;gt; {
	...
    if (SHOW_STORYBOOK) {
    	return &amp;lt;StorybookUIRoot /&amp;gt;;
  	}
    ...
    
    return (
    	...
    )
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Javascript/React-Native</category>
      <category>React</category>
      <category>react-native</category>
      <category>개발</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/193</guid>
      <comments>https://8735.tistory.com/193#entry193comment</comments>
      <pubDate>Wed, 9 Jul 2025 16:27:28 +0900</pubDate>
    </item>
    <item>
      <title>[RN] gorhom 바텀시트 사용하기</title>
      <link>https://8735.tistory.com/192</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 테스트 환경&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1730965672467&quot; class=&quot;1c&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&quot;react&quot;: &quot;19.0.0&quot;,
&quot;react-native&quot;: &quot;0.79.2&quot;&lt;/code&gt;&lt;/pre&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;&lt;span&gt;&lt;a href=&quot;https://github.com/gorhom/react-native-bottom-sheet&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gorhom&lt;/a&gt; 이 가장 많은 바텀시트 사용량을 보이길래 이걸로 작업을 진행했다.&lt;/span&gt;&lt;span&gt;다른곳에서도 사용하기에 컴포넌트 분리시켜놓고 커스텀가능하게끔 만들어놨다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1750658744546&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import React, {forwardRef, useMemo} from 'react';
import {default as GorhomBottomSheet} from '@gorhom/bottom-sheet';
import {SHADOWS} from '~styles/shadows';

export type BottomSheetProps = {
  children: React.ReactNode;
  snapPoints?: (string | number)[];
  enablePanDownToClose?: boolean;
  onChange?: (index: number) =&amp;gt; void;
};

/*
 * 반드시 사용하는 부모 뷰에서
 * &amp;lt;GestureHandlerRootView style={{ flex: 1 }}&amp;gt;&amp;lt;/GestureHandlerRootView&amp;gt;
 * 로 감싸줄 것
 */

export const BottomSheet = forwardRef&amp;lt;GorhomBottomSheet, BottomSheetProps&amp;gt;(({children, snapPoints, onChange, enablePanDownToClose}, ref) =&amp;gt; {
  const memoizedSnapPoints = useMemo(() =&amp;gt; snapPoints ?? ['80%'], [snapPoints]);

  return (
    &amp;lt;GorhomBottomSheet
      ref={ref}
      snapPoints={memoizedSnapPoints}
      onChange={onChange}
      enablePanDownToClose={enablePanDownToClose}
      style={SHADOWS.BOTTOM_SHEET}
      containerStyle={{
        zIndex: 2,
      }}
      activeOffsetX={[-999, 999]} activeOffsetY={[-5, 5]}
    &amp;gt;
      {children}
    &amp;lt;/GorhomBottomSheet&amp;gt;
  );
});&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 가장 중요한게 &lt;b&gt;activeOffsetX&lt;/b&gt; &lt;b&gt;activeOffsetY&lt;/b&gt; 다 ....&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;진짜 애들때문에 고생이란 고생은 다했는데 ..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저거 없으면 바텀시트안에서 &lt;b&gt;안드로이드에서 횡스크롤 ( 가로스크롤 )이 안된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이유는 바텀시트가 터치이벤트를 가져가버리기 때문에 안의 요소의 스크롤 터치가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;안먹는 이유인데 저걸 통해서 터치이벤트를 구분해서 작업하는것이다 ..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;바텀시트쪽 사용 방법은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1750658843742&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;BottomSheet
      ref={ref}
      snapPoints={['13%', '60%']}
      onChange={onChange}
    &amp;gt;
      &amp;lt;Category /&amp;gt;
      &amp;lt;Switch options={['おすすめ順', '口コミ数順', '距離順']} selected={'おすすめ順'} setSelected={() =&amp;gt; {}}/&amp;gt;
      &amp;lt;Divider /&amp;gt;
      &amp;lt;BottomSheetScrollView
        contentContainerStyle={styles.container}
        showsVerticalScrollIndicator={true}
        keyboardShouldPersistTaps=&quot;handled&quot;
        style={styles.container}
      &amp;gt;
        &amp;lt;Title /&amp;gt;
        {
          Array.from({length: 10}).map((_, i) =&amp;gt; (
            &amp;lt;Contents key={i}/&amp;gt;
          ))
        }
      &amp;lt;/BottomSheetScrollView&amp;gt;
    &amp;lt;/BottomSheet&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;snapPoints 를 통해서 바텀시트의 높이를 지정해줄수있는데&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1750658895239&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const onChange = (index: number) =&amp;gt; {
    console.log(index)
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;를 통해서 바텀시트의 높이값을 트래킹 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;0 : 초기상태&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1 : 살짝 올라온상태 ( 코드상으론 13% 이 될것이다. )&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2 : 최대 상태 ( 코드상으론 60% 이상이 될것이다. )&lt;/span&gt;&lt;/p&gt;</description>
      <category>Javascript/React-Native</category>
      <category>React</category>
      <category>react-native</category>
      <category>개발</category>
      <author>eulBlue</author>
      <guid isPermaLink="true">https://8735.tistory.com/192</guid>
      <comments>https://8735.tistory.com/192#entry192comment</comments>
      <pubDate>Mon, 23 Jun 2025 15:09:28 +0900</pubDate>
    </item>
  </channel>
</rss>