<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>devkmee</title>
    <link>https://paran-coding.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 30 Jun 2026 02:29:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>devkmee</managingEditor>
    <image>
      <title>devkmee</title>
      <url>https://tistory1.daumcdn.net/tistory/4738959/attach/bc5fa6ac8d1342b5857c1bcc01f82e94</url>
      <link>https://paran-coding.tistory.com</link>
    </image>
    <item>
      <title>test</title>
      <link>https://paran-coding.tistory.com/notice/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;test&lt;/p&gt;</description>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/notice/68</guid>
      <pubDate>Mon, 29 Sep 2025 21:38:07 +0900</pubDate>
    </item>
    <item>
      <title>02. Jenkins를 활용해 CI/CD 환경 구축하기 : jenkins 관리</title>
      <link>https://paran-coding.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jenkins.png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GzTwT/btsIUjHYNKn/dC2J4WyMS0Pgtj8BRYNDY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GzTwT/btsIUjHYNKn/dC2J4WyMS0Pgtj8BRYNDY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GzTwT/btsIUjHYNKn/dC2J4WyMS0Pgtj8BRYNDY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGzTwT%2FbtsIUjHYNKn%2FdC2J4WyMS0Pgtj8BRYNDY1%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;300&quot; height=&quot;258&quot; data-filename=&quot;jenkins.png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;602&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Jenkins 초기 비밀번호&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cd8Kvg/btsIR0iaL6u/WWPkomdDsPU7vTzmcnOlhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cd8Kvg/btsIR0iaL6u/WWPkomdDsPU7vTzmcnOlhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cd8Kvg/btsIR0iaL6u/WWPkomdDsPU7vTzmcnOlhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcd8Kvg%2FbtsIR0iaL6u%2FWWPkomdDsPU7vTzmcnOlhK%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;473&quot; height=&quot;325&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;325&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기까지 마치면 드디어! Jenkins 웹 화면에 접속할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;브라우저에 접속했을 때 나오는 명령어를 Jenkins 서버에서 실행하면 초기 비밀번호가 출력된다.&lt;/p&gt;
&lt;pre id=&quot;code_1722358926036&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /var/lib/jenkins/secrets/initialAdminPassword&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;2. &lt;/span&gt;플러그인 설치 및 Dashboard 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6rmKO/btsIRWGSvcE/Msv6Lqb3wqrYkg91thRqJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6rmKO/btsIRWGSvcE/Msv6Lqb3wqrYkg91thRqJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6rmKO/btsIRWGSvcE/Msv6Lqb3wqrYkg91thRqJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6rmKO%2FbtsIRWGSvcE%2FMsv6Lqb3wqrYkg91thRqJ0%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;603&quot; height=&quot;314&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽은 추천 플러그인들이 설치되고, 오른쪽은 선택할 수 있다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메뉴 &amp;gt; Jenkins 관리 &amp;gt; Plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추가로 설치한 플러그인 목록&amp;nbsp;&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;Git Plugin / Subversion&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Maven Integration&lt;/li&gt;
&lt;li&gt;Deploy to container : jenkins 와 tomcat이 같은 서버일 때 deploy용&lt;/li&gt;
&lt;li&gt;Publish over SSH : tomcat 서버가 다를 때 deploy용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이후 Admin 계정을 생성하고 안내를 따라가다보면 초기설정을 마무리 할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;브라우저 설정이 반영되도록 Jenkins를 재시작하면 브라우저에서 Admin 계정으로 로그인 할 수 있다!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 전역 환경변수 설정&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) Publish&amp;nbsp;over&amp;nbsp;SSH&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;name : SSH Server 구분용 name&lt;/li&gt;
&lt;li&gt;hostname :&amp;nbsp; tomcat 서버 IP&lt;/li&gt;
&lt;li&gt;username : tomcat 서버 username&lt;/li&gt;
&lt;li&gt;Remote Directory :&amp;nbsp; tomcat 서버에서 packaging된 war를 받을 디렉터리&lt;/li&gt;
&lt;li&gt;고급 &amp;gt; Use password authentication, or use a different key 체크 : 비밀번호 인증&lt;/li&gt;
&lt;li&gt;고급 &amp;gt; port :&amp;nbsp; tomcat 서버 port&lt;/li&gt;
&lt;li&gt;고급 &amp;gt; proxy password : tomcat 서버 비밀번호&lt;/li&gt;
&lt;li&gt;추가로 tomcat 서버이 tomcat-users.xml 파일의 아래 코드도 수정해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1722516062248&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;role rolename=&quot;manager-gui&quot;/&amp;gt;
&amp;lt;role rolename=&quot;manager-script&quot;/&amp;gt;
&amp;lt;user username=&quot;your-username&quot; password=&quot;your-password&quot; roles=&quot;manager-gui,manager-script&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. Item 관리&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) Item 생성&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메뉴 &amp;gt; 새로운 Item &amp;gt; maven project 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) Build 및 Deployment 설정&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소스코드 관리 : 소스 형상관리 툴 정보 입력&lt;/li&gt;
&lt;li&gt;빌드유발 &amp;gt; Poll SCM &amp;gt; Schedule
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;* * * * * : 1분마다 소스 변경사항 체크&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;빌드환경 &amp;gt; With Ant &amp;gt; JDK &amp;gt; Default (프로젝트용 jdk)&lt;/li&gt;
&lt;li&gt;Pre Steps &amp;gt; Execute shell
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;jenkins 와 tomcat이 같은 서버일 때 build 전 war 백업 생성 스크립트&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Build
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Root POM : pom.xml&lt;/li&gt;
&lt;li&gt;Goals and options : clean install -P ${빌드 프로파일}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Post Steps : maven 버전 설정&lt;/li&gt;
&lt;li&gt;빌드 후 조치&lt;/li&gt;
&lt;li&gt;1) jenkins 와 tomcat이 같은 서버일 때
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span data-token-index=&quot;0&quot;&gt;Source&amp;nbsp;files: /&lt;/span&gt;.war&lt;/li&gt;
&lt;li&gt;Excute shell &amp;gt; jenkins 워크스페이스에서 tomcat으로 이동하는 스크립트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2) jenkins 와 tomcat이 다른 서버일 때 ( Send build artifacts over SSH )
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH Server name : 환경변수에서 설정한 항목 선택&lt;/li&gt;
&lt;li&gt;Source files : /.war&lt;/li&gt;
&lt;li&gt;Remove prefix : target ( ssh 전송 시 붙어서 설정)&lt;/li&gt;
&lt;li&gt;Remote directory : 환경변수에서 설정한 Remote directory 하위 폴더&lt;/li&gt;
&lt;li&gt;Exec command : 백업 생성 및 tomcat 서버 재구동 스크립트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;6.&amp;nbsp; UI 설명 및 사용방법&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;1) Dashboard&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;625&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vxu77/btsISLFD6rP/QnLkBuMkGYkjfE08HQco3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vxu77/btsISLFD6rP/QnLkBuMkGYkjfE08HQco3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vxu77/btsISLFD6rP/QnLkBuMkGYkjfE08HQco3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvxu77%2FbtsISLFD6rP%2FQnLkBuMkGYkjfE08HQco3K%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;1226&quot; height=&quot;625&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;625&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S : 최근 빌드 상태 (성공여부)&lt;/li&gt;
&lt;li&gt;W : 아이템별 빌드 상태들. 실패를 많이하면 날씨가 점점 흐려지다가...비오고 번개도 친다&lt;/li&gt;
&lt;li&gt;name : 아이템 생성 시 부여한 이름&lt;/li&gt;
&lt;li&gt;우측 초록색 아이콘 : 즉시 Build&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) Dashboard &amp;gt; name&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Builds &amp;gt; build &amp;gt; Console Output : 해당 build console 로그 조회&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;a href=&quot;https://paran-coding.tistory.com/66&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;01. Jenkins를 활용해 CI/CD 환경 구축하기 : 개념 및 설치&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;a href=&quot;https://www.youtube.com/watch?v=0Emq5FypiMM&quot;&gt;[드림코딩] CI/CD 5분 개념 정리&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.redhat.com/ko/topics/devops/what-is-ci-cd&quot;&gt;[RedHat] DevOps의 이해 &amp;gt; CI/CD란?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://guide.ncloud-docs.com/docs/devtools-devtools-1-2&quot;&gt;[네이버클라우드] Jenkins 시작 가이드&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DevOps</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/67</guid>
      <comments>https://paran-coding.tistory.com/67#entry67comment</comments>
      <pubDate>Thu, 1 Aug 2024 21:41:26 +0900</pubDate>
    </item>
    <item>
      <title>01. Jenkins를 활용해 CI/CD 환경 구축하기 : 개념 및 설치</title>
      <link>https://paran-coding.tistory.com/66</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 CI/CD 환경에 관심이 생겨 공부를 시작했다.&lt;/p&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;며칠간 삽질끝에 성공적으로 CI/CD 환경을 구성 할 수 있었다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=0Emq5FypiMM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/MDfwQ/hyWGQzG8Ay/R8MkEwvbOCcAYkHm7sd1n0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=1056_396_1184_536&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;CI/CD 5분 개념 정리 (현업에서 쓰는 개발 프로세스)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/0Emq5FypiMM&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baPi4X/btsISJfVBdF/WY83JTRjj2NZCGwSaZ8Gd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baPi4X/btsISJfVBdF/WY83JTRjj2NZCGwSaZ8Gd1/img.png&quot; data-alt=&quot;CI/CD 파이프라인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baPi4X/btsISJfVBdF/WY83JTRjj2NZCGwSaZ8Gd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaPi4X%2FbtsISJfVBdF%2FWY83JTRjj2NZCGwSaZ8Gd1%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;714&quot; height=&quot;163&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CI/CD 파이프라인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. CI/CD 란?&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) CI ( Continuous Integration : 지속적인 통합)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;변경사항&lt;/span&gt;을 다른 팀원이 접근할 수있는 main 리파지토리에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;빈번하게 Merge 및 Build, Test 자동화&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;=&amp;gt; &lt;u&gt;지속적이고 잦은 Merge로 충돌을 줄일 수 있다&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;=&amp;gt; &lt;u&gt;자동화 프로세스로 생산성을 향상시킬 수 있다&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) CD ( &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;Continuous Delivery / Deployment : 지속적인 제공/배포)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경사항을 리파지토리에 릴리스 및 프로덕션 환경에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;배포 자동화&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Continuous Delivery : 담당자의 검증 후 프로뎍션 환경에 수동 배포하는 방법&lt;/li&gt;
&lt;li&gt;Continuous Deployment : 검증 단계 없이 프로덕션까지 자동 배포하는 방법&lt;/li&gt;
&lt;li&gt;=&amp;gt; &lt;u&gt;변경사항을 작은 단위로 릴리스해서 배포 리스크를 줄일 수 있다.&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jenkins.png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceqLPx/btsIRegTSYG/5JbcUZof7fb8vwS4MkFEW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceqLPx/btsIRegTSYG/5JbcUZof7fb8vwS4MkFEW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceqLPx/btsIRegTSYG/5JbcUZof7fb8vwS4MkFEW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceqLPx%2FbtsIRegTSYG%2F5JbcUZof7fb8vwS4MkFEW0%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;300&quot; height=&quot;258&quot; data-filename=&quot;jenkins.png&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;602&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Jenkins로 CI/CD 구축하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발환경에 따라 Jenkins 환경도 달라질 수 있으니 주의하자.&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: #ee2323;&quot;&gt;- OS : Ubuntu 22.04.3 LTS&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- Tomcat : 9.x&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- JDK 1.8 (프로젝트용)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- JDK 17 (Jenkins running용)&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) Jenkins , Java 버전 체크&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 하기 전에 반드시 Java 버전과 Jenkins 버전을 맞춰야한다.&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;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;이것은 성공적으로 설치 후 업데이트 했다가 재설치로 하루 날린 사람의 경험담....ㅠㅠ&lt;/span&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;692&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5ohDm/btsISqt5tPS/RseqVOMu24hXJ8rItK4Wgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5ohDm/btsISqt5tPS/RseqVOMu24hXJ8rItK4Wgk/img.png&quot; data-alt=&quot;Jenkins 공식 사이트의 Java 지원 버전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5ohDm/btsISqt5tPS/RseqVOMu24hXJ8rItK4Wgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5ohDm%2FbtsISqt5tPS%2FRseqVOMu24hXJ8rItK4Wgk%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;692&quot; height=&quot;600&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jenkins 공식 사이트의 Java 지원 버전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1;&quot; href=&quot;https://www.jenkins.io/doc/book/platform-information/support-policy-java/&quot;&gt;[Jenkins 공식 사이트] Java&amp;nbsp;Support&amp;nbsp;Policy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로는 위 링크를 참조해서 서버에 설치한 Java 버전에 Jenkins를 맞추면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이번 프로젝트 개발환경은 Java 8로 결정되었고, 거기에 맞추려니 jenkins&amp;nbsp; 버전을 너무 낮춰야했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins는 플러그인 기반으로 구성되어있기 떄문에, 가능하면 최신버전을 사용하고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스토어에서 받을 때마다 다운그레이드 하고싶지도 않고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요한 플러그인이 해당 버전을 지원하는지 여부도 알수 없었기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 이슈는 Jenkins Running용 JDK를 따로 받는 방법으로 해결했는데 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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) Jenkins 설치 ( 저장소 key 활용)&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1722352725600&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Jenkins 리파지토리 추가
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc &amp;gt; /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list &amp;gt; /dev/null

#apt(저장소) 업데이트
sudo apt update

#jenkins 설치
sudo apt install jenkins

#enkins 설치 경로 확인
dpkg -L 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;2023년 3월 28일 부터 적용된 릴리스를 Linux 서버에 설치 할 때는 저장소 key를 사용해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 설명은 jenkins 공식 홈페이지 릴리스 노트로 대신한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jenkins.io/blog/2023/03/27/repository-signing-keys-changing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Jenkins 공식 사이트] Jenkins 2.397 and 2.387.2: New Linux Repository Signing Keys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3) Jenkins 환경 설정파일 수정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에디터는 vi 로 적었지만 nano 등 다른 툴을 써도 상관없다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정한 port에 대한 인바운드 트래픽도 허용해야하는데, 포스팅 목적상 방화벽 설정은 생략한다.&lt;/p&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;Jenkisn는 2개의 환경설정 파일이 있는데 수정할 내용은 다음과 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;1. port 변경&lt;/span&gt; (Jenkins 기본 port는 8080이라 톰캣과 겹치기 때문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;2. Jenkins Running용 JDK 환경변수 추가&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1722353202542&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#설정파일1 편집
sudo vi /usr/lib/systemd/system/jenkins.service

#설정파일2 편집
sudo vi /etc/default/jenkins

##################[ jenkins.service ]##################################################
# The Java home directory. When left empty, JENKINS_JAVA_CMD and PATH are consulted.
Environment=&quot;젠킨스 구동용 JDK 절대경로&quot;

# Port to listen on for HTTP requests. Set to -1 to disable.
# To be able to listen on privileged ports (port numbers less than 1024),
# add the CAP_NET_BIND_SERVICE capability to the AmbientCapabilities
# directive below.
Environment=&quot;JENKINS_PORT=포트수정&quot;

#################[ default/jenkins ]######################################################
# arguments to pass to java
JAVA_HOME=&quot;젠킨스 구동용 JDK 절대경로&quot;

# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=포트수정

#########################################################################################&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4) Jenkins 서비스 시작 및 자동 시작 설정&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1722354598597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Jenkins 서비스 상태 확인
# 시작 전에는 빨간색으로 멈춰있고, 시작 후에는 초록색으로 구동된 것을 확인할 수 있다.
sudo systemctl status jenkins

# Jenkins 서비스 시작
sudo systemctl start jenkins

# 부팅 시 Jenkins 자동 실행
sudo systemctl enable jenkins

# 로그 확인
sudo tail -n 100 /var/log/syslog | grep jenkins
sudo journalctl -u jenkins.service -b&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5) Tomcat&amp;nbsp; role 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일에서 아래 내용을 찾아서 username, password를 설정 후 Tomcat을 재실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP:톰캣포트&amp;nbsp; 로 웹에서 접속했을 때 Manager App에 접근 가능하면 잘 설정된 것이다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1722354844322&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Tomcat 권한 설정
sudo vi /절대경로/apache-tomcat-9.0.90/conf/tomcat-users.xml

############[ 수정내용 ]##############
&amp;lt;role rolename=&quot;manager-gui&quot;/&amp;gt;
&amp;lt;role rolename=&quot;manager-script&quot;/&amp;gt;
&amp;lt;user username=&quot;your-username&quot; password=&quot;your-password&quot; roles=&quot;manager-gui,manager-script&quot;/&amp;gt;

######################################&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;a href=&quot;https://paran-coding.tistory.com/67&quot;&gt;02.&amp;nbsp;Jenkins를&amp;nbsp;활용해&amp;nbsp;CI/CD&amp;nbsp;환경&amp;nbsp;구축하기&amp;nbsp;:&amp;nbsp;jenkins&amp;nbsp;관리&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;a href=&quot;https://www.youtube.com/watch?v=0Emq5FypiMM&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[드림코딩] CI/CD 5분 개념 정리&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.redhat.com/ko/topics/devops/what-is-ci-cd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[RedHat] DevOps의 이해 &amp;gt; CI/CD란?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://guide.ncloud-docs.com/docs/devtools-devtools-1-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[네이버클라우드] Jenkins 시작 가이드&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DevOps</category>
      <category>CI/CD</category>
      <category>DevOps</category>
      <category>Jenkins</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/66</guid>
      <comments>https://paran-coding.tistory.com/66#entry66comment</comments>
      <pubDate>Wed, 31 Jul 2024 01:03:31 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 리눅스 기본 명령어 정리</title>
      <link>https://paran-coding.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;linux.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MKWCf/btsIQqhc16L/dK6qsSruR3tnGF02HNBNL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MKWCf/btsIQqhc16L/dK6qsSruR3tnGF02HNBNL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MKWCf/btsIQqhc16L/dK6qsSruR3tnGF02HNBNL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMKWCf%2FbtsIQqhc16L%2FdK6qsSruR3tnGF02HNBNL1%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;300&quot; height=&quot;300&quot; data-filename=&quot;linux.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그동안은 회사에 배포 담당팀이 따로 있어서 특정 브랜치에 소스만 반영했었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 달 부터 서버에 직접 접근해서 서비스를 관리하게되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그동안은 개인 프로젝트 할 때만 상황에 따라 필요한 명렁어를 검색해서 쓰는 편이었다.&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;/p&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 이동&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 91px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;cd&amp;nbsp;/경로&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;절대경로&amp;nbsp;이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;Change Directory의 약자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;cd&amp;nbsp;~&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;홈 디렉터리 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;cd&amp;nbsp;..&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;부모 디렉터리로 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;cd&amp;nbsp;&amp;ndash;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;이전 디렉터리로 이동 (뒤로가기)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&amp;nbsp;&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;h4 data-ke-size=&quot;size20&quot;&gt;2. 조회 / 검색&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 20px;&quot; border=&quot;1&quot; data-ke-style=&quot;style7&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;pwd&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;현재&amp;nbsp;작업중&amp;nbsp;디렉터리&amp;nbsp;경로&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;print work directory의 약자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;cat 파일&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;파일&amp;nbsp;내용&amp;nbsp;조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;ls&amp;nbsp;-a&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;숨김&amp;nbsp;파일&amp;nbsp;표시&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;list segments의 약자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;ls -l&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;파일&amp;nbsp;상세정보&amp;nbsp;조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;ll 라는 별칭으로도 사용 가능&lt;br /&gt;-t : 최신순 정렬&lt;br /&gt;-rt: 오래된순 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;find&amp;nbsp;디렉터리&amp;nbsp;-name&amp;nbsp;'*.log*'&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;디렉터리에서&amp;nbsp;파일&amp;nbsp;검색&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;*패턴*도가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;find&amp;nbsp;디렉터리&amp;nbsp;-daystart&amp;nbsp;-mtime&amp;nbsp;-7&amp;nbsp;-delete&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;최근&amp;nbsp;7일간&amp;nbsp;수정된&amp;nbsp;파일&amp;nbsp;검색&amp;nbsp;후&amp;nbsp;삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&amp;nbsp;&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;h4 data-ke-size=&quot;size20&quot;&gt;3.관리&lt;/h4&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 199px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;mkdir 디렉터리&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;디렉터리&amp;nbsp;생성&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;make directory의 약자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;mkdir -p 상위디렉터리/하위디렉터리&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;하위 디렉터리까지&amp;nbsp; 생성&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;cp 원본 대상&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;원본(&lt;span style=&quot;background-color: #f6f8fb; color: #333333; text-align: center;&quot;&gt;파일/디렉터리&lt;/span&gt;)을 타겟에 복사&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;copy의 약자&lt;br /&gt;ex.) cp test.txt test_back.txt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;cp -f 원본 대상&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;파일/디렉터리&amp;nbsp;덮어쓰기&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;cp -R 원본 대상&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;원본의 자식 디렉터리까 복사&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;mv 원본 /경로&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;파일/디렉터리&amp;nbsp;경로로&amp;nbsp;이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;move의 약자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;mv 원본명 변경명 -r&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;파일/디렉터리 이름 변경&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;rm 타겟&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;파일 삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;remove의 약자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;rm -r 타겟&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;디렉터리 삭제 ( confirm )&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;rm&amp;nbsp;-i&amp;nbsp;*.확장자&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;확장자로 끝나는 파일 ( confirm )&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4.서비스 관련&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 같은 서비스라도 OS 에 따라 명령어가 다른데, Ubuntu 기준으로 작성했다.&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 199px;&quot; border=&quot;1&quot; data-ke-style=&quot;style7&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;nohub&amp;nbsp;실행명령 &amp;amp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;nohub : 세션이 끊겨도 유지&lt;br /&gt;&amp;amp; : 백그라운드에서 실행&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;no hang up의 약자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;ps -ef | grep 문자열(서비스명)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;프로세스 아이디 조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;SQL의 LIKE 처럼 문자열 포함 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;kill -9 프로세스 아이디&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;프로세스 종료 ( 백그라운드까지)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;ps&amp;nbsp;-ef&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;문자열&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;실행중인 프로세스 상태를 모두 풀포맷으로 출력&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;apt&amp;nbsp;--installed&amp;nbsp;list&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;apt로 설치한 패키지 목록 조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;apt --installed list | grep 문자열&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;apt로 설치한 패키지 검색&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;tail&amp;nbsp;-f&amp;nbsp;로그파일경로&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;로그 조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;tail : 끝에서부터&lt;br /&gt;head : 앞에서부터&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f6f8fb; color: #333333; text-align: center;&quot;&gt;Ctril + C로 중단할때까지 계속 출력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;tail -500f &lt;span style=&quot;background-color: #f6f8fb; color: #333333; text-align: center;&quot;&gt;로그파일경로&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;로그조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;끝에서부터 500줄까지 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;tail&amp;nbsp;-n&amp;nbsp;숫자&amp;nbsp;로그파일경로&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;로그조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;끝에서부터 숫자 line까지 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>DevOps</category>
      <category>DevOps</category>
      <category>Linux</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/65</guid>
      <comments>https://paran-coding.tistory.com/65#entry65comment</comments>
      <pubDate>Mon, 29 Jul 2024 12:46:44 +0900</pubDate>
    </item>
    <item>
      <title>[typescript/javascript] 절대경로 import 설정과 auto import extention</title>
      <link>https://paran-coding.tistory.com/64</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Typescript.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1hENV/btsIoNYVFLN/3Wb4gjELO6wKHYSt41QhD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1hENV/btsIoNYVFLN/3Wb4gjELO6wKHYSt41QhD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1hENV/btsIoNYVFLN/3Wb4gjELO6wKHYSt41QhD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1hENV%2FbtsIoNYVFLN%2F3Wb4gjELO6wKHYSt41QhD0%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;200&quot; height=&quot;200&quot; data-filename=&quot;Typescript.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720168166090&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { TestComponent } from '../../../../components/TestComponent';&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;보기에도 지저분하고 가독성도 떨어지고, 위치 이동이라도 하면 imoprt 오류도 정정해줘야하고 피곤하다.&lt;/p&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;진행중인 typeScript 프로젝트에 먼저 적용해보고 javascript 버전도 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. tsconfig.app.json 수정&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1720168559817&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;compilerOptions&quot;: {
        /* Paths */
        &quot;baseUrl&quot;: &quot;./&quot;,  //절대경로 디렉터리 설정
        &quot;paths&quot;: { 		   //하위 디렉터리용 상대경로 매핑
            &quot;pages/*&quot;: [&quot;pages/*&quot;],
            &quot;components/*&quot;: [&quot;components/*&quot;],
            &quot;images/*&quot;: [&quot;assets/images/*&quot;]
        }
    }
}&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;해당 파일이 없을 경우 package.json 혹은 esLint, prettier 설정파일 등과 같은 위치에 추가하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 vite로 시작한 프로젝트라 이미 존재했는데&lt;/p&gt;
&lt;pre id=&quot;code_1720185046241&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;files&quot;: [],
  &quot;references&quot;: [
    {
      &quot;path&quot;: &quot;./tsconfig.app.json&quot;
    },
    {
      &quot;path&quot;: &quot;./tsconfig.node.json&quot;
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 tsconfig.app.json 과 tsconfig.node.json을 바라보고 있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 파일에 동일한 내용으로 baseUrl과 path를 설정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. jsConfig.json 수정&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1720169293387&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;compilerOptions&quot;: {
        &quot;baseUrl&quot;: &quot;./src&quot;,
        &quot;paths&quot;: {
            &quot;components/*&quot;: [&quot;components/*&quot;],
            &quot;images/*&quot;: [&quot;assets/images/*&quot;]
        }
    },
    &quot;include&quot;: [&quot;src&quot;]
}&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;타입스크립트를 쓰지 않아도 설정파일명만 바뀔뿐 동일하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.vite.config.ts 수정&lt;/h3&gt;
&lt;pre id=&quot;code_1720184757806&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default defineConfig({
    plugins: [react()],
    //추가한 부분
    resolve: {
        alias: {
            pages: &quot;/src/pages&quot;, 
            components: &quot;/src/components&quot;, 
        },
    },
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vite로 생성한 프로젝트라면 vite 설정에도 alias를 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. vsCode 자동 import extention: Auto Import&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w3Q5U/btsIp7hp2eX/AI9RsxM4GKI9Krcshp7tw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w3Q5U/btsIp7hp2eX/AI9RsxM4GKI9Krcshp7tw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w3Q5U/btsIp7hp2eX/AI9RsxM4GKI9Krcshp7tw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw3Q5U%2FbtsIp7hp2eX%2FAI9RsxM4GKI9Krcshp7tw0%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;1170&quot; height=&quot;204&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평소에는 이걸 써서 직접 import문을 쓰지 않는데, 가끔 엉뚱한 경로를 가져와서 수정하다 여기까지왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스상에서 import 해야 쓸 수 있는 hook이나 컴포넌트 등을 쓰고 Ctrl+Space 누르면 추천 경로가 뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 import문 쓸때도 마찬가지!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;a href=&quot;https://inpa.tistory.com/entry/TS-%F0%9F%93%98-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-tsconfigjson-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-%EC%B4%9D%EC%A0%95%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;타입스크립트-tsconfigjson-설정하기-총정리&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>JavaScript &amp;amp; TypeScript</category>
      <category>jsconfig</category>
      <category>tsconfig</category>
      <category>VSCode</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/64</guid>
      <comments>https://paran-coding.tistory.com/64#entry64comment</comments>
      <pubDate>Fri, 5 Jul 2024 17:50:52 +0900</pubDate>
    </item>
    <item>
      <title>[vsCode] 단축키 설정 : 문자열 대문자/소문자/카멜케이스/케밥케이스 변환</title>
      <link>https://paran-coding.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;vsCode.jpg&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bthEgx/btsIeUWAJvD/OM5LSvZkMxkt72EKZJ4JO0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bthEgx/btsIeUWAJvD/OM5LSvZkMxkt72EKZJ4JO0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bthEgx/btsIeUWAJvD/OM5LSvZkMxkt72EKZJ4JO0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbthEgx%2FbtsIeUWAJvD%2FOM5LSvZkMxkt72EKZJ4JO0%2Fimg.jpg&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;300&quot; height=&quot;221&quot; data-filename=&quot;vsCode.jpg&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;vsCode 사용 중 상수로 써야하는 값이 있어서 대문자로 변환해야하는 일이 생겼다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;inteliJ 쓸 때 String Manipulation 플러그인을 단축키에 넣어서 자주 썼는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;vsCode에도 비슷한 익스텐션이 있나 살피던 중 방법을 찾아서 정리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 대문자 변환 : transformToUppercase&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NpR0d/btsId8up7FQ/pZLbpvKgoKbwc92RaKxehK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NpR0d/btsId8up7FQ/pZLbpvKgoKbwc92RaKxehK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NpR0d/btsId8up7FQ/pZLbpvKgoKbwc92RaKxehK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNpR0d%2FbtsId8up7FQ%2FpZLbpvKgoKbwc92RaKxehK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;734&quot; height=&quot;277&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;277&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;1) Ctrl + Shift + P 를 누르고 'shortcut' 을 검색해 단축키 설정 화면으로 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 'upper'를 검색해서 대문자 변환 단축키를 설정한다.&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1166&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Uj2k/btsId04iLro/kstVVS4rAPkvGHZzz4DJ4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Uj2k/btsId04iLro/kstVVS4rAPkvGHZzz4DJ4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Uj2k/btsId04iLro/kstVVS4rAPkvGHZzz4DJ4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Uj2k%2FbtsId04iLro%2FkstVVS4rAPkvGHZzz4DJ4K%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;1166&quot; height=&quot;119&quot; data-origin-width=&quot;1166&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 키 바인딩 항목을 더블클릭 &amp;gt;&amp;nbsp; 단축키 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 동일한 단축키가 이미 등록되어있을 경우 '언제'를 우클릭 &amp;gt; 식인경우변경 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 단축키가 실행될 조건을 설정해준다. 기존 등록된 단축키들과 겹치지 않도록 &amp;nbsp; &lt;span style=&quot;background-color: #f9f2f4; color: #c7254e; text-align: start;&quot;&gt;textInputFocus&lt;/span&gt; 로 설정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 언제 (when) 조건은 vsCode 공식문서를 참조했다.&lt;/p&gt;
&lt;figure id=&quot;og_1719456578432&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;when clause contexts&quot; data-og-description=&quot;Visual Studio Code when clause context reference.&quot; data-og-host=&quot;code.visualstudio.com&quot; data-og-source-url=&quot;https://code.visualstudio.com/api/references/when-clause-contexts&quot; data-og-url=&quot;https://code.visualstudio.com/api/references/when-clause-contexts&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/blAfmD/hyWrW7j8pT/FNrEspDeojX68m3GznfBgk/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506,https://scrap.kakaocdn.net/dn/cYJl9g/hyWrV1DHyY/XOWT8Ad3JZQK6ov9C2IYFK/img.png?width=1040&amp;amp;height=429&amp;amp;face=0_0_1040_429&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com/api/references/when-clause-contexts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://code.visualstudio.com/api/references/when-clause-contexts&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/blAfmD/hyWrW7j8pT/FNrEspDeojX68m3GznfBgk/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506,https://scrap.kakaocdn.net/dn/cYJl9g/hyWrV1DHyY/XOWT8Ad3JZQK6ov9C2IYFK/img.png?width=1040&amp;amp;height=429&amp;amp;face=0_0_1040_429');&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;when clause contexts&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio Code when clause context reference.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;code.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.소문자 변환: &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;transformToLowercase&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKmopH/btsIdcYGTRI/OWh3j0IsCX3r7kqEUGvNmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKmopH/btsIdcYGTRI/OWh3j0IsCX3r7kqEUGvNmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKmopH/btsIdcYGTRI/OWh3j0IsCX3r7kqEUGvNmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKmopH%2FbtsIdcYGTRI%2FOWh3j0IsCX3r7kqEUGvNmK%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;1174&quot; height=&quot;117&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.카멜케이스 변환 : &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;transformToCamelcase&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R2M6A/btsIdQ8I4q4/dHhGkJMTMiqn6SpVgb0yc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R2M6A/btsIdQ8I4q4/dHhGkJMTMiqn6SpVgb0yc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R2M6A/btsIdQ8I4q4/dHhGkJMTMiqn6SpVgb0yc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR2M6A%2FbtsIdQ8I4q4%2FdHhGkJMTMiqn6SpVgb0yc0%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;1175&quot; height=&quot;131&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;131&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;h3 data-ke-size=&quot;size23&quot;&gt;4. 케밥&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;케이스 변환 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;transformToKebabcase&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEQC71/btsIcTSDWTG/j7aSaXAtsQDHFhQ17B5Xl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEQC71/btsIcTSDWTG/j7aSaXAtsQDHFhQ17B5Xl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEQC71/btsIcTSDWTG/j7aSaXAtsQDHFhQ17B5Xl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEQC71%2FbtsIcTSDWTG%2Fj7aSaXAtsQDHFhQ17B5Xl1%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;1172&quot; height=&quot;123&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS에서 사용하는 케밥케이스도 설정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;a href=&quot;https://code.visualstudio.com/docs/getstarted/keybindings&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;vsCode 공식문서: &lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;Key Bindings&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/api/references/when-clause-contexts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;vsCode 공식문서:&lt;span&gt; W&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;hen clause contexts&lt;/span&gt; &lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IDE</category>
      <category>VSCode</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/63</guid>
      <comments>https://paran-coding.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 27 Jun 2024 11:58:53 +0900</pubDate>
    </item>
    <item>
      <title>[github] repository language 변경</title>
      <link>https://paran-coding.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_github.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKj7y/btsH431PPNa/kwqqZdEk0ToBFi2A2Zery0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKj7y/btsH431PPNa/kwqqZdEk0ToBFi2A2Zery0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKj7y/btsH431PPNa/kwqqZdEk0ToBFi2A2Zery0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKj7y%2FbtsH431PPNa%2FkwqqZdEk0ToBFi2A2Zery0%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;300&quot; height=&quot;306&quot; data-filename=&quot;edited_github.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;1.github 저장소 언어 변경&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buijko/btsH6gTaIfS/BbpK5LE5Na53qvfzeKSenk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buijko/btsH6gTaIfS/BbpK5LE5Na53qvfzeKSenk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buijko/btsH6gTaIfS/BbpK5LE5Na53qvfzeKSenk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuijko%2FbtsH6gTaIfS%2FBbpK5LE5Na53qvfzeKSenk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;192&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;github readme를 꾸미다보니 이 알록달록한 저장소 언어들이 거슬렸다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;깔끔하게&amp;nbsp; JavaScript랑 Java만 나왔으면 좋겠는데&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그러던 중 .gitattributes 설정파일에 대해 알게되어 기록으로 남긴다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0UtAR/btsH4XHjcbS/LcaTfnq73gDzW8k0kdmg21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0UtAR/btsH4XHjcbS/LcaTfnq73gDzW8k0kdmg21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0UtAR/btsH4XHjcbS/LcaTfnq73gDzW8k0kdmg21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0UtAR%2FbtsH4XHjcbS%2FLcaTfnq73gDzW8k0kdmg21%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;1137&quot; height=&quot;160&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 저장소 우측 상단 Add file &amp;gt; Create new file&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1481&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YS7Pw/btsH6tShMO8/ZamPJwJXg56JvxbX1C9qB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YS7Pw/btsH6tShMO8/ZamPJwJXg56JvxbX1C9qB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YS7Pw/btsH6tShMO8/ZamPJwJXg56JvxbX1C9qB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYS7Pw%2FbtsH6tShMO8%2FZamPJwJXg56JvxbX1C9qB0%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;1481&quot; height=&quot;305&quot; data-origin-width=&quot;1481&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 좌측 상단에 파일명 .gitattributes&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3. 내용에 정규식으로 제외할 언어와 수집할 언어를 적어준다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;*.html linguist-vendored&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;html 제외&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;*.java linguist-vendored=false&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;java 수집&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;gt; 나의 . gitattributes 코드&lt;/p&gt;
&lt;pre id=&quot;code_1718852087616&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;*.html linguist-vendored
*.css linguist-vendored
*.scss linguist-vendored
*.styl linguist-vendored
*.php linguist-vendored
*.less linguist-vendored
*.java linguist-vendored=false&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpUGv5/btsH41CWgGs/gtntifan49blLijDQaVImK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpUGv5/btsH41CWgGs/gtntifan49blLijDQaVImK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpUGv5/btsH41CWgGs/gtntifan49blLijDQaVImK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpUGv5%2FbtsH41CWgGs%2Fgtntifan49blLijDQaVImK%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;402&quot; height=&quot;147&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;4. commit 하고 새로고침하면 이렇게 설정한 언어만 나오는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;참고로 바로 적용되지는 않고 30초 정도 딜레이가 있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그 밖에도 CRLF 등 다양한 설정이 가능하다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;공식문서가 한글화도 잘 되어있어서 참조할 수 있도록 링크를 남긴다.&lt;span style=&quot;background-color: #fcfcfa; color: #4e443c; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1;&quot; href=&quot;https://git-scm.com/book/ko/v2/Git%EB%A7%9E%EC%B6%A4-Git-Attributes&quot;&gt;Git 공식문서 : Git Attributes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;2. github 언어 통계 기준&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 github 저장소의 Langage 통계 기준은 뭘까?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn3tj4/btsH53mfFb4/W8b4BQwrZE2U4SMmQV3aDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn3tj4/btsH53mfFb4/W8b4BQwrZE2U4SMmQV3aDk/img.png&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;161&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.4115%; margin-right: 10px;&quot; data-widthpercent=&quot;51&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn3tj4/btsH53mfFb4/W8b4BQwrZE2U4SMmQV3aDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn3tj4%2FbtsH53mfFb4%2FW8b4BQwrZE2U4SMmQV3aDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;566&quot; height=&quot;161&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IFsRk/btsH5v4ABMp/YeRIvgVUAJClN0JUq3BFOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IFsRk/btsH5v4ABMp/YeRIvgVUAJClN0JUq3BFOk/img.png&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;122&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.4257%;&quot; data-widthpercent=&quot;49&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IFsRk/btsH5v4ABMp/YeRIvgVUAJClN0JUq3BFOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIFsRk%2FbtsH5v4ABMp%2FYeRIvgVUAJClN0JUq3BFOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dteMdD/btsH52nlqzI/iMdfjFai310NiopCUlnYe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dteMdD/btsH52nlqzI/iMdfjFai310NiopCUlnYe0/img.png&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;121&quot; data-is-animation=&quot;false&quot; style=&quot;width: 60.072%; margin-right: 10px;&quot; data-widthpercent=&quot;60.78&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dteMdD/btsH52nlqzI/iMdfjFai310NiopCUlnYe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdteMdD%2FbtsH52nlqzI%2FiMdfjFai310NiopCUlnYe0%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;521&quot; height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzCsxA/btsH5LF89ZT/bzoMDIPpaEaDUwY3z7SAAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzCsxA/btsH5LF89ZT/bzoMDIPpaEaDUwY3z7SAAk/img.png&quot; data-origin-width=&quot;389&quot; data-origin-height=&quot;140&quot; data-is-animation=&quot;false&quot; style=&quot;width: 38.7652%;&quot; data-widthpercent=&quot;39.22&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzCsxA/btsH5LF89ZT/bzoMDIPpaEaDUwY3z7SAAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzCsxA%2FbtsH5LF89ZT%2FbzoMDIPpaEaDUwY3z7SAAk%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;389&quot; height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;상단은 작년에 vue 프로젝트인데 주언어가 vue로 잡혀있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;하단은 진행중인 react 프로젝트인데 주언어가 JavaScript로 잡혀있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;왜 리액트는 카운트가 안될까?&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;애초에 vue나 react나 프레임워크인데 vue프로젝트는 왜 언어로 카운트되는거지?&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eerPrU/btsH4GMBmcU/nOMbv1aFVMOheoWuod2dwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eerPrU/btsH4GMBmcU/nOMbv1aFVMOheoWuod2dwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eerPrU/btsH4GMBmcU/nOMbv1aFVMOheoWuod2dwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeerPrU%2FbtsH4GMBmcU%2FnOMbv1aFVMOheoWuod2dwK%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;1494&quot; height=&quot;262&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;vue 프로젝트 언어 통계 카드에서 언어 'Vue'를 클릭하면 확장자가 vue로 끝나는 파일들의 목록이 뜬다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSBy0/btsH50Xl92K/HWSdFz1aO0mDAX7bp29hE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSBy0/btsH50Xl92K/HWSdFz1aO0mDAX7bp29hE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSBy0/btsH50Xl92K/HWSdFz1aO0mDAX7bp29hE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSBy0%2FbtsH50Xl92K%2FHWSdFz1aO0mDAX7bp29hE1%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;1448&quot; height=&quot;254&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;반면 react 프로젝트의 대부분을 차지하는&amp;nbsp; jsx 파일은 JavScript로 수집된다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;jsx 는 JavaScript 확장 문법이니까 이해가 가는 로직이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;.attribute로 repo 언어 필터링을 진행하면서 확인해본 결과 파일 확장자로 프로젝트 langage를 결정되는게 맞다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;좀 더 궁굼해서 찾아본 linguist github페이지도 하단 레퍼런스에 링크해두었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;a href=&quot;https://www.hahwul.com/2021/11/05/change-wrong-language-in-github-repo/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Github&amp;nbsp;repo&amp;nbsp;내&amp;nbsp;Languages&amp;nbsp;변경하기&amp;nbsp;(.gitattributes)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/book/ko/v2/Git%EB%A7%9E%EC%B6%A4-Git-Attributes&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Git 공식문서 : Git Attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github-linguist/linguist&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Linguist gitHub Page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Git</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/62</guid>
      <comments>https://paran-coding.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 20 Jun 2024 12:33:10 +0900</pubDate>
    </item>
    <item>
      <title>[PostgresSQL] 컬럼명, 컬럼 코멘트로 테이블 검색</title>
      <link>https://paran-coding.tistory.com/61</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;postgresql-logo.svg&quot; data-origin-width=&quot;151&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qBFKr/btsLC17ziSH/Q9QKEgcYs9etES8r9FIVak/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qBFKr/btsLC17ziSH/Q9QKEgcYs9etES8r9FIVak/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qBFKr/btsLC17ziSH/Q9QKEgcYs9etES8r9FIVak/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqBFKr%2FbtsLC17ziSH%2FQ9QKEgcYs9etES8r9FIVak%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;151&quot; height=&quot;150&quot; data-filename=&quot;postgresql-logo.svg&quot; data-origin-width=&quot;151&quot; data-origin-height=&quot;150&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;규모가 큰 서비스의 DB구조를 파악하려면 ERD랑 관련 산출물로는 부족할 때가 많다.&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;h4 data-ke-size=&quot;size20&quot;&gt;1. 컬럼명 or 컬럼 코멘트로 테이블 찾기&lt;/h4&gt;
&lt;pre id=&quot;code_1717562639897&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/*[검색] 컬럼명 , 컬럼 코멘트*/
select
    isc.table_schema,
    isc.table_name,
    isc.column_name,
    col_description(a.attrelid, a.attnum) as column_comment,
    case when character_maximum_length is null then data_type
         else data_type || '(' || isc.character_maximum_length || ')'
    end as data_type,
    case when is_nullable = 'YES' then 'not null'
         else 'null'
    end as nullable
from
    information_schema.columns isc
        join pg_catalog.pg_attribute a
             on a.attname = isc.column_name
            and a.attrelid = (select oid
                              from pg_catalog.pg_class
                              where relname = isc.table_name
                                and relnamespace = (select oid
                                                    from pg_catalog.pg_namespace
                                                    where nspname = isc.table_schema))
where isc.column_name = '컬럼명'
-- where col_description(a.attrelid, a.attnum) like '%컬럼 코멘트%'
;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.테이블명 or 테이블 코멘트로 찾기&lt;/h4&gt;
&lt;pre id=&quot;code_1717562511032&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/*[검색] 테이블명, 테이블 코멘트*/
select
    ps.schemaname,
    ps.relname,
    pd.description
from pg_stat_user_tables ps
    left join pg_description pd on ps.relid = pd.objoid
-- where ps.relname = '테이블명' --테이블명
where pd.description like '테이블 코멘트%' --테이블 코멘트
  and pd.objsubid = 0 -- 1이상은 컬럼
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 이전에 작성한 오라클 버전&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://paran-coding.tistory.com/41&quot;&gt;[Oracle] 특정 컬럼이 존재하는 테이블, 뷰, 코멘트 찾기&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>SQL</category>
      <category>PostgreSQL</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/61</guid>
      <comments>https://paran-coding.tistory.com/61#entry61comment</comments>
      <pubDate>Wed, 5 Jun 2024 13:49:53 +0900</pubDate>
    </item>
    <item>
      <title>[javascript/프로그래머스] 가장 많이 받은 선물</title>
      <link>https://paran-coding.tistory.com/60</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 문제 요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #0070d1; text-align: start;&quot; href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/258712&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 서로 선물 주고받은 기록이 있다면, 더 많이준 사람에게 선물 +1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 기록이 없다면, 선물지수가 큰 사람에게 선물 +1&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;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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 풀이&lt;/h2&gt;
&lt;pre id=&quot;code_1716086177320&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * 프로그래머스 &amp;gt; 2024 KAKAO WINTHERSHIP : 가장 많이 받은 선물
 * @param {string[]} friends : 친구 이름이 담긴 일차원 배열
 * @param {string[]} gifts : ['준사람 받은사람'] 공백으로 구분된 선물 주고받은 기록
 * @returns 다음 달에 가장 많은 선물을 받을 친구의 선물 갯수
 */
export function solution(friends, gifts) {
    let answer = 0;

    const arrObj = new Array();
    const friendsLength = friends.length;
    let giftRecords = new Array(friendsLength).fill(0).map(() =&amp;gt; new Array(friendsLength).fill(0));

    //데이터 구조화
    friends.map(val =&amp;gt; {
        arrObj.push({ name: val, send: 0, receive: 0, point: 0, reword: 0 });
    });

    //선물기록 생성
    for (let gift of gifts) {
        const [send, receive] = gift.split(' ');
        const sendIdx = arrObj.findIndex(({ name }) =&amp;gt; send === name);
        const receiveIdx = arrObj.findIndex(({ name }) =&amp;gt; receive === name);
        giftRecords[sendIdx][receiveIdx]++;

        arrObj[sendIdx].send++;
        arrObj[receiveIdx].receive++;
    }
    //선물지수 계산
    arrObj.map(el =&amp;gt; [(el.point = el.send - el.receive)]);

    //선물기록 비교
    for (let i = 0; i &amp;lt; friendsLength; i++) {
        for (let j = 0; j &amp;lt; friendsLength; j++) {
            if (i === j) continue; //본인 생략
            if (giftRecords[i][j] &amp;gt; giftRecords[j][i]) arrObj[i].reword++;
            //선물지수 비교
            if (giftRecords[i][j] === giftRecords[j][i] 
            	|| (0 === giftRecords[i][j] &amp;amp;&amp;amp; 0 === giftRecords[j][i])) {
                if (arrObj[i].point === arrObj[j].point) return;
                if (arrObj[i].point &amp;gt; arrObj[j].point) arrObj[i].reword++;
            }
        }
    }
    answer = arrObj
        .map(val =&amp;gt; {
            return val.reword;
        })
        .reduce((acc, cur) =&amp;gt; (acc &amp;gt; cur ? acc : cur));
    return answer;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>JavaSscript</category>
      <category>알고리즘</category>
      <category>프로그래머스</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/60</guid>
      <comments>https://paran-coding.tistory.com/60#entry60comment</comments>
      <pubDate>Sun, 19 May 2024 11:47:52 +0900</pubDate>
    </item>
    <item>
      <title>[mysql] Enum 타입 사용의 장단점 및 대안</title>
      <link>https://paran-coding.tistory.com/59</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mysql-170x115.png&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzCOu6/btsHKo6ZFTW/Sh79pCcEgmL8UxCvki9E40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzCOu6/btsHKo6ZFTW/Sh79pCcEgmL8UxCvki9E40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzCOu6/btsHKo6ZFTW/Sh79pCcEgmL8UxCvki9E40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzCOu6%2FbtsHKo6ZFTW%2FSh79pCcEgmL8UxCvki9E40%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;176&quot; height=&quot;119&quot; data-filename=&quot;mysql-170x115.png&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;119&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;mysql 데이터타입으로 enum이 있는 것을 발견했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 유용하게 쓰던 enum 타입이 있어서 코드테이블을 따로 만들지 않고,&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;&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;a href=&quot;https://velog.io/@leejh3224/%EB%B2%88%EC%97%AD-MySQL%EC%9D%98-ENUM-%ED%83%80%EC%9E%85%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EB%A7%90%EC%95%84%EC%95%BC-%ED%95%A0-8%EA%B0%80%EC%A7%80-%EC%9D%B4%EC%9C%A0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[번역] MySQL의 ENUM 타입을 사용하지 말아야 할 8가지 이유&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wildeveloperetrain.tistory.com/250&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Java Enum 타입 데이터베이스 저장 형식은 뭐가 좋을까?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>SQL</category>
      <author>devkmee</author>
      <guid isPermaLink="true">https://paran-coding.tistory.com/59</guid>
      <comments>https://paran-coding.tistory.com/59#entry59comment</comments>
      <pubDate>Fri, 12 Apr 2024 10:19:30 +0900</pubDate>
    </item>
  </channel>
</rss>