바이브 코딩으로 보안을 지키며 DB 작업하기

소개

지난 주까지 개발 문서(md 파일)를 갖추었고, 이번 주에는 개발 환경 구성을 좀 더 하고

개발 문서를 토대로 Database 작업을 했습니다. 추가 UI 개발도 진행하고, TaskMaster MCP도 사용해보았습니다.

진행 방법

MCP는 supabase, TaskMaster 썼습니다. github는 사실 설치하지 않아도 잘 해주더라구요.

https://github.com/supabase-community/supabase-mcp

https://github.com/eyaltoledano/claude-task-master

TaskMaster MCP를 토요일 모임에서 수진님 도움과 태중님 도움으로 찾았습니다~!

그리고 개발 환경 관련해서는 많은 고민을 하다가,

테스트 시에는 제 로컬 PC에 그냥 백엔드 서버를 띄우고,

production 시에는(하게 된다면) 따로 서버용 PC를 두는 걸로 하기로 했습니다.
(백엔드 배포 서비스가 콜드 스타트 등을 고려하면 무료를 찾기가 힘들었습니다.)

로컬 실행 환경 갖춰 줘.

그래서 현재 제 PC에 HTTPS 설정이며, 백엔드가 올라가 있습니다.

개발 진행한 부분은 주로 회원 가입/로그인/회원 승인 부분인데요,

개발 문서를 토대로 대강은 디자인 가이드나, rules, PRD의 내용을 지켜주지만,

안 지켜주기도 합니다.(세부 사항은요)

매의 눈으로 커서가 뭘 하는지 지켜보다 "그거 하지 마", "그렇게 말고 이렇게", "이 가이드 대로 다시 해"를 해야 했습니다.

특히 뭐가 안 되면 커서는 그 오류를 수정하기 보다

알고리즘이나 접근 방법을 다운그레이드해서 코드 품질, 성능, 보안을 깎아먹더라구요.

그래서 다시 디자인 가이드, rules, PRD, md 파일 등을 태그하면서

명시적으로 요청해야 했습니다.

TaskMaster MCP에는 꽤나 만족했습니다.

[ ] RBAC 규칙 적용 (사용자 관리에 대한 권한)

이 부분이 꽤 커 보여서(전체적으로 안 되어 있었거든요)

TaskMaster MCP로 태스크를 쪼개어 봤더니, 20개가 좌악~😆(인 줄 알았으나 개발하면서 확인하다 보니 6개였습니다. ㅎㅎ 휴우..)

그 태스크대로 작업 해보니 세세한 태스크가

제 의도와 다르게 가는 것도 있지만 기존 소스를 개선해주기도 했습니다.

그리고 TaskMaster 자체적으로 rules를 몇 개 등록하더라구요.

Database 작업 중 SQL Injection을 피하기 위해서 아래 요구사항을 rules 로 변환했습니다.

- SQL injection 피하기 위한 요구사항
1. Uses parameterized queries/prepared statements to prevent SQL injection
2. Implements connection pooling for performance and security
3. Uses least privilege database accounts
4. Handles sensitive data with appropriate safeguards
5. Includes proper error handling that doesn't leak database details
6. Implements query timeouts to prevent DoS attacks
7. Provides secure transaction management
8. Includes logging for security-relevant operations
- rules로 변환(클로드 사용)
# Database Security Rules

## Query Protection
- Always use parameterized queries or prepared statements - never build queries using string concatenation
- Prevent SQL injection by escaping user input and validating all parameters

## Connection Management
- Implement connection pooling in all database connections
- Close connections properly in finally blocks or use automatic resource management
- Set appropriate connection timeout values

## Privilege Management
- Use dedicated database accounts with least privilege access for each service
- Avoid using root/admin accounts in application code
- Rotate database credentials regularly

## Data Protection
- Encrypt sensitive data before storing in database
- Never store plaintext passwords or credentials
- Use appropriate data masking for PII in logs and reports

## Error Handling
- Implement custom error handlers that don't expose database details
- Return generic error messages to users
- Log detailed errors securely for debugging

## Performance & Security
- Set query timeouts to prevent resource exhaustion
- Handle N+1 queries properly
- Use appropriate indexing to prevent full table scans on sensitive tables

## Transaction Management
- Use explicit transaction boundaries with proper isolation levels
- Implement proper rollback mechanisms for failed transactions
- Avoid long-running transactions that lock tables

## Auditing & Monitoring
- Log all security-relevant database operations
- Implement monitoring for suspicious query patterns
- Track and alert on unusual access patterns or privilege escalations

이렇게 해도 일부 테스트 데이터 생성 등을 위한 쿼리에는 저걸 안 지켜줘서 다시 태그했습니다.

결과와 배운 점

저는 아직도 task 20개를 구현 중입니다~😅
이게 각종 요구사항을 지키고, 각종 설정을 해가면서 하니까 꽤나 오래 걸리네요.
커서의 유료 사용량도 간당간당하게 차 갑니다.

공유하고 싶은 사항은, 스레드의 한 개발자의 포스팅입니다.
바이브 해킹을 구현하고 있답니다. 영상을 보니 개발된 시스템의 보안 취약점을
에이전트가 공격해보고, 검사해서 자동 수정 보완하는 것 같았습니다.

이 서비스가 잘 나오면 ZAP으로 공격해서 나오는 리포트를 다시 커서에 줘서
그 보안 구멍을 수정하는 과정이 자동화될 것 같습니다.

하지만 그거 하나로는 안 될 것 같아요.(그리고 당연히 서비스 료가 비쌀 것 같습니다.)
보안 요구사항을 구현해보니, 미리 잘 구현하지 않고 나중에 몰아서 보안 구멍을 메우다가는
엄청난 일이 될 것 같습니다~!

👉 이 게시글도 읽어보세요