831 posts
Rust 기초: HashMap으로 키-값 데이터 다루기

Rust 기초: HashMap으로 키-값 데이터 다루기

전화번호부를 떠올려보세요. 이름을 알면 전화번호를 바로 찾을 수 있죠. 프로그래밍에서도 이런 식으로 어떤 키를 가지고 그에 대응하는 값을 빠르게 찾고 싶을 때가 많습니다. 다른 언어에서는 딕셔너리(dictionary)나 맵(map)이라고 부르는 이 자료 구조를 Rust에서는 HashMap이라고 합니다. 이 글에서는 HashMap을 생성하고, 데이터를 넣고 꺼내고, 수정하고 삭제하는 기본 연산부터 Entry API와 소유권 이슈까지 정리해보겠습니다. HashMap 생성 HashMap은 표준 라이브러리의 std::collections

클로드 코드 계획 모드: 코드를 쓰기 전에 생각부터

클로드 코드 계획 모드: 코드를 쓰기 전에 생각부터

클로드 코드에게 "인증 시스템을 추가해줘"라고 요청하면 어떻게 될까요? Claude는 곧바로 파일을 수정하기 시작합니다. DB 스키마를 만들고 미들웨어를 작성하고 라우트를 추가하죠. 그런데 작업이 절반쯤 진행된 시점에 "아, JWT 대신 세션 기반으로 가고 싶었는데…"라는 생각이 든다면? 이미 수정된 파일들을 되돌려야 하는 번거로운 상황이 벌어집니다. 😅 이런 문제를 피하려면 코딩에 들어가기 전에 먼저 설계를 검토하는 단계가 필요합니다. 실제 개발에서도 PR을 올리기 전에 설계 문서를 작성하거나 팀원과 접근 방식을 논의하잖아요.

적어도 여기는 면접 기회는 주더라고요

적어도 여기는 면접 기회는 주더라고요

캐나다에는 워킹홀리데이로 오셔서 개발자로 취업을 하고 계신 한국인 분들이 참 많습니다. 왜 힘들게 굳이 여기까지 오셔서 구직을 하시는 걸까 궁금해 여러 분께 여쭤봤는데, 그 중 한 분의 답변이 인상 깊어 공유드립니다. "저는 지방대 비전공자 부트캠프 출신으로 개발자 취업을 준비하고 있습니다. 한국에서 1년 넘게 구직 활동을 했지만, 서류 전형에서 계속 떨어졌습니다. 취업 스터디를 함께하던 분들도 저와 비슷한 배경이라면 상황이 크게 다르지 않더군요. 그래서 반강제로 해외로 눈을 돌리게 되었고 캐나다로 오게 되었습니다. 이 곳에서는 적

액터 모델(Actor Model): 메시지로 소통하는 동시성 패러다임

액터 모델(Actor Model): 메시지로 소통하는 동시성 패러다임

멀티스레드 코드를 디버깅하다가 머리를 쥐어뜯어 본 적 있으신가요? 락이 어디서 잡혔다가 풀리는지, 어떤 스레드가 어떤 변수를 먼저 건드렸는지 추적하다 보면 어느새 날이 밝아 있곤 하죠. 사실 동시성 코드가 어려운 건 우리가 못 짠 게 아니라 공유 메모리 모델 자체가 사람의 머리로 추론하기 까다롭기 때문입니다. 그래서 오래전부터 "공유하지 말고 메시지로만 대화하자"는 다른 결의 모델을 제안한 사람들이 있었습니다. 그중에서도 1973년에 제안되어 Erlang과 함께 산업 현장에서 검증된 액터 모델(Actor Model)을 이번 글에서

클로드 코드 권한 모드: 매번 확인부터 완전 자동까지

클로드 코드 권한 모드: 매번 확인부터 완전 자동까지

클로드 코드를 쓰다 보면 "이 파일을 수정해도 될까요?", "이 명령어를 실행해도 될까요?" 하는 승인 팝업이 끊임없이 뜹니다. 한두 번이면 괜찮지만 리팩토링처럼 파일을 수십 개씩 고치는 작업에서는 클릭 노동이 되죠. 반대로 CI/CD 파이프라인에서는 묻더라도 답할 사람이 없습니다. 😅 이처럼 상황마다 필요한 자율성이 다릅니다. 탐색만 할 때는 코드를 건드리지 못하게 막고 싶고, 빌드를 돌릴 때는 편하게 허용하고 싶죠. 클로드 코드의 권한 모드가 이 스펙트럼을 조절해 줍니다. 권한 설정이 "무엇을 허용/차단할까"를 정한다면, 권한

Rust HTTP 클라이언트: reqwest 크레이트 사용법

Rust HTTP 클라이언트: reqwest 크레이트 사용법

웹 API를 호출하거나 외부 서비스와 통신해야 하는 상황은 어떤 언어로 개발하든 빈번하게 마주치게 됩니다. Rust에서는 이런 HTTP 통신을 위해 reqwest라는 크레이트가 사실상 표준처럼 사용되고 있는데요. Python의 requests 라이브러리처럼 직관적인 API를 제공하면서도 Rust답게 타입 안전성과 비동기 처리를 지원하는 것이 특징입니다. 이 글에서는 reqwest 크레이트의 기본적인 사용법부터 실무에서 자주 쓰이는 패턴까지 예제와 함께 살펴보겠습니다. reqwest란? reqwest는 Rust 생태계에서 가장 널리

Rust http 크레이트: HTTP 생태계의 공용 어휘

Rust http 크레이트: HTTP 생태계의 공용 어휘

Rust로 HTTP를 다뤄본 분이라면 한 가지 묘한 사실을 눈치채셨을 거예요. reqwest로 요청을 보내든, hyper로 저수준 서버를 짜든, axum으로 핸들러를 만들든 같은 타입 이름이 자꾸 등장합니다. StatusCode, HeaderMap, Method, Uri 같은 것들이요. 이건 우연이 아닙니다. 이 타입들은 모두 http라는 별도의 크레이트에 정의되어 있고, Rust HTTP 생태계 전체가 이 어휘를 공유하고 있는 거죠. 덕분에 reqwest로 받은 응답의 헤더를 axum 응답에 그대로 옮길 수 있고, tower 미들

Context7: AI 코딩 도구에 최신 문서를 주입하는 MCP 서버

Context7: AI 코딩 도구에 최신 문서를 주입하는 MCP 서버

AI 코딩 도구를 쓰다 보면 한 번쯤 이런 경험을 해보셨을 겁니다. Next.js 15의 새로운 API를 물어봤더니 Next.js 13 방식으로 답변하거나, 최근 메이저 버전에서 완전히 바뀐 설정 방법 대신 이미 폐기된 옛날 코드를 뱉어내는 경우요. AI 모델은 학습 데이터의 지식 컷오프(knowledge cutoff) 이후에 변경된 내용을 모르기 때문에 어쩔 수 없이 겪게 되는 문제입니다. Context7은 이걸 해결하려고 만들어진 MCP 서버예요. 9,000개 이상의 오픈소스 라이브러리 공식 문서를 인덱싱해두고, AI 코딩 도구

클로드 코드 권한 설정

클로드 코드 권한 설정

클로드 코드를 쓰다 보면 가장 자주 마주치는 것이 "이 명령어를 실행해도 될까요?"라는 권한 요청 팝업입니다. 처음에는 안전장치로 느껴지지만 매번 답하다 보면 꽤 성가시죠. 이 글에서는 클로드 코드의 권한 시스템을 속속들이 파헤쳐서 안전하면서도 흐름이 끊기지 않는 환경을 만드는 방법을 알아보겠습니다. 권한 시스템의 기본 구조 클로드 코드는 도구 종류에 따라 세 단계의 기본 권한 정책을 적용합니다. | 도구 유형 | 예시 | 승인 필요 | "다시 묻지 않기" 범위 | | ----------- | ---------------------

개발자 취업을 위해 AI보다 먼저 챙겨야 할 것

개발자 취업을 위해 AI보다 먼저 챙겨야 할 것

최근 취준생들을 멘토링하다 보면, 소프트웨어 개발 기본기는 뒷전이고 AI 코딩 도구만 열심히 파고 계신 분들을 자주 만나게 됩니다. 졸업까지 시간이 많이 남은 대학생이라면 AI 중심으로 미래를 준비하는 것도 충분히 좋은 전략일 수 있습니다. 하지만 당장 구직이 필요한 상황이라면, 현재 채용 시장에서 무엇을 더 중요하게 보는지 한 번쯤 점검해 보실 필요가 있습니다. 미디어나 인플루언서들은 마치 이제 AI만 있으면 모든 게 다 이뤄질 것처럼 이야기하지만, 실제 채용 과정에서는 AI에게 코딩을 시키는 능력을 직무 수행에 있어서 필수 요건

asciinema로 터미널 녹화하기: 텍스트 기반 경량 스크린캐스트

asciinema로 터미널 녹화하기: 텍스트 기반 경량 스크린캐스트

CLI 도구 사용법을 누군가에게 설명할 때 어떻게 하시나요? 스크린샷을 여러 장 찍어서 붙이거나 OBS로 화면을 녹화해서 영상 파일을 만들 수도 있겠죠. 근데 솔직히 터미널 화면 녹화하자고 동영상 편집 프로그램까지 꺼내는 건 좀 과하잖아요. asciinema(아스키네마)는 이 고민을 깔끔하게 풀어줍니다. 터미널에서 일어나는 입출력을 텍스트로 녹화해서 MP4 같은 무거운 동영상 파일 대신 몇 KB짜리 텍스트 파일을 만들어주거든요. 녹화된 내용에서 텍스트를 복사할 수도 있고 웹 페이지에 임베드하거나 GIF로 변환하는 것도 간단합니다.

클로드 코드 내장 도구 총정리

클로드 코드 내장 도구 총정리

클로드 코드를 쓰다 보면 파일을 읽거나 코드를 수정하는 것은 사실 Claude가 직접 하는 게 아니라 **도구(Tool)**를 호출해서 처리한다는 걸 알게 됩니다. 코딩 에이전트의 작동 원리에서 다뤘듯이, 언어 모델 자체는 텍스트를 생성하는 것밖에 못 하고 실제 작업은 도구가 대신하는 거죠. 그런데 이 도구 이름을 알아야 하는 이유가 있습니다. 권한 설정에서 Bash(npm run *), Read(./.env) 같은 규칙을 쓸 때 도구 이름이 필요하고, Hooks에서 PreToolUse 매처를 작성할 때도, 서브 에이전트에 허용할

Rust 데이터 직렬화: Serde 라이브러리 사용법

Rust 데이터 직렬화: Serde 라이브러리 사용법

Rust는 시스템 프로그래밍 언어이기 때문에 데이터를 외부로 안전하게 내보내거나 받아오는 일이 많은데요. 이러한 데이터 직렬화/역직렬화를 위해서 사실상 표준처럼 사용되는 라이브러리가 Serde입니다. 거의 모든 Rust 프로젝트가 사용되는 크레이트(Crate)라고 봐도 과언이 아니죠. 이 글에서는 왜 Serde 라이브러를 어떻게 사용하는지 예제와 함께 살펴보겠습니다. Serde란? 직렬화는 데이터를 Rust 자료형에서 JSON이나 YAML, TOML 등의 형식으로 변화하는 과정을 의미하고, 역직렬화는 변환된 데이터를 다시 원래대로

클로드 코드 설정 가이드: settings.json 파헤치기

클로드 코드 설정 가이드: settings.json 파헤치기

클로드 코드를 설치하고 기본 사용법을 익혔다면 이제 나에게 맞는 환경을 만들어볼 차례입니다. 클로드 코드는 settings.json이라는 설정 파일을 통해 권한 관리부터 모델 선택, 환경 변수, 샌드박스, 커밋 메시지 스타일까지 폭넓게 제어할 수 있는데요. 이 글에서는 설정 체계를 처음 접하는 분도 쉽게 따라올 수 있도록 하나씩 뜯어보겠습니다. 설정 파일의 계층 구조 클로드 코드의 설정은 한 군데 모여 있지 않고 여러 레벨로 나뉘어 있습니다. 각 레벨마다 역할이 다르기 때문에 상황에 맞는 위치에 설정을 놓아야 해요. | 우선순위 |

Rust 기초: Iterator 트레이트로 컬렉션 순회하기

Rust 기초: Iterator 트레이트로 컬렉션 순회하기

Rust로 컬렉션을 다루다 보면 iter(), map(), filter(), collect() 같은 메서드를 자연스럽게 쓰게 됩니다. 이 메서드들 뒤에 있는 게 바로 Iterator 트레이트인데요. Iterator는 Rust의 함수형 코드를 떠받치는 핵심 추상화입니다. 한 번 익숙해지면 for 루프와 임시 변수를 늘어놓던 코드가 짧고 우아하게 바뀌어요. 이 글에서는 Iterator 트레이트가 어떻게 동작하는지, 어댑터와 소비자의 차이가 무엇인지, collect()의 다양한 활용까지 알아보겠습니다. Vec을 먼저 익혀두면 예제를 따라

Rust 기초: Vec으로 동적 배열 다루기

Rust 기초: Vec으로 동적 배열 다루기

Rust에서 배열([T; N])은 크기가 컴파일 시점에 고정됩니다. [i32; 5]라고 선언하면 딱 5개만 담을 수 있고, 나중에 6번째 요소를 추가할 수가 없죠. 사용자 입력을 모으거나 파일에서 데이터를 읽어오거나 API 응답을 파싱하는 상황처럼 실행 시점에 데이터 개수가 정해지는 경우에는 고정 크기 배열로 해결이 안 됩니다. 이럴 때 필요한 것이 Vec<T>입니다. Vec<T>는 힙에 데이터를 저장하는 동적 배열로, 요소를 자유롭게 추가하고 제거할 수 있습니다. Rust에서 가장 많이 쓰이는 컬렉션 타입이기도 하고요. 이 글에서

CORS (Cross-Origin Resource Sharing) 완벽 가이드

CORS (Cross-Origin Resource Sharing) 완벽 가이드

웹 개발자라면 한 번쯤은 CORS 문제 때문에 골치아팠던 적이 있으시죠? Cross-Origin Resource Sharing, 줄여서 CORS는 웹 페이지가 다른 도메인의 리소스에 안전하게 접근할 수 도와주는 브라우저의 기능입니다. 이번 포스팅에서는 CORS의 기본 개념부터 작동 원리, 요청 흐름 그리고 실제 구현 방법까지 자세히 다루도록 하겠습니다. 동일 출처 정책 CORS를 제대로 이해하려면 우선 브라우저의 기본 보안 기능인 Same-Origin Policy, 즉 동일 출저 정책에 대해서 알고 있어야 합니다. 브라우저는 현재

클로드 코드 백그라운드 프로세스: 서버 띄워놓고 코딩하기

클로드 코드 백그라운드 프로세스: 서버 띄워놓고 코딩하기

클로드 코드로 웹 개발을 하다 보면 개발 서버를 띄워놓은 상태에서 코드를 수정해야 하는 상황이 자주 생깁니다. 프론트엔드 서버와 백엔드 서버를 동시에 돌리면서 코드를 고쳐야 할 때도 있고요. 일반 터미널에서는 탭이나 tmux로 해결하지만, 클로드 코드 안에서는 어떻게 할까요? 🤔 백그라운드 프로세스 기능을 쓰면 됩니다. 오래 걸리는 명령어를 뒤로 보내놓고 대화를 이어가다가 필요할 때 다시 확인하거나 종료할 수 있거든요. 한번 익혀두면 개발 서버 띄우기, 빌드 감시, 테스트 실행 같은 작업이 훨씬 수월해집니다. 백그라운드로 보내는

Rust 오류 자료형: thiserror 라이브러리 사용법

Rust 오류 자료형: thiserror 라이브러리 사용법

Rust는 명시적이고 안전한 오류 처리를 중시하는 프로그래밍 언어입니다. 대표적으로 Result 타입과 ? 연산자를 통해 다양한 에러 상황을 타입 시스템으로 포착할 수 있죠. 하지만 실무에서 직접 오류 자료형을 정의하고 Error 트레이트를 구현하다 보면, 반복적인 보일러플레이트 코드 작성에 지치는 경우가 많습니다. 이럴 때 thiserror 라이브러리가 여러분의 구세주가 될 수 있습니다. Error 트레이트 우선 표준 라이브러리의 Error 트레이트를 직접 구현하는데 필요한 최소한의 코드를 보여드리겠습니다. 아래 Validatio

GitHub MCP 서버: AI와 GitHub 연동하기

GitHub MCP 서버: AI와 GitHub 연동하기

GitHub에서 이슈를 만들고 PR을 열고 코드를 검색하는 일은 개발자의 일상이죠. 그런데 이런 반복 작업을 AI에게 시키면 어떨까요? MCP(Model Context Protocol)가 AI와 외부 시스템을 연결하는 표준으로 자리 잡으면서 GitHub도 공식 MCP 서버를 내놓았는데요. 설정해두면 VSCode나 Cursor의 AI 채팅에서 자연어로 요청하는 것만으로 GitHub의 이슈나 PR을 간편하게 다룰 수 있게 됩니다. 이번 글에서는 GitHub MCP 서버를 설치하고 실제로 활용하는 방법을 살펴볼게요. GitHub MCP

Discord