10년 차 소프트웨어 엔지니어가 알려주는 Claude Code 바이브 코딩 보안 개념: 처음부터 시작한다면 꼭 알았어야 할 것들
I am a software engineer with a decade of experience. Here are some security concepts for vibe coding with Claude Code that I would want to know if I were starting from scratch:
핵심 요약
10년 차 엔지니어가 호텔 비유를 통해 초보 바이브 코더들이 놓치기 쉬운 인증과 인가 등 핵심 보안 개념을 쉽게 설명합니다.
- 바이브 코딩 보안 — 코딩 입문자들이 AI로 앱을 만들 때 간과하기 쉬운 보안 취약점을 다룸
- 호텔 비유 설명 — 호텔 체크인(인증)과 방 키 권한(인가)을 통해 복잡한 보안 개념을 쉽게 풀이함
- Authentication vs Authorization — 누가 접속 가능한지와 무엇을 할 수 있는지의 차이를 명확히 구분함
- 서버 측 검증 — 유효한 토큰이 있더라도 타인의 데이터에 접근하지 못하도록 서버에서 막아야 함을 강조함
이전 글에서 바이브 코딩(vibe coded) 앱 보안에 관한 글을 써달라는 요청이 많았거든. 그래서 준비했다!
참고: 이 글을 읽기 전에 이전 글을 꼭 읽어야 하는 건 아님.
이 글을 읽어야 할 사람들을 정리해 볼게. 아래 내용이 너랑 딱 맞는다면 분명 도움이 될 거야.
코딩 입문자임.
수년간의 훈련과 노력 없이도 마법 같은 능력을 발휘할 수 있다는 사실에 충격받음.
사업이나 앱 아이디어를 맨날 상상만 해봤지, 어디서부터 어떻게 만들어야 할지 전혀 몰랐음.
쉬지 않고 바이브 코딩을 하면서 토큰을 미친 듯이 태우고 있음.
뭐가 안전한지, 흔히 빠지는 함정이 뭔지, AI 에이전트한테 뭘 물어봐야 검증이 되는지 도통 모르겠음.
이 글을 어떤 식으로 풀어나갈지도 짧게 말해줄게. 내가 만약 지금 처음부터 다시 시작한다면 알고 싶었을 관점에서 썼어. 정보 전달과 도움을 주는 게 목적이야. 너무 깊게 파고들지 않으면서도 제대로 시작할 수 있는 발판을 마련해 주려는 거지. 나도 처음 시작할 때 어디서부터 손대야 할지 막막했던 그 기분을 기억하거든. 이 글이 방향을 잡는 데 도움이 됐으면 좋겠다. 내 목표는 보안 개념을 높은 수준에서 훑어주는 거야. 이 글을 다 읽고 나서 친구한테 설명할 수 있거나, (아마 이게 더 중요하겠지만) Claude나 에이전트한테 네 상황에 맞춰서 질문할 수 있게 된다면 내 성공이지.
자, 이제 시작해 보자!
호텔을 비유로 들어서 설명할 건데, 이게 개념을 이해하기에 아주 딱이거든. 웹 앱에는 어떻게 적용되는지도 짚어줄게. 최대한 핵심만 추려서, 네가 만든 바이브 코딩 앱에서 이 질문에 답할 수 있게 도와줄 거야.
누가 들어올 수 있고, 뭘 할 수 있으며, 그게 안전한가?
좋아. 서론은 이쯤 하고. 상황을 설정해 볼게. 너는 아주 끝내주는 해변 리조트의 보안 책임자야. 여기 없는 게 없음! 고급 요리, 풀 바, 라이브 음악, 스파, 상점, 수영장 바에 워터 슬라이드까지. 말 그대로 다 있어. 진짜 재밌는 것들 투성이지. 포함된 것도 있고, 따로 돈 내야 하는 것도 있고.
이제 이 멋진 해변 리조트에 외부 사람들이 들어와서 투숙객임을 증명하고 체크인할 방법이 필요하겠지? 그게 바로 로비야. 보통 신분증을 보여주고 신용카드를 내밀지. 손님이 본인임을 증명하면 방 키를 받게 돼. 이게 바로 인증(authentication)이야.
웹 앱에 적용하면:
이건 공개된 로그인 페이지야. 누구나 들어올 수 있지. 아이디나 비밀번호 같은 자격 증명을 제출하면 방 키(내부적으로는 토큰이나 쿠키 같은 거)를 받는 거야.
손님이 체크인을 마치고 방 키를 받으면 인증이 완료된 거야. 방에 가서 키를 찍으면 문이 열리고 들어갈 수 있지. 수영장에 가서 키를 찍으면 거기도 들어갈 수 있고. 적절한 권한이 있으니까. 근데 여기서 다음 질문이 나와. 이 키로 또 뭘 할 수 있지? 더 중요한 건, 뭘 하면 안 되지? 이게 바로 인가(authorization)야. 만약 키를 들고 직원 전용 구역에 들어가려고 하면? (당연히) 안 열려야지. 다른 손님 방에 키를 찍으면? 절대 열리면 안 되겠지. 한마디로 인가는 '유효한 사용자가 무엇을 할 수 있는지'를 정하는 거야.
웹 앱에 적용하면:
그냥 로그인(인증)만 했다고 끝이 아님. 사용자마다 할 수 있는 기능이 다 달라야 하거든. 관리자 권한을 가진 사람도 있을 거고(청소 직원이 모든 방을 열 수 있는 거랑 비슷함). 이걸 제대로 관리 안 하면, 앱 사용자가 다른 사람의 데이터를 읽거나 조작할 수 있게 돼. 아주 위험한 거지!
자, 조금 더 들어가 보자. 인증(누가 들어올 수 있나)과 인가(뭘 할 수 있나)가 있는데, 이 규칙을 강제로 적용하는 것도 필요해. 예를 들어볼게. 손님이 막 체크인을 했어. 신분증도 보여줬고 신용카드도 냈지. 정당한 손님이고 방 키도 받았어. 근데 몇 시간 뒤에 프런트 데스크에 와서 "나 여기 투숙객인데, 내 방 키 확인해 봐. 102호 방 키도 좀 줘"라고 하는 거야. 리조트 로비에서 보면 웃기는 소리 같겠지만, 소프트웨어나 바이브 코딩 앱 관점에서는 이게 아주 흔한 함정이야.

