Gemini Gems 만들기 — 감점제 AI 리뷰어 만드는 법

이미지
Gemini Gems로 감점제 AI 리뷰어를 만드는 방법이다. gemini.google.com에서 이름과 지시문을 입력하면 5분 안에 완성된다. 코딩 필요 없다. 만들고 나면 코드든 글이든 붙여넣을 때마다 “잘 짰습니다” 대신 감점 목록부터 나온다. Google Workspace를 쓰고 있다면 GPTs 대신 이쪽이 자연스럽다. Gemini도 칭찬부터 한다 Gemini에게 “이 코드 리뷰해줘”라고 하면 “잘 구현되었네요!”부터 나온다. ChatGPT, Claude 다 마찬가지다. AI는 칭찬하도록 훈련되어 있다. 이전 글 에서 ChatGPT GPTs로 감점제 리뷰어를 만드는 방법을 다뤘다. 이번에는 같은 원리를 Gemini Gems에 적용한다. Gemini를 주로 쓰는 사람이라면 이쪽이 맞다. Gems란 뭔가 Gems는 Gemini 안에서 만드는 맞춤형 AI다. 이름과 지시문을 설정하면 그 역할에 고정된 AI가 만들어진다. ChatGPT의 GPTs와 같은 기능이다. GPTs와의 차이는 Google 생태계 안에서 작동 한다는 점이다. Google Workspace를 쓰고 있다면 Gems 쪽이 자연스럽다. 그리고 Gems는 저장 전에 미리보기 로 바로 테스트할 수 있어서 지시문을 조정하기가 편하다. Gemini Gems로 감점제 리뷰어 만드는 방법 필요한 것: - Gemini Advanced (Google One AI Premium, 월 $19.99) - 웹 브라우저 매번 “솔직하게 말해줘”를 반복하는 시간이 쌓이면 한 달에 수십 번의 불필요한 타이핑이다. Gems로 한 번 고정하면 그 비용이 0이 된다. 1단계: Gems 생성 화면 열기 gemini.google.com 접속 좌측 메뉴 → Gems 탐색하기 새 Gem 클릭 2단계: 기본 정보 입력 이름 : 감점제 리뷰어 (또는 원하는 이름) 지시문 : 아래 내용을 그대로 붙여넣는다 3단계: 지시문 입력 이게 핵심이다. 이 지시문이 Gem의 행동...

ChatGPT GPTs 만들기 — 감점제 AI 리뷰어 만드는 법

이미지
ChatGPT GPTs로 감점제 AI 리뷰어를 만드는 방법이다. ChatGPT 화면에서 이름과 지시문을 입력하면 5분 안에 완성된다. 코딩 필요 없다. 만들고 나면 코드를 붙여넣을 때마다 “잘 짰습니다” 대신 감점 목록부터 나오는 리뷰어가 된다. 왜 ChatGPT 기본 리뷰로는 부족한가 ChatGPT에게 “이 코드 리뷰해줘”라고 하면 “전반적으로 잘 작성되었습니다”부터 나온다. 이건 ChatGPT가 거짓말을 하는 게 아니라 칭찬하도록 훈련된 결과다. RLHF(사용자가 ‘좋아요’를 누른 답변을 더 만드는 훈련)에서 기분 좋은 답변에 점수가 올라가니까 아첨을 학습한 것이다. “솔직하게 리뷰해줘”라고 써봐도 대화가 길어지면 다시 부드러워진다. 해결 방법은 GPTs로 역할 자체를 고정하는 것이다. GPTs란 뭔가 GPTs(Custom GPT)는 ChatGPT 안에서 만드는 맞춤형 AI다. 이름과 지시문을 설정하면 그 역할에 고정된 AI가 만들어진다. 매번 “솔직하게 말해줘”를 반복할 필요가 없어진다. 매번 지시를 반복하는 시간이 쌓이면 한 달에 수십 번의 불필요한 타이핑이다. GPTs로 역할을 한 번 고정하면 그 비용이 0이 된다. ChatGPT GPTs로 리뷰어 만드는 방법 1단계: GPTs 생성 화면 열기 ChatGPT 접속 좌측 메뉴 → GPTs 살펴보기 우측 상단 → 만들기 클릭 2단계: 기본 정보 입력 이름 : 감점제 리뷰어 (또는 원하는 이름) 설명 : 10점 만점에서 감점만 하는 코드/글 리뷰어. 칭찬 금지. 지시문 : 아래 시스템 프롬프트를 통째로 붙여넣는다 3단계: 시스템 프롬프트 입력 이게 핵심이다. 이 지시문이 GPT의 행동을 결정한다. 아래 내용을 “지시문” 칸에 그대로 붙여넣으면 된다. 내용을 이해할 필요 없다. 복사해서 붙여넣기만 하면 작동한다: 너는 코드와 글을 채점하는 심판이다. 규칙: - 10점 만점에서 감점만 한다. 가산점은 없다. - 칭찬은 금지다. “잘 ...

Claude Code 사용법 — 블로그 글 자동 발행 시스템 만들기

Claude Code로 블로그 자동 발행 스크립트를 만드는 방법이다. 마크다운 파일을 터미널에서 명령어 한 줄로 Blogspot에 발행한다. Google Cloud Console 설정 10분, Claude Code에 지시 20분, 테스트 5분이면 끝난다. 코드를 직접 쓰지 않고 Claude Code에게 지시만 해서 만들었다. Claude Code가 뭔가 터미널에서 “블로그 발행 자동화해줘”라고 치면 스크립트를 만들어주는 AI 코딩 도구다. Anthropic이 만들었다. IDE 플러그인이 아니라 독립 CLI 도구다. 프로젝트 폴더 전체를 읽고, 파일을 직접 생성하고 수정하고 실행까지 한다. 블로그 글 1편 올리는 데 15분이 걸렸다 Blogspot에 글을 올리려면 마크다운 → HTML 변환 → Blogger 접속 → 제목 입력 → HTML 모드 전환 → 본문 붙여넣기 → 라벨 설정 → 검색 설명 → 미리보기 → 발행. 1편에 15분. 한 달에 30편이면 7시간 이상을 “올리는 작업”에만 쓰는 셈이다. 글 쓰는 시간보다 올리는 시간이 더 길었다. 이걸 Claude Code에게 맡겼다. Claude Code에게 한 지시 터미널에서 Claude Code를 열고 이렇게 말했다: “마크다운 파일을 Blogger API v3으로 자동 발행하는 Python 스크립트를 만들어줘. frontmatter에서 제목, 라벨, 슬러그를 읽고, 마크다운을 HTML로 변환한 뒤, OAuth 2.0으로 인증해서 Blogger에 POST해줘. dry-run 옵션도 넣어줘.” Claude Code가 만든 것: publish.py 메인 스크립트 (약 200줄) requirements.txt 의존성 목록 config.json 설정 파일 OAuth(구글 로그인 인증) 흐름 (최초 1회 브라우저 인증 → 이후 자동) dry-run 모드 (발행 없이 HTML 미리보기) ...

AI 아첨을 감지하는 것과 줄이는 것은 다르다 — 감점제 AI 리뷰어를 만든 이유

왜 AI는 항상 "좋습니다"라고 하는가 AI에게 코드 리뷰를 시키면 "잘 짰습니다"부터 나온다. 이건 AI가 거짓말을 하는 게 아니라 칭찬하도록 훈련된 결과다. 프롬프트로 "솔직하게 말해줘"라고 해도 근본적으로 바뀌지 않는다. AI 모델은 사용자가 '좋아요'를 누른 답변을 더 많이 만들도록 훈련된다. 이 방식을 RLHF(인간 피드백 기반 강화학습)라고 한다. 문제는 사람이 정확한 답보다 기분 좋은 답에 '좋아요'를 더 많이 누른다는 것이다. AI 입장에서는 동의하면 점수가 올라가고, 칭찬하면 점수가 올라간다. 그래서 아첨을 학습한다. Anthropic이 이 문제를 직접 연구해서 논문으로 발표 했다. 2026년 3월에는 Stanford 연구팀이 AI 챗봇의 아첨이 "위험한 수준" 이라는 결과를 냈다. 코드 리뷰에서 이 문제가 특히 위험하다. 코드를 보여주면 "구조가 깔끔합니다"로 시작한다. 버그가 있어도 "전반적으로 잘 작성되었습니다"를 먼저 말하고 문제를 조심스럽게 언급한다. AI가 동의했으니까 맞겠지. 이 가정이 가장 위험하다. 감점제 — 칭찬할 구조가 없는 채점표 만든 도구의 이름은 brutal-review다. 원리는 단순하다. 10점 만점에서 시작해서 감점만 한다. 가산점이 없다. "잘한 점"을 말할 칸이 채점표에 없으니, AI가 칭찬을 끼워넣을 여지가 줄어든다. 실제 결과는 이렇게 나온다. SUDYA MYASNIK (The Butcher) — Final Scorecard ============================================== 종목 1. 구조적 정확성(Structural Correctness): 0.9 /...

맥스튜디오 도착 1주 전, 카페24가 오픈클로 VPS 를 풀었다 — 결정을 다시 한 5가지 기준

4월 중순에 맥스튜디오가 도착합니다. 그 1주 전인 어제, 카페24가 14,000원에 오픈클로(OpenClaw) VPS 를 풀었습니다. ( 헤럴드경제 보도 , 카페24 공식 페이지 ) 오픈클로는 2025년 11월에 공개된 후 두 달 만에 GitHub 스타 14만 개를 돌파한 오픈소스 AI 에이전트 프레임워크입니다 ( Milvus 가이드 ). 텔레그램·슬랙 같은 메신저와 OpenAI·Gemini 같은 LLM 을 연동해서 실제 작업을 수행하는 자율 에이전트 도구죠. 저는 2월부터 이걸 맥북 안에서 임시로 돌리고 있었습니다. 노트북 자원을 잡아먹는 게 부담이라, 맥스튜디오가 도착하면 거기에 본격적으로 셋업하려던 계획이었죠. 그 셋업 직전에 카페24가 14,000원이라는 가격으로 매니지드 옵션을 던졌습니다. "맥스튜디오에 오픈클로 셋업을 그대로 진행할까, 아니면 카페24로 갈아탈까?" 이 글은 AI 에이전트를 직접 운영 중이거나, 매니지드 호스팅 도입을 고민 중인 개발자 를 위한 글입니다. 어제 30분 동안 정리한 5가지 결정 기준 을 공유합니다. 카페24 출시를 계기로 정리하지만, 이 기준은 카페24에만 적용되는 게 아니라 모든 AI 에이전트 자가 호스팅 결정 에 적용됩니다. 1. 사용 시간 — 매일 8시간 이상인가, 주 1~2회인가 자가 호스팅의 모든 비용 (시간, 학습, 유지보수) 이 정당화되려면 충분한 사용량이 필요합니다. 매일 8시간 이상 : 셀프 호스팅의 한계 비용이 0에 가까워짐. 정당화됨. 주 1~2회 : 매니지드가 시간/심리적 부담 모두 적음. 14,000원의 가치가 명확. 저는 매일 8시간 이상 사용하는 케이스라 직접 호스팅 쪽으로 기울었습니다. 만약 가끔만 쓰는 상황이라면 카페24가 압도적으로 합리적인 선택입니다. 2. 데이터 민감도 — 사내 코드인가, 공개 가능한 작업인가 매니지드 호스팅은 데이터가 외부 서버를 통과합니다. 법적으로 문제 없지만...

LSTM 네트워크 이해하기

이미지
 이 글은 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 를 번역하여 정리한 글입니다. -------------------------------------------------------------------------  RNN(Recurrent Neural Network)은 히든 노드가 방향을가진 엣지로 연결되어 순환 구조를 이루는 Neural Network의 한 종류이다. RNN이 기존 Neural Network와 다른 점은 지금 들어온 입력 데이터와 과거에 입력 받았던 데이터를 동시에 고려한다는 점이다. 순환 신경망은 내부에 정보가 지속되는 것을 돕는 순환 구조를 가진 네트워크이며, 과거의 데이터가 미래에 영향을 주는 구조를 가지고 있다. [그림 1] RNN의 기본구조  [그림 1]에서 신경망 A는 $X_t$를 입력 값으로 가지고 $h_t$를 결과 값으로 출력한다. 루프는 정보가 전 단계의 네트워크에서 그 다음 단계로 전달되도록 한다. 순환 신경망은 하나의 네트워크가 여러 개로 복사된 형태를 보이고 있는데, 각각의 네트워크는 현재 갖고있는 정보를 다음 단계로 넘겨준다. [ 그림 2] 펼쳐진 순환 신경망    [그림 2]는 [그림 1]의 순환 구조를 펼쳐 놓은 것이다. RNN의 사슬 같은 모양을 통해 RNN이 시퀀스와 리스트를 처리하는 것과 관련이 있음을 알 수 있다. 따라서 순환 신경망은 연속적인 이벤트, 리스트에 관한 문제를 해결하기 위한 알고리즘으로 적절하기 때문에 시계열 모형 수립에 활용할 수 있다. 순환 신경망의 단점 중 하나는 정보가 오래된 정보를 현재 정보에 반영할 수 없다는 점이다. 이를 해결하기 위해 나타난 것이 LSTM이다. LSTM의 기본 동작 원리는 정보를 오랫동안 기억하는 것이며 [그림 3]은 LSTM의 구조를 나타낸 그림이...

[알고리즘] 파이썬으로 Trie 구현하기(2)

이미지
 1편에 이어 2편이다. 지난 장에서는 trie의 간단한 개념과 생성과 입력 기능에 대해 알아보았다. 이번 편에서는 조회와 삭제에 대해 알아보도록 하겠다. 접두어로 검색  Trie의 가장 큰 장점이라고 생각하는 접두어 검색 기능이다. 단어의 일부분으로 전체단어를 검색할 수 있다. 예를들어 trie에 gold, good, gerald를 저장한 다음 검색어에 g를 입력하면 gold, good, gerald를 모두 검색할 수 있다. 이런 기능은 검색어 자동완성에 쓰인다고 한다. 우선 검색 부분의 코드를 보도록 하겠다. def search_with_prefix(self, prefix): words = list() if prefix is None: raise ValueError('Requires not-Null prefix') top_node = self.head for letter in prefix: if letter in top_node.children: top_node = top_node.children[letter] else: return words if top_node == self.head: queue = [node for key, node in top_node.children.items()] else: queue = [top_node] while queue: current_node = queue.pop() if current_node.data is not None: words.append(current_node.data) queue = [node f...

[책 리뷰] 지리의 힘

이미지
 이 책 원문 제목은 지리의 죄수들 (Prisoners of Geography)이다. 음 그냥 영어로 읽었을 때 무슨 책 제목을 지리의 힘 따위로 번역하나 했는데 직역해보니 지리의 힘이 훨씬 나은 것 같다. 이 책에서 하는 얘기는 간단하다. 현재 일어나고 있는 국가 간의 분쟁, 국가의 흥망성쇠는 지리적인 영향 때문이라는 것이다. 미국이 세계 최고의 강대국이 된 것도, 중국이 현재 취하고 있는 국제적인 행동을 지리적인 관점에서 해석한 책이다. 물론 지리적인 영향이 있기전에 인간의 선택이 있기는 하다. 땅을 차지하고 나서보니 지리적인 이점을 누릴 수 있는 곳인 경우도 있고, 지리적 이점을 취하기 위해 그 땅을 차지한 경우도 있다.  그리고 지리적인 요소에 가장 영향을 주는 것은 당연히도 '물'이다. 일차적으로는 강이 제일 중요한 요소고 그 다음은 바다이다. 강은 나라의 번영에도 그리고 자국 영토에도 매우 중요한 요소이다. 먼 과거뿐만 아니라 오늘날에도 말이다. 큰 강 유역을 끼고 있는 나라들은 전부 번성했다. 물론 수원지로부터 바다로 흘러가기 전까지 강 유역의 고도 변화가 심하지 않는다는 조건이 있지만.... 이 조건에 만족하지 못하는 나라는 큰 강을 끼고있어도 그 혜택을 누리지 못하는데 그 대표적인 예가 브라질이다. 브라질은 아마존이라는 큰 강을 갖고 있지만 바다에서 아마존 강을 이용해 내륙으로 들어가는 것이 힘들다고 한다. 그래서 브라질의 대도시는 해안가에 집중되어 있다고 한다. 인위적으로 브라질리아 같은 도시를 내륙에 만들기는 했지만 이런 지리적인 도움을 받지 않는 도시는 한계가 있다고 한다.  그 다음 중요한 요소인 바다는 타국과의 교류에 필수적인 요소이다. 국경을 맞대고있는 나라가 있을수도 있지만 그 숫자는 한정적이고, 바다를 통해 타국과 교류가 가능한 나라는 자원이 부족한 국가에겐 자원을 수급할 수 있는 통로가 되고 자원이 넘치는 나라에는 그 자원을 통해 배를 불릴 수 있는 통로가 된다. 사실 바다 보다는 항구가 중...

[알고리즘] 파이썬으로 Trie 구현하기(1)

이미지
 Trie는 이 구조를 구현한 라이브러리도 여럿있어서 파이썬으로 구현하기는 쉬울 것이다. 하지만 trie에 대해 더 잘 이해하고 연습도 할 겸 여기저기에서 참조해가며 직접 만들어 보았다. 이번에는 trie에 대한 간단한 개념과 문자열의 삽입과 조회 부분의 구현까지 진행할 것이다. 특징   Trie는 prefix tree라고도 불리는 트리 구조의 알고리즘이다. Trie는 다음과 같은 특징이 있다. 검색이 빠르고,  문자열을 키로하는 동적 집합이나 연관 배열로 사용되고  노드는 키를 갖지 않는 대신 노드의 위치가 키 역할을 하고  root가 빈 스트링이라는 특징이 있다. 시간 복잡도  시간 복잡도는 알고리즘의 수행시간 분석결과를 나타내는 용어이다. 당연히 시간 복잡도가 낮을수록 좋으며 연산 횟수를 계산하고, 처리해야 할 데이터의 수 n에 대한 연산횟수 함수 T(n)을 구성하여 구한다.  Trie의 시간 복잡도는 대표적인 트리 구조 중 하나인 이진 검색 트리(Binary Search Tree)와 비교를 해보도록 하겠다. 데이타 구조 시간 복잡도 (정수/실수) 이진 검색 트리 O(logN) 문자열 이진 검색 트리 O(MlogN) 트라이 O(M)   문자열은 길이가 변하기 때문에 검색 시간이 많이 소요된다. 길이가 고정된 정수나 실수는 O(logN)의 시간이 걸리지만 문자열은 길이가 변하기 떄문에 문자열의 최대 길이 M을 곱한 O(MlogN)이 된는데 trie는 이러한 문제를 해결하기 위해 고안된 자료구조이다. 트라이의 구조  알파벳만을 사용하여 trie를 구성할 경우 각 노드는 26개의 알파벳과 1개의 공백으로 구성된 27개의 포인터를 갖고있는 배열을 갖고 있다.   문자열 집합 : S = {"BE", "BET", "BUS", "TEA", "TEN"}을 trie로 구성한 그...