<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>PLOD</title>
    <link>https://kibeom2000.tistory.com/</link>
    <description>1. 남의 인생과 비교하지 말고 살자
2. 이젠 행복했으면 좋겠다</description>
    <language>ko</language>
    <pubDate>Mon, 10 Aug 2026 15:04:25 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>훌룽이</managingEditor>
    <item>
      <title>[Docker] Docker Container 실행 (local server)</title>
      <link>https://kibeom2000.tistory.com/198</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2400&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0BKWL/dJMcagFNgbL/aXABKwGdU4UJFl9rWeKuak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0BKWL/dJMcagFNgbL/aXABKwGdU4UJFl9rWeKuak/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0BKWL/dJMcagFNgbL/aXABKwGdU4UJFl9rWeKuak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0BKWL%2FdJMcagFNgbL%2FaXABKwGdU4UJFl9rWeKuak%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;2400&quot; height=&quot;1200&quot; data-origin-width=&quot;2400&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;117&quot; data-start=&quot;97&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1, docker-compose.yml 파일 작성&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1780554475077&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  mysql:
    image: mysql:8.0
    container_name: #{container_name}
    ports:
      - &quot;3306:3306&quot;
    environment:
      MYSQL_ROOT_PASSWORD: #{MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: #{MYSQL_DATABASE}
      MYSQL_USER: #{MYSQL_USER}
      MYSQL_PASSWORD: #{MYSQL_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

volumes:
  mysql_data:&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-end=&quot;117&quot; data-start=&quot;97&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Docker 컨테이너 실행&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;181&quot; data-start=&quot;119&quot; data-ke-size=&quot;size16&quot;&gt;docker-compose.yml에 정의된 MySQL, Redis 등의 컨테이너를 백그라운드에서 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1780554103939&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 실행 상태 확인&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1780554132415&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-end=&quot;290&quot; data-start=&quot;271&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. MySQL 컨테이너 접속&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;335&quot; data-start=&quot;292&quot; data-ke-size=&quot;size16&quot;&gt;실행 중인 DB 컨테이너 내부로 접속하여 데이터베이스 콘솔을 실행합니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;top: 585px;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker exec -it 컨테이너 명 mysql -u 데이터베이스 명 -p&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;448&quot; data-start=&quot;416&quot; data-ke-size=&quot;size16&quot;&gt;비밀번호 입력 후 powershell 관리자모드에서 MySQL CLI에 접속할 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;466&quot; data-start=&quot;450&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터베이스 목록 조회&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SHOW DATABASES;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;509&quot; data-start=&quot;496&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;테이블 목록 조회&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블은 Hibernate를 통한 entity 정보에 따른 테이블 생성&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SHOW TABLES;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;560&quot; data-start=&quot;541&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. Redis 컨테이너 실행&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;584&quot; data-start=&quot;562&quot; data-ke-size=&quot;size16&quot;&gt;Redis를 별도 컨테이너로 실행합니다.&lt;/p&gt;
&lt;h3 data-end=&quot;606&quot; data-start=&quot;586&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Redis 최초 생성 및 실행&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker run -d --name 레디스 명 -p 6379:6379 redis&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;703&quot; data-start=&quot;682&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기존 Redis 컨테이너 재실행&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker start 레디스 명&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;770&quot; data-start=&quot;752&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Redis 실행 상태 확인&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;833&quot; data-start=&quot;806&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. Spring Boot 애플리케이션 실행&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;844&quot; data-start=&quot;835&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;일반 실행&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;./gradlew bootRun&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;902&quot; data-start=&quot;883&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오류 로그까지 확인하며 실행&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;./gradlew bootRun --stacktrace&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;977&quot; data-start=&quot;954&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Gradle Daemon 없이 실행&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;./gradlew bootRun --no-daemon&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;1091&quot; data-start=&quot;1028&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1091&quot; data-start=&quot;1030&quot; data-ke-size=&quot;size16&quot;&gt;개발 중 예상치 못한 Gradle 캐시 문제 발생 시 --no-daemon 옵션을 활용하면 도움이 됩니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-end=&quot;1131&quot; data-start=&quot;1098&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;설정 파일(application.yml) 변경 시&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1174&quot; data-start=&quot;1133&quot; data-ke-size=&quot;size16&quot;&gt;설정 파일 수정 후 기존 빌드 결과물이 남아 있는 경우 캐시를 제거합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;./gradlew clean&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1231&quot; data-start=&quot;1211&quot; data-ke-size=&quot;size16&quot;&gt;이후 다시 애플리케이션을 실행합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;./gradlew bootRun&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1292&quot; data-start=&quot;1275&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DB 스키마 변경 시&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1356&quot; data-start=&quot;1294&quot; data-ke-size=&quot;size16&quot;&gt;테이블 구조(Entity, DDL 등)가 변경된 경우 기존 Docker Volume을 삭제하고 새로 생성합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker-compose down -v&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;1412&quot; data-start=&quot;1400&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;컨테이너 재생성&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;1504&quot; data-start=&quot;1454&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1504&quot; data-start=&quot;1456&quot; data-ke-size=&quot;size16&quot;&gt;-v 옵션은 Docker Volume까지 삭제하므로 기존 데이터가 모두 제거됩니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-end=&quot;1534&quot; data-start=&quot;1511&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;로컬 MySQL 사용 중일 경우&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1593&quot; data-start=&quot;1536&quot; data-ke-size=&quot;size16&quot;&gt;Docker MySQL과 로컬 MySQL이 동시에 실행되면 포트 충돌(3306)이 발생할 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1624&quot; data-start=&quot;1595&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Windows 환경에서 MySQL 서비스 종료&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;net stop MySQL&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;1676&quot; data-start=&quot;1660&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;MySQL 서비스 시작&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;net start MySQL&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>computer science/Cloud computing</category>
      <category>container</category>
      <category>Docker</category>
      <category>Docker Compose</category>
      <category>docker conatiner</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/198</guid>
      <comments>https://kibeom2000.tistory.com/198#entry198comment</comments>
      <pubDate>Thu, 4 Jun 2026 15:45:37 +0900</pubDate>
    </item>
    <item>
      <title>[git] GitHub Commit &amp;amp; Code Review 전략</title>
      <link>https://kibeom2000.tistory.com/197</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sqPb1/dJMcafthIlJ/gZGxzHZhO62a5yzmCwsNdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sqPb1/dJMcafthIlJ/gZGxzHZhO62a5yzmCwsNdk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sqPb1/dJMcafthIlJ/gZGxzHZhO62a5yzmCwsNdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsqPb1%2FdJMcafthIlJ%2FgZGxzHZhO62a5yzmCwsNdk%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;1100&quot; height=&quot;618&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;618&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;span&gt;현업에서 진행하는 다양한 프로젝트에서는 기능(API) 단위로 브랜치를 생성하고, Pull Request(PR)를 통해 코드 리뷰를 진행한 뒤 &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt; 브랜치에 반영하는 방식으로 개발을 진행합니다. (물론 회사나 상황에 따라서 SVN이나 다른 형상관리 tool을 사용하는 경우도 있지만 형상관리는 대동소이하기 때문에 git으로 설명드립니다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;1. Issue 생성&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;새로운 기능 개발이나 버그 수정이 필요한 경우 먼저 GitHub에서 Issue를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;예시)&amp;nbsp;&lt;/span&gt;&lt;/b&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;span&gt;회원가입 API 개발&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;멘토 조회 기능 개발&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;채팅 메시지 저장 기능 개발&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;로그인 예외 처리 개선&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Issue를 생성하면 작업 목적과 범위를 명확하게 관리할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;2. 브랜치 생성 및 개발&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Issue 생성 후 해당 작업 전용 브랜치를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;브랜치 네이밍 규칙&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;예시) API 개발&lt;/span&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;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;feature/user-signup&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;feature/mentor-search&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;feature/chat-room&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;예시) 버그 수정&lt;/span&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;bugfix/login-error&lt;/li&gt;
&lt;li&gt;bugfix/payment-validation&lt;/li&gt;
&lt;/ul&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;refactor/user-service &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;브랜치 생성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;IDE 터미널 내에서 다음 명령을 통해서 브랜치를 생성 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780530723430&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git checkout -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;생성한 브랜치에서 기능 개발을 진행합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;3. Commit&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기능 구현이 완료되면 변경 사항을 Commit 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780530789028&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git add .

git commit -m &quot;커밋 메시지&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; Commit Message Convention&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 46.161%; height: 119px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.1591%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;타입&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7586%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.1591%; height: 17px; text-align: center;&quot;&gt;feat&lt;/td&gt;
&lt;td style=&quot;width: 20.7586%; height: 17px; text-align: center;&quot;&gt;새로운 기능 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.1591%; height: 17px; text-align: center;&quot;&gt;fix&lt;/td&gt;
&lt;td style=&quot;width: 20.7586%; height: 17px; text-align: center;&quot;&gt;버그 수정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.1591%; height: 17px; text-align: center;&quot;&gt;refactor&lt;/td&gt;
&lt;td style=&quot;width: 20.7586%; height: 17px; text-align: center;&quot;&gt;리팩토링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.1591%; height: 17px; text-align: center;&quot;&gt;docs&lt;/td&gt;
&lt;td style=&quot;width: 20.7586%; height: 17px; text-align: center;&quot;&gt;문서 수정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.1591%; height: 17px; text-align: center;&quot;&gt;test&lt;/td&gt;
&lt;td style=&quot;width: 20.7586%; height: 17px; text-align: center;&quot;&gt;테스트 코드 작성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.1591%; height: 17px; text-align: center;&quot;&gt;chore&lt;/td&gt;
&lt;td style=&quot;width: 20.7586%; height: 17px; text-align: center;&quot;&gt;기타 설정 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;commit 메세지는 다음과 같이 작성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;avrasm&quot;&gt;&lt;code&gt;feat: 회원가입 API 구현
feat: 멘토 조회 API 추가
fix: 로그인 예외 처리 수정
refactor: UserService 구조 개선
docs: README 수정&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;4. 원격 저장소 Push&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;작업한 브랜치를 GitHub에 업로드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1780531113681&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push origin 브랜치명&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;5. Pull Request 생성&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;GitHub에서(Intellij 같은 IDE는 Pull Request 작성 기능을 지원해줌) Pull Request(PR)를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; PR 제목 예시&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[Feature] 회원가입 API 구현&lt;/li&gt;
&lt;li&gt;[Feature] 멘토 검색 API 개발&lt;/li&gt;
&lt;li&gt;[Fix] 로그인 오류 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; PR 내용 예시&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;## 작업 내용 &lt;br /&gt;- 회원가입 API 구현 &lt;br /&gt;- 비밀번호 암호화 적용 &lt;br /&gt;- 이메일 중복 체크 기능 추가 &lt;br /&gt;&lt;br /&gt;## 테스트 &lt;br /&gt;- 회원가입 성공 테스트 &lt;br /&gt;- 이메일 중복 테스트 완료&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;6. Code Review 진행&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;PR 생성 후 코드 리뷰를 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;리뷰 과정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;리뷰어가 코드 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;개선 의견(Comment) 작성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;개발자가 수정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;수정 Commit 및 Push&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Resolve Conversation 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;추가 리뷰 진행&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1780534475153&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git add . 

git commit -m &quot;커밋메세지&quot;

git push origin 브랜치명&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 과정을 반복하여 코드 품질을 개선합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;7. Merge&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모든 리뷰가 완료되면 &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt; 브랜치로 Merge 합니다. &lt;/span&gt;&lt;span&gt;GitHub에서&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;cos&quot;&gt;&lt;code&gt;Merge Pull Request&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;를 선택하여 반영합니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;8. 브랜치 삭제&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Merge 완료 후 사용한 브랜치는 삭제합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;로컬 브랜치 삭제&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1780534541025&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git checkout main 

git branch -d 브랜치명&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 브랜치가 삭제되지 않는다면 강제 삭제를 권유하진 않지만 강제 삭제 할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;강제 삭제&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git branch -D 브랜치명&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;원격 브랜치 정보 정리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;git fetch --prune&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;삭제된 원격 브랜치 정보를 로컬에서도 정리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;9. Issue 종료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기능이 정상적으로 배포되었거나 Merge가 완료되면 Issue를 종료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;coq&quot;&gt;&lt;code&gt;Close Issue&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Issue와 PR을 연결해두면 Merge 시 자동으로 Issue가 종료됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;예시)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;Closes #12&lt;/code&gt;&lt;/pre&gt;</description>
      <category>대외 활동 및 IT 지식</category>
      <category>branch</category>
      <category>Git</category>
      <category>github</category>
      <category>merge</category>
      <category>pull request</category>
      <category>협업</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/197</guid>
      <comments>https://kibeom2000.tistory.com/197#entry197comment</comments>
      <pubDate>Thu, 4 Jun 2026 09:58:05 +0900</pubDate>
    </item>
    <item>
      <title>[개발] Windows 환경에서 Codex CLI 사용</title>
      <link>https://kibeom2000.tistory.com/196</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Codex는 OpenAI에서 개발한 커맨드라인 기반 코딩 에이전트이고, Claude와 Gemini와 같이 최근 주목받고 있는 바이브 코딩 툴입니다. Codex는 Window 환경에서는 일부 기능이 불안정하기 때문에 WSL(Window Subsystem For Linux) 환경에서 사용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제부터 Window 환경에서 Codex CLI를 설치하고 사용하는 방법을 WSL 설치부터 Codex 호출 까지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;u&gt;관리자 권한&lt;/u&gt;&lt;span style=&quot;color: #000000; text-align: justify;&quot;&gt;으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;PowerShell&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: justify;&quot;&gt;을 실행합&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. wsl(Window Subsystem For Linux) 과 우붙투(Ubuntu) 설치&lt;/p&gt;
&lt;pre id=&quot;code_1777543528518&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install wsl

wsl --install -d Ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3 Ubuntu 환경에서 기본 업데이트 진행&lt;/p&gt;
&lt;pre id=&quot;code_1777544559265&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt upgrade&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Ubuntu 환경에서 nvm 설치&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777544619826&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

source ~/.bashrc

nvm install --lts

npm install -g @openai&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;5. Ubuntu 환경에서 Node.js 설치&lt;/p&gt;
&lt;pre id=&quot;code_1777544706233&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y nodejs&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;6. &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(필요 시)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;git을 설치&lt;/p&gt;
&lt;pre id=&quot;code_1777550537126&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 공부</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/196</guid>
      <comments>https://kibeom2000.tistory.com/196#entry196comment</comments>
      <pubDate>Thu, 30 Apr 2026 21:01:48 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] 349. Intersection of Two Arrays</title>
      <link>https://kibeom2000.tistory.com/195</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/intersection-of-two-arrays/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/intersection-of-two-arrays/description/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776071511947&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Intersection of Two Arrays - LeetCode&quot; data-og-description=&quot;Can you solve this real interview question? Intersection of Two Arrays - Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order. &amp;nbsp; Example 1: In&quot; data-og-host=&quot;leetcode.com&quot; data-og-source-url=&quot;https://leetcode.com/problems/intersection-of-two-arrays/description/&quot; data-og-url=&quot;https://leetcode.com/problems/intersection-of-two-arrays/description&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cvssDv/dJMb8VNwHzb/7YxN0DIujou7LeXDKkzbYk/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/intersection-of-two-arrays/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://leetcode.com/problems/intersection-of-two-arrays/description/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cvssDv/dJMb8VNwHzb/7YxN0DIujou7LeXDKkzbYk/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260');&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;Intersection of Two Arrays - LeetCode&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Can you solve this real interview question? Intersection of Two Arrays - Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order. &amp;nbsp; Example 1: In&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;leetcode.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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

class Solution {
    static Set&amp;lt;Integer&amp;gt; set;
    public int[] intersection(int[] nums1, int[] nums2) {
        set = new HashSet&amp;lt;&amp;gt;();

        int n = nums1.length;
        int m = nums2.length;

        Arrays.sort(nums1);
        Arrays.sort(nums2);

        if(n &amp;gt;= m){
            for(int i = 0; i &amp;lt; m ; i++){
                if(Arrays.binarySearch(nums1,nums2[i]) &amp;gt; -1){
                    set.add(nums2[i]);
                }
            }
        }else{
            for(int i = 0 ; i &amp;lt; n ; i++){
                if(Arrays.binarySearch(nums2,nums1[i]) &amp;gt; -1){
                    set.add(nums1[i]);
                }
            }
        }

        int[] answer = set.stream()
                  .mapToInt(Integer::intValue)
                  .toArray();

        return answer; 
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  배운 점 &amp;amp; 느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Arrays.binarySearch &amp;rarr; 배열에서 이진탐색을 하기 위해서는 반드시 먼저 정렬(Arrays.sort())를 진행해줘야 한다&lt;/p&gt;</description>
      <category>대외 활동 및 IT 지식/알고리즘 문제 풀이 정리</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/195</guid>
      <comments>https://kibeom2000.tistory.com/195#entry195comment</comments>
      <pubDate>Mon, 13 Apr 2026 18:12:47 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 캠프가는 영식(1590)</title>
      <link>https://kibeom2000.tistory.com/194</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1590&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1590&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class 백준_1590 {
    static int[][] arr;
    static PriorityQueue&amp;lt;Integer&amp;gt; busTime;
    public static void main(String[] args) throws Exception {
        int answer = -1;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int t = Integer.parseInt(st.nextToken());

        arr = new int[n][3];

        for(int i = 0; i &amp;lt; n ; i++){
            st = new StringTokenizer(br.readLine());

            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(st.nextToken());
            arr[i][2] = Integer.parseInt(st.nextToken());
        }

        busTime = new PriorityQueue&amp;lt;&amp;gt;();
        for (int i = 0; i &amp;lt; n; i++) {
            for(int j = 0 ; j &amp;lt; arr[i][2]; j++){
                busTime.add(arr[i][0] + arr[i][1] * j);
            }
        }

        while (!busTime.isEmpty()) {
            int x = busTime.poll();
            if(x &amp;gt;= t){
                answer = x - t;
                break;
            }
        }


        System.out.println(answer);
        br.close();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  배운 점 &amp;amp; 느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. PriorityQueue&amp;lt;Integer&amp;gt; &amp;rarr; 우선순위 자료구조 (defaulr 최소 힙 구조)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Heap 자료구조에서 순서가 보장되려면 Poll로 자료를 뽑아내야 한다&lt;/p&gt;</description>
      <category>대외 활동 및 IT 지식/알고리즘 문제 풀이 정리</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/194</guid>
      <comments>https://kibeom2000.tistory.com/194#entry194comment</comments>
      <pubDate>Mon, 13 Apr 2026 18:11:05 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 브실이의 입시전략(29723)</title>
      <link>https://kibeom2000.tistory.com/193</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/29723&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/29723&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;package test.silver;

import java.io.*;
import java.util.*;

public class 백준_29723 {
    static int n,m,k;
    static Map&amp;lt;String,Integer&amp;gt; map;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        k = Integer.parseInt(st.nextToken());

        map = new HashMap&amp;lt;&amp;gt;();
        for(int i = 0 ; i &amp;lt; n ; i++){
            st = new StringTokenizer(br.readLine());
            String subject = st.nextToken();
            int grade = Integer.parseInt(st.nextToken());
            map.put(subject, grade);
        }

        int sumVal = 0;

        for(int i = 0 ; i &amp;lt; k ; i++){
            st = new StringTokenizer(br.readLine());
            String subject = st.nextToken();
            sumVal += map.get(subject);
            map.remove(subject);
        }

        List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(map.values());

        Collections.sort(list);
        int minVal = sumVal;
        for(int i = 0; i &amp;lt; m - k ; i++){
            minVal += list.get(i);
        }

        Collections.sort(list,Collections.reverseOrder());
        int maxVal = sumVal;

        for(int i = 0 ; i &amp;lt; m - k ; i++){
            maxVal += list.get(i);
        }

        sb.append(String.valueOf(minVal)).append(&quot; &quot;).append(String.valueOf(maxVal));

        System.out.println(sb);

        br.close();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  배운 점 &amp;amp; 느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Map 자료구조에서 Value를 List 자료구조로 변환&lt;/p&gt;
&lt;div style=&quot;background-color: #263238; color: #c3cee3;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(map.Values());&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>대외 활동 및 IT 지식/알고리즘 문제 풀이 정리</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/193</guid>
      <comments>https://kibeom2000.tistory.com/193#entry193comment</comments>
      <pubDate>Fri, 10 Apr 2026 21:16:58 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 단어 정렬(1181)</title>
      <link>https://kibeom2000.tistory.com/192</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1181&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1181&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class 백준_1181 {
    static int n;
    static Set&amp;lt;String&amp;gt; set;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        n = Integer.parseInt(br.readLine());
        set = new HashSet&amp;lt;&amp;gt;();

        for(int i = 0 ; i &amp;lt; n ; i++){
            set.add(br.readLine());
        }

        String[] arr = set.toArray(new String[0]);

        Arrays.sort(arr, (a,b) -&amp;gt;{
            if(a.length() == b.length()){
                return a.compareTo(b);
            }else{
                return a.length() - b.length();
            }
        });

        for(String s : arr){
            System.out.println(s);
        }

        br.close();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  배운 점 &amp;amp; 느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.Java에서 Set&amp;lt;String&amp;gt;을 String[] 배열로 변환할 때&lt;/p&gt;
&lt;div style=&quot;background-color: #263238; color: #c3cee3;&quot;&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;String[] arr = set.toArray(new String[0]);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※ Set 자료구조를 List로도 바꿀 수 있음&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775823489873&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; arr = new ArrayList&amp;lt;&amp;gt;(set);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. String 정렬을 할때, 문자열 기준 오름차순(길이가 같다면 사전 순) 람다식 정렬&lt;/p&gt;
&lt;div style=&quot;background-color: #263238; color: #c3cee3;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Arrays.sort(arr, (a,b) -&amp;gt;{
    if(a.length() == b.length()){
        return a.compareTo(b);
    }else{
        return a.length() - b.length();
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>대외 활동 및 IT 지식/알고리즘 문제 풀이 정리</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/192</guid>
      <comments>https://kibeom2000.tistory.com/192#entry192comment</comments>
      <pubDate>Fri, 10 Apr 2026 21:03:03 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] 조건에 맞는 개발자 찾기(MySQL)</title>
      <link>https://kibeom2000.tistory.com/191</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/276034?language=mysql&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/276034?language=mysql&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774270887887&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/276034?language=mysql&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biSGyH/dJMb86nWZgV/mKFW4qnQOuukAcUW1NcBX1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cwv6sg/dJMb83SifIy/f5taOeeKVv6ZZznttxo8vk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/276034?language=mysql&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/276034?language=mysql&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biSGyH/dJMb86nWZgV/mKFW4qnQOuukAcUW1NcBX1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cwv6sg/dJMb83SifIy/f5taOeeKVv6ZZznttxo8vk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;SELECT DISTINCT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM SKILLCODES AS S 
JOIN DEVELOPERS AS D
ON S.CODE &amp;amp; D.SKILL_CODE = S.CODE
WHERE S.NAME IN ('Python', 'C#')
ORDER BY D.ID;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  배운 점 &amp;amp; 느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 비트연산자의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;amp;&lt;/td&gt;
&lt;td&gt;AND (둘 다 1이면 1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;|&lt;/td&gt;
&lt;td&gt;OR (하나라도 1이면 1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;^&lt;/td&gt;
&lt;td&gt;XOR (서로 다르면 1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;~&lt;/td&gt;
&lt;td&gt;NOT (비트 반전)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;lt;&amp;lt;&lt;/td&gt;
&lt;td&gt;왼쪽 쉬프트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;gt;&amp;gt;&lt;/td&gt;
&lt;td&gt;오른쪽 쉬프트&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>대외 활동 및 IT 지식/알고리즘 문제 풀이 정리</category>
      <category>mysql</category>
      <category>Oracle</category>
      <category>sql</category>
      <category>프로그래머스 SQL고득점 Kit</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/191</guid>
      <comments>https://kibeom2000.tistory.com/191#entry191comment</comments>
      <pubDate>Mon, 23 Mar 2026 22:02:53 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 평행선(2358)</title>
      <link>https://kibeom2000.tistory.com/190</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2358&quot;&gt;https://www.acmicpc.net/problem/2358&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;package test.silver;

import java.util.*;
import java.io.*;

public class 백준_2358 {
    static int n;
    static HashMap&amp;lt;Integer, Integer&amp;gt; xMap;
    static HashMap&amp;lt;Integer, Integer&amp;gt; yMap;
    public static void main(String[] args) throws Exception{
        int answer = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());

        xMap = new HashMap&amp;lt;&amp;gt;();
        yMap = new HashMap&amp;lt;&amp;gt;();

        for(int i = 0; i &amp;lt; n ; i++){
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            xMap.put(x, xMap.getOrDefault(x, 0) + 1);
            yMap.put(y, yMap.getOrDefault(y, 0) + 1);
        }

        for (int count : xMap.values()) {
            if (count &amp;gt;= 2) {
                answer++;
            }
        }

        for (int count : yMap.values()) {
            if (count &amp;gt;= 2) {
                answer++;
            }
        }

        System.out.println(answer);
        br.close();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  배운 점 &amp;amp; 느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StringTokenizer &amp;rarr; 문자열을 공백단위로 이어서 입력받을 때 사용합니다(Python의 split() 과 같은 역할임)&lt;/p&gt;</description>
      <category>대외 활동 및 IT 지식/알고리즘 문제 풀이 정리</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/190</guid>
      <comments>https://kibeom2000.tistory.com/190#entry190comment</comments>
      <pubDate>Mon, 23 Mar 2026 20:11:30 +0900</pubDate>
    </item>
    <item>
      <title>[Leetcode] 187. Repeated DNA Sequences</title>
      <link>https://kibeom2000.tistory.com/189</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  문제 링크&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://leetcode.com/problems/repeated-dna-sequences/&quot;&gt;https://leetcode.com/problems/repeated-dna-sequences/&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774264387182&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Repeated DNA Sequences - LeetCode&quot; data-og-description=&quot;Can you solve this real interview question? Repeated DNA Sequences - The DNA sequence is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T'. * For example, &amp;quot;ACGAATTCCG&amp;quot; is a DNA sequence. When studying DNA, it is useful to identify r&quot; data-og-host=&quot;leetcode.com&quot; data-og-source-url=&quot;https://leetcode.com/problems/repeated-dna-sequences/&quot; data-og-url=&quot;https://leetcode.com/problems/repeated-dna-sequences/description&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RV6xp/dJMb9aKExP1/5kksPctBkpcvGWuzZR0Aq0/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/repeated-dna-sequences/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://leetcode.com/problems/repeated-dna-sequences/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RV6xp/dJMb9aKExP1/5kksPctBkpcvGWuzZR0Aq0/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260');&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;Repeated DNA Sequences - LeetCode&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Can you solve this real interview question? Repeated DNA Sequences - The DNA sequence is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T'. * For example, &quot;ACGAATTCCG&quot; is a DNA sequence. When studying DNA, it is useful to identify r&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;leetcode.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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;✅ 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

class Solution {
    public List&amp;lt;String&amp;gt; findRepeatedDnaSequences(String s) {
        Set&amp;lt;String&amp;gt; seen = new HashSet&amp;lt;&amp;gt;();
        Set&amp;lt;String&amp;gt; repeated = new HashSet&amp;lt;&amp;gt;();

        for(int i = 0; i &amp;lt;= s.length() - 10; i++){
            String sub = s.substring(i, i + 10);
            if(seen.contains(sub)){
                repeated.add(sub);
            }else{
                seen.add(sub);
            }
        }

        return new ArrayList&amp;lt;&amp;gt;(repeated);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  배운 점 &amp;amp; 느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. String sub = s.substring(i,i+10) &amp;rarr;&amp;nbsp; 문자열을 슬라이싱 할 때, 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. seen.contains(sub) &amp;rarr; 특정 원소를 가지고 있는 지 여부 판단(Set 자료구조는 순서와 중복을 허용하지 않는다)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자주 쓰는 메서드
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;set.add(&quot;A&quot;);&lt;/li&gt;
&lt;li&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;contains&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. return new ArrayList&amp;lt;&amp;gt;(repeated) &amp;rarr; Set 자료구조를 ArrayList 자료구조로 변환(같은 자료형 일때 변환이 가능하다)&lt;/p&gt;</description>
      <category>대외 활동 및 IT 지식/알고리즘 문제 풀이 정리</category>
      <category>Java</category>
      <category>LeetCode</category>
      <category>set</category>
      <category>슬라이싱</category>
      <category>알고리즘</category>
      <category>코딩테스트준비</category>
      <author>훌룽이</author>
      <guid isPermaLink="true">https://kibeom2000.tistory.com/189</guid>
      <comments>https://kibeom2000.tistory.com/189#entry189comment</comments>
      <pubDate>Mon, 23 Mar 2026 19:03:22 +0900</pubDate>
    </item>
  </channel>
</rss>