혼자서도 전체 프로젝트 개발이 가능해? CDK + Lambda + Cursor로 200% AI 활용기
혼자서도 전체 프로젝트 개발이 가능해? CDK + Lambda + Cursor로 200% AI 활용기
모노레포 구조로 인프라부터 프론트엔드까지 한 번에 관리하는 개발 환경
🤦♂️ 예전엔 이런 식으로 개발했었다
문제: 람다 함수 하나마다 레파지토리 하나씩 만들어서 관리
- 프로젝트 10개 있으면 레파지토리 10개
- 공통 코드 복사붙여넣기 지옥
- 배포할 때마다 레파지토리 10개씩 돌아다니기
현재: CDK + Lambda + Cursor로 모든 걸 하나의 프로젝트에서 관리
- IaC 코드, 서버코드, 프론트코드, 데모페이지까지 한 곳에
- AI가 전체 컨텍스트를 이해하고 개발 도와줌
- 혼자서도 전체 프로젝트 개발 가능
// 이제 이런 식으로 한 프로젝트에서 모든 걸 관리
project/
├── infrastructure/ # CDK 코드
├── lambda-functions/ # 서버 로직
├── frontend/ # 프론트엔드
├── demo-pages/ # 데모 페이지
└── docs/ # 룰북과 가이드
🚀 개발 속도와 유지보수가 동시에 올라가는 마법
개발 속도 200% 향상
AI 컨텍스트 공유의 힘
- Cursor가 전체 프로젝트 구조를 이해
- 인프라 코드 보고 서버 코드 자동 생성
- 서버 API 보고 프론트 연동 코드 자동 생성
- 일관된 패턴으로 새로운 기능 빠르게 추가
실제 경험: 새로운 API 하나 추가할 때
- CDK에서 람다 함수 정의 (30초)
- Cursor가 기존 패턴 보고 서버 코드 생성 (1분)
- 프론트엔드 연동 코드도 자동 생성 (1분)
- 배포 스크립트도 기존 패턴 그대로 (30초)
총 3분으로 끝. 예전엔 최소 30분은 걸렸었는데.
유지보수성 대폭 개선
코드 일관성 확보
// 모든 람다 함수가 같은 패턴을 사용
export const handler = async (event: APIGatewayProxyEvent) => {
try {
// 공통 미들웨어 적용
const result = await processRequest(event);
return successResponse(result);
} catch (error) {
return errorResponse(error);
}
};
버전 관리의 단순화
- 하나의 레파지토리에서 모든 변경사항 추적
- 기능별 브랜치 대신 컴포넌트별 폴더 구조
- 배포도 한 번에 전체 또는 선택적으로 가능
💡 하지만 이런 어려움도 있었다
가장 큰 도전: 룰북 관리
방대한 소스코드의 함정
- AI가 프로젝트 전체를 이해하기엔 너무 복잡
- 과거의 시행착오를 AI가 반복하는 문제
- 일관성 없는 코드 패턴이 AI를 혼란스럽게 함
해결책: 체계적인 룰북 작성
# 프로젝트 룰북 (docs/rulebook.md)
## 1. 람다 함수 작성 규칙
- 모든 함수는 common/middleware.ts 사용
- 에러 처리는 standardError 클래스 활용
- 환경변수는 config/environment.ts에서 관리
## 2. CDK 인프라 패턴
- 람다 함수는 constructs/lambda-construct.ts 사용
- API Gateway 경로는 kebab-case로 통일
- 모든 리소스에 프로젝트 태그 필수
## 3. 금지 사항
- 직접 AWS SDK 호출 금지 (wrapper 함수 사용)
- 하드코딩된 ARN 금지 (CDK 참조 사용)
- console.log 대신 structured logging 사용
이 룰북을 Cursor에게 잘 인식시켜놓으면 AI가 일관된 패턴으로 개발해줌.
🎯 이제 혼자서도 전체 프로젝트가 가능해
MSA 설계 + 모노레포 관리의 장점
설계는 분리, 관리는 통합
구분 | 예전 방식 | 현재 방식 |
---|---|---|
레파지토리 | 함수별 분리 | 프로젝트 통합 |
배포 | 개별 배포 | 선택적 일괄 배포 |
코드 재사용 | 복사붙여넣기 | 공통 모듈 |
AI 활용도 | 제한적 | 전체 컨텍스트 |
개발 속도 | 느림 | 빠름 |
실제 프로젝트 구조
my-fullstack-project/
├── cdk/
│ ├── lib/
│ │ ├── api-stack.ts # API Gateway + Lambda
│ │ ├── frontend-stack.ts # S3 + CloudFront
│ │ └── database-stack.ts # DynamoDB
│ └── bin/app.ts
├── lambdas/
│ ├── user-service/
│ ├── auth-service/
│ └── common/ # 공통 유틸리티
├── frontend/
│ ├── src/
│ └── dist/
├── demo/
│ └── landing-page/
└── docs/
├── rulebook.md # AI를 위한 룰북
└── architecture.md
🔧 Cursor와 함께하는 개발 워크플로우
새로운 기능 추가 과정
- 요구사항 정의 (1분)
- “사용자 프로필 조회 API 만들어줘”
- Cursor가 자동 생성 (2분)
- CDK 스택에 람다 함수 추가
- 람다 함수 구현 (룰북 기반)
- 프론트엔드 연동 코드 생성
- 배포 및 테스트 (2분)
npm run deploy
- 데모 페이지에서 바로 테스트
총 5분으로 끝. 이게 바로 AI 200% 활용의 힘이지.
토큰 소비 최적화 팁
Ultra 버전 쓰면서 배운 것들
- 룰북을 잘 만들어두면 AI가 헤매지 않음
- 컨텍스트 창에 관련 파일만 포함
- 자주 사용하는 패턴은 스니펫으로 등록
// 자주 쓰는 람다 함수 템플릿을 스니펫으로 등록
const lambdaTemplate = `
export const handler = async (event: APIGatewayProxyEvent) => {
// 룰북 기반 표준 패턴
};
`;
💡 결론: 혼자서도 풀스택 개발이 현실이 됐다
장점 정리
- 개발 속도 200% 향상
- 유지보수성 대폭 개선
- AI 컨텍스트 공유로 일관된 코드 품질
- 혼자서도 전체 프로젝트 개발 가능
주의사항
- 룰북 관리가 핵심
- 초기 구조 설계에 시간 투자 필요
- 토큰 소비 고려 (Ultra 버전 권장)
이런 방식으로 개발하니까 정말 생산성이 다르더라고요. 혹시 비슷한 경험 있으신 분들은 어떤 방식으로 관리하시는지 궁금하네요!
더 좋은 팁 있으시면 댓글로 공유해주세요 🙏