<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>이것 저것 여기 저기</title>
    <link>https://islet2.tistory.com/</link>
    <description>이것 저것 하고 싶고 여기 저기 가고 싶은 아재. ㅋ      알고 싶은 내용을 ai를 통해 배우면서 적어가는 연습장
</description>
    <language>ko</language>
    <pubDate>Sat, 1 Aug 2026 20:20:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>islet2</managingEditor>
    <image>
      <title>이것 저것 여기 저기</title>
      <url>https://tistory1.daumcdn.net/tistory/7681705/attach/d52907c8ad6c45c0b6b77c6667945535</url>
      <link>https://islet2.tistory.com</link>
    </image>
    <item>
      <title>단기사채, 기업어음(CP)의 발행 정보 확인</title>
      <link>https://islet2.tistory.com/152</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;단기사채, 기업어음(CP)의 발행 내역 및 금리 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KSD 및 SEIBRO 사이트에서 발행 내역, 잔고, 거래 금리등을 일부 확인할 수 있다.&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;b&gt;시각화 사이트 메인 : &lt;a href=&quot;https://stb.kugs.uk&quot;&gt;https://stb.kugs.uk&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시각화 사이트 발행현황 : &lt;a href=&quot;https://stb.kugs.uk/issue&quot;&gt;https://stb.kugs.uk/issue&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시각화 사이트 잔액현황 : &lt;a href=&quot;https://stb.kugs.uk/balance&quot;&gt;https://stb.kugs.uk/balance&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기관간 RP 참여자별 현황 : &lt;a href=&quot;https://stb.kugs.uk/repo&quot;&gt;https://stb.kugs.uk/repo&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>금융 관련</category>
      <category>CP</category>
      <category>repo</category>
      <category>기업어음</category>
      <category>단기사채</category>
      <category>전자단기사채</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/152</guid>
      <comments>https://islet2.tistory.com/152#entry152comment</comments>
      <pubDate>Fri, 10 Jul 2026 15:43:53 +0900</pubDate>
    </item>
    <item>
      <title>0원 비용으로 구현하는 개인 서버 24시간 모니터링 &amp;amp; 이메일 알림 가이드</title>
      <link>https://islet2.tistory.com/151</link>
      <description>&lt;h1&gt;0원 비용으로 구현하는 개인 서버 24시간 모니터링 &amp;amp; 이메일 알림 가이드&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;p&gt;&lt;strong&gt;작성일&lt;/strong&gt;: 2026년 5월 28일&lt;br&gt;&lt;strong&gt;대상&lt;/strong&gt;: 비용 청구 없이 안전하게 개인 서버의 접속 상태(Ping)를 감시하고, 다운 시 즉시 이메일로 알림을 받고 싶은 개발자 및 운영자&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;이 문서는 구글 클라우드 플랫폼(GCP) 리눅스 서버 상에서 모니터링 스크립트를 직접 구축하는 과정에서 겪은 &lt;strong&gt;모든 시행착오(Troubleshooting)&lt;/strong&gt;를 정리하고, 최종적으로 &lt;strong&gt;비용이 전혀 들지 않는(0원) 무료 상용 감시 솔루션으로 전환하는 과정&lt;/strong&gt;까지를 집대성한 가이드북입니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;  목차&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#1-%EA%B0%9C%EC%9A%94-%EB%B0%8F-%EB%AA%A9%ED%91%9C&quot;&gt;개요 및 목표&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-1%EC%B0%A8-%EC%8B%9C%EB%8F%84-gcp-%EB%A6%AC%EB%88%85%EC%8A%A4-vm-%EA%B8%B0%EB%B0%98-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EA%B5%AC%EC%B6%95--%EC%8B%9C%ED%96%89%EC%B0%A9%EC%98%A4-%EA%B8%B0%EB%A1%9D&quot;&gt;1차 시도: GCP 리눅스 VM 기반 모니터링 구축 &amp;amp; 시행착오 기록&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#gcp-vm-%EB%AC%B4%EB%A3%8C-%EB%93%B1%EA%B8%89-%EC%82%AC%EC%96%91-%EC%84%A4%EC%A0%95-%ED%8C%81&quot;&gt;GCP VM 무료 등급 사양 설정 팁&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EC%8B%9C%ED%96%89%EC%B0%A9%EC%98%A4-1-%EA%B5%AC%EA%B8%80-%EC%95%B1-%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8-%EB%B0%9C%EA%B8%89-%EB%B0%8F-%EB%A9%94%EC%9D%BC-%EC%9D%B8%EC%A6%9D-%EC%8B%A4%ED%8C%A8&quot;&gt;시행착오 1: 구글 앱 비밀번호 발급 및 메일 인증 실패&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EC%8B%9C%ED%96%89%EC%B0%A9%EC%98%A4-2-os-%EC%B5%9C%EC%86%8C%ED%99%94-%EB%B2%84%EC%A0%84miniminimal%EC%97%90%EC%84%9C-%EB%AA%85%EB%A0%B9%EC%96%B4%EA%B0%80-%EB%8F%99%EC%9E%91%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EC%98%A4%EB%A5%98&quot;&gt;시행착오 2: OS 최소화 버전(Mini/Minimal)에서 명령어가 동작하지 않는 오류&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EC%8B%9C%ED%96%89%EC%B0%A9%EC%98%A4-3-%EA%B3%84%EC%A0%95-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%A1%B1sudo-%EA%B1%B0%EB%B6%80-%EB%AC%B8%EC%A0%9C&quot;&gt;시행착오 3: 계정 권한 부족(Sudo 거부) 문제&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EC%8B%9C%ED%96%89%EC%B0%A9%EC%98%A4-4-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC-%EC%98%A4%ED%83%80-%EB%B0%8F-%ED%81%AC%EB%A1%A0%ED%83%AD-%EC%84%A4%EC%A0%95%EB%B2%95&quot;&gt;시행착오 4: 스케줄러 오타 및 크론탭 설정법&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-gcp%EC%9D%98-%EC%88%A8%EA%B2%A8%EC%A7%84-%EC%9C%A0%EB%A3%8C%ED%99%94-%EC%A0%95%EC%B1%85-%EB%B6%84%EC%84%9D&quot;&gt;GCP의 숨겨진 유료화 정책 분석&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#4-2%EC%B0%A8-%EC%8B%9C%EB%8F%84-%EC%B5%9C%EC%A2%85-100-%EB%AC%B4%EB%A3%8C-%EA%B0%90%EC%8B%9C-%EC%86%94%EB%A3%A8%EC%85%98-uptimerobot-%EC%A0%84%ED%99%98&quot;&gt;2차 시도 (최종): 100% 무료 감시 솔루션 (UptimeRobot) 전환&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#5-gcp-%EC%9A%94%EA%B8%88-%ED%8F%AD%ED%83%84-%EC%98%88%EB%B0%A9%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%99%84%EC%A0%84-%EC%82%AD%EC%A0%9C-%EC%A0%88%EC%B0%A8&quot;&gt;GCP 요금 폭탄 예방을 위한 완전 삭제 절차&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;1. 개요 및 목표&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;목표&lt;/strong&gt;: 24시간 운영되는 감시용 리눅스 환경을 가동하여 내 개인 서버(&lt;code&gt;k.kims.com&lt;/code&gt;)로 &lt;code&gt;ping&lt;/code&gt;을 전송하고, 네트워크 연결이 끊어져 타임아웃이 나면 내 이메일로 ⚠️경고 알림을 발송한다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;핵심 과제&lt;/strong&gt;: &lt;ol&gt;
&lt;li&gt;지속해서 가동되는 컴퓨터 인프라 확보&lt;/li&gt;
&lt;li&gt;서버 다운 여부를 판단하는 감시 코드 작성&lt;/li&gt;
&lt;li&gt;아웃바운드 SMTP 메일 포트가 제한된 환경에서 안정적으로 외부 이메일 발송&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;운영 비용 0원 유지&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. 1차 시도: GCP 리눅스 VM 기반 모니터링 구축 &amp;amp; 시행착오 기록&lt;/h2&gt;
&lt;p&gt;구글 클라우드의 평생 무료 계층(Free Tier) VM 인스턴스를 활용하여, 내부에서 직접 모니터링 스크립트를 주기적으로 자동 실행(Cron)하는 고유한 모니터링 체계를 구성하는 방식입니다.&lt;/p&gt;
&lt;h3&gt;GCP VM 무료 등급 사양 설정 팁&lt;/h3&gt;
&lt;p&gt;GCP에서 기본 제공하는 상시 무료(Free Tier) 등급 혜택을 온전히 받기 위해서는 아래 요건을 엄격하게 지켜 인스턴스를 구성해야 합니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;리전(위치)&lt;/strong&gt;: 반드시 미국 지역인 &lt;code&gt;us-central1&lt;/code&gt; (아이오와), &lt;code&gt;us-west1&lt;/code&gt; (오레곤), &lt;code&gt;us-east1&lt;/code&gt; (사우스캐롤라이나) 중 하나로 선택해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;머신 사양&lt;/strong&gt;: 오직 &lt;strong&gt;&lt;code&gt;e2-micro&lt;/code&gt;&lt;/strong&gt; (2vCPU, 1GB RAM) 제품만 평생 무료 등급을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;부팅 디스크&lt;/strong&gt;: &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;유형&lt;/strong&gt;: 반드시 &lt;strong&gt;&lt;code&gt;표준 영구 디스크(Standard Persistent Disk)&lt;/code&gt;&lt;/strong&gt;로 설정해야 합니다. (기본값으로 체크되어 있는 &lt;strong&gt;SSD&lt;/strong&gt; 혹은 &lt;strong&gt;균형 있는 영구 디스크&lt;/strong&gt;를 선택하면 소액의 비용이 매달 청구되므로 필히 변경해야 합니다.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;용량&lt;/strong&gt;: 30GB 이내로 지정 (기본 10GB로도 매우 충분합니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;[시행착오 1] 구글 앱 비밀번호 발급 및 메일 인증 실패&lt;/h3&gt;
&lt;h4&gt;문제 현상 (Bad Credentials)&lt;/h4&gt;
&lt;p&gt;모니터링 스크립트를 실행했을 때 구글 SMTP 서버로부터 로그인이 거부되어 아래와 같은 에러코드가 출력되었습니다:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;[2026-05-28 00:14:01] 메일 전송 실패: (535, b&amp;#39;5.7.8 Username and Password not accepted. For more information, go to 5.7.8 https://support.google.com/mail/?p=BadCredentials ...&amp;#39;)&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;원인&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;GCP 환경에서는 &lt;strong&gt;아웃바운드 SMTP 25번 포트가 전면 차단&lt;/strong&gt;되어 있으므로 보안 연결 포트인 &lt;strong&gt;&lt;code&gt;587(TLS)&lt;/code&gt;&lt;/strong&gt; 또는 &lt;code&gt;465(SSL)&lt;/code&gt;를 사용해야 합니다.&lt;/li&gt;
&lt;li&gt;구글 계정 보안 정책상 이메일 계정의 &lt;strong&gt;원래 비밀번호&lt;/strong&gt;를 코드에 입력하면 로그인이 완전히 거부됩니다.&lt;/li&gt;
&lt;li&gt;또한 구글 화면에서 앱 비밀번호를 생성했을 때 보이는 공백(&lt;code&gt;abcd efgh ijkl mnop&lt;/code&gt;)을 그대로 코드에 입력할 시 인증 에러가 발생합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;해결법 (구글 앱 비밀번호 발급 및 입력법)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;구글 계정 페이지의 &lt;strong&gt;[보안]&lt;/strong&gt; 탭으로 이동하여 &lt;strong&gt;2단계 인증&lt;/strong&gt;을 먼저 활성화합니다.&lt;/li&gt;
&lt;li&gt;2단계 인증 페이지 맨 아래의 &lt;strong&gt;[앱 비밀번호]&lt;/strong&gt; 항목에 진입하여 앱 이름(예: &lt;code&gt;GCP Ping Monitor&lt;/code&gt;)을 입력하고 &lt;strong&gt;[만들기]&lt;/strong&gt;를 클릭합니다.&lt;/li&gt;
&lt;li&gt;발급되는 &lt;strong&gt;16자리 비밀번호&lt;/strong&gt;에서 &lt;strong&gt;띄어쓰기를 완전히 제거&lt;/strong&gt;하고 붙여서 소스 코드에 대입합니다.&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# 올바른 비밀번호 적용 형태
SENDER_PASSWORD = &amp;quot;abcdefghijklmnop&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;[시행착오 2] OS 최소화 버전(Mini/Minimal)에서 명령어가 동작하지 않는 오류&lt;/h3&gt;
&lt;h4&gt;문제 현상 (No such file or directory: &amp;#39;ping&amp;#39;)&lt;/h4&gt;
&lt;p&gt;GCP에서 인스턴스 부팅 디스크로 &lt;code&gt;Debian 12&lt;/code&gt; 또는 &lt;code&gt;Ubuntu Minimal&lt;/code&gt;과 같이 용량 다이어트 버전을 사용하는 경우, 스크립트 실행 시 다음과 같은 치명적인 에러가 발생합니다:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Error executing ping: [Errno 2] No such file or directory: &amp;#39;ping&amp;#39;
[2026-05-28 00:14:01] k.kims.com 연결 실패! 메일 발송을 시도합니다.&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;원인&lt;/h4&gt;
&lt;p&gt;리눅스의 배포판 최소사양 이미지들은 시스템 경량화를 위해 자가 진단 네트워크 도구인 &lt;code&gt;ping&lt;/code&gt; 명령어 및 자동화 스케줄러인 &lt;code&gt;cron&lt;/code&gt; 유틸리티를 기본 구성에서 제외하고 출시됩니다.&lt;/p&gt;
&lt;h4&gt;해결법 (누락된 패키지 수동 설치)&lt;/h4&gt;
&lt;p&gt;터미널 환경에서 패키지 인덱스를 최신화한 뒤, 핑 도구와 크론을 직접 수동으로 빌드/설치해 주어야 합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. 핑(Ping) 진단 도구 강제 설치
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y iputils-ping

# 2. 크론탭 스케줄러 설치 및 활성화 (Ubuntu Mini 버전인 경우 필수)
sudo apt-get install -y cron
sudo systemctl enable --now cron&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;[시행착오 3] 계정 권한 부족(Sudo 거부) 문제&lt;/h3&gt;
&lt;h4&gt;문제 현상 (Sudo: I&amp;#39;m sorry. I&amp;#39;m afraid I can&amp;#39;t do that)&lt;/h4&gt;
&lt;p&gt;VM을 생성할 때 생성된 유저명(&lt;code&gt;isl_kim&lt;/code&gt; 등)으로 접속하여 &lt;code&gt;sudo apt update&lt;/code&gt; 명령을 실행했을 때, 관리자 비밀번호를 요구하거나 권한 승인을 아예 거부하는 상황이 나타납니다:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;isl_kim@png-monitor:~/ping-monitor$ sudo apt update
sudo: I&amp;#39;m sorry isl_kim. I&amp;#39;m afraid I can&amp;#39;t do that&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;원인&lt;/h4&gt;
&lt;p&gt;GCP OS 설정 정책 혹은 특정 계정의 템플릿 이슈로 인하여 생성된 개별 계정이 &lt;code&gt;sudoers&lt;/code&gt; 그룹에 추가되지 못해 최고 관리자 명령어 실행을 거부하는 현상입니다.&lt;/p&gt;
&lt;h4&gt;해결법 (Root 접속 기능 활용)&lt;/h4&gt;
&lt;p&gt;GCP 웹 터미널 창의 강력한 고유 우회 옵션인 &lt;strong&gt;사용자 변경(Change User)&lt;/strong&gt; 기능을 활용합니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;웹 브라우저로 띄워진 검은색 터미널 창의 &lt;strong&gt;우측 상단 톱니바퀴 아이콘 (설정)&lt;/strong&gt;을 클릭합니다.&lt;/li&gt;
&lt;li&gt;메뉴 중 &lt;strong&gt;&lt;code&gt;사용자 변경&lt;/code&gt; (Change User)&lt;/strong&gt;을 클릭합니다.&lt;/li&gt;
&lt;li&gt;사용자 이름 입력란에 최고 존엄 계정인 &lt;strong&gt;&lt;code&gt;root&lt;/code&gt;&lt;/strong&gt;를 입력하고 변경을 수락합니다.&lt;/li&gt;
&lt;li&gt;프롬프트가 &lt;code&gt;root@png-monitor:~#&lt;/code&gt;로 변경되면 &lt;code&gt;sudo&lt;/code&gt; 없이 관리자 패키지 설치 명령을 즉시 성공시킵니다:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;apt-get update &amp;amp;&amp;amp; apt-get install -y iputils-ping&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;작업 완료 후 원래의 계정으로 편안히 돌아갑니다:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;su - isl_kim&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;[시행착오 4] 스케줄러 오타 및 크론탭 설정법&lt;/h3&gt;
&lt;h4&gt;문제 현상 (&lt;code&gt;corntab&lt;/code&gt; 작동 불가 및 스케줄러 오작동)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;예약 파일 진입 시 &lt;code&gt;corntab&lt;/code&gt; 명령어를 사용하려 했으나 동작하지 않았습니다.&lt;/li&gt;
&lt;li&gt;특정 주기로 지정을 하기 위해 설정값을 잘못 적으면 스크립트가 폭주하여 무한정으로 실행될 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;해결법 (스펠링 점검 및 스케줄 정의법)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;명령어 철자 확인&lt;/strong&gt;: &lt;code&gt;o&lt;/code&gt;가 아니라 &lt;code&gt;r&lt;/code&gt;이 포함된 &lt;strong&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/strong&gt;가 정확한 예약 목록 편집 명령어입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2시간 간격 실행식 정밀 조정&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;잘못된 예&lt;/strong&gt;: &lt;code&gt;* */2 * * *&lt;/code&gt;  ➔ 2시간마다 돌아오는 시간대의 &lt;strong&gt;60분 내내 1분마다&lt;/strong&gt; 스크립트가 실행됩니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;올바른 예&lt;/strong&gt;: &lt;code&gt;0 */2 * * *&lt;/code&gt;  ➔ 2시간 간격의 &lt;strong&gt;정각(0분)에 딱 1회만&lt;/strong&gt; 실행됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;최종 등록 스크립트&lt;/strong&gt;:&lt;pre&gt;&lt;code class=&quot;language-cron&quot;&gt;0 */2 * * * /usr/bin/python3 /home/$USER/ping-monitor/monitor.py &amp;gt;&amp;gt; /home/$USER/ping-monitor/monitor.log 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. GCP의 숨겨진 유료화 정책 분석&lt;/h2&gt;
&lt;p&gt;GCP의 CPU와 디스크 용량을 전부 무료 범위로 맞추었더라도 &lt;strong&gt;반드시 요금이 나오는 숨겨진 주범&lt;/strong&gt;이 있습니다. 바로 &lt;strong&gt;공용 외부 IPv4 주소 사용료&lt;/strong&gt;입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;변경된 정책&lt;/strong&gt;: 과거에는 VM 인스턴스가 켜져 있을 때 붙어 있는 임시 외부 IP에 대해 무료 처리를 지원하였으나, &lt;strong&gt;전 세계적인 IPv4 자원 부족으로 인해 2024년 2월부로 GCP 역시 사용 중인 공용 IPv4 주소에 대해 요금을 전면 부과&lt;/strong&gt;하기 시작했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;누적 예상 비용&lt;/strong&gt;: 시간당 약 &lt;strong&gt;$0.005&lt;/strong&gt;가 부과되며, 24시간 상시 모니터링 가동 시 &lt;strong&gt;한 달 평균 약 $3.60 (한화 약 4,800원~5,000원)&lt;/strong&gt;이 순수 IP 주소 대여비로 차감 청구됩니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;대응안&lt;/strong&gt;: 외부 IP를 삭제해 버리면 VM 내부에서 인터넷망이 완전히 끊기므로 메일 연동이나 외부 핑 자체가 전면 마비되며, 이를 NAT 게이트웨이 등의 다른 가상망으로 연결하는 비용(월 최소 4만 원 이상)은 배보다 배꼽이 더 커집니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;최종 결론&lt;/strong&gt;: 개인적인 간단한 체크 목적이며 &lt;strong&gt;월 약 4,800원의 비용마저도 낭비하고 싶지 않다면, GCP VM 환경을 탈피하여 전문 무료 서비스를 쓰는 것이 경제학적 관점에서 절대적으로 이득&lt;/strong&gt;입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;4. 2차 시도 (최종): 100% 무료 감시 솔루션 (UptimeRobot) 전환&lt;/h2&gt;
&lt;p&gt;클라우드 가상 컴퓨터를 유지하는 데 필요한 모든 고정 비용과 까다로운 코딩 리눅스 진단 프로세스를 완전히 포기하고, &lt;strong&gt;평생 무료 5분 주기 상용 감시 솔루션&lt;/strong&gt;으로 전환하는 방법입니다.&lt;/p&gt;
&lt;h3&gt;  UptimeRobot 솔루션의 강점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0원 무한 가동&lt;/strong&gt;: 완전 무료(Free Plan) 계정 하나로 최대 50개의 감시 서버를 등록 가능&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;조밀한 주기&lt;/strong&gt;: 직접 리눅스에서 2시간마다 보내던 주기보다 훨씬 신속한 &lt;strong&gt;5분 단위 밀착 체크&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;양방향 알림&lt;/strong&gt;: 서버가 꺼질 때뿐만 아니라, &lt;strong&gt;다시 정상 복구되었을 때(Up)&lt;/strong&gt;도 이메일 통보 발송&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;⚙️ 설정 단계 (딱 2분 소요)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://uptimerobot.com&quot;&gt;UptimeRobot 회원가입 (uptimerobot.com)&lt;/a&gt;&lt;/strong&gt;에 접속해 가입을 진행합니다.&lt;/li&gt;
&lt;li&gt;대시보드로 진입하여 좌측 최상단의 &lt;strong&gt;&lt;code&gt;+ Add New Monitor&lt;/code&gt;&lt;/strong&gt; (새 모니터 추가)를 누릅니다.&lt;/li&gt;
&lt;li&gt;개별 파라미터를 아래와 같이 기입합니다:&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monitor Type&lt;/strong&gt;: &lt;code&gt;Ping&lt;/code&gt; (또는 웹페이지인 경우 &lt;code&gt;HTTP(s)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Friendly Name&lt;/strong&gt;: 구별하기 쉬운 이름 (예: &lt;code&gt;개인 웹 서버 감시&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;URL (or IP)&lt;/strong&gt;: 타겟 도메인 또는 서버 IP 주소 (&lt;code&gt;k.kims.com&lt;/code&gt; 혹은 서버의 공인 IP)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring Interval&lt;/strong&gt;: &lt;code&gt;5 minutes&lt;/code&gt; (기본값)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;우측 메뉴의 이메일 수신 체크박스(&lt;code&gt;Alert Contacts to Notify&lt;/code&gt;)에 본인의 이메일 주소를 선택 체크합니다.&lt;/li&gt;
&lt;li&gt;하단의 &lt;strong&gt;&lt;code&gt;Create Monitor&lt;/code&gt;&lt;/strong&gt; 버튼을 누르면 설정이 완벽하게 끝납니다. 이제 서버가 꺼지면 5분 안에 이메일로 삐뽀삐보 경보가 들어옵니다!&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;5. GCP 요금 폭탄 예방을 위한 완전 삭제 절차&lt;/h2&gt;
&lt;p&gt;비용이 나가지 않는 100% 무료 솔루션으로 안전하게 이전 완료하셨다면, 현재 가동 중인 GCP 클라우드 자원을 &lt;strong&gt;철저히 파괴하여 단 1원도 계정에서 인출되지 않도록 영구 비활성화&lt;/strong&gt; 처리해야 합니다.&lt;/p&gt;
&lt;h3&gt;1단계: VM 인스턴스 영구 삭제&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Google Cloud 콘솔의 &lt;strong&gt;Compute Engine &amp;gt; VM 인스턴스&lt;/strong&gt; 목록으로 들어갑니다.&lt;/li&gt;
&lt;li&gt;생성했던 &lt;code&gt;png-monitor&lt;/code&gt; 인스턴스 이름 오른쪽에 있는 &lt;strong&gt;점 3개&lt;/strong&gt; 아이콘을 클릭합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;삭제 (Delete)&lt;/code&gt;&lt;/strong&gt; 버튼을 강하게 클릭하고 확인창에서 승인해 줍니다.&lt;ul&gt;
&lt;li&gt;&lt;em&gt;주의: VM을 중지(Stop)하는 것에 그치면 디스크 공간 대여료나 고정 IP 미할당 벌금(Unused IP Fee)이 지속적으로 쌓여 더 큰 요금이 부과될 수 있습니다. 반드시 &amp;#39;삭제(Delete)&amp;#39;를 진행해야 합니다.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2단계: 잔여 외부 IP 소멸 검증&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;콘솔 최상단 돋보기 검색창에 &lt;strong&gt;&amp;quot;IP 주소&amp;quot;&lt;/strong&gt;를 입력하여 &lt;strong&gt;VPC 네트워크 &amp;gt; IP 주소&lt;/strong&gt; 관리 메뉴로 접근합니다.&lt;/li&gt;
&lt;li&gt;방금 전 생성했던 인스턴스 IP(&lt;code&gt;34.66.10.92&lt;/code&gt; 또는 기존에 사용하던 외부 IP)의 상태가 소실되어 리스트가 공란으로 깨끗하게 비어 있는지 교차 확인합니다.&lt;/li&gt;
&lt;li&gt;혹시라도 &lt;code&gt;Type: Static&lt;/code&gt; 또는 &lt;code&gt;In Use By: None&lt;/code&gt; 상태로 남아있는 예약 IP가 보인다면, 항목을 선택하고 즉시 &lt;strong&gt;&lt;code&gt;외부 IP 주소 해제&lt;/code&gt; (Release static IP)&lt;/strong&gt;를 클릭하여 우주의 미아로 영원히 돌려보내 주어야 요금 청구가 전면 방지됩니다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>IT 관련/유틸리티</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/151</guid>
      <comments>https://islet2.tistory.com/151#entry151comment</comments>
      <pubDate>Thu, 28 May 2026 10:20:08 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 11 설치 usb 만들기</title>
      <link>https://islet2.tistory.com/150</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #1a202c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;준비물&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;윈도우 11 설치 USB를 만들기 위해 8GB 이상 용량의 USB 플래시 드라이브를 준비하세요. USB에 저장된 데이터는 모두 삭제되므로 백업 후 포맷하는 것이 좋습니다. 인터넷 연결이 가능한 윈도우 PC가 필요합니다.​&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #1a202c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;공식 도구 사용 방법&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;마이크로소프트 공식 사이트(&lt;a href=&quot;https://www.microsoft.com/ko-kr/software-download/windows11&quot;&gt;https://www.microsoft.com/ko-kr/software-download/windows11&lt;/a&gt;) 에서(&lt;a href=&quot;https://www.microsoft.com/ko-kr/software-download/windows11&quot;&gt;https://www.microsoft.com/ko-kr/software-download/windows11&lt;/a&gt;&lt;a style=&quot;color: #0d6efd;&quot; href=&quot;https://www.microsoft.com/ko-kr/software-download/windows11%5C)%EC%97%90%EC%84%9C&quot;&gt;\)%EC%97%90%EC%84%9C&lt;/a&gt;)&amp;nbsp;&quot;윈도우 11 설치 미디어 만들기&quot; 도구(mediacreationtool.exe)를 다운로드하세요. 도구를 실행한 후 언어/버전 확인 후 &quot;USB 플래시 드라이브&quot;를 선택하고 연결된 USB를 지정해 다음을 클릭하면 자동으로 다운로드와 USB 제작이 진행됩니다.​&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #1a202c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;대안 방법: Rufus 사용&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;윈도우 11 ISO 파일을 먼저 다운로드한 후 Rufus 프로그램(&lt;a href=&quot;https://rufus.ie)&quot;&gt;https://rufus.ie)&lt;/a&gt;&lt;a style=&quot;color: #0d6efd;&quot; href=&quot;https://rufus.xn--ie)-of0o/&quot;&gt; 을&lt;/a&gt;&amp;nbsp;실행하세요. USB를 연결하고 ISO 파일을 선택해 부팅 옵션(예: TPM 우회)을 설정한 뒤 시작 버튼으로 제작합니다. 이 방법은 설치 요구사항을 무시하고 안정적으로 만들 수 있습니다.​&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #1a202c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;주의사항&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;USB는 하나만 연결하고, 설치 대상 PC의 BIOS에서 USB 부팅 우선순위를 설정하세요. 제작 후 USB 용량은 약 4GB 정도 차지하며, Home/Pro 버전 모두 지원됩니다.&lt;/p&gt;</description>
      <category>IT 관련/기타</category>
      <category>설치usb</category>
      <category>윈도우11</category>
      <category>정품설치</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/150</guid>
      <comments>https://islet2.tistory.com/150#entry150comment</comments>
      <pubDate>Mon, 1 Dec 2025 21:23:57 +0900</pubDate>
    </item>
    <item>
      <title>AI 기반 주식 자동매매 시스템 구축 - By gemini</title>
      <link>https://islet2.tistory.com/147</link>
      <description>&lt;h1&gt;대한민국 AI 기반 주식 자동매매 시스템 구축: 종합 분석 및 실행 가이드&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;I. 서론: AI 기반 주식 자동매매의 기본 개념 및 전체 워크플로우&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능(AI) 기술이 금융 시장에 미치는 영향이 심화되면서, 개인 투자자들 사이에서도 AI를 활용한 주식 자동매매에 대한 관심이 폭발적으로 증가하고 있습니다. 과거 기관 투자자들의 전유물로 여겨졌던 알고리즘 트레이딩이 이제는 개인의 영역으로 확장되고 있는 것입니다. 본 보고서는 대한민국 주식 시장에서 AI를 이용한 모니터링 및 자동주문 시스템을 구축하고자 하는 투자자를 위해, 현재 실행 가능한 모든 경로를 심층적으로 분석하고, 각 방법의 개념, 기술적 요구사항, 장단점 및 법적 고려사항을 총망라하여 제공하는 것을 목표로 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 퀀트 투자에서 AI 트레이딩으로의 진화&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 주식 자동매매를 이해하기 위해서는 그 뿌리가 되는 '퀀트(Quant) 투자'의 개념을 먼저 파악해야 합니다. 퀀트 투자는 수학적&amp;middot;통계적 모델을 기반으로 계량적 분석을 통해 투자 결정을 내리는 기법입니다.&lt;span&gt;1&lt;/span&gt; 이는 투자자의 주관적 판단이나 감정을 배제하고, 객관적인 데이터와 검증된 규칙에 의해서만 포트폴리오를 운용하는 것을 원칙으로 합니다.&lt;span&gt;3&lt;/span&gt; 전통적으로 자산운용사와 같은 전문 금융 기관들이 주요 운용 전략으로 사용해 온 방식입니다.&lt;span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 트레이딩은 이러한 퀀트 투자의 연장선상에 있으며, 한 단계 더 진화한 형태라고 할 수 있습니다. 기존의 퀀트 모델이 사전에 정의된 정적인 규칙에 의존했다면, AI 트레이딩은 머신러닝과 딥러닝 기술을 접목하여 시스템이 스스로 시장의 패턴을 학습하고, 변화하는 시장 상황에 적응하며 투자 전략을 동적으로 최적화하는 것을 지향합니다.&lt;span&gt;5&lt;/span&gt; 예를 들어, 딥러닝 모델인 LSTM(Long Short-Term Memory)을 사용하여 과거 주가 데이터의 복잡한 시계열 패턴을 학습해 미래 주가를 예측하거나 &lt;span&gt;6&lt;/span&gt;, 강화학습(Reinforcement Learning)을 통해 특정 시장 상황에서 '매수', '매도', '관망' 중 어떤 행동이 장기적으로 가장 높은 수익을 가져올지 스스로 학습하게 만드는 방식이 이에 해당합니다.&lt;span&gt;7&lt;/span&gt; 즉, AI는 정교한 퀀트적 사고를 시스템화하고 자동화하는 핵심 엔진 역할을 수행합니다.&lt;span&gt;5&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 기술적 발전은 투자 패러다임의 근본적인 전환을 이끌고 있습니다. 과거의 시스템 트레이딩이 주로 HTS(Home Trading System)에서 제공하는 제한된 조건검색식이나 자동주문 기능에 의존하여 '매수/매도 신호 생성' 후 인간의 최종 판단을 거쳐 실행되는 '보조 도구'의 역할에 머물렀다면 &lt;span&gt;8&lt;/span&gt;, 이제는 상황이 달라졌습니다. 국내 증권사들이 Open API(Application Programming Interface)를 경쟁적으로 제공하기 시작하면서 &lt;span&gt;9&lt;/span&gt;, 외부의 독립적인 프로그램이 증권사 서버에 직접 접속하여 시세 수신, 잔고 조회, 주문 제출 등 모든 과정을 프로그래밍으로 제어할 수 있게 되었습니다.&lt;span&gt;11&lt;/span&gt; 여기에 Python과 같은 강력한 프로그래밍 언어와 방대한 AI 라이브러리가 결합되면서, 개인 투자자도 아이디어 구상부터 데이터 분석, 의사결정, 주문 집행, 그리고 리스크 관리에 이르는 전 과정을 자동화하는 'End-to-End 자동화' 시스템을 구축할 수 있게 된 것입니다. 이는 더 이상 인간의 심리적 개입이 필요 없는, 완전한 의미의 자동화된 '투자 에이전트'를 직접 만드는 시대로의 진입을 의미합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. AI 자동매매 시스템의 5단계 워크플로우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공적인 AI 자동매매 시스템을 구축하기 위해서는 체계적인 접근이 필수적입니다. 아이디어를 실제 작동하는 시스템으로 구현하는 과정은 다음의 5단계 워크플로우로 개념화할 수 있습니다. 이 워크플로우는 본 보고서 전체를 관통하는 핵심 프레임워크로서, 앞으로 논의될 다양한 기술과 서비스가 전체 프로세스에서 어떤 역할을 수행하는지 이해하는 데 도움을 줄 것입니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;1단계: 전략 수립 (Strategy Development)&lt;/li&gt;
&lt;li&gt;모든 자동매매의 시작은 '투자 아이디어'입니다. 어떤 논리와 근거로 종목을 선정하고 매매 타이밍을 결정할 것인지 구체적인 규칙을 정의하는 단계입니다. 예를 들어, '저평가된 가치주를 발굴하여 특정 기술적 지표가 나타날 때 매수하고, 목표 수익률에 도달하면 매도한다'와 같은 명확한 가설을 수립해야 합니다. 이 단계에서는 젠포트와 같은 플랫폼에서 제공하는 다양한 팩터(Factor)를 조합하거나 13, 딥러닝 모델을 활용한 시장 예측 등 다양한 접근이 가능합니다.&lt;/li&gt;
&lt;li&gt;2단계: 데이터 수집 및 가공 (Data Acquisition &amp;amp; Preprocessing)&lt;/li&gt;
&lt;li&gt;수립된 전략을 구현하고 검증하기 위해서는 데이터가 필요합니다. 증권사 API를 통해 실시간 및 과거 시세 데이터(시가, 고가, 저가, 종가, 거래량 등)를 수집하거나 14, 재무 데이터, 뉴스 데이터 등 비정형 데이터를 활용할 수도 있습니다. 수집된 원시 데이터는 노이즈를 제거하고 AI 모델이 학습하기 좋은 형태로 정제하고 가공하는 전처리 과정을 거칩니다.&lt;/li&gt;
&lt;li&gt;3단계: 모델 학습 및 백테스팅 (Model Training &amp;amp; Backtesting)&lt;/li&gt;
&lt;li&gt;가공된 과거 데이터를 이용해 AI 모델을 학습시키거나, 정의된 규칙 기반 전략의 성과를 시뮬레이션하는 핵심 단계입니다. 백테스팅은 과거 특정 기간 동안 해당 전략을 사용했다면 어떤 성과를 거두었을지 모의실험을 통해 검증하는 과정입니다.16 이 과정을 통해 전략의 수익성, 안정성, 최대 손실폭(MDD, Maximum Drawdown) 등을 객관적으로 평가하고, 전략의 약점을 보완하거나 파라미터를 최적화할 수 있습니다. Python 라이브러리(VectorBT, Backtrader 등)나 젠포트와 같은 플랫폼의 백테스팅 엔진이 이 단계에서 활용됩니다.17&lt;/li&gt;
&lt;li&gt;4단계: 실전 적용 및 주문 자동화 (Live Deployment &amp;amp; Execution)&lt;/li&gt;
&lt;li&gt;백테스팅을 통해 검증된 전략을 실제 투자 계좌에 적용하는 단계입니다. 개발된 프로그램은 증권사 API와 연동되어 실시간으로 시장 데이터를 모니터링하다가, 전략에 설정된 매수 또는 매도 조건이 충족되면 자동으로 주문을 증권사 서버로 전송합니다.11 이 단계에서는 실제 거래에서 발생할 수 있는 슬리피지(Slippage, 주문 가격과 실제 체결 가격의 차이), 거래 수수료 등을 고려한 정교한 주문 집행 로직이 요구됩니다.&lt;/li&gt;
&lt;li&gt;5단계: 성과 모니터링 및 개선 (Performance Monitoring &amp;amp; Refinement)&lt;/li&gt;
&lt;li&gt;자동매매 시스템은 한 번 구축하고 끝나는 것이 아닙니다. 실전 운용을 시작한 후에는 시스템이 의도대로 작동하는지, 실제 수익률이 백테스팅 결과와 유사한지 지속적으로 모니터링해야 합니다. 시장은 끊임없이 변화하므로, 과거에 유효했던 전략이 미래에는 통하지 않을 수 있습니다. 따라서 정기적으로 성과를 분석하고, 변화하는 시장 환경에 맞춰 전략을 수정하거나 모델을 재학습시키는 등 지속적인 유지보수와 개선 작업이 필수적입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;II. 대한민국 AI 주식 자동매매 실행 방안: 세 가지 핵심 경로 분석&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대한민국에서 AI 기반 주식 자동매매 시스템을 구현하는 방법은 크게 세 가지 경로로 구분할 수 있습니다. 각 경로는 요구되는 기술 역량, 투자자가 갖는 통제 수준, 그리고 투입해야 하는 시간과 노력 측면에서 명확한 차이를 보입니다. 따라서 어떤 경로를 선택할지는 개인의 상황과 목표에 따라 신중하게 결정해야 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 경로 선택을 위한 핵심 기준: 기술 역량, 통제 수준, 시간 투자&lt;/h3&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;b&gt;기술 역량 (Technical Proficiency):&lt;/b&gt; 프로그래밍, 특히 Python에 대한 지식과 경험이 있는지 여부가 가장 중요한 분기점입니다. 코딩이 가능하다면 가장 높은 자유도를 가진 직접 개발 방식을 선택할 수 있지만, 그렇지 않다면 코딩이 필요 없는 플랫폼이나 모든 것을 위임하는 투자일임 서비스를 고려해야 합니다.&lt;span&gt;19&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통제 수준 (Level of Control):&lt;/b&gt; 투자 전략의 모든 세부 사항을 직접 제어하고 싶은지, 아니면 검증된 프레임워크 안에서 전략을 만들거나 전문가의 운용에 맡기고 싶은지에 따라 선택이 달라집니다. 통제 수준이 높을수록 유연성은 커지지만 책임과 관리 부담도 함께 증가합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시간 및 노력 투자 (Time &amp;amp; Effort Commitment):&lt;/b&gt; 시스템을 직접 개발하고 유지보수하는 데 상당한 시간을 투자할 의향이 있는지, 혹은 초기 설정 이후에는 최소한의 관리만 하고 싶은지에 따라 적합한 경로가 달라집니다. 직접 개발은 지속적인 학습과 디버깅을 요구하는 반면, 투자일임 서비스는 사실상 시간 투자가 거의 필요 없습니다.&lt;span&gt;21&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. 세 가지 경로 비교 요약&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 경로의 특징을 한눈에 파악하고 비교할 수 있도록 다음 표에 주요 항목들을 정리했습니다. 이 표는 사용자가 자신의 상황을 객관적으로 진단하고, 이어지는 상세 분석 섹션 중 어디에 집중해야 할지 결정하는 데 도움을 줄 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Table 1. AI 주식 자동매매 3가지 경로 핵심 비교&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;경로 1: 직접 개발 (DIY)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;경로 2: 플랫폼 활용 (Low-Code)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;경로 3: 투자일임 (Managed)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;핵심 도구/서비스&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;증권사 API (한국투자, 키움 등), Python, AI/백테스팅 라이브러리&lt;/td&gt;
&lt;td&gt;퀀트 플랫폼 (예: 젠포트)&lt;/td&gt;
&lt;td&gt;로보어드바이저 서비스 (예: 핀트)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;필요 기술 역량&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;높음:&lt;/b&gt; 프로그래밍(Python), API 연동, 데이터베이스, 서버 관리 지식 필요&lt;/td&gt;
&lt;td&gt;&lt;b&gt;낮음:&lt;/b&gt; 코딩 불필요. 논리적 사고 및 팩터(지표)에 대한 이해 필요&lt;/td&gt;
&lt;td&gt;&lt;b&gt;없음:&lt;/b&gt; 금융 서비스 이용 능력만 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;초기 구축 시간&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;수 주 ~ 수 개월&lt;/td&gt;
&lt;td&gt;수 시간 ~ 수 일&lt;/td&gt;
&lt;td&gt;수 분 ~ 수 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;유지보수 노력&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;높음:&lt;/b&gt; 지속적인 코드 개선, 오류 수정, 서버 관리 필요&lt;/td&gt;
&lt;td&gt;&lt;b&gt;중간:&lt;/b&gt; 전략의 주기적인 성과 검토 및 리밸런싱 필요&lt;/td&gt;
&lt;td&gt;&lt;b&gt;매우 낮음:&lt;/b&gt; 서비스 제공자가 모두 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;통제 수준&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;최상:&lt;/b&gt; 전략의 모든 세부 사항을 100% 직접 제어&lt;/td&gt;
&lt;td&gt;&lt;b&gt;중상:&lt;/b&gt; 플랫폼이 제공하는 기능과 팩터의 범위 내에서 전략 설계&lt;/td&gt;
&lt;td&gt;&lt;b&gt;최하:&lt;/b&gt; 투자 스타일 선택 외 직접적 통제 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;유연성/확장성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;최상:&lt;/b&gt; 비정형 데이터(뉴스, SNS 등) 활용, 복잡한 AI 모델 적용 등 무한한 확장 가능&lt;/td&gt;
&lt;td&gt;&lt;b&gt;제한적:&lt;/b&gt; 플랫폼에서 제공하지 않는 데이터나 로직은 구현 불가&lt;/td&gt;
&lt;td&gt;&lt;b&gt;없음:&lt;/b&gt; 서비스가 제공하는 포트폴리오 내에서만 운용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;비용 구조&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;매매 수수료:&lt;/b&gt; 증권사 기본 수수료 (약 0.015%) + (서버 비용 등)&lt;/td&gt;
&lt;td&gt;&lt;b&gt;매매 수수료:&lt;/b&gt; 플랫폼 제휴 수수료 (약 0.1% 이상) + (유료 전략 구매 비용)&lt;/td&gt;
&lt;td&gt;&lt;b&gt;운용 보수:&lt;/b&gt; 연간 운용자산의 일정 비율 (약 1%) + 매매 수수료 별도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;주요 리스크&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;개발 오류(버그)로 인한 금전 손실, 전략 설계 실패, 높은 시간 비용&lt;/td&gt;
&lt;td&gt;플랫폼 종속성, 백테스팅 과최적화, 상대적으로 높은 거래 비용&lt;/td&gt;
&lt;td&gt;서비스 운용 성과 부진, 낮은 통제권으로 인한 시장 대응의 어려움&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;III. 경로 1: 증권사 API를 활용한 직접 개발 방식 (DIY Approach)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증권사 API를 활용한 직접 개발 방식은 AI 자동매매 시스템을 구축하는 가장 근본적이고 강력한 방법입니다. 이 경로는 투자자에게 최고의 자유도와 통제권을 부여하지만, 그만큼 높은 수준의 기술적 역량을 요구합니다. 성공적인 시스템 개발의 첫 단추는 자신의 개발 환경과 전략의 특성에 맞는 최적의 증권사 API를 선택하는 것입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 국내 주요 증권사 API 비교 분석: 기술 스택의 분기점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국내 주요 증권사들이 개인 투자자에게 제공하는 Open API는 기술적인 구현 방식에 따라 크게 두 가지 패러다임으로 나뉩니다. API의 선택은 단순히 기능의 유무를 넘어 전체 개발 아키텍처, 사용 가능한 운영체제(OS), 그리고 개발의 편의성을 결정하는 중대한 분기점이 됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현대적 접근: REST API &amp;amp; Websocket&lt;/li&gt;
&lt;li&gt;이 방식은 현대적인 웹 서비스 개발의 표준으로 자리 잡은 기술입니다. HTTP 프로토콜을 기반으로 하는 REST API는 특정 플랫폼이나 프로그래밍 언어에 종속되지 않는다는 것이 가장 큰 장점입니다.9 따라서 Windows는 물론 macOS, Linux 등 어떤 운영체제에서도 개발이 가능하며, Python, Java, JavaScript 등 다양한 언어를 자유롭게 사용할 수 있습니다. 실시간 데이터 수신은 주로 Websocket 기술을 통해 이루어지며, 이는 서버와 클라이언트 간의 지속적인 연결을 통해 데이터가 발생하는 즉시 전달받는 효율적인 방식입니다.22 한국투자증권(KIS Open API) 과 LS증권(Open API) 이 대표적으로 이 방식을 채택하고 있습니다.9&lt;/li&gt;
&lt;li&gt;전통적 접근: COM/OCX 기반 API&lt;/li&gt;
&lt;li&gt;이 방식은 과거 Windows 애플리케이션 개발에 널리 사용되던 기술에 기반합니다. COM(Component Object Model) 또는 OCX(OLE Control Extension) 형태의 라이브러리를 PC에 설치하고, 이를 프로그램에서 호출하여 사용하는 구조입니다.12 이 방식의 가장 큰 특징이자 제약은 Windows 운영체제에 강력하게 종속된다는 점입니다.9 따라서 macOS나 Linux 환경에서는 직접적인 사용이 불가능하며, 사용하더라도 가상머신(VM)이나 별도의 Windows 서버를 중간에 두는 '브릿지' 아키텍처를 구축해야 하는 복잡함이 따릅니다.9 Python과 같은 언어에서 사용하기 위해서는 PyQt나 pywin32 같은 라이브러리를 통해 COM 객체와 통신하고, 비동기적인 이벤트 처리 방식을 구현해야 하는 기술적 허들이 존재합니다.23 키움증권(Open API+), 대신증권(CREON Plus), LS증권(XingAPI) 이 전통적인 방식을 사용합니다.9&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수수료 측면에서는 대부분의 증권사가 0.015% 수준의 비슷한 요율을 제공하며, 한국투자증권이 0.0140527%로 미세하게 가장 저렴하지만, 이것이 API 선택의 결정적인 변수가 되기는 어렵습니다.&lt;span&gt;9&lt;/span&gt; 오히려 개발 편의성과 확장성이 훨씬 중요한 고려 요소가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Table 2. 국내 주요 증권사 API 기술 사양 심층 비교&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;증권사&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;API 명칭&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;연결 방식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;OS 호환성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;주요 지원 언어&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;실시간 데이터&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;요청 제한 (초당)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;수수료 (국내주식)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;핵심 장점&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;핵심 단점&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;한국투자증권&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;KIS Open API&lt;/td&gt;
&lt;td&gt;REST, Websocket&lt;/td&gt;
&lt;td&gt;Windows, macOS, Linux&lt;/td&gt;
&lt;td&gt;모든 언어 (Python 공식 지원)&lt;/td&gt;
&lt;td&gt;Websocket&lt;/td&gt;
&lt;td&gt;&lt;span data-math=&quot;20&quot;&gt;$20$&lt;/span&gt; (REST), &lt;span data-math=&quot;10&quot;&gt;$10$&lt;/span&gt; (Websocket)&lt;/td&gt;
&lt;td&gt;0.0140527%&lt;/td&gt;
&lt;td&gt;OS/언어 독립성, 현대적 방식, 우수한 개발자 지원 (샘플코드, AI챗봇)&lt;/td&gt;
&lt;td&gt;상대적으로 적은 사용자 커뮤니티&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;키움증권&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Open API+&lt;/td&gt;
&lt;td&gt;OCX (COM)&lt;/td&gt;
&lt;td&gt;Windows 전용&lt;/td&gt;
&lt;td&gt;C++, C#, VB, Python 등&lt;/td&gt;
&lt;td&gt;이벤트 방식&lt;/td&gt;
&lt;td&gt;&lt;span data-math=&quot;5&quot;&gt;$5$&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;0.015%&lt;/td&gt;
&lt;td&gt;압도적인 사용자 수, 방대한 커뮤니티 및 참고 자료, KOA Studio 제공&lt;/td&gt;
&lt;td&gt;Windows 종속성, 복잡한 이벤트 기반 프로그래밍, 낮은 요청 제한&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;대신증권&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;CREON Plus&lt;/td&gt;
&lt;td&gt;COM&lt;/td&gt;
&lt;td&gt;Windows 전용 (32bit 환경 필수)&lt;/td&gt;
&lt;td&gt;C#, VB, Python 등&lt;/td&gt;
&lt;td&gt;이벤트 방식&lt;/td&gt;
&lt;td&gt;&lt;span data-math=&quot;15&quot;&gt;$15$&lt;/span&gt;초당 &lt;span data-math=&quot;60&quot;&gt;$60$&lt;/span&gt;건&lt;/td&gt;
&lt;td&gt;0.015%&lt;/td&gt;
&lt;td&gt;국내 최초 API 제공, 상대적으로 풍부한 과거 데이터 제공&lt;/td&gt;
&lt;td&gt;&lt;b&gt;32bit 환경 제약&lt;/b&gt;, Windows 종속성, 관리자 권한 실행 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LS증권&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;XingAPI / Open API&lt;/td&gt;
&lt;td&gt;COM / REST&lt;/td&gt;
&lt;td&gt;Windows 전용 / OS 무관&lt;/td&gt;
&lt;td&gt;C++, C#, Python 등&lt;/td&gt;
&lt;td&gt;이벤트 방식 / Websocket&lt;/td&gt;
&lt;td&gt;API별 상이&lt;/td&gt;
&lt;td&gt;0.015%&lt;/td&gt;
&lt;td&gt;두 가지 방식(COM, REST) 모두 제공, 모바일 라이브러리 지원&lt;/td&gt;
&lt;td&gt;REST API는 기능 일부 미지원, 상대적으로 적은 사용자 커뮤니티&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. 주요 증권사 API 활용 심층 가이드&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;사례 1 (현대적 접근): 한국투자증권 KIS Open API&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국투자증권 API는 현대적인 개발 환경을 선호하는 개발자에게 최적의 선택지입니다. RESTful 아키텍처를 채택하여 개발의 유연성과 확장성을 극대화한 것이 특징입니다.&lt;span&gt;10&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;b&gt;주요 특징 및 장점:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;플랫폼 독립성:&lt;/b&gt; 웹 표준 기술을 사용하므로, 클라우드 서버(Linux), 개인용 Mac 등 어떤 환경에서도 제약 없이 시스템을 구축하고 운영할 수 있습니다.&lt;span&gt;9&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개발자 친화적 생태계:&lt;/b&gt; Python 샘플 코드를 REST와 Websocket 방식별로 충실하게 제공하며, 이를 LLM(거대 언어 모델) 환경에서 활용하기 쉽도록 구조화했습니다.&lt;span&gt;22&lt;/span&gt; 또한, 개발 중 발생하는 문제를 해결하는 데 도움을 주는 전용 AI 어시스턴트(GPTs)를 제공하는 등 개발자 지원에 적극적입니다.&lt;span&gt;22&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;명확한 역할 분리:&lt;/b&gt; 계좌 조회, 잔고 확인, 주문 등 상태를 요청하고 응답받는 기능은 REST API로, 실시간 시세나 체결 내역 수신은 Websocket으로 처리하도록 역할이 명확히 분리되어 있어 효율적인 시스템 설계가 가능합니다.&lt;span&gt;22&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개발 절차:&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;서비스 신청:&lt;/b&gt; 한국투자증권 홈페이지나 앱을 통해 Open API 서비스를 신청하고, 실전/모의 투자용 App Key와 App Secret을 각각 발급받습니다.&lt;span&gt;26&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;환경 설정:&lt;/b&gt; 제공되는 GitHub 저장소를 클론하고, uv sync 와 같은 명령어로 필요한 Python 라이브러리를 설치합니다.&lt;span&gt;26&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;설정 파일 수정:&lt;/b&gt; kis_devlp.yaml 파일에 발급받은 App Key, App Secret과 자신의 계좌번호, HTS ID를 입력합니다.&lt;span&gt;26&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인증 및 API 호출:&lt;/b&gt; kis_auth.py 모듈을 사용하여 인증 토큰을 발급받은 후, 필요한 API 함수(예: 현재가 조회, 주식 주문)를 호출하여 사용합니다. 모든 과정이 표준적인 HTTP 요청으로 이루어져 코드가 간결하고 직관적입니다.&lt;span&gt;26&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;사례 2 (가장 대중적인 접근): 키움증권 Open API+&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키움증권은 국내 개인 주식 투자자 점유율 1위 증권사답게, API 사용자 커뮤니티가 가장 활성화되어 있어 초보자가 참고할 만한 자료나 예제 코드를 찾기 용이하다는 큰 장점이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;주요 특징 및 장점:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방대한 커뮤니티:&lt;/b&gt; 개발 중 문제 발생 시 온라인 카페, 블로그, GitHub 등에서 해결책을 찾을 가능성이 높습니다.&lt;span&gt;23&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;KOA Studio:&lt;/b&gt; API가 제공하는 방대한 기능(TR, Transaction)의 명세를 확인하고, 입출력 값을 미리 테스트해볼 수 있는 GUI 도구를 제공하여 개발 편의성을 높여줍니다.&lt;span&gt;12&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;강력한 기능:&lt;/b&gt; 실시간 조건검색 결과를 API를 통해 수신하는 등 HTS의 강력한 기능들을 프로그래밍적으로 활용할 수 있습니다.&lt;span&gt;12&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개발 절차 및 기술적 허들:&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;서비스 신청 및 설치:&lt;/b&gt; 홈페이지에서 Open API 사용 신청 후, OCX 모듈을 PC에 설치합니다.&lt;span&gt;12&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이벤트 기반 프로그래밍:&lt;/b&gt; 키움 API와의 통신은 '요청(Request)'과 '수신(Event)'이 비동기적으로 이루어집니다. 예를 들어, CommRqData() 함수로 데이터 조회를 '요청'하면, 그 결과는 별도의 OnReceiveTrData 이벤트 핸들러 함수를 통해 '수신'됩니다.&lt;span&gt;23&lt;/span&gt; 이 구조를 처리하기 위해 Python에서는 PyQt와 같은 GUI 프레임워크의 이벤트 루프(Event Loop)를 활용해야 하며, 이는 웹 개발의 요청-응답 모델에 익숙한 개발자에게는 다소 생소하고 복잡하게 느껴질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동 해지 정책:&lt;/b&gt; 3개월 이상 실서버에 접속하지 않으면 서비스가 자동으로 해지되므로, 주기적인 관리가 필요합니다. 모의투자 서버 접속은 접속으로 인정되지 않을 수 있습니다.&lt;span&gt;12&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;사례 3 (특수 환경): 대신증권 CREON Plus API&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신증권은 국내에서 가장 먼저 API 서비스를 시작한 증권사 중 하나로, 오랜 기간 안정적으로 서비스를 제공해왔습니다.&lt;span&gt;10&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;핵심 제약사항: 32bit 환경 필수&lt;/li&gt;
&lt;li&gt;크레온 API는 오직 32bit 환경에서만 동작합니다.15 현재 대부분의 PC가 64bit Windows를 사용하는 상황에서 이는 상당한 개발 장벽으로 작용합니다. 이를 해결하기 위해서는 Anaconda와 같은 패키지 관리자를 사용하여 32bit 버전의 Python 가상 환경을 별도로 생성하고 설정해야 합니다.27&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가 설정 요구사항:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발에 사용되는 Python 실행 환경(예: 명령 프롬프트, Jupyter Notebook)과 크레온 HTS 프로그램 모두 '관리자 권한으로 실행'해야 정상적으로 통신이 이루어집니다.&lt;span&gt;27&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;이러한 제약 사항들은 초기 개발 환경을 구축하는 데 상당한 시간과 노력을 요구하며, 사소한 설정 오류로 인해 프로그램이 작동하지 않는 문제를 겪을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표면적으로 증권사 API는 사용료가 없는 '무료' 서비스처럼 보입니다. 하지만 실제 비용은 '개발 마찰(Development Friction)'이라는 보이지 않는 형태로 존재합니다. 한국투자증권의 REST API는 낮은 개발 마찰을 통해 개발자가 빠르게 핵심 투자 로직 구현에 집중할 수 있도록 돕습니다. 반면, 키움증권이나 대신증권의 전통적인 API는 Windows 종속성, 32bit 환경 제약, 복잡한 이벤트 루프 처리 등 높은 개발 마찰을 유발합니다. 이러한 기술적 장벽을 극복하는 데 소요되는 개발자의 시간, 디버깅의 어려움, 그리고 잠재적인 유지보수 비용은 API 선택 시 반드시 고려해야 할 '숨겨진 비용'입니다. 특히 빠르게 프로토타입을 만들고 전략 자체의 성능을 검증하는 데 집중하고 싶은 개인 개발자에게, 이러한 개발 마찰의 차이는 프로젝트의 성패를 가를 수 있는 중요한 요소가 됩니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IV. AI 트레이딩 모델의 구축: 데이터, 알고리즘, 그리고 백테스팅&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증권사 API를 통해 시장 데이터에 접근하고 주문을 실행할 수 있는 '손과 발'이 준비되었다면, 다음은 어떤 판단을 내릴 것인지를 결정하는 '두뇌', 즉 AI 트레이딩 모델을 구축하는 단계입니다. 이 단계는 크게 시장을 예측하거나 최적의 행동을 결정하는 AI 모델을 설계하는 부분과, 그 모델의 성능을 과거 데이터로 철저히 검증하는 백테스팅 부분으로 나뉩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 예측 및 의사결정 모델: AI의 역할&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI를 트레이딩에 적용하는 접근법은 크게 두 가지로 나눌 수 있습니다. 하나는 미래의 특정 변수(예: 주가)를 예측하는 것이고, 다른 하나는 특정 상황에서 최적의 행동(매수/매도/관망)을 직접 결정하는 것입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시계열 예측 모델 (대표: LSTM)하지만 LSTM을 이용한 주가 예측에는 명확한 한계가 존재합니다. 많은 경우, 모델이 복잡한 패턴을 학습하기보다는 단순히 '내일의 가격은 오늘의 가격과 비슷할 것이다'라는 가장 간단한 규칙을 학습하는 경향이 있습니다. 이 경우 예측 그래프는 실제 가격 그래프를 하루만큼 옆으로 옮겨놓은(1-day shift) 형태가 되어 실질적인 예측 능력이 없게 됩니다.33 이러한 문제를 극복하기 위해서는 단순히 주가를 예측하는 대신 주가의 '변동률'이나 '방향성'을 예측하도록 모델의 목표를 재설정하거나, 다양한 기술적 지표 및 거시 경제 지표를 추가 입력 변수로 활용하는 등 고도화된 접근이 필요합니다.&lt;/li&gt;
&lt;li&gt;LSTM(Long Short-Term Memory)은 순환신경망(RNN, Recurrent Neural Network)의 한 종류로, 시간의 흐름에 따라 순차적으로 입력되는 데이터, 즉 시계열 데이터의 패턴을 학습하는 데 특화된 딥러닝 모델입니다.6 주식 트레이딩에서는 과거 일정 기간(예: 14일)의 시가, 고가, 저가, 종가, 거래량 데이터를 입력받아 다음 날의 시가나 종가를 예측하는 방식으로 활용될 수 있습니다.30 LSTM은 기존 RNN의 장기 의존성 문제(오래된 과거의 정보가 제대로 전달되지 않는 현상)를 개선하여 주가와 같이 복잡한 시계열 패턴을 분석하는 데 적합한 것으로 알려져 있습니다.6&lt;/li&gt;
&lt;li&gt;강화학습 모델 (대표: Q-Learning, A2C)이 접근법은 주식 거래의 본질, 즉 연속적인 의사결정을 통해 수익을 창출하는 과정과 매우 유사하여 트레이딩 봇 개발에 적합한 것으로 평가받습니다.7 예를 들어, A2C(Advantage Actor-Critic)와 같은 알고리즘을 사용하여 10년간의 과거 데이터로 학습시킨 모델이 벤치마크 대비 높은 수익률을 기록한 연구 사례도 있습니다.34 강화학습은 단순히 다음 스텝을 예측하는 것이 아니라, 전체 거래 과정에서의 최적 전략을 학습한다는 점에서 시계열 예측 모델보다 한 단계 더 진보한 접근법이라 할 수 있습니다.&lt;/li&gt;
&lt;li&gt;강화학습은 예측을 넘어 '의사결정' 자체를 학습하는 AI 패러다임입니다. 트레이딩 봇(Agent)이 특정 시점의 시장 상황(State)을 관찰하고, '매수', '매도', '관망'과 같은 행동(Action)을 취합니다. 그 행동의 결과로 포트폴리오 가치가 변동하면, 그에 대한 보상(Reward) 또는 벌점(Penalty)을 받게 됩니다. 강화학습 모델의 목표는 수많은 모의 거래를 반복하면서, 장기적으로 누적 보상을 극대화하는 최적의 행동 규칙, 즉 정책(Policy)을 스스로 학습하는 것입니다.7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. 전략 검증: 백테스팅의 중요성과 도구&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 정교한 AI 모델이나 투자 전략이라도, 실제 자금을 투입하기 전에는 반드시 철저한 검증 과정을 거쳐야 합니다. 백테스팅은 과거 데이터를 사용하여 개발된 전략의 성과를 시뮬레이션하는 과정으로, 전략의 잠재적 성과와 위험을 객관적으로 평가하는 필수적인 단계입니다.&lt;span&gt;16&lt;/span&gt; 백테스팅 결과가 미래 수익을 보장하지는 않지만, 명백한 결함이 있는 전략을 걸러내고, 다양한 시장 국면(상승장, 하락장, 횡보장)에서 전략이 어떻게 작동하는지 이해하는 데 결정적인 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 생태계에는 이러한 백테스팅을 효율적으로 수행할 수 있도록 돕는 다양한 오픈소스 라이브러리가 존재합니다. 대표적인 세 가지 라이브러리는 각각 뚜렷한 장단점을 가지고 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VectorBT: 속도를 위한 선택&lt;/li&gt;
&lt;li&gt;VectorBT는 데이터 과학에서 널리 사용되는 NumPy, Pandas 라이브러리를 기반으로, 모든 계산을 벡터화(Vectorization)하여 처리하는 데 특화된 프레임워크입니다.18 벡터화란, 반복문(for-loop)을 사용하여 데이터를 하나씩 처리하는 대신, 데이터 전체를 배열(Array) 단위로 한 번에 연산하는 방식입니다. 여기에 Numba와 같은 JIT(Just-In-Time) 컴파일러를 결합하여 Python의 느린 속도를 극복하고, C나 Java로 작성된 프로그램에 필적하는 압도적인 연산 속도를 보여줍니다.18 수백, 수천 가지의 다른 파라미터 조합을 테스트하는 대규모 최적화 작업에 절대적인 강점을 가집니다.18 다만, 모든 로직을 벡터화된 방식으로 사고해야 하므로, 일반적인 프로그래밍에 익숙한 초심자에게는 학습 곡선이 다소 가파를 수 있습니다.18&lt;/li&gt;
&lt;li&gt;Backtrader: 편의성과 현실성을 위한 선택&lt;/li&gt;
&lt;li&gt;Backtrader는 Python 기반 백테스팅 라이브러리 중 가장 널리 알려져 있으며, 'Pythonic'하고 직관적인 API 설계로 초심자들이 쉽게 접근할 수 있다는 평을 받습니다.18 실제 시간이 흐르는 것처럼 데이터를 한 번에 한 단위(bar)씩 순차적으로 처리하는 이벤트 기반(Event-driven) 아키텍처를 채택하고 있습니다.18 이 방식은 거래 수수료, 슬리피지, 주문 체결 로직 등 실제 거래 환경에서 발생하는 복잡하고 순차적인 조건들을 모델링하기에 매우 직관적이고 용이합니다. 또한, 라이브 트레이딩 환경으로의 전환을 비교적 매끄럽게 지원하며, 방대한 문서와 활성화된 커뮤니티를 보유하고 있다는 장점이 있습니다.18 단점은 이벤트 기반 처리 방식의 특성상 대규모 데이터를 다룰 때 VectorBT에 비해 속도가 현저히 느리다는 것입니다.18&lt;/li&gt;
&lt;li&gt;Zipline: 학술적 연구를 위한 선택 (과거의 영광)&lt;/li&gt;
&lt;li&gt;Zipline은 세계적인 퀀트 플랫폼이었던 Quantopian에서 개발하고 사용했던 백테스팅 엔진으로, 특히 여러 종목을 대상으로 팩터(Factor) 기반의 정교한 퀀트 전략을 연구하고 구현하는 데 강력한 기능을 제공했습니다.18 하지만 2020년 Quantopian이 서비스를 종료하면서 공식적인 개발 및 유지보수가 중단되었습니다.18 이로 인해 최신 버전의 Python이나 Pandas 라이브러리와의 호환성 문제가 심각하며, 설치 과정 자체가 매우 까다로워졌습니다.18 현재는 일부 커뮤니티에서 유지보수하는 포크(fork) 버전이 존재하지만, 신규 프로젝트에 사용하기에는 기술적 부채가 큰 선택지입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 세 가지 라이브러리의 선택은 '속도', '현실성', '사용 편의성'이라는 세 가지 요소 사이의 필연적인 트레이드오프 관계를 보여줍니다. VectorBT는 속도를 극대화했지만, 복잡한 이벤트 기반의 현실을 정밀하게 모델링하는 데는 Backtrader보다 불리할 수 있습니다. Backtrader는 사용이 쉽고 현실적인 시뮬레이션이 가능하지만 속도를 희생합니다. 따라서 개발자는 자신의 목표에 따라 적합한 도구를 전략적으로 선택해야 합니다. 예를 들어, '수천 개의 파라미터 조합을 빠르게 탐색하여 최적의 조합을 찾는' 초기 연구 단계에서는 VectorBT가 유리하고, '찾아낸 특정 전략을 현실적인 제약조건 하에 정밀하게 시뮬레이션하고 라이브 트레이딩으로 전환'하는 후반 단계에서는 Backtrader가 더 적합할 수 있습니다. 이들은 단순한 경쟁 관계라기보다, 개발 단계와 목적에 따라 선택할 수 있는 상호 보완적인 도구로 이해하는 것이 바람직합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;V. 경로 2: 퀀트 전략 플랫폼 활용 방식 (No-Code/Low-Code Approach)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍에 대한 전문 지식이 없거나, 복잡한 개발 환경 설정 없이 자신의 투자 아이디어를 빠르게 구현하고 검증해보고 싶은 투자자에게는 퀀트 전략 플랫폼이 효과적인 대안이 될 수 있습니다. 이 방식은 코드를 직접 작성하는 대신, 웹 기반의 그래픽 인터페이스(GUI)를 통해 미리 정의된 다양한 투자 지표(팩터)들을 조합하여 자신만의 전략을 만드는 'No-Code' 또는 'Low-Code' 접근법을 취합니다. 국내에서는 '젠포트(GenPort)'가 가장 대표적인 서비스입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 젠포트(GenPort) 심층 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠포트는 개인 투자자들이 복잡한 코딩 없이도 자신만의 로보어드바이저를 만들고, 이를 실제 투자와 연동하여 자동매매를 실행할 수 있도록 지원하는 투자형 로보어드바이저 플랫폼입니다.&lt;span&gt;20&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;/li&gt;
&lt;li&gt;젠포트의 핵심은 사용자가 '타이핑과 클릭만으로' 투자 알고리즘을 설계할 수 있다는 점입니다.20 사용자는 웹사이트의 전략 생성 페이지에서 '매수 조건식', '매도 조건식', '우선순위', '자금 관리 규칙' 등을 설정할 수 있습니다. 예를 들어, &quot;PER이 10 이하이고, PBR이 1 미만이며, 최근 5일 이동평균선이 20일 이동평균선을 상향 돌파한 종목을 매수한다&quot;와 같은 복합적인 조건을 코딩 없이 논리 블록을 조립하듯 만들 수 있습니다.17 젠포트는 수백 가지에 달하는 기술적 지표와 재무 팩터를 제공하여, 초보자부터 숙련자까지 다양한 수준의 전략을 구현할 수 있도록 지원합니다.13&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 기능:&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;백테스팅 엔진:&lt;/b&gt; 사용자가 생성한 전략을 과거 데이터에 즉시 적용하여 시뮬레이션 결과를 확인할 수 있습니다. 이를 통해 연평균 수익률, MDD, 승률 등 전략의 성과를 객관적으로 평가하고 최적화할 수 있습니다.&lt;span&gt;17&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;젠마켓 (알고리즘 마켓):&lt;/b&gt; 다른 사용자들이 만들어서 공유한 우수한 성과의 전략들을 열람하고, 자신의 포트로 복사하여 사용하거나 수정하여 자신만의 전략으로 발전시킬 수 있는 커뮤니티 기능입니다. 직접 전략을 만들기 어려운 초보자들에게 유용한 출발점을 제공합니다.&lt;span&gt;13&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;젠트레이더 (자동매매 프로그램):&lt;/b&gt; 백테스팅과 가상매매를 통해 검증이 완료된 전략을 실제 증권사 계좌와 연동하여 자동으로 매매를 실행해주는 별도의 PC 설치 프로그램입니다. 젠트레이더는 매일 장 시작 전에 젠포트 서버로부터 그날의 매매 신호(매수/매도할 종목, 가격, 비중)를 받아와 사용자의 PC에서 자동으로 주문을 실행합니다.&lt;span&gt;13&lt;/span&gt; 현재 키움증권, NH투자증권, iM증권 등과 연동을 지원합니다.&lt;span&gt;39&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;사용자 워크플로우:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;전략 생성 및 백테스팅:&lt;/b&gt; 젠포트 웹사이트에서 자신만의 전략을 만들고, 백테스팅을 통해 과거 성과를 철저히 검증합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가상매매:&lt;/b&gt; 백테스팅을 통과한 전략을 실전 투자에 적용하기 전, 모의투자 계좌와 연동하여 일정 기간 동안 안정적으로 작동하는지 마지막으로 검증합니다.&lt;span&gt;17&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실전매매 연동:&lt;/b&gt; 검증이 완료된 전략을 '실전매매 포트'로 등록하고, 개인 PC에 '젠트레이더' 프로그램을 설치합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동매매 실행:&lt;/b&gt; 젠트레이더에 자신의 증권사 계좌 정보를 입력하고 로그인하면, 이후부터는 젠트레이더가 매일 자동으로 해당 전략에 따른 매매를 수행합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;젠포트를 이용한 자동매매는 다음과 같은 체계적인 단계를 거칩니다.&lt;/li&gt;
&lt;li&gt;비용 구조:&lt;/li&gt;
&lt;li&gt;젠포트 서비스 자체는 기본적으로 무료로 이용할 수 있으나, 서비스를 통해 실제 매매를 할 경우 비용이 발생합니다. 젠포트와 제휴된 증권사 계좌로 서비스를 이용할 경우, 일반적인 온라인 주식매매 수수료(약 0.015%)보다 높은 0.1%의 매매 수수료율이 적용될 수 있습니다.38 이 차액이 플랫폼 이용에 대한 대가, 즉 비용으로 볼 수 있습니다. 또한, 젠마켓에서 다른 사용자의 유료 전략을 구매할 경우 별도의 비용이 발생할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠포트와 같은 플랫폼은 직접 개발 방식의 높은 기술적 장벽과 투자일임 서비스의 낮은 통제권 사이에서 균형을 맞춘 합리적인 대안입니다. 투자자가 전략의 핵심 로직을 직접 설계하고 통제하면서도, 복잡한 프로그래밍과 시스템 관리의 부담에서는 벗어날 수 있다는 장점이 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;VI. 경로 3: AI 투자일임 서비스 활용 방식 (Managed Approach)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI를 활용한 주식 투자를 원하지만, 직접 전략을 개발하거나 관리하는 데 시간과 노력을 들이고 싶지 않은 투자자에게는 AI 투자일임 서비스, 즉 '로보어드바이저(Robo-advisor)'가 가장 적합한 경로입니다. 이 방식은 사용자가 트레이딩 시스템을 만드는 '개발자'가 아니라, 전문 금융 서비스에 자산을 맡기는 '고객'이 되는 것입니다. 국내에서는 '핀트(Fint)'가 이 분야를 대표하는 서비스입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 핀트(Fint) 심층 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핀트는 투자일임 및 투자자문 라이선스를 보유한 주식회사 디셈버앤컴퍼니가 운영하는 서비스로, AI가 고객의 자산을 대신 운용해주는 것을 핵심으로 합니다.&lt;span&gt;41&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;/li&gt;
&lt;li&gt;핀트의 핵심은 '투자일임' 계약입니다.21 사용자가 핀트에 투자를 맡기면(일임하면), 핀트의 AI 엔진인 '아이작(ISAAC)'이 사용자의 투자 성향에 맞춰 포트폴리오를 구성하고, 시장 상황에 따라 종목과 비중을 조절(리밸런싱)하며, 실제 매매 주문까지 자동으로 실행합니다.43 이는 사용자가 매매의 주체가 되는 경로 1(직접 개발)이나 경로 2(플랫폼 활용)와는 근본적으로 다른 모델입니다.&lt;/li&gt;
&lt;li&gt;AI 엔진 '아이작(ISAAC)':&lt;/li&gt;
&lt;li&gt;아이작은 핀트의 자체 개발 AI 투자 엔진입니다. 수많은 금융 데이터와 다양한 경제 지표를 종합적으로 분석하여 최적의 자산 배분 전략을 수립합니다.45 예를 들어, 미국 주식 투자의 경우 3,000개 이상의 종목 데이터를 분석하여 6개월 뒤 상승 확률이 높은 종목을 선별하는 전략을 사용하거나, 배당률과 배당성장률이 높은 종목에 투자하는 전략을 구사합니다.41 아이작은 단순히 포트폴리오를 구성하는 데 그치지 않고, 실시간으로 시장과 자산 현황을 분석하여 위험이 감지되거나 더 나은 투자 기회가 포착되면 자동으로 리밸런싱을 실행하여 포트폴리오를 최적의 상태로 유지합니다.43&lt;/li&gt;
&lt;li&gt;사용자 워크플로우:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;앱 설치 및 가입:&lt;/b&gt; 앱스토어에서 핀트 앱을 다운로드하고 회원가입을 진행합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;투자 성향 분석:&lt;/b&gt; 몇 가지 질문에 답변하여 자신의 투자 성향(예: 안정형, 공격형 등)을 진단받습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포트폴리오 선택 및 계약:&lt;/b&gt; 진단된 투자 성향에 맞춰 아이작이 추천하는 투자 포트폴리오(예: 미국 주식, 글로벌 ETF, 채권 등)를 선택하고 비대면으로 투자일임 계약을 체결합니다.&lt;span&gt;42&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;증권 계좌 개설 및 입금:&lt;/b&gt; 핀트와 제휴된 증권사(KB증권, 대신증권, 하나증권, 한국투자증권 등)의 비대면 계좌를 앱 내에서 개설하고, 투자할 금액을 입금합니다.&lt;span&gt;45&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동 운용 시작:&lt;/b&gt; 입금이 완료되면, 아이작이 해당 계좌에서 자동으로 투자를 시작하고 운용합니다. 사용자는 앱을 통해 자신의 포트폴리오 현황과 수익률을 실시간으로 확인할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;핀트 서비스 이용 절차는 매우 간편하며, 스마트폰 앱을 통해 모든 과정이 이루어집니다.&lt;/li&gt;
&lt;li&gt;비용 구조:&lt;/li&gt;
&lt;li&gt;핀트의 비용은 거래 건별로 발생하는 매매 수수료가 아니라, 운용 자산 전체에 대해 부과되는 '운용 보수(수수료)' 형태입니다. 투자일임 서비스의 경우, 운용 중인 자산의 월평균 잔고를 기준으로 매월 일정 비율의 수수료가 부과됩니다. 예를 들어, 미국 주식 투자는 연 1.176%(월 0.098%), ETF 투자는 연 0.768%(월 0.064%)의 기본 수수료가 적용됩니다.21 이는 증권사에 지불하는 실제 매매 수수료와는 별도로 핀트에 지불하는 서비스 이용료입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자의 초기 질문(&quot;AI를 이용해서... 자동주문을 하려고 해&quot;)은 '내가 주체가 되어 시스템을 만들고 싶다'는 능동적인 의도를 내포하고 있습니다. 이러한 관점에서 경로 1과 2는 사용자가 직접 '도구 제작자(Tool Builder)' 또는 '전략 설계자(Strategy Designer)'가 되는 길입니다. 투자 결정의 최종 책임은 전적으로 사용자 자신에게 있으며, API나 젠포트는 그 결정을 실행하는 '도구'에 불과합니다. 만약 손실이 발생한다면 그것은 사용자가 설계한 '전략'의 실패입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, 경로 3은 사용자가 '금융 서비스 이용자(Service User)'가 되는 전혀 다른 길입니다. 사용자는 &quot;핀트의 전략에 따라 운용해주세요&quot;라고 자신의 자산에 대한 운용 권한을 위임하는 것입니다. 투자 결정의 주체는 핀트의 AI '아이작'이며, 개별 매매 판단의 책임은 서비스 제공자에게 있습니다(물론 투자 원금 손실의 최종 책임은 투자자 본인에게 귀속됩니다 &lt;span&gt;41&lt;/span&gt;). 따라서 보고서는 단순히 핀트를 'AI 자동매매의 한 방법'으로 소개하는 것을 넘어, &quot;이것은 당신이 직접 운전하는 것이 아니라, AI가 운전하는 자율주행차에 탑승하는 것과 같습니다&quot;라는 명확한 비유를 통해 '통제권과 책임'이라는 핵심적인 차이점을 부각해야 합니다. 이 근본적인 역할의 차이를 인지하지 못하면, 사용자는 자신의 본래 의도와 전혀 다른 선택을 할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;VII. 법적 및 규제적 고려사항: 안전한 자동매매를 위한 필수 지침&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI를 이용한 주식 자동매매는 강력한 도구이지만, 금융 법규의 테두리 안에서 안전하게 활용해야 합니다. 특히 대한민국 자본시장법은 투자자 보호를 위해 매우 엄격한 규제를 두고 있으며, 이를 위반할 경우 심각한 법적 문제에 직면할 수 있습니다. 자동매매 시스템을 구축하고 운영하기 전에 반드시 숙지해야 할 핵심적인 법적 및 규제적 고려사항은 다음과 같습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. '미등록 투자일임 행위'의 경계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 개인 개발자가 가장 주의해야 할 법적 함정입니다. 금융위원회의 유권해석에 따르면, '투자자의 구체적인 투자판단 없이 알고리즘에 따라 투자종목이 자동으로 선택되고 매매가 이루어지는 프로그램'을 타인에게 제공하는 행위는 '투자일임업'에 해당합니다.&lt;span&gt;47&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;b&gt;합법적인 경우:&lt;/b&gt; &lt;b&gt;투자자 본인이 직접 개발하거나 설정한 프로그램을 사용하여 자신의 증권 계좌에서 자신의 자금을 운용하는 것&lt;/b&gt;은 전적으로 합법입니다. 이는 자신의 투자 판단을 시스템으로 자동화한 것에 불과하기 때문입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;불법적인 경우:&lt;/b&gt; 자신이 개발한 자동매매 프로그램을 &lt;b&gt;타인에게 유료로 판매, 대여하거나 월 구독료를 받고 서비스를 제공&lt;/b&gt;하여, 그 프로그램이 구매자의 계좌에서 자동으로 매매를 실행하도록 하는 행위는 명백한 불법입니다. 이는 금융 당국의 정식 인가 없이 '투자일임업'을 영위하는 것으로 간주되기 때문입니다.&lt;span&gt;47&lt;/span&gt; 최근 사회적 문제가 되는 '주식 리딩방'이나 검증되지 않은 'AI 자동매매 프로그램 판매'가 대표적인 위법 사례에 해당합니다.&lt;span&gt;47&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정식 투자일임업자로 등록하기 위해서는 상당한 규모의 자본금, 전문 인력, 내부통제 시스템 등 매우 엄격한 요건을 갖추어야 하므로 &lt;span&gt;48&lt;/span&gt;, 개인이 이를 충족하기는 사실상 불가능합니다. 따라서 자신이 개발한 알고리즘은 오직 자신의 투자를 위해서만 사용해야 한다는 점을 명심해야 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. 자본시장법상 불공정거래행위 금지&lt;/h3&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;b&gt;내부자거래 금지:&lt;/b&gt; 직무와 관련하여 알게 된 미공개중요정보(예: 대규모 계약, 실적 발표 전 정보 등)를 이용하여 특정 종목을 매매하도록 알고리즘을 설계하는 것은 금지됩니다.&lt;span&gt;49&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시세조종행위 금지:&lt;/b&gt; 특정 종목의 시세를 인위적으로 상승 또는 하락시키려는 의도를 가지고, 허수 주문을 반복하거나 타인과 공모하여 주가를 조작하는 행위는 심각한 범죄입니다. 자동매매 프로그램을 이용해 고빈도 매매를 하며 시세에 부당한 영향을 미치는 행위 역시 시세조종으로 처벌받을 수 있습니다.&lt;span&gt;49&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;부정거래행위 금지:&lt;/b&gt; 그 외에 부정한 수단, 계획 또는 기교를 사용하여 타인을 기망하고 금전적 이익을 얻으려는 모든 행위가 포괄적으로 금지됩니다.&lt;span&gt;49&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;C. 증권사 이용약관 및 면책 조항&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증권사는 API나 HTS의 자동주문 기능을 제공하면서, 서비스 이용약관을 통해 발생 가능한 여러 문제에 대한 책임을 제한하고 있습니다. 사용자는 이러한 면책 조항을 명확히 인지하고 있어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증권사는 일반적으로 다음과 같은 사유로 인해 발생하는 주문 미처리, 처리 지연, 오류 매매 등으로 인한 사용자의 손해에 대해 책임을 지지 않음을 명시합니다 &lt;span&gt;8&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;사용자 PC의 하드웨어 또는 소프트웨어 문제&lt;/li&gt;
&lt;li&gt;사용자의 인터넷 회선 등 통신 상태 불량&lt;/li&gt;
&lt;li&gt;증권거래소(KRX)나 증권사 시스템의 일시적인 장애&lt;/li&gt;
&lt;li&gt;시세 정보의 전송 지연&lt;/li&gt;
&lt;li&gt;해킹 등 외부 요인에 의한 문제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, 자동매매 시스템의 안정성, 보안, 그리고 오류 발생 시의 대응에 대한 책임은 전적으로 시스템을 개발하고 운영하는 사용자 본인에게 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 강력한 금융 규제는 글로벌 빅테크 기업들이 최고의 AI 기술을 보유하고 있음에도 불구하고, 개인 투자자를 위한 AI 자동매매 '솔루션' 시장에 직접적으로 진출하지 않는 근본적인 이유를 설명해 줍니다. '투자 조언'과 '투자 일임'의 영역은 단순한 소프트웨어 판매와는 차원이 다른 법적 책임과 규제 준수 의무를 동반합니다. 이 '규제의 해자(Regulatory Moat)'는 개인 개발자나 소규모 업체가 자신의 알고리즘을 상업화하는 데 가장 큰 장벽으로 작용하며, 왜 국내 시장이 'API를 제공하는 인프라 사업자(증권사)'와 '정식 인가를 받은 로보어드바이저 서비스 제공자(핀트 등)'로 명확하게 양분되어 있는지를 설명하는 핵심적인 배경이 됩니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;VIII. 종합 결론 및 전략적 제언&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 보고서는 대한민국 주식 시장에서 AI를 활용한 자동매매 시스템을 구축하기 위한 세 가지 주요 경로&amp;mdash;증권사 API를 활용한 직접 개발, 퀀트 플랫폼 활용, AI 투자일임 서비스 이용&amp;mdash;를 심층적으로 분석했습니다. 각 경로는 기술적 요구사항, 통제 수준, 비용 구조, 그리고 법적 책임의 범위에서 뚜렷한 차이를 보이며, 투자자 개인의 상황과 목표에 따라 최적의 선택이 달라질 수 있음을 확인했습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 최종 경로 선택을 위한 의사결정 가이드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신에게 가장 적합한 경로를 선택하기 위해 다음의 질문에 따라 의사결정을 내릴 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;당신은 프로그래밍(특히 Python)에 익숙하며, 투자 전략의 모든 세부사항을 직접 제어하고 싶습니까?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;예:&lt;/b&gt; &lt;b&gt;경로 1: 직접 개발(DIY)&lt;/b&gt; 이 가장 적합합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;추가 질문:&lt;/b&gt; 개발 환경의 자유도와 최신 기술 스택을 선호하십니까? &amp;rarr; &lt;b&gt;한국투자증권 API&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가 질문:&lt;/b&gt; 가장 방대한 사용자 커뮤니티와 참고 자료를 우선시하며, Windows 환경에서의 개발이 문제없습니까? &amp;rarr; &lt;b&gt;키움증권 API&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로그래밍 경험은 없지만, 나만의 투자 아이디어를 직접 논리적으로 설계하고 검증하여 자동화하고 싶습니까?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;예:&lt;/b&gt; &lt;b&gt;경로 2: 퀀트 플랫폼 활용&lt;/b&gt; 이 최적의 선택입니다. &lt;b&gt;젠포트&lt;/b&gt;와 같은 서비스를 통해 코딩 없이 전략을 구현하고 자동매매를 실행할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;투자 전략 개발이나 시스템 관리에 시간을 쏟고 싶지 않으며, 검증된 AI에게 투자의 전 과정을 맡기고 싶습니까?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;예:&lt;/b&gt; &lt;b&gt;경로 3: AI 투자일임 서비스&lt;/b&gt; 가 가장 효율적인 방법입니다. &lt;b&gt;핀트&lt;/b&gt;와 같은 로보어드바이저를 통해 전문가의 AI가 운용하는 포트폴리오에 투자할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. 성공적인 AI 자동매매 시스템 구축을 위한 4대 원칙&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 경로를 선택하든, 성공적인 AI 자동매매 시스템을 구축하고 운영하기 위해서는 기술적인 구현을 넘어 다음과 같은 핵심 원칙을 준수해야 합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;명확한 투자 전략 수립:&lt;/b&gt; AI는 마법의 도구가 아닙니다. 모든 시스템의 근간에는 투자자 자신이 이해하고 논리적으로 설명할 수 있는 명확한 투자 철학과 전략이 있어야 합니다. 기술 자체에 매몰되지 않고, '왜 이 전략이 시장에서 유효할 것인가?'라는 근본적인 질문에 답할 수 있어야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;철저하고 보수적인 검증:&lt;/b&gt; 백테스팅은 필수적이지만, 그 결과를 맹신해서는 안 됩니다. 과거 데이터에만 과도하게 맞춰진 전략(과최적화, Overfitting)은 실제 시장에서 처참한 실패로 이어질 수 있습니다. 다양한 시장 국면을 포함하여 테스트하고, 수수료와 슬리피지를 현실적으로 반영하며, 실전 투입 전 반드시 충분한 기간의 가상매매를 통해 안정성을 검증해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;체계적인 리스크 관리 내재화:&lt;/b&gt; AI는 수익을 극대화하는 방법을 학습할 수는 있지만, 리스크를 관리하는 판단은 인간이 시스템에 명확하게 규칙으로 부여해야 합니다. 개별 종목의 최대 비중, 전체 포트폴리오의 손절매(Stop-loss) 기준, 현금 비중 유지 등 견고한 리스크 관리 규칙을 시스템의 최우선 순위로 내재화해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지속적인 학습과 개선:&lt;/b&gt; 시장은 살아있는 유기체처럼 끊임없이 변화합니다. 한때 성공적이었던 전략도 시간이 지나면 유효성을 잃을 수 있습니다. 따라서 자신의 시스템을 방치해서는 안 되며, 정기적으로 성과를 모니터링하고, 시장의 구조적 변화에 맞춰 전략을 수정하거나 모델을 재학습시키는 등 지속적인 학습과 개선의 노력이 동반되어야 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;C. 미래 전망&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 기반 자동매매의 미래는 더욱 개인화되고 지능화된 방향으로 발전할 것입니다. 특히 ChatGPT와 같은 거대 언어 모델(LLM)이 API와 결합되면서, 개발 패러다임에 새로운 변화를 가져오고 있습니다. 이미 한국투자증권은 LLM 환경에서 자사의 API를 쉽게 활용할 수 있는 샘플 코드를 제공하고 있으며 &lt;span&gt;22&lt;/span&gt;, 이는 미래에 투자자가 자연어(일상 언어)로 &quot;성장성이 높고 부채 비율이 낮은 IT 종목으로 포트폴리오를 구성하고, 20일 이동평균선 아래로 떨어지면 매도해줘&quot;라고 명령하면, AI가 이를 코드로 변환하고 자동매매 전략을 생성하는 시대로의 발전을 예고합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, AI 자동매매는 더 이상 소수 전문가의 영역이 아닌, 준비된 개인 투자자에게 주어진 강력한 기회입니다. 본 보고서에서 제시된 심층적인 분석과 가이드를 바탕으로 자신의 역량과 목표에 맞는 최적의 경로를 선택하고, 기술적 원리와 법적 테두리를 명확히 이해하며, 체계적인 원칙에 따라 신중하게 접근한다면, AI는 성공적인 투자를 위한 신뢰할 수 있는 파트너가 될 수 있을 것입니다.&lt;/p&gt;</description>
      <category>금융 관련</category>
      <category>ai 투자</category>
      <category>자동매매</category>
      <category>주식투자</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/147</guid>
      <comments>https://islet2.tistory.com/147#entry147comment</comments>
      <pubDate>Fri, 24 Oct 2025 08:58:31 +0900</pubDate>
    </item>
    <item>
      <title>gcc(c 컴파일러) 사용 옵션 정리</title>
      <link>https://islet2.tistory.com/146</link>
      <description>&lt;h1 id=&quot;gcc&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;GCC 주요 옵션 설명과 예제&lt;/h1&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;우분투 등 리눅스 환경에서 C 프로그램을 컴파일할 때 주로 사용하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;gcc&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴파일러 주요 옵션을 간단한 예제와 함께 소개합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-o&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 출력 파일 이름 지정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본적으로 컴파일하면 실행 파일 이름이&lt;span&gt;&amp;nbsp;&lt;/span&gt;a.out&lt;span&gt;&amp;nbsp;&lt;/span&gt;입니다.&lt;/li&gt;
&lt;li&gt;-o&lt;span&gt;&amp;nbsp;&lt;/span&gt;옵션으로 원하는 이름으로 실행 파일을 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1);&quot;&gt;gcc hello.c -o hello &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1);&quot;&gt;./hello&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-Wall&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 모든 경고 메시지 보기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;경고 메시지를 띄워 코드 문제점을 미리 파악할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1); letter-spacing: 0px;&quot;&gt;gcc -Wall main.c -o main&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-g&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 디버깅 정보 포함&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;gdb 같은 디버거에서 변수 값 추적, 중단점 설정에 필요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1); letter-spacing: 0px;&quot;&gt;gcc -g program.c -o program&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-c&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 개별 오브젝트 파일 생성&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 소스파일을 나누어 컴파일 하고 링크할 때 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1); letter-spacing: 0px;&quot;&gt;gcc -c file1.c &lt;/span&gt;&lt;span style=&quot;color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1); letter-spacing: 0px;&quot;&gt;gcc -c file2.c gcc file1.o file2.o -o app&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-O,&lt;span&gt;&amp;nbsp;&lt;/span&gt;-O2,&lt;span&gt;&amp;nbsp;&lt;/span&gt;-O3&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 최적화 레벨 지정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;성능을 높이기 위해 컴파일러가 코드를 최적화 합니다.&lt;/li&gt;
&lt;li&gt;숫자가 높을수록 더 강한 최적화가 적용되지만, 컴파일 시간이 더 길어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot;&gt;&lt;span style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: #4d4d4c; letter-spacing: 0px; font-size: 1.12em;&quot;&gt;gcc -O2 myprog.c -o myprog&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-I&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 헤더 파일 경로 추가&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 위치 외에 다른 헤더파일이 있을 때 경로를 지정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: #4d4d4c; letter-spacing: 0px;&quot;&gt;gcc -I./include main.c -o main&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-L와&lt;span&gt;&amp;nbsp;&lt;/span&gt;-l&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 라이브러리 경로 및 링크&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 라이브러리를 사용할 때 경로(-L)와 라이브러리명(-l)을 지정합니다.&lt;/li&gt;
&lt;li&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;-lm은 수학 라이브러리 링크&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1); letter-spacing: 0px;&quot;&gt;gcc main.c -L/usr/lib -lm -o main&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;&quot; style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;8.&lt;span&gt;&amp;nbsp;&lt;/span&gt;-E&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 전처리만 수행&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include와 매크로 확장까지 수행하여 결과를 출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: oklch(0.6898 0.027 109.55 / 0.1); color: oklch(0.9296 0.007 106.53);&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47);&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #4d4d4c; background-color: oklch(0.6898 0.027 109.55 / 0.1); letter-spacing: 0px;&quot;&gt;gcc -E debug.c -o debug.i&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주요 옵션을 상황에 맞춰 사용하면 최적화된 컴파일 작업이 가능합니다.&lt;/p&gt;</description>
      <category>IT 관련/유틸리티</category>
      <category>C언어</category>
      <category>C컴파일러</category>
      <category>GCC</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/146</guid>
      <comments>https://islet2.tistory.com/146#entry146comment</comments>
      <pubDate>Mon, 13 Oct 2025 10:53:28 +0900</pubDate>
    </item>
    <item>
      <title>vi 에디터 사용법</title>
      <link>https://islet2.tistory.com/145</link>
      <description>&lt;p&gt;vi(vim) 에디터는 &lt;strong&gt;명령 모드(Normal Mode)&lt;/strong&gt;와 &lt;strong&gt;입력 모드(Insert Mode)&lt;/strong&gt;를 오가며 문서를 편집하는 것이 핵심입니다. 처음에는 이 개념이 낯설지만, 익숙해지면 매우 강력하고 빠른 편집이 가능합니다.&lt;/p&gt;
&lt;h2&gt;vi의 두 가지 핵심 모드&lt;/h2&gt;
&lt;p&gt;명령 모드 (Normal Mode)&lt;/p&gt;
&lt;p&gt;에디터를 처음 실행했을 때의 기본 상태입니다.&lt;/p&gt;
&lt;p&gt;텍스트 입력은 불가능하며, 커서 이동, 복사, 붙여넣기, 삭제 등 각종 명령을 내리는 모드입니다.&lt;/p&gt;
&lt;p&gt;입력 모드에서 Esc 키를 누르면 이 모드로 돌아옵니다.&lt;/p&gt;
&lt;p&gt;입력 모드 (Insert Mode)&lt;/p&gt;
&lt;p&gt;우리가 일반적으로 생각하는 텍스트 에디터처럼 글자를 입력하고 수정하는 모드입니다.&lt;/p&gt;
&lt;p&gt;명령 모드에서 i, a, o 등의 키를 눌러 진입합니다.&lt;/p&gt;
&lt;h2&gt;필수 사용법 (시작부터 저장까지)&lt;/h2&gt;
&lt;p&gt;구분    명령어    설명&lt;br&gt;시작하기    vi 파일이름    파일이름으로 새 파일을 열거나 기존 파일을 엽니다.&lt;br&gt;모드 전환    Esc    입력 모드에서 명령 모드로 전환합니다. (가장 중요!)&lt;br&gt;i    현재 커서 앞에 입력을 시작합니다. (입력 모드 전환)&lt;br&gt;a    현재 커서 뒤에 입력을 시작합니다. (입력 모드 전환)&lt;br&gt;저장/종료    :    명령줄 모드로 진입합니다. (명령 모드 상태에서 입력)&lt;br&gt;:w    저장 (write)&lt;br&gt;:q    종료 (quit)&lt;br&gt;:wq    저장 후 종료&lt;br&gt;:q!    저장하지 않고 강제 종료&lt;/p&gt;
&lt;p&gt;Sheets로 내보내기&lt;/p&gt;
&lt;h2&gt;기본 편집 명령어 (명령 모드에서 사용)&lt;/h2&gt;
&lt;p&gt;구분    명령어    설명&lt;br&gt;이동    h, j, k, l    좌, 하, 상, 우 커서 이동 (방향키도 사용 가능)&lt;br&gt;삭제    x    커서가 위치한 곳의 글자 하나를 삭제합니다.&lt;br&gt;dd    커서가 위치한 한 줄 전체를 삭제합니다.&lt;br&gt;복사    yy    커서가 위치한 한 줄 전체를 복사합니다. (Yank)&lt;br&gt;붙여넣기    p    복사하거나 삭제한 내용을 커서 다음 줄에 붙여넣습니다. (Paste)&lt;br&gt;실행 취소    u    방금 실행한 명령을 취소합니다. (Undo)&lt;/p&gt;
&lt;p&gt;Sheets로 내보내기&lt;/p&gt;
&lt;h2&gt;간단한 사용 예시&lt;/h2&gt;
&lt;p&gt;터미널에 vi test.txt를 입력하여 test.txt 파일을 엽니다. (현재 명령 모드)&lt;/p&gt;
&lt;p&gt;키보드에서 &lt;strong&gt;i&lt;/strong&gt;를 눌러 입력 모드로 전환합니다.&lt;/p&gt;
&lt;p&gt;&amp;quot;Hello, world!&amp;quot;를 입력합니다.&lt;/p&gt;
&lt;p&gt;Esc 키를 눌러 다시 명령 모드로 돌아옵니다.&lt;/p&gt;
&lt;p&gt;:wq 를 차례대로 입력하고 Enter를 누르면, 파일이 저장되고 vi 에디터가 종료됩니다.&lt;/p&gt;</description>
      <category>IT 관련/기타</category>
      <category>vi</category>
      <category>vi에디터</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/145</guid>
      <comments>https://islet2.tistory.com/145#entry145comment</comments>
      <pubDate>Sun, 28 Sep 2025 20:05:31 +0900</pubDate>
    </item>
    <item>
      <title>시놀로지 Docker Calibre 서버 외부 웹 업로드 오류 해결 가이드</title>
      <link>https://islet2.tistory.com/144</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 가이드는 시놀로지 NAS의 Docker(Container Manager)를 통해 Calibre 또는 Calibre-Web 서버를 설치하고, 역방향 프록시로 외부 접속을 설정한 사용자가 흔히 겪는 &lt;b&gt;파일 업로드 실패 문제&lt;/b&gt;를 해결하는 것을 목표로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 핵심 원인은 크게 두 가지입니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Nginx의 업로드 용량 제한:&lt;/b&gt; 시놀로지 웹서버(Nginx)가 기본적으로 큰 파일의 업로드를 허용하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Docker 컨테이너의 파일 접근 권한:&lt;/b&gt; Docker 안의 Calibre 프로세스가 NAS 저장소의 폴더에 파일을 쓸 권한이 없습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 절차를 순서대로 진행하면 이 두 가지 문제를 모두 해결할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1단계: Nginx 설정 수정 (업로드 용량 제한 해제)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단계는 SSH(터미널)를 통해 NAS에 접속하여 진행합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;SSH 접속&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PC에서 터미널 프로그램(PuTTY, Terminal 등)을 사용하여 관리자 계정으로 시놀로지 NAS에 접속합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nginx 설정 파일 열기&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vi 에디터를 사용하여 Nginx 설정 파일을 엽니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwjj-468l_uPAxUAAAAAHQAAAAAQ0AM&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;sudo vi /etc/nginx/nginx.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;업로드 용량 설정 추가&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;i 키를 눌러 &lt;b&gt;입력 모드&lt;/b&gt;로 전환합니다.&lt;/li&gt;
&lt;li&gt;http { ... } 블록 안의 적당한 위치에 아래 코드를 추가합니다. (1024m은 1GB를 의미하며, 필요에 따라 2048m 등으로 조절할 수 있습니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwjj-468l_uPAxUAAAAAHQAAAAAQ0QM&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;http {
    # ... 다른 설정들 ...
    client_max_body_size 1024m;
    # ... 다른 설정들 ...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Esc 키를 눌러 &lt;b&gt;명령 모드&lt;/b&gt;로 돌아온 뒤, :wq를 입력하고 Enter를 눌러 파일을 저장하고 종료합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nginx 설정 문법 검사&lt;/b&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;/ul&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwjj-468l_uPAxUAAAAAHQAAAAAQ0gM&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;sudo nginx -t
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[warn] 경고는 무시해도 괜찮습니다. 마지막에 syntax is ok와 test is successful 메시지가 나타나면 성공입니다. 만약 [error]가 발생하면 3번 단계로 돌아가 오타가 없는지 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nginx 서비스 재시작&lt;/b&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;/ul&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwjj-468l_uPAxUAAAAAHQAAAAAQ0wM&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;sudo synopkg restart WebStation
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 명령어가 Web Station 패키지 전체를 재시작하므로 가장 확실합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2단계: Docker 컨테이너 권한 문제 해결 (PUID/PGID 설정)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단계는 시놀로지 DSM의 &lt;b&gt;Container Manager&lt;/b&gt; GUI를 통해 진행합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;사용자 ID(PUID, PGID) 확인&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH(터미널) 창에 id 명령어를 입력하여 현재 접속한 관리자 계정의 uid와 gid 번호를 확인하고 기억해 둡니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwjj-468l_uPAxUAAAAAHQAAAAAQ1AM&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 예시 출력
uid=1026(jongmin) gid=100(users)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 경우 &lt;b&gt;PUID&lt;/b&gt;는 1026, &lt;b&gt;PGID&lt;/b&gt;는 100이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Container Manager에서 컨테이너 복제 및 수정&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Container Manager는 생성된 컨테이너의 중요 설정을 직접 편집하는 대신, &lt;b&gt;복제&lt;/b&gt;를 통해 새로 만드는 방식을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;DSM에서 &lt;b&gt;Container Manager&lt;/b&gt;를 실행하고 &lt;b&gt;[컨테이너]&lt;/b&gt; 탭으로 이동합니다.&lt;/li&gt;
&lt;li&gt;수정할 Calibre 컨테이너를 선택하고 **[작업] &amp;gt; [중지]**를 눌러 &lt;b&gt;컨테이너를 정지&lt;/b&gt;시킵니다.&lt;/li&gt;
&lt;li&gt;컨테이너가 중지되면, 다시 선택하고 **[작업] &amp;gt; [복제]**를 클릭합니다.&lt;/li&gt;
&lt;li&gt;컨테이너 설정 창이 나타나면, 하단의 &lt;b&gt;[고급 설정]&lt;/b&gt; 버튼을 클릭합니다.&lt;/li&gt;
&lt;li&gt;고급 설정 창에서 &lt;b&gt;[환경] 탭&lt;/b&gt;으로 이동합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;[추가]&lt;/b&gt; 버튼을 눌러 아래 두 환경 변수를 추가하거나, 이미 있다면 값을 수정합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변수:&lt;/b&gt; PUID / &lt;b&gt;값:&lt;/b&gt; 1번 단계에서 확인한 uid 번호 (예: 1026)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;변수:&lt;/b&gt; PGID / &lt;b&gt;값:&lt;/b&gt; 1번 단계에서 확인한 gid 번호 (예: 100)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;**[저장]**을 눌러 고급 설정을 닫고, 마법사를 완료하여 복제된 새 컨테이너를 생성합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최종 확인 및 정리&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;새로 생성된 컨테이너(이름 뒤에 2 등이 붙어있을 수 있음)를 &lt;b&gt;시작&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li&gt;Calibre에 접속하여 파일 업로드가 정상적으로 완료되는지 테스트합니다.&lt;/li&gt;
&lt;li&gt;테스트가 성공적이면, 기존에 사용하던 &lt;b&gt;원본 컨테이너는 삭제&lt;/b&gt;하여 중복 실행을 방지합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 모든 설정이 완료되었습니다.&lt;/p&gt;</description>
      <category>IT 관련/기타</category>
      <category>calibre</category>
      <category>시놀리지</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/144</guid>
      <comments>https://islet2.tistory.com/144#entry144comment</comments>
      <pubDate>Sun, 28 Sep 2025 20:03:47 +0900</pubDate>
    </item>
    <item>
      <title>입출력단위 '토큰(Token)'에 대하여</title>
      <link>https://islet2.tistory.com/143</link>
      <description>&lt;h3 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;&lt;b&gt;토큰&lt;/b&gt;은 AI, 특히 언어 모델이 텍스트를 이해하고 처리하는 &lt;b&gt;기본 단위&lt;/b&gt;라고 생각하면 쉬워요. 사람이 글을 읽을 때 단어나 어절 단위로 끊어 읽는 것처럼, AI도 문장을 그대로 통째로 이해하는 것이 아니라 잘게 쪼개진 '토큰' 단위로 분석하고 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, &quot;나는 학교에 갑니다.&quot;라는 문장이 있다면, AI는 이것을 다음과 같이 여러 개의 토큰으로 나눌 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[&quot;나&quot;, &quot;는&quot;, &quot;학교&quot;, &quot;에&quot;, &quot;갑니다&quot;, &quot;.&quot;]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 각각의 &quot;나&quot;, &quot;는&quot;, &quot;학교&quot; 등이 바로 하나의 토큰이 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 토큰을 사용할까요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI가 문장을 토큰 단위로 나누는 데에는 몇 가지 중요한 이유가 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;효율적인 처리&lt;/b&gt;: 컴퓨터는 글자보다 숫자를 다루는 데 훨씬 효율적입니다. AI는 각 토큰을 고유한 숫자(ID)로 변환한 다음, 이 숫자들의 배열(벡터)을 이용해 계산하고 학습합니다. 이렇게 하면 방대한 양의 텍스트 데이터를 효율적으로 처리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미 파악&lt;/b&gt;: 단어나 형태소 단위로 쪼개진 토큰들은 각각의 의미를 파악하는 데 도움이 됩니다. AI는 수많은 텍스트를 학습하면서 토큰들 사이의 관계(예: '학교' 다음에는 '에'가 올 확률이 높다)를 파악하고, 이를 통해 문맥을 이해하고 자연스러운 문장을 만들어낼 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 단어 대응&lt;/b&gt;: '단어' 단위로만 나누면 사전에 없는 신조어나 오타를 처리하기 어렵습니다. 하지만 '서브워드(subword)'라는 더 작은 단위로 토큰을 만들면, &quot;챗GPT&quot; 같은 새로운 단어도 &quot;챗&quot;과 &quot;GPT&quot;로 나누어 의미를 유추할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;토큰과 글자/단어의 관계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히 말하면 토큰은 글자나 단어와 항상 1:1로 대응되지는 않습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;영어&lt;/b&gt;: 보통 1개 토큰이 약 4개의 알파벳에 해당하고, 단어의 3/4 정도를 차지합니다. 예를 들어 'token'이라는 단어는 1개의 토큰이지만, 'tokenization'은 'token'과 'ization'이라는 2개의 토큰으로 나뉠 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;한국어&lt;/b&gt;: 조사가 발달하고 단어 조합이 자유로운 특성 때문에, 영어보다 더 잘게 쪼개지는 경향이 있습니다. 따라서 같은 내용의 글이라도 한국어가 영어보다 더 많은 토큰을 사용하게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 &lt;b&gt;토큰&lt;/b&gt;은 AI가 세상을 이해하는 언어의 '벽돌'과도 같습니다. 이 벽돌들을 조합하여 문장의 의미를 이해하고, 새로운 문장을 창조해내는 것이죠. AI 모델의 성능을 이야기할 때 &quot;처리할 수 있는 토큰의 수가 많다&quot;는 것은 한 번에 더 길고 복잡한 글을 이해하고 생성할 수 있다는 의미가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;토큰의 크기를 연습할 수 있는 사이트에 방문해서 확인하시면 개념이 좀 생기실 것입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tiktokenizer.vercel.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tiktokenizer.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 관련/AI</category>
      <category>token</category>
      <category>토큰</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/143</guid>
      <comments>https://islet2.tistory.com/143#entry143comment</comments>
      <pubDate>Wed, 3 Sep 2025 15:19:35 +0900</pubDate>
    </item>
    <item>
      <title>nano 에디터 보다 쉬운 micro 에디터</title>
      <link>https://islet2.tistory.com/141</link>
      <description>&lt;h3 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;터미널 환경에서 nano보다 기능이 많으면서도 비교적 배우기 쉬운 에디터를 원한다면 &lt;b&gt;Micro&lt;/b&gt;를 추천합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Micro Editor&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Micro는 nano와 비슷한 키보드 단축키(Ctrl-S 저장, Ctrl-Q 종료 등)를 사용하면서도 마우스 지원, 여러 파일 동시 편집, 문법 강조 등 현대적인 기능을 많이 지원합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;직관적인 단축키&lt;/b&gt;: Ctrl 키를 사용하는 표준적인 단축키를 지원하여 배우기 쉽습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;편리한 기능&lt;/b&gt;: 마우스 클릭 및 드래그, 다중 커서, 분할 화면 등을 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;쉬운 설치&lt;/b&gt;: 간단한 스크립트로 쉽게 설치할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;설치 및 실행 방법&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;아래 명령어를 터미널에 붙여넣어 Micro를 설치합니다.설치 후 생성된 micro 파일을 실행 가능한 경로로 옮겨줍니다
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;curl https://getmic.ro | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot;&gt;&lt;code&gt;sudo mv micro /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;micro 명령어로 파일을 열 수 있습니다.
&lt;div&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;micro test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;마우스 이용 및 ctrl-c, ctrl-v, ctrl-x 등이 이용이 가능하며, ctrl-q 로 종료. ctrl-g 클릭시 help 화면 표출&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;※ 한글 입력이 안될 시 해결 방법: 한국어 언어 팩 설치 및 로케일 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 한국어 언어 팩 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 우분투 시스템에 한국어 언어 지원에 필요한 패키지를 설치합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install language-pack-ko
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 시스템 로케일 생성 및 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치된 언어 팩을 기반으로 한국어 로케일을 시스템에 생성하고 기본값으로 설정합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;# 한국어(ko_KR.UTF-8) 로케일을 생성합니다.
sudo locale-gen ko_KR.UTF-8

# 생성된 로케일을 시스템의 기본 로케일로 설정합니다.
sudo update-locale LANG=ko_KR.UTF-8
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 변경사항 적용 (중요)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로케일 설정은 새로운 셸(터미널) 세션부터 적용됩니다. &lt;b&gt;현재 열려있는 모든 WSL 터미널 창을 닫고 새로 열어주세요.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 확실한 방법은 윈도우의 PowerShell 이나 CMD에서 아래 명령어로 WSL을 완전히 재시작하는 것입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;PowerShell 또는 cmd 창&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;wsl --shutdown
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 실행한 뒤, 다시 우분투 터미널을 실행하면 변경된 설정이 완벽하게 적용됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널을 새로 연 뒤, 아래 명령어를 입력하여 로케일 설정을 확인합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;locale
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 결과에서 LANG=&quot;ko_KR.UTF-8&quot; 와 같이 UTF-8 기반의 한국어 설정이 보이면 정상적으로 적용된 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 micro 에디터를 실행하여 한글 입력을 테스트해 보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 위 방법으로도 해결되지 않는다면, 윈도우 자체의 한글 입력기(IME)가 정상 동작하는지 먼저 확인해 보시는 것이 좋습니다.&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;micro는 터미널 환경에서 사용하는 텍스트 에디터지만, 사용법이 현대적인 GUI 에디터(메모장, VS Code 등)와 매우 비슷하여 nano보다 직관적이고 vim보다 배우기 쉬운 것이 특징입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;micro 에디터의 장점&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;직관적인 단축키&lt;/b&gt;: 대부분의 기능이 Ctrl 키 조합으로 이루어집니다. 파일을 저장하는 Ctrl+S, 복사하는 Ctrl+C, 종료하는 Ctrl+Q 등 별도의 학습 없이도 예상하는 대로 동작합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마우스 완벽 지원&lt;/b&gt;: 터미널 환경임에도 마우스 클릭으로 커서를 이동하거나, 드래그하여 텍스트를 선택하고, 휠로 스크롤하는 등 마우스 사용이 매우 자연스럽습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;강력한 현대적 기능&lt;/b&gt;: 터미널 기반 에디터라고 믿기 힘든 편리한 기능들을 기본적으로 제공합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;구문 강조(Syntax Highlighting)&lt;/b&gt;: 200개 이상의 프로그래밍 언어 문법을 자동으로 인식하여 색상으로 구분해 줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 커서(Multiple Cursors)&lt;/b&gt;: Ctrl 키를 누른 채 여러 곳을 클릭하면, 여러 위치의 텍스트를 동시에 수정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;화면 분할(Split Panes)&lt;/b&gt;: 수직 또는 수평으로 화면을 분할하여 여러 파일을 동시에 보며 작업할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;플러그인을 통한 확장&lt;/b&gt;: 추가 기능을 설치하여 에디터를 더 강력하게 만들 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;쉬운 설치&lt;/b&gt;: 별도의 복잡한 의존성 없이 단일 실행 파일로 제공되어 설치가 매우 간편합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 사용법 (핵심 단축키)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;micro의 거의 모든 기능은 단축키와 커맨드 모드를 통해 사용할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;파일 실행 및 종료&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;파일 열기: micro &amp;lt;파일명&amp;gt;&lt;/li&gt;
&lt;li&gt;새 파일: micro&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;필수 단축키&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;기능&lt;/td&gt;
&lt;td&gt;단축키&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;저장&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Ctrl + S&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;현재 파일을 저장합니다. (가장 중요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;종료&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Ctrl + Q&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;에디터를 종료합니다. 변경사항이 있으면 저장할지 묻습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;복사&lt;/td&gt;
&lt;td&gt;Ctrl + C&lt;/td&gt;
&lt;td&gt;선택한 텍스트를 복사합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;잘라내기&lt;/td&gt;
&lt;td&gt;Ctrl + X&lt;/td&gt;
&lt;td&gt;선택한 텍스트를 잘라냅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;붙여넣기&lt;/td&gt;
&lt;td&gt;Ctrl + V&lt;/td&gt;
&lt;td&gt;복사하거나 잘라낸 텍스트를 붙여넣습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;실행 취소&lt;/td&gt;
&lt;td&gt;Ctrl + Z&lt;/td&gt;
&lt;td&gt;마지막 작업을 되돌립니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;다시 실행&lt;/td&gt;
&lt;td&gt;Ctrl + Y&lt;/td&gt;
&lt;td&gt;되돌렸던 작업을 다시 실행합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;검색&lt;/td&gt;
&lt;td&gt;Ctrl + F&lt;/td&gt;
&lt;td&gt;파일 내에서 텍스트를 검색합니다. (아래쪽에 입력창이 열림)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;바꾸기&lt;/td&gt;
&lt;td&gt;Ctrl + R&lt;/td&gt;
&lt;td&gt;특정 텍스트를 찾아 다른 텍스트로 바꿉니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;한 줄 복제&lt;/td&gt;
&lt;td&gt;Ctrl + D&lt;/td&gt;
&lt;td&gt;커서가 위치한 줄을 그대로 아래에 복제합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;커맨드 모드&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Ctrl + E&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;모든 명령어를 직접 입력할 수 있는 입력창을 엽니다. (핵심 기능)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;핵심 기능: 커맨드 모드 (Ctrl + E)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ctrl + E를 누르면 화면 하단에 명령어 입력창이 나타납니다. 여기에 특정 명령어를 입력하여 micro의 모든 기능을 사용할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;화면 분할&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vsplit &amp;lt;파일명&amp;gt;: 화면을 &lt;b&gt;수직&lt;/b&gt;으로 분할하여 다른 파일을 함께 봅니다.&lt;/li&gt;
&lt;li&gt;hsplit &amp;lt;파일명&amp;gt;: 화면을 &lt;b&gt;수평&lt;/b&gt;으로 분할합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도움말 보기&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;help: micro의 모든 기능과 단축키에 대한 도움말을 볼 수 있습니다. (가장 유용)&lt;/li&gt;
&lt;li&gt;help defaultkeys: 기본 단축키 목록을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약하자면, micro는 터미널 환경이 낯선 사용자도 GUI 에디터처럼 쉽게 적응할 수 있도록 설계된 강력한 에디터입니다. nano의 단순함과 현대적인 편집기의 편리함을 모두 갖추고 있어 매우 추천할 만합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;추가 사항&amp;gt; - 중요&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;micro 에디터에서 복사후 붙여넣기시에 한글이 깨질 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이는 에디터가 윈도우의 클립보드와 다른 방식으로 작동해서 그런 현상이 나옵니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 내용을 추가 해 주세요.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;sudo nano ~/.config/micro/settings.json&amp;nbsp; 파일을 열고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 내용을 추가해 주세요.&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;clipboard&quot; : &quot;terminal&quot;&lt;br /&gt;}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장 후 종료. micro 에디터 재실행하면 복사 붙여넣기시 한글이 깨지지 않을 것입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 관련/우분투(Ubuntu) 이것저것</category>
      <category>editer</category>
      <category>micro</category>
      <category>nano</category>
      <category>ububtu</category>
      <category>마이크로에디터</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/141</guid>
      <comments>https://islet2.tistory.com/141#entry141comment</comments>
      <pubDate>Tue, 26 Aug 2025 15:01:54 +0900</pubDate>
    </item>
    <item>
      <title>ubuntu에 미니콘다 설치 및 사용 방법</title>
      <link>https://islet2.tistory.com/140</link>
      <description>&lt;h2&gt;우분투에 미니콘다 설치 및 사용 방법&lt;/h2&gt;
&lt;h3&gt;1. 설치 스크립트 다운로드&lt;/h3&gt;
&lt;p&gt;터미널을 열고 wget 명령어를 이용해 미니콘다 최신 버전 설치 스크립트를 다운로드합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;2. 설치 스크립트 실행&lt;/h3&gt;
&lt;p&gt;다운로드가 완료되면 bash 명령어로 설치를 진행합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bash Miniconda3-latest-Linux-x86_64.sh&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;설치 과정에서 라이선스 동의(yes), 설치 경로 확인(기본값 추천), 그리고 conda init 실행 여부(yes)를 묻는 메시지가 나옵니다. 대부분 기본 설정을 따라가면 됩니다.&lt;/p&gt;
&lt;h3&gt;3. 터미널 재시작&lt;/h3&gt;
&lt;p&gt;설치가 끝나면 변경사항을 적용하기 위해 터미널을 껐다가 다시 켜거나 source ~/.bashrc 명령을 실행합니다. 터미널 프롬프트 앞에 (base)가 보이면 성공적으로 설치된 것입니다.&lt;/p&gt;
&lt;h3&gt;4. 가상 환경 생성 및 사용&lt;/h3&gt;
&lt;p&gt;이제 conda 명령어를 사용하여 프로젝트별로 독립된 가상 환경을 만들고 사용할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# &amp;#39;myenv&amp;#39;라는 이름의 파이썬 3.10 가상 환경 생성
conda create --name myenv python=3.10

# 가상 환경 활성화
conda activate myenv

# 가상 환경 비활성화
conda deactivate&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;conda 명령어 오류시 해결 방법&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;셸 설정 파일 열기&lt;br&gt;터미널에 아래 명령어를 입력하여 셸 설정 파일(.bashrc)을 엽니다.&lt;pre&gt;&lt;code&gt;nano ~/.bashrc&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Conda 경로 추가&lt;br&gt;파일의 맨 아래로 이동하여 아래 내용을 복사하여 붙여넣습니다. your_username 부분은 본인의 사용자 이름(예: jongmin)으로 수정해야 합니다. 보통 미니콘다는 홈 디렉토리 아래에 miniconda3 폴더로 설치됩니다.&lt;pre&gt;&lt;code&gt;export PATH=&amp;quot;/home/your_username/miniconda3/bin:$PATH&amp;quot;&lt;/code&gt;&lt;/pre&gt;(예: export PATH=&amp;quot;/home/jongmin/miniconda3/bin:$PATH&amp;quot;)&lt;/li&gt;
&lt;li&gt;저장하고 종료&lt;br&gt;nano 편집기 기준으로 Ctrl + X → Y → Enter 키를 순서대로 눌러 저장하고 나옵니다.&lt;/li&gt;
&lt;li&gt;설정 적용&lt;br&gt;마지막으로, 아래 명령어를 실행하여 변경된 설정을 바로 적용하거나 터미널을 껐다가 다시 켜면 됩니다.&lt;pre&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;참고사항&lt;/h2&gt;
conda init을 실행한 후에는 터미널을 열 때마다 기본적으로 (base)가 표시됩니다.  (base)는 콘다의 기본(base) 가상 환경이 자동으로 활성화되었다는 의미입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;(base) 자동 활성화 끄는 방법&lt;/h2&gt;
&lt;p&gt;터미널을 열 때 (base)가 자동으로 활성화되는 것을 원하지 않는다면, 아래 명령어로 설정을 변경할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;conda config --set auto_activate false&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이 설정을 적용한 뒤 터미널을 새로 열면 (base)가 나타나지 않습니다. 그 후에는 conda activate &amp;lt;환경이름&amp;gt; 명령어를 사용해야만 가상 환경이 활성화됩니다.&lt;br&gt;(base)는 미니콘다(Miniconda)나 아나콘다(Anaconda)를 설치할 때 기본으로 생성되는 최상위 환경입니다.&lt;br&gt;컴퓨터의 &lt;strong&gt;C 드라이브(시스템 드라이브)&lt;/strong&gt;와 같다고 생각하면 쉽습니다. 운영체제(Windows, macOS)의 핵심 파일들이 C 드라이브에 설치되듯이, 콘다를 관리하고 실행하는 데 필요한 핵심 프로그램들이 (base) 환경에 설치됩니다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;•    기본 환경: 콘다를 설치하면 가장 먼저 생기는 기본 작업 공간입니다.&lt;br&gt;•    콘다의 집: conda 명령어 자체를 포함하여, 가상 환경을 만들고 패키지를 관리하는 데 필요한 모든 도구들이 들어 있습니다.&lt;br&gt;•    작업 공간으로 부적합: 중요한 시스템 파일이 있는 C 드라이브에 개인 파일이나 프로그램을 마구 설치하지 않는 것처럼, (base) 환경에 직접 프로젝트 관련 패키지(예: pandas, flask 등)를 설치하는 것은 권장되지 않습니다. (base) 환경이 오염되어 버전 충돌이 발생하거나 최악의 경우 콘다 자체가 망가질 수 있기 때문입니다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;base는 깨끗하게 유지하고, 각 프로젝트마다 별도의 독립된 가상 환경을 만들어 사용하는 것이 가장 좋은 방법입니다.&lt;/p&gt;</description>
      <category>IT 관련/우분투(Ubuntu) 이것저것</category>
      <category>conda</category>
      <category>miniconda</category>
      <category>미니콘다</category>
      <category>아나콘다</category>
      <author>islet2</author>
      <guid isPermaLink="true">https://islet2.tistory.com/140</guid>
      <comments>https://islet2.tistory.com/140#entry140comment</comments>
      <pubDate>Mon, 25 Aug 2025 11:15:00 +0900</pubDate>
    </item>
  </channel>
</rss>