Sanghun's Blog

Sanghun's Blog

Writing and notes by Sanghun Kang

고스트 CMS 다국어 블로그: 9. Author 페이지와 포스트페이지에서 언어 전환 가능하도록 업데이트
Ghost

고스트 CMS 다국어 블로그: 9. Author 페이지와 포스트페이지에서 언어 전환 가능하도록 업데이트

기존 테마에는 두 가지 문제가 남아 있었다. 1. Tag 페이지에서는 선택한 언어의 포스트만 보이지만 Author 페이지에서는 영어와 한국어 포스트가 모두 보인다. 2. 번역된 포스트가 있어도 Language selector에서 언어를 바꾸면 해당 포스트가 아니라 선택한 언어의 메인 페이지로 이동한다. 0.0.9에서는 Author 페이지를 기존 Tag 페이지와 같은 방식으로 처리하고, #multi 포스트에서는
7 min read
고스트 CMS 다국어 블로그: 8. #multi 포스트 hreflang 자동화
Ghost

고스트 CMS 다국어 블로그: 8. #multi 포스트 hreflang 자동화

💡Managed Ghost hosting 서비스에서는 Ghost Core를 수정하거나 custom Handlebars helper를 등록할 수 없다. 이 제약 안에서 반복적인 Code Injection을 없애기 위해 선택한 방식이다. 포스트마다 Ghost Admin의 Code Injection에 hreflang을 직접 넣을 수는 있다. 그러나 번역 포스트를 발행할 때마다 영어 URL과 한국어 URL을 양쪽 포스트에 반복해서 입력해야 한다. URL을 잘못 복사하거나
6 min read
고스트 CMS 다국어 블로그: 7.hreflang 적용
Ghost

고스트 CMS 다국어 블로그: 7.hreflang 적용

영어 홈은 /, 한국어 홈은 /ko/에서 제공하고 있지만 검색엔진에는 두 페이지가 서로 다른 언어 버전이라는 정보가 없었다. 사용자에게 Language selector를 제공하는 것과 검색엔진에 다국어 관계를 설명하는 것은 별개의 문제다. 검색엔진에는 hreflang을 이용해 각 언어 URL의 관계를 알려줘야 한다. 0.0.7에서는 영어와 한국어 홈 페이지에 hreflang을 추가했다. 0.0.7
4 min read
고스트 CMS 다국어 블로그: 6. Tag 페이지 포스트 설명이 보이지 않는 문제 수정
Ghost

고스트 CMS 다국어 블로그: 6. Tag 페이지 포스트 설명이 보이지 않는 문제 수정

앞선 버전에서 Tag 페이지에도 다국어 필터링을 적용했다. Language selector에서 선택한 언어와 일치하는 포스트 카드만 보여주고, 카드가 부드럽게 나타나도록 opacity transition도 추가했다. 그런데 실제로 사용해보니 포스트 카드의 제목과 이미지는 보이지만 포스트 설명은 투명한 상태로 남는 문제가 있었다. 카드 제목과 이미지는 보이지만 설명은 나타나지 않는다. 0.0.6 · Fix Tag page excerpt
3 min read
Orca and ChatGPT logos connected by a data bridge
dev

Orca에서 만든 Codex thread를 ChatGPT 앱에 표시하는 방법

Orca라는 터미널 앱이 핫하길래 써봤다. 직접 써보니 worktree와 터미널을 함께 관리하기 편해 꽤 괜찮았다. 그런데 Orca에서 만든 Codex thread가 ChatGPT 앱에는 나타나지 않았다. 반대로 ChatGPT 앱에서 만든 thread는 Orca에서 실행하면 보였다. 모든 환경에서 동일한 설정을 추구하는 나로서는 치명적인 문제였다. 원인은 Orca가 자체적으로 별도의 CODEX_HOME을 사용하고 있었기 때문이다. 이 값을
5 min read
[App] 하나의 기기에서 Codex(chatgpt) 다계정 사용하기
dev

[App] 하나의 기기에서 Codex(chatgpt) 다계정 사용하기

빠르게 적용하기: 이 글의 url을 당신의 ai에게 던져서 이대로 해달라고 하세요. (단 앱은 서명이 얽혀서 CLI보다 까다로우니 결과는 꼭 확인하자.) TLDR: * ChatGPT 데스크톱 앱을 계정별로 두 개(이상) 띄울 수 있게 된다. 동시에. * 업데이트는 앱 열 때 자동으로 진행된다. * 주의: passkey 로그인은 불가능. OTP·비밀번호·SSO로 로그인해야 함. 방법 아래를
8 min read
[CLI] 하나의 기기에서 Codex(chatgpt) 다계정 사용하기
dev

[CLI] 하나의 기기에서 Codex(chatgpt) 다계정 사용하기

한도 다 쓰면 로그아웃하고 다른 계정으로 로그인하는 게 귀찮아서 정리함. 빠르게 적용하기: 이 글의 url을 당신의 ai에게 던져서 이대로 해달라고 하세요. TLDR: * 여러 개의 CLI를 만든다. (이 글에선 2개로 가정) * 모든 걸 공유한다. 대화내역, 메모리, 스킬 등 전부 하나처럼 유지된다. (사실 하나다. symlink니까) * 로그인정보만 다르게 하면 된다. * 이 방식으로 2개
3 min read
Claude Code 세션 종료 시 resume 명령어 자동 클립보드 복사
dev

Claude Code 세션 종료 시 resume 명령어 자동 클립보드 복사

Claude Code를 쓰다 보면 세션을 종료 후 재시작해야 할 때가 있다. 종료하면 claude --resume {session_id} 형태로 터미널에 뜨는데, 매번 이걸 드래그해서 복사하는 게 번거로워서 자동화했다. Claude Code의 hook 기능을 쓰면 이걸 자동화할 수 있다. 설정 ~/.claude/settings.json에 SessionEnd hook을 추가한다. "hooks": { "SessionEnd": [ { "hooks&
1 min read
SSH 접속했더니 Backspace가 안 먹힌다? terminfo 문제 해결법
dev

SSH 접속했더니 Backspace가 안 먹힌다? terminfo 문제 해결법

새 터미널 앱을 설치하고 신나게 쓰다가, 원격 서버에 SSH로 접속한 순간 Backspace가 먹통이 된 경험이 있는가? 글자를 지우려고 Backspace를 눌렀는데 커서가 뒤로 가는 게 아니라 공백이 찍히는 황당한 상황. 이 글에서는 왜 이런 일이 생기는지, 그리고 명령어 한 줄로 어떻게 해결하는지 정리한다. 증상 * 로컬에서는 모든 게 정상 * SSH로 원격 서버에
3 min read
여러 대의 Mac에서 Claude Code 설정을 동기화하는 방법
dev

여러 대의 Mac에서 Claude Code 설정을 동기화하는 방법

MacBook Pro와 Mac Mini를 동시에 쓰고 있다. 두 머신 모두 Claude Code를 쓰는데, 한쪽에서 설정한 커스텀 스킬, 에이전트, 메모리 같은 것들이 다른 쪽에는 없다. 매번 수동으로 복사하는 건 말이 안 된다. ~/.claude 폴더를 두 머신 간에 자동으로 동기화하고, 동시에 Git으로 형상관리까지 하고 싶었다. ~/.claude 안에는 뭐가 있나 Claude Code의 모든
11 min read
SSH 접속 시 zsh 탭 완성이 대소문자를 구분하는 문제 해결
dev

SSH 접속 시 zsh 탭 완성이 대소문자를 구분하는 문제 해결

맥북에서는 cd d + Tab을 누르면 D로 시작하는 폴더도 함께 뜬다. 대소문자를 구분하지 않는다. 그런데 맥미니에 SSH로 접속하면 cd d + Tab 시 소문자 d로 시작하는 폴더만 나온다. 두 머신 모두 APFS(case-insensitive) 파일시스템인데 동작이 다르다. 원인 macOS의 zsh는 기본적으로 completion 시스템(compinit)이 자동 로드되지 않는다. 맥북은 Oh My Zsh
2 min read
맥 옵시디언에서 한글이 씹히는 현상 - 캐시 삭제로 해결
mac

맥 옵시디언에서 한글이 씹히는 현상 - 캐시 삭제로 해결

옵시디언에서 한글을 타이핑하다 보면 글자가 씹히는 현상이 생긴다. 영어는 멀쩡한데 한글만 그렇다. 처음엔 macOS 입력기 문제인 줄 알았다. 구름 입력기로 바꿔보기도 하고, 옵시디언 설정을 이것저것 건드려봤는데 소용없었다. 원인 옵시디언은 Electron 기반 앱이다. Electron은 Chromium 엔진 위에서 돌아가는데, 이 Chromium의 IME(입력기) 처리와 macOS 한글 조합 방식이 충돌하면서 생기는 문제다. 옵시디언만의
2 min read
"실패를 통과하는 일"을 읽고
book

"실패를 통과하는 일"을 읽고

실패해본적 있나요? 아마 있겠죠. 있을거에요. 실패 안하는 사람 어딨어요. 저도 마찬가지에요. 그런데 말이죠, 실패를 남들에게 공유해본적은 없는거 같아요. 인스타그램에는, 링크드인에는, 서점에는 성공담이 넘쳐나지만, 실패담은 찾아보기 어려워요. 특히 당사자가 직접 기록한 실패의 기록은 더더욱. 그런 의미에서 이 책은 창업자가 직접 10년간의 과정을 공유한다는 것만으로도 눈길을 끌었어요. 과거 퍼블리와 커리어리의 이용자로서 서비스를
2 min read
시어도어 루스벨트 - Man in the Arena
translation

시어도어 루스벨트 - Man in the Arena

💡인상깊은 문장을 직접 번역해보았다. 중요한 것은 비평가가 아닙니다. 강한 자가 어떻게 무너지는지, 또는 행동하는 이가 어떻게 하면 더 잘할 수 있었는지 지적하는 사람도 중요하지 않습니다. 영광은 실제로 경기장에 선 사람에게 돌아갑니다. 먼지와 땀과 피로 얼굴이 얼룩진 자, 용감하게 분투하는 자, 수없이 실수하고 거듭 무너지지만, 노력에는 실수와 부족함이 따르기 마련임을 아는
5 min read
[Powerlevel10k+Oh-My-Zsh] Cursor Agent 터미널 출력/잘림/깨짐 해결법
dev

[Powerlevel10k+Oh-My-Zsh] Cursor Agent 터미널 출력/잘림/깨짐 해결법

⚠️ Powerlevel10k/Powerlevel9k 사용자라면 반드시 읽어보세요! Powerlevel10k나 Powerlevel9k 테마를 사용하고 있다면, Cursor AI Assistant와 터미널 작업 시 명령어 완료 감지가 제대로 되지 않는 문제를 겪고 있을 가능성이 높습니다. Cursor 공식 문서에서 이 문제를 명시적으로 언급하고 있으며, CURSOR_AGENT 환경변수를 사용하는 것이 유일한 공식 해결책입니다. 🐛 현상 및 원인 - Cursor 공식 문서 확인
4 min read
"당신도 느리게 나이 들 수 있습니다"를 읽고
book

"당신도 느리게 나이 들 수 있습니다"를 읽고

"정희원의 저속노화" 유튜브 채널을 꾸준히 보면서 자연스럽게 저속노화에 관심을 갖게 되었고, 그 연장선에서 정희원 교수의 책을 읽게 되었다. 사실 이 책을 집어든 계기는 최근 내 삶에 대한 반성에서 시작되었다. 나의 '가속노화' 일상 돌이켜보니 내 삶은 그야말로 절제되지 않은 삶이었다. 시간에 상관없이 먹고, 맵고 짜고 달고 자극적인
3 min read
고스트 CMS 다국어 블로그: 5. 홈 링크 다국어 처리
Ghost

고스트 CMS 다국어 블로그: 5. 홈 링크 다국어 처리

네비게이션바, 푸터, 에러페이지에서 홈링크를 각 언어에 맞는 다국어로 연결하는 방법을 설명한다. 네비게이션바, 푸터, 에러페이지에 home링크가 존재한다. 이 링크는 @site.url로 설정되어있으며 다국어 설정과 상관없이 default 언어의 메인페이지로만 연결되어있다. 이 링크를 현재 활성화된 언어에 맞게 연결되도록 수정해보자. <a class="gh-head-logo{{#unless @site.logo}} no-image{{/unless}}"
5 min read
"부자의 마지막 가르침"을 읽고
book

"부자의 마지막 가르침"을 읽고

내가 평소에 읽지 않는 책에는 두 종류가 있다. * 자기계발서 * '이렇게 해서 얼마를 벌었다' 류의 책 이 두 종류의 책들은 내용이 대동소이하고, 저자의 경험과 지식이 검증된 경우가 드물기 때문이다. 처음에 이 책을 접했을 때도, 제목만 보고는 두 번째 유형의 책이라고 생각했다. '세이노의 가르침'을 연상시키는 제목은 내
2 min read
로컬에서 Uniswap 프론트엔드 구동 후 테스트넷 이용하기
dev

로컬에서 Uniswap 프론트엔드 구동 후 테스트넷 이용하기

로컬에서 Uniswap 프론트엔드 구동 후 테스트넷 이용하기 유니스왑을 테스트넷 환경에서 사용하는법은 간단하다. 연결된 월렛의 네트워크를 테스트넷으로 변경하면된다. 혹은 쿼리스트링에서 체인을 명시해주면 된다. 예를들어 Ethereum Sepolia테스트넷에서 유니스왑을 사용하고 싶으면 아래 url처럼 하면 된다. https://app.uniswap.org/swap?chain=sepolia 그러나 현재의 uniswap web interface는 sepolia테스트넷 환경에서 제대로 작동하지 않는다. Uniswap
4 min read
구글 임원에서 실리콘밸리 알바생이 되었습니다
book

구글 임원에서 실리콘밸리 알바생이 되었습니다

어머니께서 읽고싶다고 해서 구매했던 책이다. 이 책은 제가 바닥을 친 얘기입니다. 구글 임원이 하루아침에 갑자기 정리해고된 이야기이고, 30년간 쉬지 않고 열심히 오른 계단의 꼭대기에서 한순간에 확 고꾸라져 바닥으로 떨어진 얘기입니다. 불행히도, 바닥으로 나동그라진 저를 순식간에 꼭대기로 데려다줄 초고속 엘리베이터 같은 건 준비되어 있지 않았습니다. 그래서 이 책은 위기에서 화려하게 부활한
7 min read
고스트 CMS 다국어 블로그: 3. Language selector 추가
Ghost

고스트 CMS 다국어 블로그: 3. Language selector 추가

다국어 블로그 기초 설정을 완료했다. /와 /ko/ 경로를 사용하여 각 언어별 포스트를 구분하였다. 현재는 URL을 직접 입력해야만 영어 페이지에서 한국어 페이지로, 또는 그 반대로 이동할 수 있다. 사용자의 편의를 위해 언어를 선택할 수 있는 UI를 추가해보자. 0.0.3 · sanghunka/ghost-multilingual-theme@f5a2d86Add language selectorGitHubsanghunka default.hbs * <div
5 min read