C++를 쓰다 보면 static이라는 키워드가 여기저기 등장한다.문맥에 따라 의미가 달라지기 때문에 헷갈리기 쉽다.이 글에서는 static을 중심으로, 함께 알아두면 좋은 저장소 관련 개념들을 정리한다.변수의 생명주기(Storage Duration) 개요C++에서 모든 변수는 언제 메모리에 올라가고, 언제 해제되는가에 따라 분류된다.종류생성 시점소멸 시점예시자동(Automatic)선언 시점블록 종료 시지역 변수정적(Static)프로그램 시작 (또는 첫 사용)프로그램 종료static 변수, 전역 변수동적(Dynamic)new 호출 시delete 호출 시힙 할당 객체스레드(Thread)스레드 시작 시스레드 종료 시thread_local 변수static 키워드 — 4가지 용법static은 쓰이는 위치에 따라 ..
싱글톤 패턴이란?"클래스의 인스턴스가 오직 하나만 존재함을 보장하고, 어디서든 그 인스턴스에 접근할 수 있게 하는 생성 패턴(Creational Pattern)"가장 직관적인 비유를 들자면, 회사의 CEO를 생각해보자.어느 부서에서 CEO를 호출해도 항상 같은 한 사람이 응답한다. 두 명의 CEO가 동시에 존재하는 일은 없다.핵심 특징 3가지특징설명유일성 (Uniqueness)프로그램 전체에서 인스턴스가 단 하나만 생성됨전역 접근성 (Global Access)어디서든 동일한 인스턴스에 접근 가능지연 초기화 (Lazy Initialization)처음 사용할 때 인스턴스 생성 (선택적) 왜 사용할까?사용하면 좋은 경우설정(Config) 관리자 — 앱 전체 설정을 한 곳에서 관리로그(Logger) — 모든 모..
C++ 스마트 포인터 Raw 포인터의 위험에서 벗어나 안전하고 명확한 메모리 관리를 위한 현대 C++의 핵심 도구들어가며 — 왜 스마트 포인터인가?C++은 메모리를 직접 제어할 수 있다는 점이 강점이지만, 그만큼 실수하기도 쉽다.// 흔히 저지르는 실수들Foo* p = new Foo();if (error) return; // delete 호출 안 됨 → 메모리 누수delete p;p->use(); // use-after-free → 크래시delete p; // double-free → 크래시이런 문제를 근본적으로 해결하는 것이 스마트 포인터다.핵심 아이디어는 RAII(Resource Acquisition Is Initialization) — 객체의 수명이 끝나는..
홈 네트워크에서 서버를 운영하거나, 외부에서 내부 서비스에 접근하려 할 때 반드시 마주치는 두 가지 개념이 있다.바로 포트포워딩과 NAT Loopback(Hairpin NAT)이다.배경 지식: NAT란?본론에 들어가기 전에, NAT(Network Address Translation)를 간단히 짚고 넘어가자.가정이나 사무실에서는 ISP로부터 공인 IP 하나를 할당받고, 내부 기기들은 사설 IP(192.168.x.x 등)를 사용한다.라우터가 이 둘 사이의 주소 변환을 담당하는데, 이것이 NAT다.인터넷 | | 공인 IP: 203.0.113.5 v+-----------+| 라우터 | 내부 기기가 외부로 나갈 때는 라우터가 사설 IP를 공인 IP로 바꿔서 보내고, 응답이 돌아오면 다시 사설 IP..
git format-patch로 커밋을 patch 파일로 공유하기개요커밋을 다른 사람과 공유하거나, 다른 저장소에 동일하게 적용하고 싶을 때 git format-patch를 쓰면 커밋 메시지·작성자·날짜·diff까지 모두 담긴 patch 파일을 만들 수 있다. 이메일로 patch를 주고받던 시절부터 내려온 표준 포맷이라, 받는 쪽에서 git am 한 줄이면 그대로 복원된다.기본 사용법# 특정 커밋 1개를 patch로 만들기 (-1 = 1개 커밋)git format-patch -1 # 출력 디렉토리 지정git format-patch -1 -o ./patches/실행하면 커밋 subject가 슬러그화된 이름의 파일이 생성된다:0001-fix-null-check-in-user-service.patch자주 쓰..
이런 상황 겪어본 적 있어?feature 브랜치에서 열심히 작업하고 있는데 갑자기 팀장이 말한다."야, main에 버그 났어. 빨리 고쳐." 지금 내 상태는 이렇다.feature/login 브랜치에서 파일 10개 수정 중아직 commit하기엔 애매한 상태보통은 이렇게 한다.git stash # 작업 임시 저장git checkout main# hotfix 작업...git checkout feature/logingit stash pop # 다시 꺼내기 → conflict 날 수도 있음stash는 "서랍에 잠깐 넣어두는 것"이다. 꺼낼 때 뭔가 엉킬 수 있고, 여러 번 반복되면 스트레스가 쌓인다.git worktree는 이 문제를 다르게 접근한다. 책상을 하나 더 펼치는 것이다. git wo..
개요Anthropic이 공식 skills 레포지토리에 Skill Creator라는 메타 스킬을 공개했다.이름 그대로 "스킬을 만드는 스킬"로, Claude Code 사용자가 자신만의 커스텀 스킬을 설계하고, 테스트하고, 반복 개선하는 전체 워크플로우를 AI가 가이드해준다. Skill이란?Claude Code에서 Skill은 특정 작업에 대한 재사용 가능한 지침서다. SKILL.md라는 마크다운 파일에 작성되며, Claude가 사용자의 요청을 인식하면 자동으로 해당 스킬을 불러와 따른다.skill-name/├── SKILL.md # 핵심 지침 (필수)├── scripts/ # 반복 작업용 실행 스크립트 (선택)├── references/ # 참조 문서 (선택)└─..
개요2025년부터 AI 코딩 에이전트들이 본격적으로 도입되면서, 세션 간 컨텍스트를 유지하는 방법이 중요한 과제로 떠올랐다. memory.md는 이 문제를 해결하기 위해 등장한 패턴으로, AI가 프로젝트에 대해 학습한 내용을 마크다운 파일에 저장하고 다음 대화에서 자동으로 불러오는 방식이다.왜 필요한가?LLM 기반 코딩 에이전트는 대화가 끝나면 모든 컨텍스트를 잃는다. 매번 새 세션마다 동일한 설명을 반복해야 하는 문제가 있다."이 프로젝트는 bun을 사용해""커밋 메시지는 한글로 작성해""테스트는 vitest로 실행해"memory.md는 이런 정보를 파일 시스템에 영속적으로 저장하여 AI가 매 세션 시작 시 자동으로 참조하게 한다.주요 도구별 구현도구파일명위치Claude CodeCLAUDE.md, me..
OAuth 2.0"비밀번호를 직접 공유하던 시절"과 비교했을 때의 보안 향상비밀번호 노출제3자 앱이 비밀번호를 평문으로 알게 됨권한 제어 불가비밀번호를 주면 모든 권한이 넘어감 (이메일만 필요한데 결제 정보까지 접근 가능)회수 불가접근을 끊으려면 비밀번호 자체를 변경해야 함연쇄 피해한 앱에서 유출되면 같은 비밀번호를 쓰는 모든 서비스가 위험이외에도,UX 향상: "Google로 로그인" 같은 간편 로그인표준화: 모든 서비스가 같은 프로토콜로 연동 가능관리 편의: 사용자가 "연결된 앱" 목록에서 개별적으로 권한 회수 가능주요 구성요소(Component)와 그 역할 (Role)리소스 소유자(Resource Owner)접근에 인증이 필요한 리소스(Resource)에 대해서 접근하고자 하는 Entity 입니다. ..
로그 파일을 분석할 때 특정 키워드들을 색상별로 구분해서 보고 싶을 때가 있습니다.VSCode의 Highlight 확장을 사용하면 간단하게 설정할 수 있습니다.확장 설치VSCode Extensions에서 "Highlight" 검색 후 설치작성자: Fabio Spampinato또는 "Log File Highlighter"도 추천 (로그 파일 전용)설정 파일 열기Ctrl + Shift + P (Mac: Cmd + Shift + P)"Preferences: Open User Settings (JSON)" 입력settings.json 파일이 열림하이라이팅 설정 추가settings.json 파일의 "highlight.regexes" 섹션에 아래 코드 추가:"highlight.regexes": { "(>{20..
핵심 원리SSH Key 인증 방식을 사용합니다.내 PC(로컬)에 비밀키(Private Key)를, 접속할 서버(원격)에 공개키(Public Key)를 등록하여, 비밀번호 대신 키 한 쌍으로 인증하는 방식입니다.SSH Key 생성 (내 PC에서)아직 SSH 키가 없다면, 다음 명령어를 터미널(Git Bash, PowerShell 등)에 입력하여 생성합니다.이미 ~/.ssh/id_rsa 파일이 있다면 이 단계는 건너뛰어도 됩니다.ssh-keygen -t rsa -b 4096실행 결과:~/.ssh/ 디렉터리에 id_rsa(비밀키)와 id_rsa.pub(공개키) 파일 한 쌍이 생성됩니다.비밀번호(passphrase)를 입력하라고 나오면, 그냥 Enter를 눌러 비워두어야 비밀번호 없이 접속할 수 있습니다.서버에..
개요UV는 Rust로 작성된 차세대 Python 패키지 관리자로, 기존 pip의 성능 한계를 극복하고 현대적인 개발 워크플로우를 지원합니다.Astral에서 개발한 이 도구는 단순한 pip 대체재를 넘어 Python 프로젝트 관리의 전체적인 경험을 혁신하고 있습니다.왜 UV인가?성능의 혁신10-100배 빠른 속도: Rust 기반 구현으로 패키지 설치 속도가 극적으로 향상병렬 다운로드: 여러 패키지를 동시에 다운로드하여 시간 단축효율적인 캐싱: 글로벌 캐시로 중복 다운로드 방지현대적인 기능의존성 해결 개선: 더 정확하고 빠른 의존성 충돌 해결lockfile 지원: 재현 가능한 빌드를 위한 uv.lock 파일Python 버전 관리: pyenv 없이도 Python 버전 설치 및 관리설치 및 기본 사용법설치# m..
나는 현재 회사에서 Amazon Q와 연동하여 MCP를 사용하고 있다.이 내용은 기회가 되면, 다음에 다른 글로 정리해보는 걸로 ~ 하고, MCP에 대해 간단히 정리해보겠다.🧠 MCP(Model Context Protocol)란?AI가 문맥을 이해하고, 외부 도구와 똑똑하게 연동하는 표준 프로토콜! 💡 MCP의 기본 개념AI 모델이 사용자의 의도와 상황(문맥, context)을 더 잘 이해하고, 다양한 외부 도구와 안전하게 연동할 수 있도록 설계된 표준 인터페이스AI가 “지금 그거 해줘” 같은 모호한 요청에도 정확하게 대응하려면, 대화의 흐름이나 사용자의 작업 맥락을 파악해야함MCP는 이런 문맥 정보를 효과적으로 수집·정리·전달하는 규칙(프로토콜)을 제공함 📦 예시로 쉽게 이해하기문맥이 없는 경우사..
개발 환경 Node.js 설치: https://nodejs.orgVisual Studio Code 설치: https://code.visualstudio.com Visual Studio Code - Code Editing. RedefinedVisual Studio Code redefines AI-powered coding with GitHub Copilot for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.code.visualstudio.com 프로젝트 생성# @vscode/vs..
Linux 최신버전에서 barrier를 사용하는경우 마우스커서가 움직이지않아 마치 barrier가 제기능을 하지않는것처럼 보인다면,,Linux에서 기본값으로 사용중인 wayland 의 영향으로 wayland를 꺼주어야한다고 합니다.sudo vi /etc/gdm3/custom.conf ## 파일 열고WaylandEnable=true # 입력 or WaylandEnable=false # 주석 해제sudo systemctl restart gdm3 # 적용