<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코드로 그리는 미래</title>
    <link>https://rongha.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 19 Aug 2026 06:19:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>롱하</managingEditor>
    <image>
      <title>코드로 그리는 미래</title>
      <url>https://tistory1.daumcdn.net/tistory/5769117/attach/1da4bd0a7df040f698cd9eeb13cc6773</url>
      <link>https://rongha.tistory.com</link>
    </image>
    <item>
      <title>[2nd Project] 2026.06.26 내가 설치한 Locky Linux에 개발기 배포하기</title>
      <link>https://rongha.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;역시 직장은 사회 경험도 하면서 돈도벌고 업무에 대하여 배우는것이 가능한 '삶에 있어서 좋은 역할을 하는곳' 이라는걸 항상 새기면서 일하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 프로젝트를 하면서 개발기 셋팅부터 배포방식도 내가 새롭게 만들어야할 기회가 있었는데 그 과정을 오늘 좀 적어보려고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 내 상황 :&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 115px;&quot; border=&quot;1&quot; data-end=&quot;353&quot; data-start=&quot;151&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;353&quot; data-start=&quot;179&quot;&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;222&quot; data-start=&quot;179&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;189&quot; data-start=&quot;179&quot;&gt;프로젝트 세팅&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;222&quot; data-start=&quot;189&quot; data-col-size=&quot;sm&quot;&gt;완료 (Spring Boot, 파일 업로드 구현 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;266&quot; data-start=&quot;223&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;228&quot; data-start=&quot;223&quot;&gt;서버&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;266&quot; data-start=&quot;228&quot; data-col-size=&quot;sm&quot;&gt;있음 (Rocky Linux, SSH/FTP 포트 확인 완료)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;295&quot; data-start=&quot;267&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;277&quot; data-start=&quot;267&quot;&gt;Jenkins&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;295&quot; data-start=&quot;277&quot; data-col-size=&quot;sm&quot;&gt;설치 예정 or 테스트 중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;324&quot; data-start=&quot;296&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;304&quot; data-start=&quot;296&quot;&gt;빌드 방식&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;324&quot; data-start=&quot;304&quot; data-col-size=&quot;sm&quot;&gt;선택 전 (JAR? WAR?)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;353&quot; data-start=&quot;325&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;333&quot; data-start=&quot;325&quot;&gt;배포 방식&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;353&quot; data-start=&quot;333&quot; data-col-size=&quot;sm&quot;&gt;수동에서 자동으로 옮기려는 중&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 Jenkins를 저번에 사용하기 위해서 CentOS에서 실험으로 테스트 해본적은 있지만 실질적으로 적용을 위해서 해본적은 없었으니 이번 프로젝트에 처음으로 적용시켜보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Jenkins기반으로 CI/CD 구조를 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 빌드 방식 정하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jar방식 사용 (내장 톰캣 기반이며 단독 실행이 가능)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;프론트&amp;nbsp;빌드 &lt;br /&gt;./gradlew&amp;nbsp;clean&amp;nbsp;build&amp;nbsp;-Ptarget=front &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;어드민&amp;nbsp;빌드 &lt;br /&gt;./gradlew&amp;nbsp;clean&amp;nbsp;build&amp;nbsp;-Ptarget=admin&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 개발기 서버에 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. jar 파일 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp -P 39022 &quot;C:\Workspace\smartrecord\build\libs\smartrecord-front.jar&quot; rongha@192.000.55.240:/home/dev/&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;scp -P 39022 &quot;C:\Workspace\smartrecord\build\libs\smartrecord-front.jar&quot; rongha@192.000.55.240:/home/rongha/&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;403&quot; data-start=&quot;385&quot; data-ke-size=&quot;size16&quot;&gt;그 다음, 서버에 들어가서 옮기기&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;ssh -p 39022 rongha@192.000.55.240 &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# 관리자 권한으로 파일 이동&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;sudo &lt;/span&gt;&lt;span&gt;&lt;span&gt;mv&lt;/span&gt;&lt;/span&gt;&lt;span&gt; /home/rongha/smartrecord-front.jar /home/dev/&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 서버 접속&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh -p 39022 rongha @192.000.55.240 &lt;br /&gt;cd&amp;nbsp;/home/dev&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nohup&amp;nbsp;java&amp;nbsp;-jar&amp;nbsp;smartrecord-front.jar&amp;nbsp;--spring.profiles.active=front&amp;nbsp;&amp;gt;&amp;nbsp;front.log&amp;nbsp;2&amp;gt;&amp;amp;1&amp;nbsp;&amp;amp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo nohup java -jar smartrecord-front.jar --spring.profiles.active=front &amp;gt; front.log 2&amp;gt;&amp;amp;1 &amp;amp; ( &lt;b&gt;X&lt;/b&gt; )&lt;/p&gt;
&lt;p data-end=&quot;355&quot; data-start=&quot;259&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;: 이렇게 쓰면 nohup java -jar에는 sudo가 적용되지만&amp;nbsp;front.log는 &lt;b&gt;현재 유저 권한(rongha)&lt;/b&gt; 으로 실행됨 &amp;rarr; 권한 에러 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;sudo bash -c 'nohup java -jar smartrecord-front.jar --spring.profiles.active=front &amp;gt; front.log 2&amp;gt;&amp;amp;1 &amp;amp;'&lt;/span&gt; ( &lt;b&gt;O &lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: bash 전체에 sudo 먹이기 ( 이렇게 하면 &lt;b&gt;리디렉션까지 모두 root 권한으로 실행돼서 오류 안 남 &lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️ &lt;b&gt;리눅스에서 스프링 부트 JAR을 &quot;백그라운드 실행&quot;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&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;804&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDXV1K/btsOSNRwAQc/TaIWIlcpDueV25tvEcYV21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDXV1K/btsOSNRwAQc/TaIWIlcpDueV25tvEcYV21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDXV1K/btsOSNRwAQc/TaIWIlcpDueV25tvEcYV21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDXV1K%2FbtsOSNRwAQc%2FTaIWIlcpDueV25tvEcYV21%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;804&quot; height=&quot;441&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;531&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;531&quot; data-ke-size=&quot;size16&quot;&gt;이 명령 실행하면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;624&quot; data-start=&quot;542&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;575&quot; data-start=&quot;542&quot;&gt;서버에서 JAR이 &lt;b&gt;독립적으로 백그라운드에서 실행됨&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;604&quot; data-start=&quot;576&quot;&gt;로그가 front.log 파일에 계속 저장됨&lt;/li&gt;
&lt;li data-end=&quot;624&quot; data-start=&quot;605&quot;&gt;&lt;b&gt;SSH 끊겨도 죽지 않음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 실행 후 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ps&amp;nbsp;-ef&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;smartrecord&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V8BMk/btsOSVhYuWd/FoFlEenJIU2whIRy1SlPiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V8BMk/btsOSVhYuWd/FoFlEenJIU2whIRy1SlPiK/img.png&quot; data-alt=&quot;스마트 레코드 서버가 성공적으로 백그라운드에서 실행 중이라는 의미&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V8BMk/btsOSVhYuWd/FoFlEenJIU2whIRy1SlPiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV8BMk%2FbtsOSVhYuWd%2FFoFlEenJIU2whIRy1SlPiK%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;1157&quot; height=&quot;89&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스마트 레코드 서버가 성공적으로 백그라운드에서 실행 중이라는 의미&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;327&quot; data-start=&quot;123&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;327&quot; data-start=&quot;148&quot;&gt;
&lt;tr data-end=&quot;203&quot; data-start=&quot;148&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;163&quot; data-start=&quot;148&quot;&gt;root 61330&lt;/td&gt;
&lt;td data-end=&quot;203&quot; data-start=&quot;163&quot; data-col-size=&quot;sm&quot;&gt;&lt;b&gt;PID 61330번&lt;/b&gt; 프로세스 실행 중 (root 권한)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;257&quot; data-start=&quot;204&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;240&quot; data-start=&quot;204&quot;&gt;java -jar smartrecord-front.jar&lt;/td&gt;
&lt;td data-end=&quot;257&quot; data-start=&quot;240&quot; data-col-size=&quot;sm&quot;&gt;JAR 파일 실행 중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;327&quot; data-start=&quot;258&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;293&quot; data-start=&quot;258&quot;&gt;--spring.profiles.active=front&lt;/td&gt;
&lt;td data-end=&quot;327&quot; data-start=&quot;293&quot; data-col-size=&quot;sm&quot;&gt;application-front.yml 설정 적용됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tail&amp;nbsp;-f&amp;nbsp;front.log&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1xcGL/btsORCjn6dh/4W4AfIPlaejM8Y4wrNs6I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1xcGL/btsORCjn6dh/4W4AfIPlaejM8Y4wrNs6I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1xcGL/btsORCjn6dh/4W4AfIPlaejM8Y4wrNs6I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1xcGL%2FbtsORCjn6dh%2F4W4AfIPlaejM8Y4wrNs6I1%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;934&quot; height=&quot;376&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발기 배포 완료  &lt;/b&gt;&lt;/p&gt;</description>
      <category>Memo/TIL</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/69</guid>
      <comments>https://rongha.tistory.com/69#entry69comment</comments>
      <pubDate>Thu, 26 Jun 2025 15:06:54 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 3.x 개발환경 템플릿</title>
      <link>https://rongha.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ build.gradle (Gradle 기반)&lt;/p&gt;
&lt;pre id=&quot;code_1749711852783&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.5'
    id 'io.spring.dependency-management' version '1.1.5'
}

group = 'com.bp'
version = '0.0.1-SNAPSHOT'
java {
    sourceCompatibility = '17'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    runtimeOnly 'com.h2database:h2'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ application.yml&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749711877096&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create
    database-platform: org.hibernate.dialect.H2Dialect

  h2:
    console:
      enabled: true

  # 추가로 필요 시 H2 콘솔 경로 커스터마이징 가능
  # h2:
  #   console:
  #     path: /h2-console&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3️⃣ SecurityConfig&lt;/p&gt;
&lt;pre id=&quot;code_1749711892236&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.bp.smartrecord.core.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -&amp;gt; auth.anyRequest().permitAll())
            .csrf(csrf -&amp;gt; csrf.disable())
            .headers(headers -&amp;gt; headers.frameOptions(frame -&amp;gt; frame.disable()));
        return http.build();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4️⃣ H2 콘솔 접속법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2083&quot; data-start=&quot;2042&quot;&gt;URL: http://localhost:8080/h2-console&lt;/li&gt;
&lt;li data-end=&quot;2116&quot; data-start=&quot;2084&quot;&gt;JDBC URL: jdbc:h2:mem:testdb&lt;/li&gt;
&lt;li data-end=&quot;2129&quot; data-start=&quot;2117&quot;&gt;User: sa&lt;/li&gt;
&lt;li data-end=&quot;2146&quot; data-start=&quot;2130&quot;&gt;Password: (빈칸)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; Spring Boot 초기 셋팅 시 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Spring</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/68</guid>
      <comments>https://rongha.tistory.com/68#entry68comment</comments>
      <pubDate>Thu, 12 Jun 2025 16:11:52 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] Jenkins 설치중에 yum install 관련 오류 정리</title>
      <link>https://rongha.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 내 root 계정에 Jenkins를 설치하던 도중에 다른 계정에 설치된 Opensearch로 인해서 설치가 되지않는 오류가 계속해서 발생했는데, 그 과정에서 알게된 Linux 관련 개념들을 정리해보고자 글을 쓰게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Jenkins는 왜 설치가 안되었을까 ?&lt;/p&gt;
&lt;pre id=&quot;code_1743122946289&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yum install jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 내부적으로 모든 repo를 뒤져서 &lt;b&gt;jenkins&lt;/b&gt; 패키지를 찾는데, 당시에 Opensearch repo가 인증서 오류(SSL error) 때문에 yum이 멈췄었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;*&lt;/b&gt; &lt;b&gt;yum의 특징 :&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 하나의 repo라도 깨지면 전체 설치를 중단하는 경우가 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 특히 디펜던시 계산 중 오류나면 &amp;gt; Nothing to do, failed, exit&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Jenkins 설치를 위해 비활성화 해두었던 Opensearch 저장소를 다시 살릴 수 있을까 ? &amp;gt; &lt;b&gt;가능 !&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743123111826&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /etc/yum.repos.d/opensearch.repo&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743123135628&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[opensearch]
name=OpenSearch repository
baseurl=https://packages.opensearch.org/yum/opensearch/2.x
gpgcheck=1
gpgkey=https://artifacts.opensearch.org/publickeys/opensearch.pgp
enabled=1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 이게 내가 이미 설치해둔 Jenkins에 영향을 줄까 ? &amp;gt; &lt;b&gt;No !&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743123251469&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/bin/java -jar /usr/share/java/jenkins.war&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 Jenkins는 독립 실행되는 시스템 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 단순히 Java 앱을 실행할 뿐이지 yum, opensearch, repo와는 아무 관련이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Jenkins는 이미 .war 파일로 실행 중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 시스템 repo 설정은 패키지 설치에만 관여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Jenkins는 이미 설치 됐고, 재설치하지 않는 한 영향을 받지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  심지어 Jenkins 자체는 &lt;b&gt;재부팅 시 자동 실행&lt;/b&gt;되는 서비스이기 때문에&lt;br /&gt;Opensearch repo를 다시 넣든 말든 &lt;b&gt;이미 실행된 Jenkins는 그대로 잘 돌아간다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;b&gt;* 요약&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins &lt;b&gt;설치 중&lt;/b&gt;에 Opensearch 때문에 오류 &amp;rarr; 설치 실패&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: yum repo 오류 때문에 Jenkins 패키지를 못 받아왔기 때문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins &lt;b&gt;설치 완료 후&lt;/b&gt; Opensearch 다시 살림 &amp;rarr; 문제 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Jenkins는 &lt;b&gt;이미 설치되고 독립 실행 중이라&lt;/b&gt; repo 상태와 무관&lt;/p&gt;</description>
      <category>Error Note</category>
      <category>contos</category>
      <category>jenkins</category>
      <category>Linux</category>
      <category>opensearch</category>
      <category>yum</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/65</guid>
      <comments>https://rongha.tistory.com/65#entry65comment</comments>
      <pubDate>Fri, 28 Mar 2025 09:58:00 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins]실제 Linux CentOS7서버에 원격으로 접속해서 Jenkins 설치하기</title>
      <link>https://rongha.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* Jenkins 개발기 테스트 흐름&lt;/p&gt;
&lt;pre id=&quot;code_1743059509346&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[개발PC]
     &amp;darr; SSH로 접속
[리눅스(CentOS7) PC]
     &amp;rarr; Jenkins 설치 (서버에)
     &amp;rarr; Git 연동 (브랜치 Push 감지)
     &amp;rarr; React/Spring 빌드 자동화
     &amp;rarr; Docker 이미지 빌드 &amp;amp; 컨테이너 재시작&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Putty로 내 CentOS7 PC 원격으로 접속&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;686&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgOtJr/btsMX0zkISN/bBYCOPXXpYgYp2IY6CqZg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgOtJr/btsMX0zkISN/bBYCOPXXpYgYp2IY6CqZg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgOtJr/btsMX0zkISN/bBYCOPXXpYgYp2IY6CqZg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgOtJr%2FbtsMX0zkISN%2FbBYCOPXXpYgYp2IY6CqZg1%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;832&quot; height=&quot;686&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Jenkins 설치 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) Jenkins 저장소 등록&lt;/p&gt;
&lt;pre id=&quot;code_1743059695492&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) Jenkins 설치&lt;/p&gt;
&lt;pre id=&quot;code_1743059711583&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install jenkins -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) Jenkins 시작 + 부팅 시 자동 실행&lt;/p&gt;
&lt;pre id=&quot;code_1743059739410&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Jenkins 실행
sudo systemctl start jenkins

# 서버 부팅 시 자동으로 실행되게 설정
sudo systemctl enable jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Error 과정]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 여기서 에러사항 발생&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'sudo systemctl start jenkins'부터 Failed to start ~ Unit not found 메시지가 뜸&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 이건 Jenkins가 아직 설치되지 않았거나, 서비스로 등록되지 않았을때 발생하는 에러&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 원인 : 기존에 타인이 테스트하던 다른 저장소에서 SSL 관련해서 오류가 난 상태였고 해당 저장소 비활성화 후 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; yum은 기본적으로 모든 저장소가 문제 없이 연결되어야 설치를 진행하고, 하나라도 실패하면 '안전하지 않다'라고 판단해서 설치를 중단한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;# 해결&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743060127414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum --disablerepo=opensearch install jenkins -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 저장소인 'opensearch'는 무시하고 Jenkins는 나머지 정상 저장소에서 받아서 설치 완료 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다시 'sudo systemctl start jenkins' 메시지 입력하고 실행 완료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Jenkins 제대로 실행중인지 확인 &amp;gt; Fail 발생&lt;/p&gt;
&lt;pre id=&quot;code_1743060491837&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Jenkins 실행이 왜 실패 했는지 먼저 파악해보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 1 : Jenkins가 여러 번 시도했는데 계속 실패해서 systemd가 멈춘 상태&lt;/p&gt;
&lt;pre id=&quot;code_1743060582750&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;start request repeated too quickly for jenkins.service&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 2 : jenkins.service 설정파일에서 systemd 버전이 인식 못하는 옵션이 있다는 뜻 (CentOS7에서 자주 등장)&lt;/p&gt;
&lt;pre id=&quot;code_1743060664903&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Unknown lvalue 'StartLimitBurst' in section 'Unit'
Unknown lvalue 'StartLimitIntervalSec' in section 'Unit'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;# 해결&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jenkins.service 파일 열고&lt;/p&gt;
&lt;pre id=&quot;code_1743060759835&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /usr/lib/systemd/system/jenkins.service&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Unit]섹션 안에 있는 다음 두 줄을 삭제 처리&lt;/p&gt;
&lt;pre id=&quot;code_1743060802087&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;StartLimitBurst=
StartLimitIntervalSec=&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 근데 여기서도 계속 실패하기 시작했고, 내부적으로 Jenkins 실행 중 에러 발생 중이라고 판단&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 2]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- jenkins.log 로그 파일이 아예 없음 &amp;rarr; Jenkins가 아예 실행도 안 됐다는 뜻&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CentOS7에서 가장 흔한 이유는 JAVA_HOME 미지정 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Jenkins에 정확한 Java 경로 지정해주기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Java가 실제로 어디있는지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1743061095598&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;readlink -f $(which java)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Jenkins에 Java경로 지정하기위해 vi 들어가기&lt;/p&gt;
&lt;pre id=&quot;code_1743061211560&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /etc/sysconfig/jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 이렇게 했는데 아무것도 안뜨는 화면 발생&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciZQfE/btsMXTHi3kK/QczvdXNMVGxiDKfWp4EvQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciZQfE/btsMXTHi3kK/QczvdXNMVGxiDKfWp4EvQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciZQfE/btsMXTHi3kK/QczvdXNMVGxiDKfWp4EvQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciZQfE%2FbtsMXTHi3kK%2FQczvdXNMVGxiDKfWp4EvQK%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;1920&quot; height=&quot;1080&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;127&quot; data-start=&quot;107&quot;&gt;결과: &lt;b&gt;&quot;빈 화면&quot;만 보임&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;213&quot; data-start=&quot;128&quot;&gt;하단에는: &quot;/etc/sysconfig/jenkins&quot; [New File]&lt;br /&gt;&amp;rarr; 즉, &lt;b&gt;이 파일이 존재하지 않아서 새로 만들어진 상태&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; Jenkins 설치가 중간에 비정상적으로 종료됐거나, 설치 후 이 설정 파일이 자동으로 생성되지 않았을 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 직접 Java 경로만 딱 넣기로 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 위에서 '&lt;b&gt;readlink -f $(which java)&lt;/b&gt;'를 통해서 Java 경로를 확인했을때 11이 떴고, 난 17로 진행하기 위해서 17버전을 새로 설치하고 진행하기로 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Java 17 설치 (CentOS 7 기준)&lt;/p&gt;
&lt;pre id=&quot;code_1743062201023&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install java-17-openjdk java-17-openjdk-devel -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;devel까지 설치해야 Jenkins가 빌드 관련 기능도 잘 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 발생 !&lt;/p&gt;
&lt;pre id=&quot;code_1743062353504&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;No package java-17-openjdk available.
No package java-17-openjdk-devel available.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, CentOS 기본 저장소에 Java17이 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CentOS 7은 오래된 버전이라서 기본 yum repo에 최신 Java가 빠져있는 경우가 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 해결책 : EPEL + AdoptOpenJDK 저장소 추가 &amp;gt; 그러면 Java 17 설치 가능해진다.,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step 1 : EPEL 저장소 추가&lt;/p&gt;
&lt;pre id=&quot;code_1743121057704&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install epel-release -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 에러발생 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'No package epel-release available.'&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;265&quot; data-start=&quot;210&quot;&gt;이미 설치되어 있거나, 설치는 됐지만 yum에는 아직 안 반영된 상태&lt;/li&gt;
&lt;li data-end=&quot;265&quot; data-start=&quot;210&quot;&gt;CentOS 7에서 사용 가능한 EPEL mirror가 yum 설정에 누락됐거나 막혔음&lt;/li&gt;
&lt;li data-end=&quot;287&quot; data-start=&quot;266&quot;&gt;yum 캐시가 오래되어 인식 못함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 굳이 epel-release에 의존하지 않고, Java 17 설치를 위한 Adoptium 저장소만 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step 2 : AdoptOpenJDK 저장소 등록 (Java 17 제공하는 공식 repo)&lt;/p&gt;
&lt;pre id=&quot;code_1743121110145&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rpm --import https://packages.adoptium.net/artifactory/api/gpg/key/public

sudo tee /etc/yum.repos.d/adoptium.repo &amp;lt;&amp;lt;EOF
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/centos/7/$(uname -m)
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step 3 : Java 17 (Temurin 17) 설치 (Adoptium 제공)&lt;/p&gt;
&lt;pre id=&quot;code_1743121142775&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install temurin-17-jdk -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step4 : 설치 확인 및 경로 확인&lt;/p&gt;
&lt;pre id=&quot;code_1743124894781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;java -version
readlink -f $(which java)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;gt; 이제 이 경로를 Jenkins 설정에 반영하면 끝 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 여기서 내 기본 자바 설정이 11로 되어있기 때문에 readlink ~ 명령어 보냈을때 11버전의 경로가 떴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 Java 17 경로를 직접 찾아서 설정에 반영하기로함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743125119896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls /usr/lib/jvm | grep 17&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 17 경로 확인하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;' temurin-17-jdk' 이렇게 예시가 뜬다면 실제 파일경로는&lt;/p&gt;
&lt;pre id=&quot;code_1743125158917&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/lib/jvm/temurin-17-jdk/bin/java&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 전체 경로를 복사해서 Jenkins 설정에 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743125189676&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /etc/sysconfig/jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins 설정파일 열고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743125223057&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;JENKINS_JAVA_CMD=&quot;/usr/lib/jvm/temurin-17-jdk/bin/java&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert 모드에서 이 한줄을 추가해준다. 이게 Jenkins가 Java 17로 실행되게 하는 설정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음으로 Jenkins 서비스를 재시작한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743125280703&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl reset-failed jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 발생 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'sudo systemctl status jenkins' 메시지 실행했을때 에러남&lt;/p&gt;
&lt;pre id=&quot;code_1743125383176&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@localhost ~]# sudo systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 목 2025-03-27 15:50:03 KST; 5s ago
  Process: 15697 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE)
 Main PID: 15697 (code=exited, status=1/FAILURE)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Process: 15697 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE) : /user/bin/jenkins 실행 자체가 실패함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 가능성 2가지&lt;/p&gt;
&lt;p data-end=&quot;292&quot; data-start=&quot;250&quot; data-ke-size=&quot;size16&quot;&gt;① JENKINS_JAVA_CMD 경로가 잘못되었거나 오타&lt;/p&gt;
&lt;p data-end=&quot;332&quot; data-start=&quot;293&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; Jenkins가 Java 17을 못 찾으면 그냥 시작 자체가 실패함&lt;/p&gt;
&lt;p data-end=&quot;332&quot; data-start=&quot;293&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;405&quot; data-start=&quot;334&quot; data-ke-size=&quot;size16&quot;&gt;② jenkins.service 파일이 /usr/bin/jenkins 실행을 시도 중인데 실제 파일이 없음&lt;/p&gt;
&lt;p data-end=&quot;510&quot; data-start=&quot;406&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 보통 Jenkins는 /usr/lib/jenkins/jenkins.war을 실행해야 함&lt;br /&gt;&amp;rarr; 그런데 시스템 서비스가 /usr/bin/jenkins 실행하려고 해서 에러 발생&lt;/p&gt;
&lt;p data-end=&quot;510&quot; data-start=&quot;406&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;510&quot; data-start=&quot;406&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 해결 : Jenkins 실행 경로를 수정하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step 1 : Jenkins 서비스 파일 열기&lt;/p&gt;
&lt;pre id=&quot;code_1743125472117&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /usr/lib/systemd/system/jenkins.service&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;'ExecStart='&amp;nbsp;&lt;/b&gt; 이 해당하는 줄을 찾아서 설치한 Java17 경로와 .war 파일 직접 지정&lt;/p&gt;
&lt;pre id=&quot;code_1743125603895&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java -Djava.awt.headless=true -jar /usr/lib/jenkins/jenkins.war&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Jenkins가 Java 실행까지는 가는데 Jenkins WAR 파일 실행 자체가 실패하는 상황 발생&lt;/p&gt;
&lt;pre id=&quot;code_1743125812786&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@localhost ~]# sudo systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 목 2025-03-27 15:56:32 KST; 23s ago
  Process: 15910 ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java -Djava.awt.headless=true -jar /usr/lib/jenkins/jenkins.war (code=exited, status=1/FAILURE)
 Main PID: 15910 (code=exited, status=1/FAILURE)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java&amp;nbsp;...&amp;nbsp;-jar&amp;nbsp;/usr/lib/jenkins/jenkins.war &lt;br /&gt;&amp;rarr; code=exited, status=1/FAILURE : Java 17은 잘 호출되고 있으나, /usr/lib/jenkins/jenkins.awr 파일이 실행중 오류 or 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/usr/lib/jenkins/jenkins.awr 경로에 파일이 있는지 확인 &amp;gt; 없음 &amp;gt; 실제 jenkins.war 파일의 경로 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elBoY1/btsMZjE2iXF/REBbRW8sVhr6756Qk9xoD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elBoY1/btsMZjE2iXF/REBbRW8sVhr6756Qk9xoD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elBoY1/btsMZjE2iXF/REBbRW8sVhr6756Qk9xoD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelBoY1%2FbtsMZjE2iXF%2FREBbRW8sVhr6756Qk9xoD0%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;830&quot; height=&quot;173&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'/usr/share/java/jenkins.war' 경로 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins 서비스 파일 다시 열고, ExecStart= 한줄 수정&lt;/p&gt;
&lt;pre id=&quot;code_1743126031686&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /usr/lib/systemd/system/jenkins.service&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1743126036405&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ExecStart=/usr/lib/jvm/temurin-17-jdk/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1743126053587&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl reset-failed jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1764&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LAgvn/btsMXOkPxAr/Niztc9J2FnNRc0tKFc3T7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LAgvn/btsMXOkPxAr/Niztc9J2FnNRc0tKFc3T7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LAgvn/btsMXOkPxAr/Niztc9J2FnNRc0tKFc3T7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLAgvn%2FbtsMXOkPxAr%2FNiztc9J2FnNRc0tKFc3T7k%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;1764&quot; height=&quot;387&quot; data-origin-width=&quot;1764&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;br /&gt;&lt;b&gt;JENKINS 드디어 실행 성공!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 브라우저에서 Jenkins 접속 + 초기 비밀번호 입력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins 는 정상 실행중인데 8080 포트 방화벽이 개방되어있지 않은 상태라서 열어주기로 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XBvFM/btsMZgOxaJU/FydEppo3rqfRWRhGkJiblK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XBvFM/btsMZgOxaJU/FydEppo3rqfRWRhGkJiblK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XBvFM/btsMZgOxaJU/FydEppo3rqfRWRhGkJiblK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXBvFM%2FbtsMZgOxaJU%2FFydEppo3rqfRWRhGkJiblK%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;1035&quot; height=&quot;713&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 8080 포트 방화벽 개방&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY4zTB/btsMZq4DhtH/v0VxEG2ECslxv4L0ZyS1g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY4zTB/btsMZq4DhtH/v0VxEG2ECslxv4L0ZyS1g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY4zTB/btsMZq4DhtH/v0VxEG2ECslxv4L0ZyS1g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY4zTB%2FbtsMZq4DhtH%2Fv0VxEG2ECslxv4L0ZyS1g1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;858&quot; height=&quot;129&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 브라우저 접속 성공 - Jenkins 초기 보안 설정 화면 (여기서 관리자 비밀번호 입력해서 첫 시작을 인증해야함)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z19sq/btsMX2qnA34/B7tYAqKqchxpuAnvvGWNfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z19sq/btsMX2qnA34/B7tYAqKqchxpuAnvvGWNfk/img.png&quot; data-alt=&quot;Jenkins 초기 보안 설정 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z19sq/btsMX2qnA34/B7tYAqKqchxpuAnvvGWNfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ19sq%2FbtsMX2qnA34%2FB7tYAqKqchxpuAnvvGWNfk%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;1920&quot; height=&quot;1034&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1034&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jenkins 초기 보안 설정 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ngTPX/btsMZfbCo5W/vNScrikRPyfKwCfRaPQmkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ngTPX/btsMZfbCo5W/vNScrikRPyfKwCfRaPQmkK/img.png&quot; data-alt=&quot;초기 비밀번호 입력하고 진입해서 플러그인 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ngTPX/btsMZfbCo5W/vNScrikRPyfKwCfRaPQmkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FngTPX%2FbtsMZfbCo5W%2FvNScrikRPyfKwCfRaPQmkK%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;1920&quot; height=&quot;1032&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;초기 비밀번호 입력하고 진입해서 플러그인 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 130px;&quot; border=&quot;1&quot; data-end=&quot;453&quot; data-start=&quot;191&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;453&quot; data-start=&quot;219&quot;&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;251&quot; data-start=&quot;219&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅ 1&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;리눅스(CentOS 7) 서버 원격 접속&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;286&quot; data-start=&quot;252&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅ 2&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Java 17 설치 및 Jenkins에 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;344&quot; data-start=&quot;287&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅ 3&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Jenkins 설치 후 실행 실패 문제 해결 (ExecStart, 경로 수정 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;382&quot; data-start=&quot;345&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅ 4&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Jenkins WAR 경로 확인 및 서비스 재설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;407&quot; data-start=&quot;383&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅ 5&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;방화벽 포트 8080 개방&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;453&quot; data-start=&quot;408&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅ 6&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Jenkins 서비스 성공 실행 + 웹 브라우저 접속 성공  &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 완료된 상태&lt;/p&gt;</description>
      <category>DevOps &amp;amp; Infra/CICD</category>
      <category>CentOS7</category>
      <category>jenkins</category>
      <category>Linux</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/64</guid>
      <comments>https://rongha.tistory.com/64#entry64comment</comments>
      <pubDate>Thu, 27 Mar 2025 16:41:34 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins]CI/CD 및 Jenkins에 대해서</title>
      <link>https://rongha.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 회사를 이직하게 되면서 현 회사 개발팀의 프로젝트 체계 확립을 하는 업무의 PL로써 해야할 작업들이 굉장히 많았는데 그 중에 하나가 기존의 재래식 배포에서 CI/CD로 배포 방식을 변경하는것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그에 따라서 먼저 Jenkins의 정의에 대해서 알아보고 글로 남겨보고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;✔ 기존의 배포 방식&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전통적인 방식 (재래식 배포 / 수동 배포 방식)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발자가 직접 npm run build, ./gradlew build&lt;/li&gt;
&lt;li&gt;FTP로 빌드 파일 서버에 업로드&lt;/li&gt;
&lt;li&gt;서버에 들어가서 Docker 띄우거나 Tomcat 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이건 &lt;b&gt;수동, 절차 기반, 위험부담 있는 방식&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;✔ 그럼 CI/CD는 뭐가 다를까?&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI/CD는 자동화된 배포 흐름&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;CI (지속적 통합)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;코드를 Push할 때마다 자동으로 &lt;b&gt;빌드 + 테스트&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;CD (지속적 배포)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;빌드가 끝나면 자동으로 &lt;b&gt;서버에 배포&lt;/b&gt;까지 진행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  즉, 개발자가 Git에 코드만 올리면,&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 알아서 테스트하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 알아서 서버에 배포되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 알아서 Docker도 재시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  기대효과&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배포 시간 단축&lt;/li&gt;
&lt;li&gt;사람 손으로 배포할 때 생기는 실수 방지&lt;/li&gt;
&lt;li&gt;반복 업무 자동화로 개발 생산성 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;✔ Jenkins란?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;525&quot; data-start=&quot;502&quot;&gt;오픈소스 기반의 CI/CD 자동화 도구&lt;/li&gt;
&lt;li data-end=&quot;579&quot; data-start=&quot;526&quot;&gt;다양한 플러그인을 통해 Git, Docker, Tomcat, Slack 등과 쉽게 연동 가능&lt;/li&gt;
&lt;li data-end=&quot;603&quot; data-start=&quot;580&quot;&gt;웹 UI를 통해 파이프라인 설정이 쉬움&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;✔ Jenkins의 주요 기능&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;802&quot; data-start=&quot;631&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;663&quot; data-start=&quot;631&quot;&gt;&lt;b&gt;빌드 자동화&lt;/b&gt;: 코드 푸시 시 자동으로 빌드 실행&lt;/li&gt;
&lt;li data-end=&quot;701&quot; data-start=&quot;664&quot;&gt;&lt;b&gt;테스트 실행&lt;/b&gt;: JUnit 등 테스트 프레임워크 연동 가능&lt;/li&gt;
&lt;li data-end=&quot;745&quot; data-start=&quot;702&quot;&gt;&lt;b&gt;배포 자동화&lt;/b&gt;: 스크립트를 이용해 WAS나 클라우드 서버에 자동 배포&lt;/li&gt;
&lt;li data-end=&quot;802&quot; data-start=&quot;746&quot;&gt;&lt;b&gt;다양한 플러그인 지원&lt;/b&gt;: Slack 알림, SonarQube 연동, GitHub hook 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Jenkins를 활용한 실제 CI/CD 파이프라인 예시&lt;/p&gt;
&lt;pre id=&quot;code_1743033421811&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GitHub &amp;rarr; Jenkins (빌드 및 테스트) &amp;rarr; Docker 이미지 생성 &amp;rarr; 컨테이너 배포 (Tomcat) &amp;rarr; Slack 알림&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1064&quot; data-start=&quot;929&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;946&quot; data-start=&quot;929&quot;&gt;GitHub에 push 발생&lt;/li&gt;
&lt;li data-end=&quot;982&quot; data-start=&quot;947&quot;&gt;Jenkins가 Git hook을 받아 빌드 및 테스트 수행&lt;/li&gt;
&lt;li data-end=&quot;999&quot; data-start=&quot;983&quot;&gt;Docker로 이미지 생성&lt;/li&gt;
&lt;li data-end=&quot;1033&quot; data-start=&quot;1000&quot;&gt;Docker container를 Tomcat 서버에 배포&lt;/li&gt;
&lt;li data-end=&quot;1064&quot; data-start=&quot;1034&quot;&gt;배포 성공/실패 여부를 Slack으로 팀원에게 알림&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;✔ Jenkins 도입 시 기대 효과&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1149&quot; data-start=&quot;1097&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1110&quot; data-start=&quot;1097&quot;&gt;배포 누락/오류 방지&lt;/li&gt;
&lt;li data-end=&quot;1121&quot; data-start=&quot;1111&quot;&gt;QA 시간 단축&lt;/li&gt;
&lt;li data-end=&quot;1137&quot; data-start=&quot;1122&quot;&gt;개발자 피드백 속도 향상&lt;/li&gt;
&lt;li data-end=&quot;1149&quot; data-start=&quot;1138&quot;&gt;운영 안정성 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 여기서 Git Actions와 Jenkins 중에 어떤걸 사용할지 디테일하게 분석도 같이 해볼 예정.&lt;/p&gt;</description>
      <category>DevOps &amp;amp; Infra/CICD</category>
      <category>CI/CD</category>
      <category>jenkins</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/63</guid>
      <comments>https://rongha.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 27 Mar 2025 09:02:29 +0900</pubDate>
    </item>
    <item>
      <title>[CentOS7]root 비밀번호 초기화 및 재설정하기</title>
      <link>https://rongha.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 센토스7을 셋팅하기 시작했을때 root 비밀번호를 몰라서 재설정 하는것 부터 시작했었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추후에도 확인하기 위해 글을 남기기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. GRUB 진입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 부팅 중에 CentOS 선택 화면이 뜨면 '&lt;b&gt;e&lt;/b&gt;' 키를 계속해서 누른다 &amp;gt; 편집 모드로 진입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. linux로 시작하는 문단을 찾아서 그 줄의 맨 끝에 &lt;b&gt;rd.break&lt;/b&gt; 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1742794710785&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;linux ... ro rhgb quiet LANG=en_US.UTF-8 rd.break&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 기존 내용 절대 건드리지 말고, 맨 끝에 추가만 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 'Ctrl + X' 눌러서 부팅 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 긴급 쉘에서 해당 명령 순서대로 실행&lt;/p&gt;
&lt;pre id=&quot;code_1742794790132&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mount -o remount,rw /sysroot
chroot /sysroot&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. root 비밀번호 재설정&lt;/p&gt;
&lt;pre id=&quot;code_1742794814383&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;passwd root&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- passwd 뒤에 변경하고자 하는 계정명 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 그 다음으로 새 비밀번호 입력 (두 번)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. SELinux 재라벨링 준비&lt;/p&gt;
&lt;pre id=&quot;code_1742794867370&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;touch /.autorelabel&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 쉘 빠져나오기 및 재부팅&lt;/p&gt;
&lt;pre id=&quot;code_1742794887005&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exit
exit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이때 SELinux 라벨링 작업으로 인해서 시간이 좀 걸릴 수 있으니 기다려야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 완료하면 재부팅이 될거고 그 다음에 해당 계정과 비밀번호를 입력해주면 된다 !&lt;/p&gt;</description>
      <category>DevOps &amp;amp; Infra/Linux</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/62</guid>
      <comments>https://rongha.tistory.com/62#entry62comment</comments>
      <pubDate>Mon, 24 Mar 2025 14:42:09 +0900</pubDate>
    </item>
    <item>
      <title>Docker의 개념과 사용하는 이유 및 장점 (+ Container, Image)</title>
      <link>https://rongha.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;# Docker란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker는 &lt;b&gt;컨테이너(Container)&lt;/b&gt; 기술을 사용하여 각각의 프로그램을 &lt;b&gt;분리된 환경&lt;/b&gt;에서 실행 및 관리할 수 있는 툴이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 컨테이너(Container)란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 컴퓨터 환경 내에서 독립적인 환경을 구성해서, 각 환경에 프로그램을 별도로 설치할 수 있게 만든 개념이다. 하나의 컴퓨터 환경 내에서 여러개의 미니 컴퓨터 환경을 구성할 수 있는 형태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# Docker의 주요 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 경량화된 가상화 (VM보다 가볍고 빠르다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OS에 종속되지 않는 실행 환경 (어디서든 같은 환경 보장)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빠른 배포 및 확장 (CI/CD, 마이크로서비스에 최적)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 편리한 네트워크 및 볼륨 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# Docker vs 가상머신(VM)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df099B/btsMPm80KNU/6phFU39eQMIY8pWYZnA4w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df099B/btsMPm80KNU/6phFU39eQMIY8pWYZnA4w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df099B/btsMPm80KNU/6phFU39eQMIY8pWYZnA4w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf099B%2FbtsMPm80KNU%2F6phFU39eQMIY8pWYZnA4w1%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;757&quot; height=&quot;186&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 도커를 사용하는 이유?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;이식성&lt;/b&gt; &lt;/span&gt;: 특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행할 수 있는 특성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 매번 귀찮은 설치 과정을 일일이 거치지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 항상 일관되게 프로그램을 설치할 수 있다. (버전, 환경 설정, 옵션, 운영 체제 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 프로그램이 독립적인 환경에서 실행되기 때문에 프로그램 간에 서로 충돌이 일어나지 않는다.&lt;/p&gt;</description>
      <category>DevOps &amp;amp; Infra/Docker &amp;amp; Container</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/61</guid>
      <comments>https://rongha.tistory.com/61#entry61comment</comments>
      <pubDate>Tue, 18 Mar 2025 16:11:00 +0900</pubDate>
    </item>
    <item>
      <title>[Springboot] Gmail SMTP 서버 연결하기</title>
      <link>https://rongha.tistory.com/60</link>
      <description>&lt;h3 data-end=&quot;51&quot; data-start=&quot;0&quot; data-ke-size=&quot;size23&quot;&gt;✅ &lt;b&gt;Gmail SMTP용 앱 비밀번호 생성 방법 (2025년 기준 최신 방법)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;190&quot; data-start=&quot;53&quot; data-ke-size=&quot;size16&quot;&gt;Gmail SMTP를 사용하려면 **앱 비밀번호(App Password)**를 설정해야 한다.&lt;br /&gt;앱 비밀번호는 Google이 보안 강화를 위해 제공하는 &lt;b&gt;특별한 16자리 비밀번호&lt;/b&gt;로,&lt;br /&gt;SMTP 인증을 위해 일반 비밀번호 대신 사용해야 함.&lt;/p&gt;
&lt;hr data-end=&quot;195&quot; data-start=&quot;192&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;225&quot; data-start=&quot;197&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  1. 2단계 인증(2FA) 활성화&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;263&quot; data-start=&quot;226&quot; data-ke-size=&quot;size16&quot;&gt;앱 비밀번호를 사용하려면 먼저 &lt;b&gt;2단계 인증&lt;/b&gt;을 활성화해야 해.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;468&quot; data-start=&quot;265&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;335&quot; data-start=&quot;265&quot;&gt;&lt;b&gt;&lt;a data-end=&quot;326&quot; data-start=&quot;270&quot;&gt;Google 계정 보안 설정&lt;/a&gt;으로 이동&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;357&quot; data-start=&quot;336&quot;&gt;&lt;b&gt;&quot;2단계 인증&quot;을 클릭&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;432&quot; data-start=&quot;358&quot;&gt;&lt;b&gt;화면 안내에 따라 2단계 인증 설정 진행&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;432&quot; data-start=&quot;393&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;432&quot; data-start=&quot;393&quot;&gt;본인 휴대폰으로 인증받거나, 다른 인증 옵션을 설정할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;468&quot; data-start=&quot;433&quot;&gt;2단계 인증이 활성화되면, 앱 비밀번호를 생성할 수 있음.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;473&quot; data-start=&quot;470&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;497&quot; data-start=&quot;475&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  2. 앱 비밀번호 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;530&quot; data-start=&quot;498&quot; data-ke-size=&quot;size16&quot;&gt;2단계 인증을 설정한 후, 앱 비밀번호를 생성할 수 있어.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;856&quot; data-start=&quot;532&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;630&quot; data-start=&quot;532&quot;&gt;&lt;b&gt;&lt;a data-end=&quot;595&quot; data-start=&quot;537&quot;&gt;앱 비밀번호 생성 페이지&lt;/a&gt;로 이동&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;630&quot; data-start=&quot;607&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;630&quot; data-start=&quot;607&quot;&gt;Gmail 계정으로 로그인해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;661&quot; data-start=&quot;631&quot;&gt;&lt;b&gt;앱 선택:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;661&quot; data-start=&quot;649&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;661&quot; data-start=&quot;649&quot;&gt;&quot;메일&quot;을 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;722&quot; data-start=&quot;662&quot;&gt;&lt;b&gt;기기 선택:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;722&quot; data-start=&quot;681&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;722&quot; data-start=&quot;681&quot;&gt;&quot;Windows 컴퓨터&quot; 또는 &quot;기타(맞춤 이름 입력 가능)&quot; 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;742&quot; data-start=&quot;723&quot;&gt;&lt;b&gt;&quot;생성&quot; 버튼 클릭&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;856&quot; data-start=&quot;743&quot;&gt;&lt;b&gt;화면에 16자리 앱 비밀번호가 표시됨&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;856&quot; data-start=&quot;776&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;804&quot; data-start=&quot;776&quot;&gt;예: abcd efgh ijkl mnop&lt;/li&gt;
&lt;li data-end=&quot;856&quot; data-start=&quot;808&quot;&gt;이 비밀번호를 복사해서 application.properties에 입력하면 됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;861&quot; data-start=&quot;858&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;904&quot; data-start=&quot;863&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  3. application.properties에 적용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;950&quot; data-start=&quot;905&quot; data-ke-size=&quot;size16&quot;&gt;생성된 앱 비밀번호를 application.properties에 설정하면 돼.&lt;/p&gt;
&lt;pre id=&quot;code_1741304352364&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=abcd efgh ijkl mnop  # 앱 비밀번호 사용
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1264&quot; data-start=&quot;1216&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;중요:&lt;/b&gt; 앱 비밀번호는 한 번만 표시되므로, 복사해 두고 바로 사용해야 해!&lt;/p&gt;
&lt;hr data-end=&quot;1269&quot; data-start=&quot;1266&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1300&quot; data-start=&quot;1271&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  4. 테스트 (SMTP 연결 확인)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1353&quot; data-start=&quot;1301&quot; data-ke-size=&quot;size16&quot;&gt;SMTP 설정이 정상적으로 동작하는지 확인하려면, &lt;b&gt;메일 발송 테스트&lt;/b&gt;를 해보는 게 좋아.&lt;/p&gt;
&lt;h3 data-end=&quot;1398&quot; data-start=&quot;1355&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;  Java 코드 예제 (Spring Boot에서 메일 전송)&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1741304366664&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    @Autowired
    private JavaMailSender mailSender;

    public void sendTestEmail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(&quot;receiver@example.com&quot;); // 받는 사람 이메일
        message.setSubject(&quot;SMTP 설정 테스트&quot;);
        message.setText(&quot;Gmail SMTP 설정이 정상적으로 동작합니다!&quot;);

        mailSender.send(message);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2089&quot; data-start=&quot;2020&quot; data-ke-size=&quot;size16&quot;&gt;이 코드를 실행하면 설정한 SMTP를 통해 테스트 메일이 발송될 거야.&lt;br /&gt;에러가 나면 콘솔 로그를 확인해서 디버깅하면 돼!&lt;/p&gt;
&lt;hr data-end=&quot;2094&quot; data-start=&quot;2091&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2122&quot; data-start=&quot;2096&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  5. 자주 발생하는 문제 해결&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;2157&quot; data-start=&quot;2123&quot; data-ke-size=&quot;size23&quot;&gt;  &lt;b&gt;앱 비밀번호 입력해도 메일이 안 보내질 때&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2607&quot; data-start=&quot;2158&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2316&quot; data-start=&quot;2158&quot;&gt;&lt;b&gt;Google 계정에서 &quot;보안 수준이 낮은 앱 액세스&quot; 허용 필요&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2316&quot; data-start=&quot;2204&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2247&quot; data-start=&quot;2204&quot;&gt;현재 Google 정책상 필요 없지만, 일부 계정에서는 제한될 수도 있음.&lt;/li&gt;
&lt;li data-end=&quot;2312&quot; data-start=&quot;2251&quot;&gt;&lt;a data-end=&quot;2303&quot; data-start=&quot;2253&quot;&gt;보안 설정 페이지&lt;/a&gt;에서 확인 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2474&quot; data-start=&quot;2317&quot;&gt;&lt;b&gt;Gmail SMTP 서버 차단&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2474&quot; data-start=&quot;2344&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2474&quot; data-start=&quot;2344&quot;&gt;Google이 SMTP 사용을 차단했을 수 있음. &lt;a data-end=&quot;2430&quot; data-start=&quot;2374&quot;&gt;Google 계정 보안 설정&lt;/a&gt;에서&lt;br /&gt;&quot;보안 경고&quot; 또는 &quot;비정상적인 로그인 시도&quot;가 있는지 확인.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2540&quot; data-start=&quot;2476&quot;&gt;&lt;b&gt;Gmail 계정 비밀번호를 변경한 경우&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2540&quot; data-start=&quot;2508&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2540&quot; data-start=&quot;2508&quot;&gt;비밀번호를 변경하면, 앱 비밀번호도 다시 생성해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2607&quot; data-start=&quot;2542&quot;&gt;&lt;b&gt;포트(port) 확인&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2607&quot; data-start=&quot;2564&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2607&quot; data-start=&quot;2564&quot;&gt;587 (STARTTLS) 또는 465 (SSL) 중 하나를 시도.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;2612&quot; data-start=&quot;2609&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2625&quot; data-start=&quot;2614&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 정리&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2762&quot; data-start=&quot;2626&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2643&quot; data-start=&quot;2626&quot;&gt;&lt;b&gt;2단계 인증 활성화&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2667&quot; data-start=&quot;2644&quot;&gt;&lt;b&gt;앱 비밀번호 생성 (16자리)&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2703&quot; data-start=&quot;2668&quot;&gt;&lt;b&gt;application.properties에 설정&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2730&quot; data-start=&quot;2704&quot;&gt;&lt;b&gt;테스트 메일 발송 (Java 코드)&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2762&quot; data-start=&quot;2731&quot;&gt;&lt;b&gt;SMTP 연결 문제 발생 시 보안 설정 확인&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Develop/Spring</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/60</guid>
      <comments>https://rongha.tistory.com/60#entry60comment</comments>
      <pubDate>Fri, 7 Mar 2025 08:39:49 +0900</pubDate>
    </item>
    <item>
      <title>[Rocky Linux]Virtual Box에 Rocky Linux 9 설치하는 방법</title>
      <link>https://rongha.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Virtual Box 설치&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.virtualbox.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.virtualbox.org/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739026550099&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;Oracle VirtualBox&quot; data-og-description=&quot;Powerful open source virtualization For personal and enterprise use VirtualBox is a general-purpose full virtualization software for x86_64 hardware (with version 7.1 additionally for macOS/Arm), targeted at laptop, desktop, server and embedded use.&quot; data-og-host=&quot;www.virtualbox.org&quot; data-og-source-url=&quot;https://www.virtualbox.org/&quot; data-og-url=&quot;https://www.virtualbox.org/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uUwVC/hyYchCoYS2/Qd6dkEUy56o7MCFkiU77M1/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/hGvK5/hyYcbhSewK/QbhmzYvor8yFpbjbpjXaRk/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/eZo55/hyYcbhSet1/LJBwmrZkZh9VB1NrhjQZnk/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200&quot;&gt;&lt;a href=&quot;https://www.virtualbox.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.virtualbox.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uUwVC/hyYchCoYS2/Qd6dkEUy56o7MCFkiU77M1/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/hGvK5/hyYcbhSewK/QbhmzYvor8yFpbjbpjXaRk/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/eZo55/hyYcbhSet1/LJBwmrZkZh9VB1NrhjQZnk/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_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;Oracle VirtualBox&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Powerful open source virtualization For personal and enterprise use VirtualBox is a general-purpose full virtualization software for x86_64 hardware (with version 7.1 additionally for macOS/Arm), targeted at laptop, desktop, server and embedded use.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.virtualbox.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 사이트에서 Download 버튼 클릭&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ey86i/btsMbp7BEmE/W1Z6diTizc0IXupKrMdPZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ey86i/btsMbp7BEmE/W1Z6diTizc0IXupKrMdPZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ey86i/btsMbp7BEmE/W1Z6diTizc0IXupKrMdPZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEy86i%2FbtsMbp7BEmE%2FW1Z6diTizc0IXupKrMdPZ1%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;1398&quot; height=&quot;746&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows hosts를 누르면 자동으로 다운로드가 시작된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;1189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drrdJ4/btsMbIMyidm/YXwgzQPxkgT92aogjqMVX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drrdJ4/btsMbIMyidm/YXwgzQPxkgT92aogjqMVX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drrdJ4/btsMbIMyidm/YXwgzQPxkgT92aogjqMVX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrrdJ4%2FbtsMbIMyidm%2FYXwgzQPxkgT92aogjqMVX0%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;1626&quot; height=&quot;1189&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;1189&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되면 이런 창이 뜰거다. 이렇게 VirtualBox 설치는 간단하게 완료된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(밑에 가상서버는 테스트 해본 서버라 default가 아니니 신경쓰지 않아도 된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Locky Linux 다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 회사에서 CentOS를 사용중인데 비슷하고 무료인 Rocky Linux 가상화 서버를 만들어보기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://rockylinux.org/ko-KR/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://rockylinux.org/ko-KR/download&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739026805756&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download - Rocky Linux&quot; data-og-description=&quot;Download Download the latest Rocky Linux versions here. Get Involved As you download and use Rocky Linux, the Rocky Enterprise Software Foundation invites you to be a part of the community as a contributor. There are many ways to contribute to the project,&quot; data-og-host=&quot;rockylinux.org&quot; data-og-source-url=&quot;https://rockylinux.org/ko-KR/download&quot; data-og-url=&quot;https://rockylinux.org/ko-KR/download&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://rockylinux.org/ko-KR/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rockylinux.org/ko-KR/download&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download - Rocky Linux&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download Download the latest Rocky Linux versions here. Get Involved As you download and use Rocky Linux, the Rocky Enterprise Software Foundation invites you to be a part of the community as a contributor. There are many ways to contribute to the project,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;rockylinux.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;1239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k3ikW/btsMbsi0o4R/CTfek1KBAIMaQ0eHYugMgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k3ikW/btsMbsi0o4R/CTfek1KBAIMaQ0eHYugMgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k3ikW/btsMbsi0o4R/CTfek1KBAIMaQ0eHYugMgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk3ikW%2FbtsMbsi0o4R%2FCTfek1KBAIMaQ0eHYugMgk%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;2160&quot; height=&quot;1239&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;1239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Default Images &amp;gt; Minimal ISO를 눌러서 다운받아준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps &amp;amp; Infra/Linux</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/59</guid>
      <comments>https://rongha.tistory.com/59#entry59comment</comments>
      <pubDate>Sat, 8 Feb 2025 23:58:33 +0900</pubDate>
    </item>
    <item>
      <title>[VirtualBox]CentOS7에 VirtualBox 설치하기</title>
      <link>https://rongha.tistory.com/58</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Linux CentOS에서 가상화 서버를 설치하기 위해서는 먼저 VirtualBox를 설치해야했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 오랜시간 이것저것 시도한 후에 생각보다 간단히 작업이 끝나서 방법을 적어보려고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle에서 현재 Linux Version과 맞는 VirtualBox 다운로드 받기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(CentOS7은 6버전대가 호환이 잘 되므로 6버전을 설치)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 터미널에서 다운로드 디렉터리로 이동&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 위치한 디렉터리로 이동합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;cd&lt;/span&gt; /home/bpuc/download &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 실행 권한 부여&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운받은 .run 파일에 실행 권한을 부여합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;chmod&lt;/span&gt; +x VirtualBox-6.1.50-161033.Linux_amd64.run &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. .run 파일 실행하여 VirtualBox 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리자 권한으로 파일을 실행합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;sudo ./VirtualBox-6.1.50-161033.Linux_amd64.run &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행하면 설치 마법사가 시작되며, 안내에 따라 설치를 진행하면 됩니다.&lt;/li&gt;
&lt;li&gt;설치 중 추가적인 질문이나 옵션 선택이 있을 수 있으니, 안내 메시지에 따라 진행하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 커널 모듈 빌드 및 로드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료된 후, VirtualBox는 커널 모듈(vboxdrv 등)을 필요로 합니다. 아래 명령어를 실행하여 커널 모듈을 빌드하고 로드합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;sudo /sbin/vboxconfig &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 설치 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 제대로 완료되었는지 확인하기 위해 버전 정보를 출력해 보세요.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;VBoxManage --version &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버전 정보가 출력되면 정상적으로 설치된 것입니다.&lt;/li&gt;
&lt;li&gt;만약 &quot;command not found&quot; 등의 오류가 발생한다면, 설치 경로나 환경 변수 문제일 수 있으므로 실행 파일의 위치를 확인하고 PATH에 추가해 주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. (선택 사항) 사용자 그룹에 추가&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB 장치 사용 등 일부 기능을 위해 현재 사용자를 vboxusers 그룹에 추가하는 것이 좋습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;sudo usermod -aG vboxusers &lt;span&gt;$USER&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 로그아웃 후 다시 로그인해야 변경 사항이 반영됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 화면 속 터미널 참고 -&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctxZPT/btsMbCEJcyx/Gq3F7wCqez45nnJ6pKUBm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctxZPT/btsMbCEJcyx/Gq3F7wCqez45nnJ6pKUBm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctxZPT/btsMbCEJcyx/Gq3F7wCqez45nnJ6pKUBm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctxZPT%2FbtsMbCEJcyx%2FGq3F7wCqez45nnJ6pKUBm1%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;742&quot; height=&quot;507&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps &amp;amp; Infra/Linux</category>
      <author>롱하</author>
      <guid isPermaLink="true">https://rongha.tistory.com/58</guid>
      <comments>https://rongha.tistory.com/58#entry58comment</comments>
      <pubDate>Fri, 7 Feb 2025 15:04:14 +0900</pubDate>
    </item>
  </channel>
</rss>