반응형

2026년 9~10월 새로 나온 AI 모델 총정리 — Claude 5.5, GPT-6.1 Sol, Gemini 4 Argon, DeepSeek V4.1까지

2026년 9월부터 10월 사이, 주요 AI 회사들이 거의 매주 새 모델을 내놓았습니다. Anthropic은 Claude 5.5 시리즈 세 모델을 3주 간격으로 출시했고, OpenAI는 GPT-6.1 Sol, 구글은 Gemini 4 Argon을 공개했습니다.

이름도 비슷하고 숫자도 복잡해서 "그래서 뭐가 새로 나왔고, 나는 뭘 쓰면 되지?"가 헷갈리기 쉽습니다. 이 글은 이 기간에 나온 주요 모델을 회사별로 정리하고, 가격과 특징을 비교한 뒤, 용도별로 어떤 모델을 고르면 좋을지 정리했습니다.

📌 기준 시점: 2026년 10월 25일. 각 회사의 공식 발표를 우선으로 정리했고, 공식 자료에서 확인하지 못한 내용은 따로 표시했습니다.
⚠️ AI 모델은 몇 주 단위로 바뀝니다. 가격과 사용 조건은 각 회사의 공식 페이지에서 최신 내용을 확인하세요.


한눈에 보기: 출시 타임라인

날짜 회사 모델 한 줄 요약
9월 1일 Anthropic Claude Fable 5.1 Anthropic의 최상위 모델 업데이트. 캐시 가격 75% 인하
9월 22일 Anthropic Claude Opus 5.5 Claude 5.5 시리즈 첫 모델. Fable 5.1급 성능을 더 싸게
9월 28일 Anthropic Claude Sonnet 5.5 Opus 5.5에 가까운 성능, 가격은 절반
9월 29일 OpenAI GPT-6.1 Sol GPT-6 Astra에 가까운 성능, 가격은 5분의 1
10월 7일 Anthropic Claude Haiku 5.5 가장 저렴한 Claude. 이전 Haiku보다 평균 비용 약 75% 절감
10월 13일 Google Gemini 4 Argon 구글의 새 최상위 모델. Gemini 앱 유료 구독자에게 출시
10월 17일 DeepSeek DeepSeek V4.1 Flash (1017) 오픈 웨이트 모델 업데이트 (MIT 라이선스)

이번 흐름의 공통점은 "비슷한 성능을 더 싸고 빠르게"입니다. 최고 성능 경쟁만큼이나 같은 성능을 얼마나 저렴하게 제공하느냐가 중요한 경쟁 포인트가 됐습니다.


1. Anthropic: Claude 5.5 시리즈

Anthropic은 한 달 사이에 최상위 모델 업데이트(Fable 5.1)와 Claude 5.5 시리즈 세 모델(Opus, Sonnet, Haiku)을 모두 내놓았습니다.

Claude 모델 구성

모델 위치 특징
Fable 최상위 가장 어려운 추론, 오래 걸리는 에이전트 작업, 연구용
Opus 상위 복잡한 코딩, 컴퓨터 사용, 전문 업무
Sonnet 중간 성능과 가격의 균형. 일상 업무와 코딩
Haiku 경량 가장 빠르고 저렴. 대량 처리, 간단한 작업

Claude Fable 5.1 (9월 1일)

  • Anthropic이 일반에 제공하는 모델 중 가장 성능이 높은 모델입니다.
  • 입력·출력 가격(100만 토큰당 $10 / $50)은 이전 버전과 같지만, 캐시 읽기 가격을 75% 내려 $0.25로 낮췄습니다. 같은 자료를 반복해서 참고하는 에이전트 작업일수록 비용이 크게 줄어듭니다.
  • Anthropic은 일반적인 사용에서 약 25%, 에이전트 작업이 많은 경우 최대 45%까지 비용이 줄어든다고 밝혔습니다. 다만 외부 측정에서는 작업에 따라 오히려 비용이 늘었다는 결과도 있어, 내 작업에서 직접 확인하는 것이 좋습니다.

Claude Opus 5.5 (9월 22일)

  • Claude 5.5 시리즈의 첫 모델입니다.
  • Anthropic에 따르면 대부분의 작업에서 Fable 5.1 수준의 성능을 내면서, 이전 Opus 5보다 운영 비용이 40% 낮고 출력 속도가 30% 이상 빠릅니다.
  • 에이전트 코딩, 컴퓨터 사용, 문서 작업에 강하고, 프롬프트 인젝션(외부 문서에 숨겨진 악성 지시) 방어력이 높아졌다고 소개합니다.
  • 모델 ID: claude-opus-5-5

Claude Sonnet 5.5 (9월 28일)

  • Opus 5.5를 보완하는 더 빠르고 저렴한 모델입니다.
  • Anthropic이 공개한 벤치마크에서 일부 항목은 Opus 5.5와 거의 같습니다. 예를 들어 전문 업무 평가(GDPval-AA)는 Opus 5.5가 1846점, Sonnet 5.5가 1844점입니다. 터미널 작업 평가(Terminal-Bench 4.0)에서는 Sonnet 5.5(70.6%)가 Opus 5.5(66.4%)보다 높게 나왔습니다.
  • 가격은 Opus 5.5의 절반입니다.
  • 모델 ID: claude-sonnet-5-5

Claude Haiku 5.5 (10월 7일)

  • Claude 중 가장 빠르고 저렴한 모델입니다.
  • 입력 100만 토큰당 $0.10으로, 이전 Haiku 4.5($1)보다 토큰 가격이 크게 내려갔습니다. 다만 새 토크나이저가 같은 글을 더 많은 토큰으로 나누기 때문에, Anthropic은 실제 평균 비용 절감을 약 75%로 설명합니다.
  • 100만 토큰 컨텍스트를 지원하고, Haiku 중 처음으로 "생각의 깊이"(effort)를 조절할 수 있습니다.
  • 모델 ID: claude-haiku-5-5

2. OpenAI: GPT-6.1 Sol

GPT-6 모델 구성

모델 위치
GPT-6 Astra 최상위
GPT-6 Sol / GPT-6.1 Sol 중간
GPT-6 Luna 경량

GPT-6.1 Sol (9월 29일)

  • OpenAI 개발자 행사(DevDay)에서 공개됐습니다. GPT-6 Sol이 나온 지 약 1주일 만의 업데이트입니다.
  • OpenAI는 에이전트 코딩, 컴퓨터 사용, 전문 업무에서 최상위 모델인 GPT-6 Astra에 거의 근접한 성능을 내면서, 토큰 가격은 5분의 1이라고 밝혔습니다.
  • 낮은 추론 설정에서 사실 오류가 포함된 답변 비율이 11.4%에서 7.7%로 줄었다고 합니다.
  • ChatGPT 유료 플랜(Plus, Pro, Business, Enterprise, Edu)의 업무용 화면과 Codex에서 쓸 수 있습니다.

📌 기대를 모았던 GPT-6.1 Astra는 출시되지 않았습니다. 월스트리트저널은 내부 테스트에서 안전성 우려(사용자 허락 없이 작업을 진행하는 경향 등)가 발견되어 출시가 취소됐다고 보도했습니다.


3. Google: Gemini 4 Argon

Gemini 4 Argon (10월 13일)

  • 구글이 "가장 복잡한 작업을 처음부터 끝까지 처리하도록 설계된 최신 프런티어 모델"로 소개한 새 최상위 모델입니다.
  • 구글은 활용 예로 복잡한 재무 보고서 분석, 흩어진 자료를 모아 문서 만들기, 대화형 3D 모델 만들기를 들었습니다.
  • Gemini 앱의 Google AI Pro·Ultra 구독자에게 전 세계 동시에 제공되기 시작했습니다.
  • 일상적인 작업용으로는 Gemini 3.8 Flash(9월 출시)가 현재 주력 Flash 모델로 쓰이고 있습니다.

💡 구글의 터미널 코딩 도구도 바뀌었습니다. 무료·개인 사용자는 Gemini CLI 대신 Antigravity CLI를 써야 합니다. 자세한 내용은 Gemini CLI 설치 글을 참고하세요.


4. 오픈 웨이트 모델: DeepSeek V4.1 Flash

오픈 웨이트(open weights) 모델은 모델 파일을 공개해서 내 컴퓨터나 서버에 직접 설치해 쓸 수 있는 모델입니다. 데이터를 외부로 보내지 않아도 되고, 라이선스 범위 안에서 자유롭게 수정할 수 있습니다.

DeepSeek V4.1 Flash 1017 (10월 17일)

  • 중국 DeepSeek의 V4.1 Flash 모델 업데이트 버전(체크포인트)입니다. 구조는 그대로이고 성능이 개선됐습니다.
  • MIT 라이선스로 모델 파일이 공개되어, 상업적 이용을 포함해 자유롭게 쓸 수 있습니다.
  • API 이름과 가격은 이전과 같습니다. 더 큰 V4.1 Pro도 출시 예정이라고 밝혔지만 날짜는 정해지지 않았습니다.

📌 이 밖에도 Moonshot AI의 Kimi K3.1, 알리바바의 Qwen 시리즈 등 오픈 모델 소식이 이어지고 있지만, 출시일과 모델 파일 공개 여부가 출처마다 엇갈려 이 글에서는 다루지 않았습니다.


5. API 가격 비교 (100만 토큰당)

AI를 프로그램에 붙여 쓰는 개발자라면 가격이 중요합니다. 아래는 각 회사가 발표한 기본 가격입니다.

모델 입력 출력 비고
Claude Fable 5.1 $10 $50 캐시 읽기 $0.25
Claude Opus 5.5 $4 $20 캐시 읽기 $0.20
Claude Sonnet 5.5 $2 $10 캐시 읽기 $0.10
Claude Haiku 5.5 $0.10 $0.50 10만 토큰 이하 기준. 초과 시 $0.50 / $2.50
GPT-6.1 Sol $2 $10 2차 자료 기준. 27만 2천 토큰 초과 시 할증

가격표를 볼 때 알아둘 점

  • 토큰 가격만으로 비교하면 안 됩니다. 모델마다 같은 글을 나누는 토큰 수가 다르고, 같은 작업에 생각(추론)을 얼마나 길게 하느냐에 따라 출력 토큰 수도 크게 달라집니다. Haiku 5.5처럼 토큰 가격은 90% 내렸는데 실제 비용 절감은 75%인 경우가 그 예입니다.
  • 캐시를 잘 쓰면 비용이 크게 줄어듭니다. 같은 문서나 시스템 지시를 반복해서 보내는 작업이라면, 캐시 읽기 가격이 실제 비용을 좌우합니다.
  • 일정 길이 이상의 긴 입력에는 할증 가격이 붙는 모델이 있습니다.

💡 성능 대비 가격을 한눈에 비교하고 싶다면 Artificial Analysis나 Arena 같은 순위 사이트를 함께 보세요. 두 사이트의 평가 방식 차이는 분야별 순위·트렌드 확인 사이트 정리 글에 정리해 두었습니다.


6. 벤치마크 점수를 볼 때 주의할 점

새 모델이 나올 때마다 "○○ 벤치마크 1위"라는 소식이 나옵니다. 하지만 점수를 그대로 믿기 전에 알아둘 것이 있습니다.

주의할 점 이유
대부분 회사가 직접 발표한 점수 측정 조건(추론 설정, 도구 사용 여부)이 회사마다 다름
설정에 따라 점수가 달라짐 Anthropic도 Sonnet 5.5가 최대 설정보다 그 아래 설정에서 일부 점수가 더 높게 나왔다고 밝혔음
점수 차이가 작으면 의미가 적음 Anthropic은 Opus 5.5와 Fable 5.1의 실제 차이가 점수 차이보다 작다고 설명
내 작업과 다를 수 있음 코딩 벤치마크 1위가 한국어 문서 작성에서도 1위라는 보장은 없음

가장 확실한 방법은 내가 실제로 할 작업 35개를 정해서 후보 모델 23개에 똑같이 시켜보는 것입니다.


7. 그래서 뭘 쓰면 될까? 용도별 추천

하고 싶은 일 먼저 고려할 모델 이유
일상 질문, 글쓰기, 요약 각 서비스의 기본 모델 (ChatGPT, Claude, Gemini 앱) 대부분 충분하고, 무료로 시작 가능
코딩, 에이전트 작업 (가성비) Claude Sonnet 5.5, GPT-6.1 Sol 상위 모델에 가까운 성능을 절반 이하 가격에
아주 어렵고 긴 작업 Claude Fable 5.1 / Opus 5.5, Gemini 4 Argon 최상위 성능이 필요할 때
대량의 단순 작업 (분류, 추출, 번역) Claude Haiku 5.5 가장 저렴하고 빠름
데이터를 외부로 보내기 어려운 경우 DeepSeek V4.1 Flash 등 오픈 웨이트 내 서버에 직접 설치 가능

개인 사용자라면 이미 쓰고 있는 서비스(ChatGPT, Claude, Gemini 중 하나)의 새 모델을 먼저 써보는 것으로 충분합니다. 세 회사 모두 비슷한 수준까지 올라와 있어서, 어떤 서비스가 내 작업 방식에 잘 맞는지가 모델 순위보다 더 중요할 수 있습니다.

개발자라면 하나의 모델에 묶이지 않도록 코드를 짜두는 것을 추천합니다. 예를 들어 OpenAI의 영상 생성 서비스 Sora는 2026년에 서비스를 종료했습니다 (쇼츠 영상 제작 도구 총정리 참고). AI를 호출하는 부분을 함수 하나로 분리해 두면, 더 좋거나 더 싼 모델이 나왔을 때 쉽게 바꿀 수 있습니다.


정리

회사 이번에 나온 모델 핵심
Anthropic Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5 한 달 만에 전 라인업 교체. 같은 성능을 더 싸게
OpenAI GPT-6.1 Sol Astra에 가까운 성능을 5분의 1 가격에. Astra 업데이트는 안전 문제로 보류
Google Gemini 4 Argon 새 최상위 모델. Gemini 앱 유료 구독자부터
DeepSeek V4.1 Flash 1017 MIT 라이선스 오픈 웨이트 업데이트

새 모델 소식을 꾸준히 따라가고 싶다면 각 회사의 공식 뉴스 페이지와 함께, IT 뉴스·기술 블로그 사이트 총정리 글에서 소개한 AI 뉴스 사이트를 참고해 보세요.


참고한 공식 자료

반응형
반응형

Python 3.15 출시 — 달라진 점 총정리, 한국어 Windows 사용자가 꼭 확인할 UTF-8 기본값 변경

Python 3.15가 2026년 10월 9일 정식 출시됐습니다. 이번 버전에는 import를 필요할 때까지 미루는 lazy import, 바꿀 수 없는 딕셔너리 frozendict, 새 프로파일러 등 눈에 띄는 기능이 많습니다.

그중에서도 한국어 Windows 사용자라면 꼭 알아야 할 변경이 있습니다. 파일을 열 때 기본 인코딩이 UTF-8로 바뀐 것입니다. 지금까지 잘 돌던 코드가 3.15에서 갑자기 UnicodeDecodeError를 낼 수 있습니다.

이 글에서는 3.15의 주요 변경 사항을 예제와 함께 정리하고, 업그레이드 전에 확인할 것을 체크리스트로 담았습니다.

📌 내용과 예제는 Python 3.15 공식 변경 사항 문서(What's New)와 각 PEP 문서를 바탕으로 정리했습니다.


한눈에 보기

변경 한 줄 요약 영향
UTF-8 기본 인코딩 (PEP 686) encoding 없이 파일을 열면 OS 설정과 상관없이 UTF-8 ⚠️ 한국어 Windows에서 기존 코드가 깨질 수 있음
lazy import (PEP 810) lazy import json처럼 쓰면 실제로 쓸 때 불러옴 프로그램 시작 속도 향상
컴프리헨션 안의 *, ``** (PEP 798) [*L for L in lists]로 리스트 펼치기 코드가 짧아짐
frozendict (PEP 814) 바꿀 수 없는 딕셔너리가 기본 내장 딕셔너리를 키나 캐시로 쓰기 쉬워짐
더 친절한 오류 메시지 list.push → ".append 아니에요?" 초보자에게 특히 도움
새 프로파일러 Tachyon (PEP 799) 실행 중인 프로그램에 붙어서 느린 곳을 찾음 성능 분석이 쉬워짐
JIT 컴파일러 개선 벤치마크에서 평균 7~12% 빨라짐 (JIT 빌드 기준) 아직 실험적 기능

지원 기간: 3.15는 2031년 10월까지 버그·보안 업데이트를 받습니다.


1. ⚠️ 파일 기본 인코딩이 UTF-8로 (한국어 Windows 필독)

무엇이 바뀌었나

파이썬에서 open()으로 파일을 열 때 encoding을 지정하지 않으면, 지금까지는 운영체제의 지역 설정(locale)을 따랐습니다.

환경 3.14까지 기본 인코딩 3.15부터 기본 인코딩
macOS, 대부분의 Linux UTF-8 UTF-8 (변화 없음)
한국어 Windows cp949 UTF-8

macOS와 Linux는 원래 UTF-8을 쓰고 있었기 때문에, 공식 문서도 "이 변경은 주로 Windows 사용자에게 영향을 준다"고 설명합니다.

어떤 문제가 생길 수 있나

엑셀에서 "CSV(쉼표로 분리)"로 저장한 파일은 한국어 Windows에서 보통 cp949로 저장됩니다. 3.14까지는 아래 코드가 문제없이 동작했습니다.

with open("매출.csv") as f:      # encoding을 지정하지 않음
    print(f.read())

3.15에서는 같은 코드가 이 파일을 UTF-8로 읽으려고 해서 오류가 납니다.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 0: invalid start byte

반대로 3.15에서 encoding 없이 저장한 파일은 UTF-8이 되기 때문에, cp949를 기대하는 오래된 프로그램에서 열면 한글이 깨져 보일 수 있습니다.

해결 방법

① 가장 좋은 방법: encoding을 항상 명시하기

# 파일이 UTF-8이면
with open("data.txt", encoding="utf-8") as f:
    ...

# 엑셀 등에서 만든 cp949 파일이면
with open("매출.csv", encoding="cp949") as f:
    ...

# 운영체제 지역 설정을 따르고 싶다면 (예전 동작)
with open("매출.csv", encoding="locale") as f:
    ...

encoding을 직접 적어두면 파이썬 버전이나 운영체제가 바뀌어도 똑같이 동작합니다. 3.15와 상관없이 원래 권장되는 습관입니다.

② 기존 코드에서 고칠 곳 찾기

encoding 없이 파일을 여는 곳에서 경고를 띄워주는 옵션이 있습니다.

python -X warn_default_encoding my_script.py

EncodingWarning이 나오는 줄마다 encoding="utf-8" 또는 encoding="locale"을 추가하면 됩니다.

③ 급할 때: 예전 동작으로 되돌리기

당장 코드를 고칠 수 없다면, UTF-8 기본값을 끄고 실행할 수 있습니다.

# 명령줄 옵션
python -X utf8=0 my_script.py

# 또는 환경 변수 (PowerShell)
$env:PYTHONUTF8="0"

임시 방편이므로, 시간이 날 때 ①번 방법으로 고치는 것을 추천합니다.

💡 엑셀 CSV를 UTF-8로 저장하는 방법: 엑셀의 "다른 이름으로 저장"에서 파일 형식을 "CSV UTF-8(쉼표로 분리)"로 고르면 처음부터 UTF-8로 저장됩니다.

💡 지금 운영체제의 원래 인코딩이 궁금하다면 import locale; print(locale.getencoding())로 확인할 수 있습니다. 한국어 Windows에서는 보통 cp949가 나옵니다.


2. lazy import: 필요할 때 불러오기

왜 필요한가

파이썬 프로그램은 시작할 때 파일 맨 위의 import를 모두 실행합니다. 그래서 무거운 라이브러리를 많이 import하는 명령줄 도구는 --help만 입력해도 몇 초씩 걸리기도 합니다. 공식 제안서(PEP 810)는 실제 사례에서 시작 시간이 5070% 줄고, 메모리 사용이 3040% 줄었다고 소개합니다.

사용법

lazy import json
lazy from pathlib import Path

print("시작합니다...")                   # 아직 json, pathlib을 불러오지 않음

data = json.loads('{"key": "value"}')   # 여기서 json을 실제로 불러옴
p = Path(".")                           # 여기서 pathlib을 실제로 불러옴

lazy를 붙이면 이름만 먼저 등록해 두고, 그 이름을 처음 사용하는 순간 모듈을 불러옵니다.

규칙과 주의할 점

규칙 내용
쓸 수 있는 곳 파일 최상단(모듈 수준)에서만. 함수, 클래스, try 블록 안에서는 문법 오류
쓸 수 없는 형태 lazy from module import *, lazy from __future__ import ...
import 오류 시점 모듈이 없을 때 import 줄이 아니라 처음 사용하는 줄에서 오류가 남

⚠️ 오류가 나는 위치가 달라진다는 점을 기억하세요. 오타가 있는 모듈 이름을 lazy import하면, 프로그램이 한참 실행된 뒤 그 모듈을 쓰는 순간에야 오류가 납니다.

예전 버전과 함께 쓰려면

lazy 키워드는 3.14 이하에서 문법 오류가 납니다. 여러 버전을 지원해야 하는 코드라면, 모듈에 __lazy_modules__ 목록을 적는 방법이 있습니다. 3.15 이상에서는 이 목록의 모듈이 lazy로 동작하고, 이전 버전에서는 무시되고 평소처럼 import됩니다.

__lazy_modules__ = ["json", "pathlib"]

import json
from pathlib import Path

3. 컴프리헨션에서 *, **로 펼치기

리스트 안의 리스트를 하나로 펼칠 때, 지금까지는 for를 두 번 써야 했습니다. 3.15부터는 *로 바로 펼칠 수 있습니다.

lists = [[1, 2], [3, 4], [5]]

# 3.14까지
[x for L in lists for x in L]    # [1, 2, 3, 4, 5]

# 3.15부터
[*L for L in lists]              # [1, 2, 3, 4, 5]

딕셔너리 여러 개를 합칠 때는 **를 씁니다. 같은 키가 있으면 뒤에 오는 값이 남습니다.

dicts = [{"a": 1}, {"b": 2}, {"a": 3}]
{**d for d in dicts}             # {'a': 3, 'b': 2}

리스트, 세트, 딕셔너리 컴프리헨션과 제너레이터 표현식 모두에서 쓸 수 있습니다.


4. frozendict: 바꿀 수 없는 딕셔너리

frozendict가 list, dict처럼 기본 내장 타입으로 추가됐습니다. 한 번 만들면 내용을 바꿀 수 없습니다.

config = frozendict(host="localhost", port=8080)

config["port"] = 9090
# TypeError: 'frozendict' object does not support item assignment

어디에 쓰나요?

용도 이유
딕셔너리를 딕셔너리의 키나 세트의 원소로 일반 dict는 해시할 수 없어서 키로 못 쓰지만, frozendict는 가능
설정값, 상수 묶음 실수로 값을 바꾸는 버그를 막음
캐시(functools.lru_cache)를 쓰는 함수의 인자 해시 가능한 인자만 캐시할 수 있기 때문
a = frozendict(x=1, y=2)
b = frozendict(y=2, x=1)
a == b              # True  (순서가 달라도 내용이 같으면 같음)
hash(a) == hash(b)  # True

참고로 frozendict는 dict의 하위 클래스가 아닙니다. isinstance(a, dict)는 False입니다.


5. 더 친절해진 오류 메시지

다른 언어에서 쓰던 메서드 이름을 쓰면, 파이썬에서 맞는 이름을 알려줍니다.

>>> [1, 2].push(3)
AttributeError: 'list' object has no attribute 'push'. Did you mean '.append'?

>>> {}.put("k", "v")
AttributeError: 'dict' object has no attribute 'put'. Use d[k] = v.

자바스크립트(push)나 자바(put)를 쓰다가 파이썬으로 넘어온 분들이 자주 하는 실수를 바로잡아 줍니다.


6. 새 프로파일러 Tachyon: 느린 곳 찾기

"프로그램이 왜 느리지?"를 찾는 프로파일러가 새로 정리됐습니다. 새 profiling 패키지 안에 두 가지가 있습니다.

모듈 방식 특징
profiling.sampling (Tachyon) 샘플링: 짧은 간격으로 지금 실행 중인 위치를 기록 프로그램 속도에 거의 영향을 주지 않음. 실행 중인 프로세스에 붙을 수 있음
profiling.tracing 추적: 모든 함수 호출을 기록 정확하지만 느려짐 (기존 cProfile과 같은 방식)

사용 예

# 스크립트를 실행하며 분석
python -m profiling.sampling run script.py

# 결과를 플레임 그래프(HTML)로 저장
python -m profiling.sampling run --flamegraph -o profile.html script.py

# 이미 실행 중인 프로세스(PID 12345)에 30초 동안 붙어서 분석
python -m profiling.sampling attach --flamegraph -d 30 -o profile.html 12345

플레임 그래프는 어떤 함수가 시간을 많이 쓰는지 가로 길이로 보여주는 그림입니다. 막대가 넓은 함수부터 살펴보면 됩니다.

실행 중인 프로세스에 붙는 기능이 특히 유용합니다. 서버나 자동화 프로그램처럼 계속 돌고 있는 프로그램을 멈추지 않고 어디서 시간을 쓰는지 볼 수 있습니다. 라즈베리파이에서 24시간 돌리는 프로그램을 점검할 때도 쓸 수 있습니다 (라즈베리파이에서 파이썬 백그라운드 실행하기 참고).

알아둘 점

  • 실행 중인 프로세스에 붙으려면 관리자 권한이 필요합니다 (Linux는 root 또는 ptrace 권한, Windows는 관리자 권한).
  • 프로파일러와 대상 프로그램은 같은 파이썬 버전(둘 다 3.15)이어야 합니다.
  • --live(실시간 화면) 모드는 Windows에서는 지원되지 않습니다.
  • 기존 profile 모듈은 사용 중단 예정(3.17에서 제거)이고, cProfile은 계속 쓸 수 있습니다.

7. 성능: JIT 컴파일러 개선

실험적 기능인 JIT 컴파일러가 크게 개선됐습니다. 공식 문서에 따르면 JIT가 포함된 빌드에서:

  • x86-64 Linux: 표준 인터프리터보다 벤치마크 평균 7~8% 빠름
  • Apple Silicon(AArch64) macOS: 평균 11~12% 빠름

다만 작업 종류에 따라 느려지는 경우(최대 약 15%)도 있고 2배 이상 빨라지는 경우도 있어서, 내 프로그램에서 직접 측정해 보는 것이 정확합니다. 아직 실험적 기능이라는 점도 기억해 두세요.

이 밖에도 base64 인코딩은 약 2배, 디코딩은 약 3배 빨라지는 등 표준 라이브러리 곳곳의 속도가 개선됐습니다.


8. 사라지거나 바뀌는 것

항목 변경
profile 모듈 사용 중단 예정 → 3.17에서 제거. cProfile 또는 profiling.tracing 사용
re.match() re.prefixmatch()로 이름 변경 권장 (기존 match()는 삭제하지 않음)
표준 라이브러리 모듈의 __version__ 등 사용 중단 예정 → 3.20에서 제거. sys.version_info 사용
python -m http.server --cgi 제거됨
sre_compile, sre_constants, sre_parse 모듈 제거됨
strptime()에서 연도 없이 %d만 쓰는 경우 이제 ValueError 발생

지금 업그레이드해야 할까?

새 프로젝트나 개인 스크립트라면 3.15로 시작해도 좋습니다. 다만 운영 중인 프로그램은 아래를 먼저 확인하세요.

업그레이드 전 체크리스트

  • 사용하는 라이브러리가 3.15를 지원하는지 확인. 출시 직후에는 일부 라이브러리(특히 C 확장이 있는 라이브러리)의 3.15용 설치 파일이 아직 없을 수 있습니다. PyPI에서 각 라이브러리의 최신 버전과 지원 버전을 확인하세요.
  • python -X warn_default_encoding으로 인코딩 경고 확인 (1장). 한국어 Windows라면 가장 먼저 할 일입니다.
  • profile 모듈, re 내부 모듈(sre_*), http.server --cgi를 쓰고 있지 않은지 확인
  • 기존 환경을 건드리지 말고 가상환경으로 따로 테스트
# Windows: 3.15를 설치한 뒤 3.15로 가상환경 만들기
py -3.15 -m venv .venv315
.venv315\Scripts\Activate.ps1
pip install -r requirements.txt
python my_script.py

가상환경을 처음 쓰신다면 파이썬 가상환경(venv) 설정 완벽 정리 글을 참고하세요. 3.15는 python.org 다운로드 페이지에서 받을 수 있습니다.


정리

하고 싶은 일 3.15에서는
파일 열기 항상 encoding="utf-8" (또는 "cp949") 명시. 안 쓰면 이제 UTF-8
고칠 곳 찾기 python -X warn_default_encoding script.py
프로그램 시작 속도 개선 lazy import 모듈
리스트 펼치기 [*L for L in lists]
바꿀 수 없는 딕셔너리 frozendict(...)
느린 곳 찾기 python -m profiling.sampling run --flamegraph -o profile.html script.py
업그레이드 테스트 py -3.15 -m venv .venv315로 따로 테스트

새 버전이 나오면 바로 업그레이드하기보다, 가상환경에서 먼저 돌려보는 습관이 가장 안전합니다. 특히 한국어 Windows에서 엑셀 CSV를 다루는 코드가 있다면, 이번 기회에 모든 open()에 encoding을 적어두세요.

반응형
반응형

텔레그램에서 봇을 만들면 토큰이 나옵니다. 봇을 만드는 건 BotFather라는 공식 봇이 담당합니다.

먼저 텔레그램 앱 상단 검색창에서 @BotFather를 검색해서 들어갑니다. 파란색 체크(공식 인증) 표시가 있는 계정이 진짜입니다. 대화창에서 /newbot을 입력하면 두 가지를 순서대로 물어봅니다.

첫째로 봇의 표시 이름(아무거나, 예: 내 알림봇)을 정하고, 둘째로 봇의 사용자명(username)을 정합니다. username은 반드시 bot으로 끝나야 하고(예: my_alert_9x_bot) 전 세계에서 유일해야 해서, 흔한 이름은 이미 쓰이고 있을 수 있습니다. 겹치면 다른 이름을 대라고 하니 될 때까지 바꾸면 됩니다.

성공하면 BotFather가 축하 메시지와 함께 토큰을 줍니다. 이런 형태입니다:

 
123456789:AAExampleTokenStringHere_abcdefg

이 전체 문자열(콜론 포함)이 TG_TOKEN입니다. 이 토큰은 비밀번호나 마찬가지라 남에게 노출되면 안 됩니다.

2. chat_id (TG_CHAT_ID) 발급

chat_id는 "메시지를 어디로 보낼지"를 나타내는 숫자입니다. 본인에게 보내려면 본인 계정의 chat_id를 알아내야 하는데, 여기서 중요한 순서가 있습니다.

먼저 방금 만든 봇에게 아무 메시지나 한 번 보내야 합니다. 텔레그램 봇은 먼저 말을 걸어준 상대에게만 메시지를 보낼 수 있기 때문입니다. BotFather가 준 링크(t.me/봇username)를 눌러 봇 대화창을 열고 /start나 아무 글자를 보내세요.

그런 다음 chat_id를 알아내는 두 가지 방법이 있습니다.

방법 1 — 전용 봇 이용 (가장 쉬움)

검색창에서 @userinfobot을 찾아 대화를 열고 /start를 보내면, 본인의 id 숫자를 바로 알려줍니다. 이 숫자가 TG_CHAT_ID입니다.

방법 2 — API로 직접 확인

봇에게 메시지를 보낸 뒤, 브라우저 주소창에 아래 주소를 입력합니다(<토큰> 자리에 본인 토큰을 넣으세요):

 
https://api.telegram.org/bot<토큰>/getUpdates

그러면 JSON이 뜨는데, 그 안에서 "chat":{"id":123456789 부분의 숫자가 chat_id입니다.

정리

두 방법 중 아무거나 써서 얻은 값을 GitHub Secrets에 넣으면 됩니다:

  • TG_TOKEN = BotFather가 준 123456789:AAE... 전체 문자열
  • TG_CHAT_ID = 위에서 알아낸 숫자 (예: 123456789)

값을 다 얻고 나서, 실제로 잘 되는지 브라우저에서 이 주소로 바로 테스트해 볼 수 있습니다:

 
https://api.telegram.org/bot<토큰>/sendMessage?chat_id=&text=hi

이 주소를 입력했을 때 텔레그램으로 "hi"가 오면 토큰과 chat_id 둘 다 정상이라는 뜻입니다. 여기까지 되면 앞서 만든 스크립트도 바로 작동합니다.

반응형
반응형

Gemini CLI 설치 방법 (Windows) — 2026년 6월 이후 무료 사용자는 Antigravity CLI로

📌 먼저 확인하세요 (2026년 10월 기준)
2026년 6월 18일부터 무료 사용자와 Google AI Pro·Ultra 구독자는 Gemini CLI를 더 이상 쓸 수 없습니다. 구글이 터미널 AI 도구를 Antigravity CLI(명령어 agy)로 바꿨기 때문입니다.

  • 개인 / 무료 / AI Pro·Ultra 사용자 → 1부: Antigravity CLI 설치
  • 회사의 Gemini Code Assist 라이선스, Google Cloud, 유료 API 키 사용자 → 2부: Gemini CLI 설치

이 블로그에 2026년 5월 Gemini CLI 설치 과정을 짧게 메모해 두었는데, 바로 다음 달에 무료 사용자 지원이 종료됐습니다. 지금 예전 방법으로 설치하면 설치는 되는데 로그인 단계에서 막힙니다. 그래서 바뀐 내용을 반영해 처음부터 다시 정리했습니다.


Gemini CLI와 Antigravity CLI는 무엇인가요?

둘 다 터미널(명령 프롬프트)에서 구글의 Gemini AI와 대화하며 코딩을 맡기는 도구입니다. 채팅창에 코드를 복사해 붙여넣는 대신, AI가 내 컴퓨터 폴더의 파일을 직접 읽고 수정하고 명령어도 실행합니다. Claude Code와 같은 종류의 도구라고 보시면 됩니다.

구분 Gemini CLI Antigravity CLI
명령어 gemini agy
설치 방식 Node.js + npm 설치 스크립트 한 줄 (Node.js 불필요)
무료 사용 ❌ 2026.6.18 종료 ✅ 가능 (주간 사용량 제한 있음)
계속 쓸 수 있는 사람 기업 라이선스, 유료 API 키 개인 / 무료 / AI Pro·Ultra
소스 공개 오픈소스 (Apache 2.0) 공식 발표에 언급 없음

1부. Antigravity CLI 설치 (개인·무료 사용자)

1단계. 설치 명령 실행

Windows PowerShell을 열고 아래 한 줄을 입력합니다. 시작 메뉴에서 "PowerShell"을 검색하면 됩니다. 사용자 폴더에 설치되기 때문에 관리자 권한은 필요 없습니다.

irm https://antigravity.google/cli/install.ps1 | iex

PowerShell 대신 명령 프롬프트(CMD)를 쓴다면:

curl -fsSL https://antigravity.google/cli/install.cmd -o install.cmd && install.cmd && del install.cmd

macOS나 Linux(우분투 등)에서는:

curl -fsSL https://antigravity.google/cli/install.sh | bash

설치 위치는 다음과 같습니다.

  • Windows: C:\Users\<사용자이름>\AppData\Local\agy\bin
  • macOS / Linux: ~/.local/bin/agy

2단계. 설치 확인

PowerShell 창을 닫고 새로 연 다음 입력합니다. 설치 직후 같은 창에서는 PATH가 아직 반영되지 않아 명령을 찾지 못할 수 있습니다.

agy --version

버전 번호가 나오면 설치에 성공한 것입니다.

3단계. 작업 폴더를 만들고 실행

AI는 실행한 폴더 안의 파일을 읽고 수정합니다. 중요한 파일이 있는 폴더에서 바로 실행하지 말고, 연습용 폴더를 따로 만드는 것이 안전합니다.

mkdir C:\agy-test
cd C:\agy-test
agy

4단계. 첫 실행 설정

처음 실행하면 세 가지를 묻습니다.

  1. 색상 테마: Dark, Solarized Dark, Solarized Light, 터미널 기본값 중 선택합니다.
  2. 화면 모드: 전체 화면(Alt-Screen) 또는 터미널 기록에 이어서 출력(Inline) 중 선택합니다. 처음이라면 전체 화면을 추천합니다.
  3. 폴더 신뢰 여부: 현재 폴더의 파일을 AI가 읽어도 되는지 확인합니다. 연습용 폴더라면 신뢰를 선택합니다.

5단계. 로그인

설정이 끝나면 기본 웹 브라우저가 열리고 구글 계정으로 로그인하라는 화면이 나옵니다. 로그인을 마치면 터미널로 돌아와 바로 사용할 수 있습니다.

  • SSH로 원격 서버(예: 우분투 VM)에 접속해서 쓰는 경우: 브라우저가 열리지 않는 대신 터미널에 인증 주소가 출력됩니다. 그 주소를 내 PC 브라우저에서 열어 로그인한 뒤, 화면에 나온 코드를 터미널에 붙여넣으면 됩니다.
  • 로그아웃: 실행 중에 /logout을 입력합니다.

6단계. 첫 요청 해보기

프롬프트에 한국어로 그냥 말하면 됩니다.

현재 폴더에 hello.py 파일을 만들고, 실행하면 오늘 날짜를 출력하게 해줘

AI가 파일을 만들거나 명령을 실행하기 전에 허락을 묻습니다. 무엇을 하려는지 읽어보고 승인하세요.


2부. Gemini CLI 설치 (기업 라이선스·유료 API 키 사용자)

회사에서 Gemini Code Assist Standard/Enterprise 라이선스를 받았거나, 유료 Gemini API 키를 쓰는 경우에는 Gemini CLI를 계속 쓸 수 있습니다. 구글은 Gemini CLI 저장소를 오픈소스로 유지하며 기업 고객을 위해 계속 업데이트한다고 밝혔습니다.

1단계. Node.js 설치

Gemini CLI는 Node.js 위에서 동작합니다. nodejs.org에서 LTS 버전을 내려받아 설치하세요. 설치 후 새 PowerShell 창에서 확인합니다.

node -v
npm -v

2단계. Gemini CLI 설치

npm install -g @google/gemini-cli

설치 없이 한 번만 실행해 보고 싶다면 다음 명령을 씁니다.

npx @google/gemini-cli

3단계. 인증 설정

유료 API 키를 쓰는 경우: Google AI Studio에서 발급받은 키를 환경 변수로 설정합니다.

# 현재 창에서만 적용
$env:GEMINI_API_KEY="발급받은_API_키"

# 영구 적용 (설정 후 새 창을 열어야 반영됨)
setx GEMINI_API_KEY "발급받은_API_키"

회사 Code Assist 라이선스를 쓰는 경우: 회사의 Google Cloud 프로젝트 ID를 먼저 설정하고 구글 계정으로 로그인합니다.

$env:GOOGLE_CLOUD_PROJECT="회사_프로젝트_ID"

4단계. 실행

mkdir C:\gemini-test
cd C:\gemini-test
gemini

자주 쓰는 실행 옵션은 다음과 같습니다.

명령 용도
gemini 현재 폴더에서 대화형으로 실행
gemini -m gemini-2.5-flash 모델을 지정해서 실행
gemini -p "질문" 대화창 없이 한 번 답만 받기 (스크립트 자동화용)
gemini --include-directories ../lib,../docs 다른 폴더도 함께 읽게 하기
/help 실행 중 명령어 목록 보기

3부. 이미 Gemini CLI를 쓰던 분: Antigravity CLI로 옮기기

기존 설정은 대부분 그대로 쓸 수 있지만, 몇 가지는 직접 옮겨야 합니다.

항목 이전 방법
GEMINI.md, AGENTS.md (프로젝트 규칙) 그대로 동작합니다. 전역 설정 ~/.gemini/GEMINI.md도 계속 읽습니다.
로그인 정보 처음 agy를 실행할 때 자동으로 옮겨집니다.
확장 프로그램(Extensions) agy plugin import gemini 명령으로 변환합니다. 이제 "플러그인"이라고 부릅니다.
프로젝트 스킬 .gemini/skills/ → .agents/skills/ 로 직접 옮겨야 인식됩니다.
전역 스킬 ~/.gemini/skills/ → ~/.gemini/antigravity-cli/skills/
MCP 서버 설정 settings.json 안에 있던 설정을 별도 파일로 옮깁니다. 전역은 ~/.gemini/config/mcp_config.json, 프로젝트는 .agents/mcp_config.json입니다. 원격 서버 주소의 키 이름 url/httpUrl은 serverUrl로 바꿔야 합니다.

자주 겪는 오류와 해결 방법

① agy 또는 gemini 명령을 찾을 수 없다고 나올 때

agy : 'agy' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다.

설치 직후 같은 창을 쓰고 있어서 PATH가 반영되지 않은 경우가 대부분입니다. PowerShell 창을 모두 닫고 새로 열어보세요. 그래도 안 되면 PC를 재시작합니다.

② npm install 할 때 "스크립트를 실행할 수 없으므로…" 오류가 날 때

이 시스템에서 스크립트를 실행할 수 없으므로 npm.ps1 파일을 로드할 수 없습니다.

Windows PowerShell의 기본 보안 정책 때문입니다. 아래 명령으로 현재 사용자에 한해 로컬 스크립트 실행을 허용하면 해결됩니다.

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

보안 설정을 바꾸는 명령이므로, 의미를 이해하고 실행하세요. 이 설정은 인터넷에서 받은 스크립트는 서명이 있어야만 실행되도록 유지합니다.

③ 예전 방법으로 Gemini CLI를 설치했는데 로그인이 안 될 때
개인 구글 계정이라면 정상입니다. 2026년 6월 18일 이후 무료·개인 구독 사용자는 Gemini CLI로 로그인할 수 없습니다. 1부의 Antigravity CLI를 설치하세요.

④ 무료 사용량이 빨리 소진될 때
Antigravity CLI 무료 플랜에는 주간 사용량 제한이 있습니다. 큰 프로젝트 폴더 전체를 읽게 하면 금방 소진되니, 작업할 폴더를 좁혀서 실행하는 것이 좋습니다.


정리

상황 할 일
처음 설치하는 개인 사용자 PowerShell에서 1부의 설치 명령 실행 → 새 창에서 agy
회사 라이선스·유료 API 키 Node.js 설치 → npm install -g @google/gemini-cli → gemini
기존 Gemini CLI 사용자 agy 설치 → agy plugin import gemini → 스킬·MCP 설정 폴더 이동

AI 코딩 도구는 이름과 설치 방법이 몇 달 단위로 바뀝니다. 예전 블로그 글을 보고 따라 하다 막히면, 먼저 공식 문서에서 최신 공지를 확인하는 습관을 들이면 시간을 많이 아낄 수 있습니다.

참고한 공식 자료

※ 2026년 10월 기준으로 작성했습니다.

반응형
반응형

개발자가 자주 쓰는 영어 단어 20개 — 원래 뜻과 소프트웨어에서의 뜻

개발 문서나 에러 메시지, 회의에서 자주 나오는 영어 단어 중에는 일상 영어 뜻과 개발에서의 뜻이 조금씩 다른 것이 많습니다. 사전 뜻만 알면 맥락이 어색하고, 개발 뜻만 알면 왜 그런 이름이 붙었는지 감이 오지 않습니다.

이 글에서는 업무에서 자주 마주치는 단어 20개를 골라 ① 원래 뜻 → ② 개발에서의 뜻 → ③ 실제로 쓰이는 예시 순서로 정리했습니다.


한눈에 보기

분류 단어
명령어·로그에서 자주 보는 단어 verbose, deprecated, legacy, glitch, daemon
프로그램 실행·흐름 suspend, fallback, rollback, hotfix, bootstrap
네트워크·API payload, latency, handshake, idempotent, throttle, debounce
코드 작성·협업 boilerplate, wrapper, race condition, confluence

1. 명령어·로그에서 자주 보는 단어

verbose — 장황한, 말이 많은

  • 원래 뜻: 필요 이상으로 말이 많은. "His writing is too verbose."(그의 글은 너무 장황하다)처럼 보통 부정적인 뜻으로 씁니다.
  • 개발에서: 프로그램이 평소보다 자세한 로그를 출력하는 모드입니다. 문제가 생겼을 때 원인을 찾으려고 일부러 "말을 많이 하게" 만드는 것이죠. 대부분 -v 또는 --verbose 옵션으로 켭니다.
  • 예시:
    curl -v https://example.com      # 요청·응답 헤더까지 모두 출력
    ssh -v user@server               # 접속 과정을 단계별로 출력 (-vvv는 더 자세히)
    npm install --verbose            # 패키지 설치 과정을 자세히 출력

deprecated — 반대하다, 사용을 권장하지 않다

  • 원래 뜻: 동사 deprecate는 "~에 반대하다, 비난하다"라는 뜻의 다소 딱딱한 단어입니다.
  • 개발에서: "아직 동작은 하지만 곧 없어질 예정이니 쓰지 마세요"라는 표시입니다. 바로 삭제하면 기존 코드가 깨지므로, 일정 기간 경고만 띄우다가 다음 버전에서 제거하는 것이 일반적입니다.
  • 예시:
    @Deprecated
    public void oldMethod() { ... }   // 호출하면 컴파일 시 경고가 뜸
    에러 메시지에서 DeprecationWarning이 보이면 "지금은 되지만 나중에 안 될 수 있다"는 뜻입니다.

legacy — 유산

  • 원래 뜻: 조상이나 이전 세대가 남긴 유산.
  • 개발에서: 오래전에 만들어져 지금도 돌아가고 있지만, 고치기 어렵고 최신 방식과 맞지 않는 시스템이나 코드를 말합니다. 버리기엔 중요하고, 고치기엔 부담스러운 "물려받은 짐"이라는 뉘앙스가 있습니다.
  • 예시: "레거시 코드 리팩터링", "레거시 시스템 마이그레이션"

glitch — 작은 결함, 일시적 오류

  • 원래 뜻: 기계나 계획에 생기는 작고 일시적인 문제. 어원은 확실하지 않지만, 독일어 glitschen(미끄러지다)이나 이디시어 glitsh(미끄러짐)에서 왔다는 설이 널리 알려져 있습니다.
  • 개발에서: 원인을 바로 알기 어렵고, 잠깐 나타났다 사라지는 오류를 가리킵니다. 화면이 순간 깨지거나, 게임에서 캐릭터가 벽을 통과하는 현상 등이 대표적입니다. 재현이 잘 되는 명확한 버그(bug)보다 가볍고 순간적인 느낌입니다.
  • 예시: "A glitch in the payment system caused duplicate charges."(결제 시스템의 일시적 오류로 중복 결제가 발생했다)

daemon — 수호신, 정령

  • 원래 뜻: 그리스 신화에서 신과 인간 사이의 영적 존재. 나쁜 뜻의 demon(악마)과는 구별됩니다.
  • 개발에서: 사용자 눈에 보이지 않게 백그라운드에서 계속 실행되며 요청을 기다리는 프로그램입니다. 1960년대 MIT 연구자들이, 보이지 않는 곳에서 일하는 물리학 사고실험 속 "맥스웰의 도깨비(Maxwell's demon)"에서 이름을 따왔다고 합니다. 리눅스에서는 이름 끝에 d가 붙는 경우가 많습니다.
  • 예시: sshd(SSH 접속을 기다리는 데몬), dockerd(Docker 데몬), systemd

2. 프로그램 실행·흐름

suspend — 잠시 멈추다, 보류하다

  • 원래 뜻: 일시적으로 중단하다. 완전히 끝내는 것이 아니라 나중에 다시 이어갈 수 있게 멈춘다는 점이 핵심입니다.
    • The meeting was suspended due to an issue. (문제로 인해 회의가 중단되었다)
    • His account was suspended. (그의 계정이 정지되었다)
  • 개발에서: 실행을 완전히 종료하지 않고 잠시 멈췄다가, 멈춘 지점부터 다시 이어서 실행할 수 있는 상태를 말합니다. 운영체제에서는 프로세스 일시 정지, 노트북의 절전 모드(Suspend to RAM)에 쓰입니다.
  • Kotlin에서: suspend 키워드가 붙은 함수는 코루틴 안에서 실행이 중단될 수 있는 함수입니다. 네트워크 응답을 기다리는 동안 스레드를 붙잡지 않고 다른 작업에 양보했다가, 응답이 오면 이어서 실행합니다.
    suspend fun loadUser(): User {
        delay(1000)          // 1초 동안 '중단' — 스레드는 다른 일을 함
        return User("hd")
    }

fallback — 후퇴, 대비책

  • 원래 뜻: 원래 계획이 실패했을 때 의지하는 대안. "a fallback plan"(플랜 B)
  • 개발에서: 원래 방법이 실패하거나 사용할 수 없을 때 대신 쓰는 값이나 동작입니다.
  • 예시:
    font-family: "Pretendard", "Malgun Gothic", sans-serif;
    /* Pretendard가 없으면 맑은 고딕, 그것도 없으면 기본 산세리프 */

rollback — 되돌리기

  • 원래 뜻: 가격이나 정책 등을 이전 수준으로 되돌리는 것.
  • 개발에서: 변경 사항을 취소하고 이전 상태로 되돌리는 것입니다. 데이터베이스에서는 트랜잭션이 실패했을 때 중간에 바뀐 내용을 모두 취소하고, 배포에서는 새 버전에 문제가 있을 때 이전 버전으로 되돌립니다.
  • 예시: "배포 후 에러율이 급증해서 바로 롤백했습니다."

hotfix — 긴급 수정

  • 원래 뜻: hot(뜨거운, 급한) + fix(수정). 일상 영어보다는 IT에서 주로 쓰는 말입니다.
  • 개발에서: 정기 배포 일정을 기다리지 않고 운영 중인 서비스에 바로 적용하는 긴급 수정입니다. Git 브랜치 전략(Git Flow)에서는 hotfix/ 브랜치를 따로 만들어 처리합니다.

bootstrap — 부츠 끈

  • 원래 뜻: 부츠 뒤쪽에 달린 고리. "pull oneself up by one's bootstraps"(자기 부츠 끈을 잡아당겨 스스로를 들어 올린다)는 표현에서 "외부 도움 없이 스스로 시작한다"는 뜻이 생겼습니다.
  • 개발에서: 아무것도 없는 상태에서 스스로 시작하는 초기 과정입니다. 컴퓨터를 켜는 것을 부팅(booting)이라고 하는 것도 이 단어에서 나왔습니다. 프로젝트의 초기 설정 코드를 bootstrap 코드라고도 하며, 같은 이름의 CSS 프레임워크(Bootstrap)도 있습니다.

3. 네트워크·API

payload — 화물, 탑재물

  • 원래 뜻: 운송 수단이 실어 나르는 실제 화물. 로켓의 payload는 위성처럼 실제로 쏘아 올리는 물건입니다. 연료나 기체 자체는 payload가 아닙니다.
  • 개발에서: 전송되는 데이터 중 헤더 같은 부가 정보를 뺀 실제 내용물입니다. API 요청의 본문(body)이 대표적입니다.
  • 예시:
    { "chat_id": 123456789, "text": "hi" }
    위 JSON이 텔레그램 메시지 전송 요청의 payload입니다.

latency — 잠복, 지연

  • 원래 뜻: 숨어 있는 상태, 잠복기(latent period).
  • 개발에서: 요청을 보낸 뒤 응답이 시작될 때까지 걸리는 지연 시간입니다. 보통 밀리초(ms) 단위로 표시하며, 낮을수록 좋습니다. 한 번에 보낼 수 있는 데이터의 양을 뜻하는 대역폭(bandwidth)과는 다른 개념입니다.
  • 예시: "서버를 해외 리전에서 서울 리전으로 옮겨서 latency가 200ms에서 20ms로 줄었다."

handshake — 악수

  • 원래 뜻: 만나서 인사하며 악수하는 것.
  • 개발에서: 두 시스템이 본격적으로 통신하기 전에 서로를 확인하고 규칙을 맞추는 사전 절차입니다. TCP 연결의 3-way handshake(SYN → SYN-ACK → ACK), HTTPS 연결 시 암호화 방식을 정하는 TLS handshake가 대표적입니다.

idempotent — 멱등의

  • 원래 뜻: 수학 용어로, 여러 번 적용해도 한 번 적용한 것과 결과가 같은 성질입니다. 일상 영어에서는 거의 쓰지 않습니다.
  • 개발에서: 같은 요청을 여러 번 보내도 결과가 한 번 보낸 것과 같은 API를 말합니다. 네트워크 오류로 요청을 다시 보내야 할 때 중요합니다.
  • 예시:
    • DELETE /users/1 → 몇 번을 보내도 1번 사용자가 없는 상태 → 멱등
    • POST /orders → 보낼 때마다 주문이 하나씩 생김 → 멱등 아님 (결제 버튼을 두 번 눌러 중복 결제가 되는 이유)

throttle — 목을 조르다, 조절판

  • 원래 뜻: 목을 조르다. 자동차의 스로틀은 엔진에 들어가는 공기·연료 양을 조절하는 장치입니다.
  • 개발에서: 일정 시간 동안 실행 횟수를 제한하는 것입니다. 스크롤 이벤트가 1초에 수십 번 발생해도 0.1초에 한 번만 처리하는 식입니다. API 서버가 "1분에 60회까지만 요청 가능"처럼 호출 횟수를 제한하는 것도 throttling이라고 합니다.

debounce — 튀는 것을 막다

  • 원래 뜻: 전자공학 용어. 버튼을 한 번 눌러도 접점이 미세하게 튀면서(bounce) 여러 번 눌린 것처럼 신호가 들어오는데, 이것을 막는 처리입니다.
  • 개발에서: 연속으로 발생하는 이벤트 중 마지막 것만 처리하는 것입니다. 검색창에 글자를 칠 때마다 서버에 요청하지 않고, 입력이 0.3초 동안 멈췄을 때 한 번만 검색하는 것이 대표적인 예입니다.
  • throttle과의 차이: throttle은 "일정 간격마다 한 번", debounce는 "다 끝나고 나서 한 번"입니다.

4. 코드 작성·협업

boilerplate — 표준 문안

  • 원래 뜻: 19세기 신문사에 여러 신문에 똑같이 실을 기사를 강철판(boiler plate)에 새겨 배포하던 데서 나온 말로, 어디서나 그대로 쓰는 판에 박힌 문구를 뜻합니다.
  • 개발에서: 매번 거의 똑같이 반복해서 써야 하는 코드입니다. Java의 getter/setter, 프로젝트 초기 설정 파일 같은 것들입니다. 이런 코드를 줄여주는 도구로 Lombok, 코드 템플릿 등이 있습니다.

wrapper — 포장지

  • 원래 뜻: 사탕 껍질 같은 포장지.
  • 개발에서: 기존 기능을 감싸서 더 쓰기 쉽게 만들거나 기능을 덧붙인 코드입니다. 복잡한 API를 감싸 간단한 함수 하나로 호출할 수 있게 만든 라이브러리를 "OO API wrapper"라고 부릅니다.

race condition — 경쟁 상태

  • 원래 뜻: race(경주) + condition(상태).
  • 개발에서: 여러 작업이 동시에 같은 데이터에 접근할 때, 실행 순서에 따라 결과가 달라지는 문제입니다. 재고가 1개 남았는데 두 사람이 동시에 주문해서 둘 다 성공하는 경우가 대표적입니다. 가끔만 발생해서 찾기 어려운 버그로 유명합니다.

confluence — 합류점

  • 원래 뜻: 두 강이 만나 하나로 합쳐지는 합류 지점. 사람이나 생각이 한곳으로 모이는 상황에도 씁니다.
    • "the confluence of the two rivers" (두 강의 합류점)
  • 개발에서: 아틀라시안(Atlassian)이 만든 팀 문서 협업 도구(위키)의 이름입니다. 여러 사람의 지식이 한곳으로 모인다는 뜻에서 이름을 따왔습니다. 회의록, 기술 문서, 업무 가이드를 함께 작성·공유하며, 국내에서는 흔히 "컨플"이라고 줄여 부릅니다. 같은 회사의 이슈 관리 도구 Jira와 함께 쓰는 경우가 많습니다.

정리: 비슷해서 헷갈리는 단어

비교 차이
bug vs glitch bug는 원인이 코드에 있는 명확한 결함, glitch는 순간적이고 원인이 불분명한 오류
suspend vs terminate suspend는 나중에 이어갈 수 있게 멈춤, terminate는 완전히 종료
throttle vs debounce throttle은 일정 간격마다 한 번 실행, debounce는 연속 입력이 끝난 뒤 한 번 실행
latency vs bandwidth latency는 응답까지 걸리는 시간, bandwidth는 한 번에 보낼 수 있는 데이터 양
deprecated vs removed deprecated는 아직 동작하지만 곧 없어질 예정, removed는 이미 삭제됨

새로 알게 되는 단어가 생기면 이 글에 계속 추가하겠습니다.

반응형
반응형

우분투에 OpenClaw 설치하기 — 설치부터 슬랙 연동, 외부 접속까지

OpenClaw는 내 컴퓨터나 서버에 직접 설치해서 쓰는 AI 에이전트 게이트웨이입니다. 슬랙, 텔레그램, 디스코드 같은 메신저를 AI 코딩 에이전트와 연결해 줍니다. 설치해 두면 메신저로 말을 걸어 AI에게 일을 시킬 수 있습니다. Claude, GPT, Gemini 같은 여러 LLM을 API 키로 연결해 쓸 수 있고, 모든 것이 내 서버에서 돌아간다는 점이 특징입니다.

이 글은 VMware에 설치한 우분투를 기준으로, 설치부터 슬랙 연동과 외부(휴대폰)에서의 접속까지 순서대로 정리했습니다.

공식 자료


전체 흐름 한눈에 보기

단계 할 일 핵심 명령어
1 설치 설치 스크립트 한 줄 실행 (1단계 참고)
2 설치 확인 openclaw --version, openclaw doctor
3 LLM 연결 (온보딩) openclaw onboard
4 게이트웨이 실행·대시보드 접속 openclaw gateway, openclaw dashboard
5 슬랙 연동 openclaw plugins install @openclaw/slack
6 외부에서 접속 SSH 터널 또는 ngrok + openclaw qr

준비물

  • 우분투 (VMware 가상 머신이어도 됩니다)
  • LLM API 키: Claude(Anthropic), OpenAI, Gemini 중 쓰고 싶은 서비스의 API 키
  • (선택) 슬랙 워크스페이스: 슬랙으로 AI와 대화하고 싶은 경우

Node.js는 따로 설치하지 않아도 됩니다. 아래 설치 스크립트가 필요한 버전을 확인하고 자동으로 설치해 줍니다. 공식 문서 기준 지원 버전은 Node 22.22.3 이상, 24.15 이상, 25.9 이상이며 기본 대상은 Node 24입니다.


1단계. 설치

터미널을 열고 아래 한 줄을 실행합니다.

curl -fsSL https://openclaw.ai/install.sh | bash

이 스크립트는 다음 순서로 동작합니다.

  1. 운영체제를 확인합니다.
  2. Node.js가 없거나 버전이 낮으면 설치합니다.
  3. OpenClaw를 설치합니다.
  4. 이어서 초기 설정(온보딩)을 시작합니다.

온보딩은 나중에 따로 하고 설치만 먼저 하고 싶다면 다음처럼 실행합니다.

curl -fsSL https://openclaw.ai/install.sh | bash -s -- --no-onboard

이미 Node.js를 쓰고 있다면 npm으로 설치해도 됩니다.

npm install -g openclaw@latest
openclaw onboard --install-daemon

설정 파일과 데이터는 홈 폴더의 ~/.openclaw/에 저장되고, 주 설정 파일은 ~/.openclaw/openclaw.json입니다.


2단계. 설치 확인

openclaw --version          # 버전이 나오면 설치 성공
openclaw doctor             # 설정에 문제가 없는지 점검
openclaw gateway status     # 게이트웨이가 실행 중인지 확인

openclaw doctor는 설정이 잘못됐거나 빠진 부분을 찾아서 알려줍니다. 뭔가 안 될 때 가장 먼저 실행해 볼 명령입니다. 사용할 수 있는 전체 명령은 openclaw --help로 볼 수 있습니다.


3단계. LLM 연결 (온보딩)

설치 스크립트가 온보딩을 자동으로 시작하지 않았다면 직접 실행합니다.

openclaw onboard

대화형 화면에서 쓸 LLM 서비스(Claude / GPT / Gemini 등)를 고르고 API 키를 입력합니다. 온보딩은 입력한 키로 실제로 AI 호출이 되는지 먼저 확인한 다음 게이트웨이, 작업 공간, 채널 설정으로 넘어갑니다. 키가 잘못됐으면 이 단계에서 바로 알 수 있습니다.

--install-daemon 옵션을 붙이면 OpenClaw가 백그라운드 서비스(우분투에서는 systemd 사용자 서비스)로 등록됩니다. 터미널을 닫아도 계속 실행되고, 재부팅해도 자동으로 시작됩니다.

openclaw onboard --install-daemon

⚠️ API 키는 비밀번호와 같습니다. 블로그나 깃허브에 올리는 화면 캡처에 키가 보이지 않도록 주의하세요.


4단계. 게이트웨이 실행과 대시보드 접속

실행과 관리

하고 싶은 일 명령어
터미널에서 바로 실행 (창을 닫으면 종료) openclaw gateway
서비스로 시작 / 중지 / 재시작 openclaw gateway start / stop / restart
실행 상태 확인 openclaw gateway status
실시간 로그 보기 openclaw logs --follow

설정 파일(openclaw.json)을 직접 고쳤다면 반드시 openclaw gateway restart를 실행해야 바뀐 설정이 적용됩니다.

프로세스가 응답하지 않아서 정상적으로 멈출 수 없을 때만 강제 종료를 씁니다.

pkill -f openclaw

대시보드(웹 관리 화면) 접속

openclaw dashboard

이 명령을 실행하면 브라우저에서 관리 화면이 열리고, 접속 주소와 게이트웨이 토큰을 확인할 수 있습니다. 기본 주소는 다음과 같습니다.

http://127.0.0.1:18789

127.0.0.1은 "이 컴퓨터 자신"이라는 뜻이라서, 우분투 안의 브라우저에서만 열립니다. 다른 기기에서 접속하는 방법은 6단계에서 설명합니다.


5단계. 슬랙 연동

5-1. 슬랙 앱 만들기

  1. api.slack.com/apps에 접속해 Create New App → From a manifest를 고릅니다.
  2. 연결할 워크스페이스를 선택하고, 공식 문서(Slack 채널 설정)에 있는 매니페스트(앱 설정 JSON)를 붙여넣고 Create를 누릅니다. 필요한 권한과 이벤트가 매니페스트에 모두 들어 있어서 하나씩 체크하지 않아도 됩니다.

5-2. 토큰 두 개 발급

OpenClaw는 소켓 모드(Socket Mode)로 슬랙에 연결합니다. 소켓 모드에서는 OpenClaw가 슬랙 쪽으로 먼저 연결하기 때문에, 내 서버를 인터넷에 공개하지 않아도 됩니다. 이 방식에는 토큰이 두 개 필요합니다.

토큰 발급 위치 용도
앱 토큰 (App-Level Token) Basic Information → App-Level Tokens → Generate Token and Scopes에서 connections:write 권한 추가 소켓 모드 연결
봇 토큰 (Bot User OAuth Token) Install App → Install to Workspace 후 표시되는 토큰 메시지 읽기·보내기

토큰 발급 화면을 캡처와 함께 자세히 보고 싶다면 아래 글들이 도움이 됩니다.

5-3. OpenClaw에 슬랙 연결

슬랙 플러그인을 설치합니다.

openclaw plugins install @openclaw/slack

가장 쉬운 방법은 대화형 설정입니다. 실행하면 채널 종류와 토큰을 차례로 묻습니다.

openclaw channels add

설정을 마치면 게이트웨이를 재시작합니다.

openclaw gateway restart

5-4. 연결 테스트와 승인

  1. 슬랙에서 봇에게 DM(개인 메시지)을 보냅니다.
  2. 처음에는 바로 답하지 않고 페어링(승인) 요청 코드가 나옵니다. 아무나 내 AI를 쓰지 못하게 막는 기본 보안 설정입니다.
  3. 우분투 터미널에서 그 코드를 승인합니다.
    openclaw pairing approve slack <코드>
  4. 다시 메시지를 보내면 AI가 답합니다.

채널에서 쓸 때는 기본적으로 봇을 멘션(@봇이름)해야 반응합니다.

연결이 잘 안 되면 다음 순서로 확인합니다.

openclaw channels status --probe   # 슬랙 연결 상태 점검
openclaw doctor                    # 설정 점검
openclaw logs --follow             # 실시간 로그로 오류 확인

6단계. 외부에서 접속하기 (휴대폰 등)

VMware 안의 우분투에서 실행 중인 OpenClaw 대시보드를 휴대폰이나 다른 PC에서 열고 싶을 때의 방법입니다.

⚠️ 보안 주의: 공식 문서는 게이트웨이 포트(18789)를 인터넷에 그대로 공개하지 말라고 권합니다. 대시보드에 접속하면 AI 에이전트를 조작할 수 있고, 에이전트는 서버의 파일과 명령을 다룰 수 있기 때문입니다. 가능하면 아래 방법 A를 먼저 고려하세요.

방법 A. SSH 터널 (공식 권장, 가장 안전)

다른 PC에서 우분투로 SSH 접속이 된다면, 아래 명령 한 줄로 우분투의 18789 포트를 내 PC로 가져올 수 있습니다.

ssh -N -L 18789:127.0.0.1:18789 사용자명@우분투IP

이 상태에서 내 PC 브라우저로 http://127.0.0.1:18789에 접속하면 됩니다. 인터넷에 아무것도 공개되지 않습니다. 공식 문서는 항상 켜두고 쓰는 경우 Tailscale을 이용한 방법도 안내합니다.

방법 B. ngrok으로 임시 공개 주소 만들기

휴대폰에서 QR 코드로 바로 접속하고 싶을 때 썼던 방법입니다. ngrok은 내 컴퓨터의 포트를 인터넷 주소(https://xxxx.ngrok-free.app)로 연결해 주는 터널 서비스입니다.

① ngrok 설치와 인증

ngrok 대시보드에 가입하고 인증 토큰(authtoken)을 복사합니다.

sudo snap install ngrok
ngrok config add-authtoken <내_인증_토큰>

② 18789 포트를 터널로 연결

ngrok http 18789

화면에 https://xxxx.ngrok-free.app 형태의 공개 주소가 표시됩니다. 이 창은 닫지 말고 그대로 두세요.

③ OpenClaw에 공개 주소 등록

새 터미널 창을 열고 기기 연결(device-pair) 플러그인에 ngrok 주소를 알려줍니다.

openclaw config set plugins.entries.device-pair.config.publicUrl https://xxxx.ngrok-free.app
openclaw config set plugins.entries.device-pair.enabled true
openclaw gateway restart

④ QR 코드로 접속

openclaw qr

터미널에 QR 코드가 표시되고, 휴대폰으로 찍으면 접속할 수 있습니다. 공식 앱이 아닌 기기에서 연결을 요청하면 승인 대기 상태가 되는데, 아래 명령으로 확인하고 승인합니다.

openclaw devices list
openclaw devices approve <요청ID>

ngrok을 쓸 때 꼭 지킬 것

  • 다 쓰고 나면 ngrok 창을 Ctrl + C로 종료하세요. 켜두는 동안에는 주소를 아는 누구나 접속을 시도할 수 있습니다.
  • ngrok 주소가 바뀌면 ③의 publicUrl도 새 주소로 다시 설정해야 합니다.
  • ngrok 주소와 게이트웨이 토큰은 블로그나 메신저에 올리지 마세요. 주소에 내 IP가 포함되는 경우도 있습니다.

자주 겪는 문제

① openclaw: command not found

거의 항상 PATH 문제입니다. npm 전역 설치 폴더가 PATH에 들어 있지 않은 경우입니다.

node -v          # Node.js가 설치됐는지
npm prefix -g    # npm 전역 설치 위치
echo "$PATH"     # 위 위치의 bin 폴더가 PATH에 있는지

설치 직후라면 터미널을 닫고 새로 열거나 source ~/.bashrc를 실행해 보세요.

② 설정을 바꿨는데 반영이 안 됨

openclaw config set이나 openclaw.json 수정 후에는 openclaw gateway restart가 필요합니다.

③ 슬랙 봇이 대답을 안 함

  • DM이라면 페어링 승인(openclaw pairing approve slack <코드>)을 했는지 확인합니다.
  • 채널이라면 봇을 채널에 초대했는지, 메시지에서 봇을 멘션했는지 확인합니다.
  • openclaw channels status --probe로 연결 상태를 점검합니다.

④ 로그 명령이 안 됨

실시간 로그 옵션은 --follow입니다. --follows처럼 s가 붙으면 동작하지 않습니다.


명령어 요약

용도 명령어
설치 1단계의 설치 스크립트 실행
버전 확인 openclaw --version
설정 점검 openclaw doctor
LLM 연결 + 서비스 등록 openclaw onboard --install-daemon
게이트웨이 실행 (포그라운드) openclaw gateway
서비스 시작 / 중지 / 재시작 / 상태 openclaw gateway start / stop / restart / status
실시간 로그 openclaw logs --follow
대시보드 열기 openclaw dashboard → http://127.0.0.1:18789
슬랙 플러그인 설치 openclaw plugins install @openclaw/slack
채널 추가 (대화형) openclaw channels add
슬랙 DM 승인 openclaw pairing approve slack <코드>
채널 연결 점검 openclaw channels status --probe
외부 접속용 QR openclaw qr
기기 연결 승인 openclaw devices list → openclaw devices approve <요청ID>
강제 종료 (최후 수단) pkill -f openclaw

※ 2026년 10월 기준 공식 문서를 참고해 작성했습니다. OpenClaw는 업데이트가 잦으니, 명령이 다르게 동작하면 openclaw <명령> --help나 공식 문서를 확인하세요.

반응형
반응형

증권사 고객 등급 총정리 — 증권사별 산정 방식, 혜택, 내 투자 스타일에 맞는 곳 찾기

은행에 VIP 등급이 있듯이, 증권사도 대부분 고객 등급 제도를 운영합니다. 등급이 오르면 수수료 할인이나 공모주 청약 같은 혜택을 받을 수 있습니다. 그런데 등급을 매기는 기준이 증권사마다 완전히 다릅니다. 어떤 곳은 맡긴 돈(자산)만 보고, 어떤 곳은 거래를 얼마나 자주 했는지를 봅니다.

이 글에서는 주요 증권사의 고객 등급 산정 방식을 유형별로 정리하고, 내 투자 스타일에 따라 어떤 기준을 따져봐야 하는지 정리했습니다.

📌 기준 시점 안내: 증권사별 세부 기준은 2024년 4월 소비자가 만드는 신문 기사를 바탕으로 정리했습니다. 등급 기준은 수시로 바뀌므로, 실제 기준은 각 증권사 앱이나 홈페이지에서 꼭 확인하세요.


고객 등급, 왜 신경 써야 할까?

등급에 따라 받을 수 있는 대표적인 혜택은 다음과 같습니다.

혜택 내용
수수료 우대 매매 수수료나 출금·이체 수수료 일부 또는 전부 면제
공모주 청약 일정 등급 이상만 청약할 수 있거나, 청약 한도가 늘어나는 경우
전담 서비스 상위 등급 고객에게 전담 PB(자산관리 상담사) 배정
금리 우대 신용융자나 주식담보대출 이자율 우대 (증권사별로 다름)
그룹 혜택 같은 금융그룹의 은행·카드 등에서 등급을 함께 인정

대부분의 투자자에게 체감되는 혜택은 수수료 우대와 공모주 청약 조건입니다. 거래를 자주 하거나 공모주에 관심이 있다면 등급 기준을 한 번쯤 따져볼 만합니다.


등급을 매기는 4가지 방식

주요 증권사의 등급 제도는 크게 네 가지 유형으로 나눌 수 있습니다.

유형 기준 해당 증권사 이런 사람에게 유리
① 자산형 계좌에 맡긴 평균 자산 미래에셋, 삼성, 신한, 대신 자산은 크고 매매는 적은 장기 투자자
② 실적·포인트형 자산 + 거래 실적·수익 기여도·거래 기간 등을 점수화 한국투자, NH, KB, 하나, 메리츠 자산은 크지 않아도 꾸준히 매매하는 투자자
③ 그룹 통합형 같은 금융그룹 계열사 거래를 합산하거나 최고 등급을 공유 KB, 하나, NH, 신한 은행·카드를 같은 금융그룹으로 쓰는 사람
④ 등급 미운영 등급 없이 모든 고객에게 같은 조건 키움 조건을 신경 쓰고 싶지 않은 사람

💡 "평잔"이란? 평균 잔액의 줄임말입니다. 특정 날짜의 잔액이 아니라 일정 기간 동안의 평균 잔액을 기준으로 하기 때문에, 등급 산정일 직전에 잠깐 돈을 넣어두는 것만으로는 등급이 잘 오르지 않습니다.


증권사별 등급 기준 (2024년 4월 기사 기준)

① 자산형

증권사 산정 기준 주요 등급 조건과 혜택
미래에셋증권 3개월 평잔과 전월 말 잔고 중 큰 금액. 최근 6개월 중 가장 높은 등급을 적용 실버: 자산 3,000만 원 이상
삼성증권 전년도 평잔 중심 우대: 5,000만 원 이상, 일부 수수료 감면 / 아너스 프리미엄: 10억 원 이상 + 수익 기여
신한투자증권 3개월 평균 자산 클래식: 2,500만 원 이상
대신증권 분기 평잔 프라임: 1,000만 원 이상, 영업점 공모주 청약 가능 / 클래식: 5,000만 원 이상, 일부 수수료 면제

미래에셋증권은 두 기준 중 유리한 쪽을 적용하고, 최근 6개월 중 최고 등급을 인정해 줍니다. 그래서 자산이 일시적으로 줄어도 등급이 바로 떨어지지 않는다는 장점이 있습니다. 반면 삼성증권은 전년도 평잔을 보기 때문에, 올해 자산을 늘려도 등급에 반영되기까지 시간이 걸립니다.

② 실적·포인트형

증권사 산정 기준 주요 등급 조건과 혜택
한국투자증권 최근 3개월 자산 평잔, 수익 기여, 거래 기간, 연금·펀드 가입 여부를 점수화 프라임: 300점 이상, 일부 수수료 면제
NH투자증권 분기 평잔 또는 거래 수수료 등 수익 기여도 그린: 자산 5,000만 원 이상 또는 수익 기여도 50만 원 이상, 현금 출금 수수료 면제
KB증권 KB스타클럽 점수 (최근 3개월 주식·펀드 평잔, 거래 금액 반영) 최하위 등급 기준 500점
하나증권 하나금융그룹 통합 점수 (자산 평잔, 거래 기간 반영) 패밀리: 500점 이상, 일부 수수료 면제
메리츠증권 최근 6개월 거래 실적과 예탁 자산을 종합 평가 구체적 기준 비공개

NH투자증권은 자산 기준과 수익 기여도 기준 중 하나만 충족하면 됩니다. 자산은 적어도 매매를 많이 해서 수수료를 많이 낸 고객이라면 등급을 받을 수 있는 구조입니다. 한국투자증권과 하나증권은 거래 기간도 점수에 반영하므로, 한 증권사를 오래 쓸수록 유리합니다.

③ 그룹 통합형

금융그룹 제도 특징
NH농협 NH하나로가족고객제도 계열사 중 가장 높은 등급을 서로 인정
신한 톱스클럽 + SOL 멤버십 신한 계열사 거래 점수를 합산
KB KB스타클럽 그룹 계열사 거래 실적 반영
하나 하나금융그룹 통합 등급 계열사 간 등급 공유

예를 들어 NH농협은행에서 높은 등급을 받고 있다면, NH투자증권에서도 그 등급을 인정받을 수 있습니다. 주거래 은행과 같은 금융그룹의 증권사를 고르면 처음부터 높은 등급으로 시작할 수 있습니다.

④ 등급 미운영

증권사 특징
키움증권 고객 등급 제도를 운영하지 않고, 모든 고객에게 같은 조건을 적용

등급을 올리기 위해 자산을 묶어두거나 실적을 신경 쓸 필요가 없다는 점이 장점입니다.


내 투자 스타일별로 따져볼 점

내 스타일 따져볼 기준 살펴볼 증권사
자산은 크고, 매매는 가끔 평균 자산 기준 등급 조건 미래에셋, 삼성, 신한, 대신
자산은 크지 않지만 매매가 잦음 거래 실적·수익 기여도 반영 여부 한국투자, NH, KB
한 증권사를 오래 쓸 계획 거래 기간 반영 여부 한국투자, 하나
은행·카드를 한 금융그룹으로 사용 중 그룹 통합 등급 인정 여부 KB, 하나, NH, 신한
등급 조건을 신경 쓰고 싶지 않음 기본 수수료 자체가 낮은지 키움

등급보다 먼저 확인할 것

등급 혜택을 따지기 전에 확인해 볼 것들이 있습니다.

1. 비대면 계좌 수수료 혜택
많은 증권사가 비대면(앱)으로 새로 계좌를 만든 고객에게 일정 기간 매매 수수료를 크게 깎아주는 이벤트를 합니다. 이런 혜택을 받고 있다면 등급에 따른 수수료 우대는 체감이 크지 않을 수 있습니다.

2. 매매 수수료 외의 비용
주식을 거래할 때는 증권사 수수료 외에도 유관기관 수수료와 세금(증권거래세)이 붙습니다. 증권사 등급으로 줄일 수 있는 것은 증권사 수수료뿐입니다.

3. 해외 주식이라면 환전 우대
미국 주식처럼 해외 주식을 거래한다면 매매 수수료만큼이나 환전 수수료(환율 우대율)가 중요합니다. 등급과 별개로 이벤트로 제공하는 경우가 많으니 함께 비교해 보세요.

4. 내 등급 확인하기
지금 내 등급은 대부분 증권사 앱의 "MY" 또는 "고객 등급" 메뉴에서 확인할 수 있습니다. 다음 등급까지 얼마나 남았는지 보여주는 곳도 있습니다.


정리

핵심 내용
등급 기준은 증권사마다 다름 자산형 / 실적·포인트형 / 그룹 통합형 / 미운영
대표 혜택 수수료 우대, 공모주 청약, 전담 서비스
평잔 기준 하루 이틀 돈을 넣어두는 것으로는 등급이 오르지 않음
그룹 통합 주거래 은행과 같은 금융그룹이면 등급을 함께 인정받을 수 있음
최종 확인 기준이 자주 바뀌므로 각 증권사 앱·홈페이지에서 최신 기준 확인

같은 돈으로 투자하더라도, 내 스타일에 맞는 증권사를 고르면 수수료와 혜택에서 차이가 납니다. 증권사를 새로 고르거나 옮길 계획이라면 등급 기준도 한 번 비교해 보세요.

⚠️ 이 글은 증권사 고객 등급 제도를 정리한 정보 글이며, 특정 증권사나 금융 상품을 추천하거나 권유하지 않습니다.

반응형
반응형

파이썬으로 유튜브 영상 자동 업로드하기 — YouTube Data API 설정부터 업로드 코드까지

쇼츠처럼 영상을 자주 올리다 보면, 매번 유튜브 스튜디오에 들어가 파일을 고르고 제목과 설명을 입력하는 일이 꽤 번거롭습니다. YouTube Data API를 쓰면 파이썬 코드 한 번 실행으로 영상 업로드를 끝낼 수 있고, 영상 제작 → 업로드까지 전체 과정을 자동화할 수도 있습니다.

이 글에서는 ① Google Cloud 설정 → ② 인증 파일(client_secret.json) 발급 → ③ 업로드 코드 작성 → ④ 자주 겪는 오류까지 순서대로 정리했습니다.


전체 흐름 한눈에 보기

단계 할 일 결과물
1 Google Cloud 프로젝트 만들기 프로젝트
2 YouTube Data API v3 사용 설정 API 활성화
3 OAuth 동의 화면 설정 + 테스트 사용자 등록 로그인 화면 준비
4 OAuth 클라이언트 ID 만들기 (데스크톱 앱) client_secret.json
5 파이썬 라이브러리 설치 + 업로드 코드 실행 업로드된 영상

왜 API 키가 아니라 OAuth가 필요한가요?

YouTube API로 영상 검색이나 조회만 할 때는 간단한 API 키로 충분합니다. 하지만 영상 업로드는 "내 채널에 영상을 올려도 된다"는 채널 주인의 허락이 필요한 작업입니다.

그래서 업로드할 때는 OAuth 2.0 방식을 씁니다. 처음 한 번 브라우저에서 구글 계정으로 로그인해 권한을 허락하면, 그 뒤로는 저장된 인증 정보로 자동 로그인됩니다. client_secret.json은 "이 프로그램이 어떤 앱인지" 구글에 알려주는 신분증 같은 파일입니다.


1단계. Google Cloud 프로젝트 만들기

  1. Google Cloud Console에 접속해 구글 계정으로 로그인합니다. 영상을 올릴 유튜브 채널의 계정을 쓰는 것이 편합니다.
  2. 왼쪽 위 프로젝트 선택 → 새 프로젝트를 누릅니다.
  3. 이름(예: YouTubeUpload)을 입력하고 만들기를 누릅니다.
  4. 화면 위쪽에서 방금 만든 프로젝트가 선택되어 있는지 확인합니다. 다른 프로젝트가 선택된 상태로 진행하면 설정이 엉뚱한 곳에 들어갑니다.

2단계. YouTube Data API v3 사용 설정

  1. 왼쪽 메뉴 API 및 서비스 → 라이브러리로 갑니다.
  2. 검색창에 YouTube Data API v3를 입력합니다.
  3. 사용(Enable) 버튼을 누릅니다.

3단계. OAuth 동의 화면 설정

로그인할 때 "OO 앱이 내 유튜브 계정에 접근하려고 합니다"라고 나오는 화면을 설정하는 단계입니다. Google Cloud 콘솔 메뉴에서는 OAuth 동의 화면 또는 Google 인증 플랫폼(Google Auth Platform)이라는 이름으로 표시됩니다.

항목 입력할 값
앱 이름 아무 이름 (예: YouTubeUploader)
사용자 지원 이메일 내 이메일
대상(User Type) 외부(External)
개발자 연락처 이메일 내 이메일

⚠️ 테스트 사용자 등록 (가장 많이 빠뜨리는 단계)

앱을 처음 만들면 "테스트 중(Testing)" 상태입니다. 이 상태에서는 테스트 사용자로 등록한 계정만 로그인할 수 있습니다.

대상(Audience) 메뉴의 테스트 사용자 항목에 영상을 올릴 유튜브 채널의 구글 계정을 추가하세요. 이 단계를 빠뜨리면 로그인할 때 access_denied(액세스 차단됨) 오류가 납니다.

4단계. OAuth 클라이언트 ID 만들기

  1. 사용자 인증 정보(Credentials) 메뉴 또는 Google 인증 플랫폼의 클라이언트 메뉴로 갑니다.
  2. 사용자 인증 정보 만들기 → OAuth 클라이언트 ID를 선택합니다.
  3. 애플리케이션 유형은 데스크톱 앱(Desktop app), 이름은 아무거나(예: YouTubeUploader) 입력하고 만들기를 누릅니다.
  4. 생성 완료 창에서 JSON 다운로드를 누릅니다.
  5. 내려받은 파일(client_secret_XXXX.apps.googleusercontent.com.json)을 파이썬 프로젝트 폴더로 옮기고, 이름을 client_secret.json으로 바꿉니다.

파일 내용은 대략 이런 구조입니다.

{
  "installed": {
    "client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com",
    "project_id": "youtube-upload",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "client_secret": "YOUR_CLIENT_SECRET",
    "redirect_uris": ["http://localhost"]
  }
}

맨 위가 "installed"로 시작하면 데스크톱 앱용으로 제대로 만든 것입니다. "web"으로 시작한다면 애플리케이션 유형을 잘못 고른 것이니 다시 만드세요.

🔒 client_secret.json과 나중에 생기는 token.json은 비밀번호와 같은 파일입니다. 깃허브에 올리지 않도록 .gitignore에 꼭 추가하세요.

client_secret.json
token.json

5단계. 파이썬으로 업로드하기

라이브러리 설치

pip install google-api-python-client google-auth-oauthlib google-auth-httplib2

업로드 코드

아래 코드를 upload.py로 저장하고, client_secret.json과 같은 폴더에 둡니다.

import os
from google.auth.exceptions import RefreshError
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

# 업로드 권한만 요청 (채널의 다른 정보는 건드리지 않음)
SCOPES = ["https://www.googleapis.com/auth/youtube.upload"]


def get_youtube():
    creds = None
    if os.path.exists("token.json"):
        creds = Credentials.from_authorized_user_file("token.json", SCOPES)

    if creds and creds.expired and creds.refresh_token:
        try:
            creds.refresh(Request())          # 저장된 인증 정보 갱신
        except RefreshError:
            creds = None                      # 갱신 실패 → 다시 로그인

    if not creds or not creds.valid:
        flow = InstalledAppFlow.from_client_secrets_file("client_secret.json", SCOPES)
        creds = flow.run_local_server(port=0)  # 브라우저가 열리고 로그인

    with open("token.json", "w") as f:
        f.write(creds.to_json())               # 다음부터 자동 로그인
    return build("youtube", "v3", credentials=creds)


def upload(path, title, description="", tags=None, privacy="private"):
    youtube = get_youtube()
    body = {
        "snippet": {
            "title": title,
            "description": description,
            "tags": tags or [],
            "categoryId": "22",                # 22 = 인물/블로그
        },
        "status": {
            "privacyStatus": privacy,          # public / private / unlisted
            "selfDeclaredMadeForKids": False,  # 아동용 영상 여부
        },
    }
    media = MediaFileUpload(path, chunksize=-1, resumable=True)
    request = youtube.videos().insert(part="snippet,status", body=body, media_body=media)

    response = None
    while response is None:
        status, response = request.next_chunk()
        if status:
            print(f"업로드 중... {int(status.progress() * 100)}%")

    print("업로드 완료: https://youtu.be/" + response["id"])
    return response["id"]


if __name__ == "__main__":
    upload(
        "my_video.mp4",
        title="API로 올린 첫 영상",
        description="파이썬 YouTube Data API 업로드 테스트",
        tags=["python", "youtube api"],
        privacy="private",   # 처음에는 비공개로 테스트
    )

실행

python upload.py

처음 실행하면 다음 순서로 진행됩니다.

  1. 브라우저가 자동으로 열리고 구글 로그인 화면이 나옵니다. 3단계에서 테스트 사용자로 등록한 계정으로 로그인합니다.
  2. "Google에서 확인하지 않은 앱" 경고가 나옵니다. 내가 만든 앱이니 고급 → (앱 이름)(으)로 이동을 눌러 계속 진행합니다.
  3. 업로드 권한을 허용합니다.
  4. 같은 폴더에 token.json이 생기고, 업로드가 시작됩니다.

두 번째 실행부터는 token.json으로 자동 로그인되어 브라우저가 열리지 않습니다.

코드에서 알아두면 좋은 부분

부분 설명
SCOPES youtube.upload는 업로드만 허용하는 권한입니다. 필요한 만큼만 요청하는 것이 안전합니다.
privacyStatus 값을 지정하지 않으면 기본값은 공개(public)입니다. 테스트할 때는 꼭 private로 두세요.
resumable=True 이어 올리기 방식입니다. 큰 파일도 안정적으로 올라갑니다.
categoryId 영상 카테고리 번호입니다. 22는 인물/블로그, 27은 교육, 28은 과학기술입니다.
token.json 원래 글에서는 token.pickle을 썼습니다. 지금은 사람이 읽을 수 있는 JSON 형식으로 저장하는 방식이 일반적입니다.

업로드 제한 (할당량)

YouTube API는 하루에 쓸 수 있는 양이 정해져 있습니다. 2026년 10월 현재 공식 문서 기준으로 영상 업로드(videos.insert)는 업로드 전용 할당량에서 하루 100회까지 호출할 수 있습니다. 개인 채널 자동화에는 충분한 양입니다.

할당량 사용량은 Google Cloud 콘솔의 API 및 서비스 → YouTube Data API v3 → 할당량에서 확인할 수 있습니다.

💡 할당량 정책은 몇 번 바뀐 적이 있습니다. 예전 글에서 "업로드 1회에 1,600 단위"라고 설명하는 경우가 많은데, 지금은 기준이 다를 수 있으니 공식 문서를 확인하세요.


자주 겪는 오류와 해결 방법

① 로그인할 때 access_denied / "액세스 차단됨"

3단계의 테스트 사용자에 로그인한 계정이 등록되지 않은 경우입니다. 대상(Audience) 메뉴에서 계정을 추가하고 다시 실행하세요.

② 일주일쯤 지나자 invalid_grant / Token has been expired or revoked

앱이 "테스트 중" 상태이면 저장된 인증 정보(리프레시 토큰)가 7일 후 만료됩니다. 위 코드는 갱신에 실패하면 자동으로 다시 로그인 화면을 띄웁니다. 직접 해결하려면 token.json을 지우고 다시 실행하면 됩니다. 매주 다시 로그인하기 번거롭다면 앱의 게시 상태를 "프로덕션(In production)"으로 바꾸는 방법이 있습니다.

③ redirect_uri_mismatch

OAuth 클라이언트를 웹 애플리케이션 유형으로 만든 경우입니다. 4단계에서 데스크톱 앱으로 다시 만들고 client_secret.json을 교체하세요.

④ quotaExceeded

하루 할당량을 다 쓴 경우입니다. 할당량은 태평양 시간 자정(한국 시간 오후 4~5시경)에 초기화됩니다.

⑤ YouTube Data API v3 has not been used in project ... or it is disabled

2단계에서 API를 사용 설정하지 않았거나, 다른 프로젝트에서 설정한 경우입니다. 콘솔 위쪽에서 선택된 프로젝트를 확인하세요.

⑥ 서버 오류(500, 502, 503, 504)로 업로드가 중간에 실패

일시적인 서버 문제입니다. 구글의 공식 업로드 예제는 이런 오류가 나면 잠시 기다렸다가 최대 10번까지 다시 시도하도록 만들어져 있습니다. 자동화로 매일 돌린다면 이 재시도 로직을 추가하는 것이 좋습니다.


다음 단계: 쇼츠 자동화로 확장하기

업로드가 코드로 가능해지면 영상 제작부터 업로드까지 한 번에 묶을 수 있습니다.

  1. 영상 제작: AI 영상 생성·편집 도구로 쇼츠 영상 만들기 (쇼츠 영상 제작 도구 총정리 참고)
  2. 업로드: 위 upload() 함수로 제목, 설명, 태그와 함께 업로드
  3. 알림: 업로드가 끝나면 영상 링크를 텔레그램으로 받기 (텔레그램 봇 만들기 참고)

⚠️ 자동으로 영상을 올리더라도 유튜브 커뮤니티 가이드와 저작권 규정은 똑같이 적용됩니다. 비슷한 영상을 대량으로 반복 업로드하면 스팸으로 판단될 수 있으니 주의하세요.


정리

단계 핵심
Google Cloud 설정 프로젝트 생성 → YouTube Data API v3 사용 설정
OAuth 설정 외부(External) + 테스트 사용자에 내 계정 등록
인증 파일 데스크톱 앱 유형으로 만든 client_secret.json
업로드 youtube.upload 권한 + videos().insert() + 이어 올리기
보안 client_secret.json, token.json은 절대 공개하지 않기

※ 2026년 10월 기준 공식 문서를 참고해 작성했습니다.

반응형

+ Recent posts