학습 목표
- Composer의 핵심 개념과 사용 시나리오 이해하기
- 멀티 파일 편집 워크플로우 마스터하기
- 새 프로젝트 생성과 구조 설계 방법 익히기
- 대규모 리팩토링 작업 효율적으로 수행하기
- Composer와 다른 기능의 시너지 활용하기
Composer란 무엇인가?
Composer는 Cursor의 혁신적인 기능으로, AI와 대화하며 여러 파일을 동시에 생성하고 편집할 수 있습니다. 단일 파일 편집을 넘어 전체 프로젝트 수준의 작업을 AI와 함께 수행할 수 있습니다.
Composer의 핵심 특징
멀티 파일 편집
여러 파일을 동시에 생성, 수정, 삭제
컨텍스트 인식
파일 간 의존성을 이해하고 일관성 있게 수정
실시간 프리뷰
변경사항을 미리 확인하고 선택적 적용
대화형 개발
AI와 대화하며 점진적으로 작업 진행
Composer 시작하기
Composer 열기
가장 빠른 방법: 언제든지 Composer를 열 수 있습니다
사이드바에서 Composer 탭의 + 버튼 클릭
Composer 인터페이스
Working with:
Composer 활용 시나리오
1. 새 기능 구현하기
시나리오: 사용자 인증 시스템 추가
"React 앱에 사용자 인증 시스템을 추가해줘. 로그인/회원가입 폼, 인증 컨텍스트, 보호된 라우트가 필요해."
Composer가 생성할 파일들:
import React, { createContext, useState, useContext, useEffect } from 'react';
import { auth } from '../services/firebase';
const AuthContext = createContext();
export const useAuth = () => {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth must be used within AuthProvider');
}
return context;
};
export const AuthProvider = ({ children }) => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const unsubscribe = auth.onAuthStateChanged((user) => {
setUser(user);
setLoading(false);
});
return unsubscribe;
}, []);
const login = async (email, password) => {
return auth.signInWithEmailAndPassword(email, password);
};
const signup = async (email, password) => {
return auth.createUserWithEmailAndPassword(email, password);
};
const logout = async () => {
return auth.signOut();
};
const value = {
user,
loading,
login,
signup,
logout
};
return (
{children}
);
};
import React, { useState } from 'react';
import { useAuth } from '../contexts/AuthContext';
import { useNavigate } from 'react-router-dom';
const LoginForm = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);
const { login } = useAuth();
const navigate = useNavigate();
const handleSubmit = async (e) => {
e.preventDefault();
try {
setError('');
setLoading(true);
await login(email, password);
navigate('/dashboard');
} catch (error) {
setError('Failed to log in: ' + error.message);
} finally {
setLoading(false);
}
};
return (
);
};
+ import { AuthProvider } from './contexts/AuthContext';
+ import ProtectedRoute from './components/ProtectedRoute';
2. 대규모 리팩토링
시나리오: JavaScript를 TypeScript로 마이그레이션
"현재 프로젝트의 모든 JavaScript 파일을 TypeScript로 변환해줘. 적절한 타입 정의와 인터페이스를 추가하고, tsconfig.json도 설정해줘."
1. 설정 파일 생성
- tsconfig.json 생성
- 필요한 @types 패키지 추가
2. 파일 확장자 변경
- .js → .ts
- .jsx → .tsx
3. 타입 추가
- 인터페이스 정의
- 함수 매개변수 타입
- 컴포넌트 Props 타입
3. 프로젝트 초기 설정
시나리오: 새 React 프로젝트 구조 생성
"전자상거래 웹앱을 위한 React 프로젝트 구조를 만들어줘. 제품 목록, 장바구니, 결제 기능이 필요하고, Redux Toolkit을 사용하고 싶어."
src/
├── components/
│ ├── common/
│ │ ├── Header.jsx
│ │ ├── Footer.jsx
│ │ └── Layout.jsx
│ ├── product/
│ │ ├── ProductList.jsx
│ │ ├── ProductCard.jsx
│ │ └── ProductDetail.jsx
│ ├── cart/
│ │ ├── Cart.jsx
│ │ └── CartItem.jsx
│ └── checkout/
│ └── CheckoutForm.jsx
├── features/
│ ├── products/
│ │ └── productsSlice.js
│ ├── cart/
│ │ └── cartSlice.js
│ └── auth/
│ └── authSlice.js
├── services/
│ ├── api.js
│ └── payment.js
├── utils/
│ └── formatters.js
├── store/
│ └── index.js
└── App.jsx
Composer 고급 기능
1. 파일 컨텍스트 관리
작업할 파일 선택하기
드래그 앤 드롭
파일 탐색기에서 파일을 Composer로 드래그
@ 멘션
채팅에서 @filename으로 파일 참조
자동 감지
열려있는 파일들을 자동으로 컨텍스트에 포함
2. 선택적 변경 적용
Composer가 제안한 변경사항을 검토하고 선택적으로 적용할 수 있습니다:
3. 반복적인 개선
대화를 통한 점진적 개선
Composer 활용 팁
효과적인 프롬프트 작성
✅ 좋은 예
"사용자 프로필 페이지를 만들어줘. 다음 기능이 필요해:
- 프로필 정보 표시 (이름, 이메일, 프로필 사진)
- 프로필 편집 기능
- 비밀번호 변경 폼
- React Hook Form 사용
- 기존 UserContext 활용
❌ 나쁜 예
"프로필 페이지 만들어줘"
작업 범위 관리
1. 단계별 접근
큰 작업은 여러 단계로 나누어 진행하세요:
- 기본 구조 생성
- 기능 구현
- 스타일링
- 최적화
2. 관련 파일만 포함
작업에 필요한 파일만 컨텍스트에 포함시켜 정확도를 높이세요.
일반적인 사용 패턴
🏗️ 스캐폴딩
프로젝트 초기 구조를 빠르게 생성
🔄 마이그레이션
기술 스택 변경이나 버전 업그레이드
🧩 기능 추가
새로운 기능을 여러 파일에 걸쳐 구현
🎨 일관성 유지
코드 스타일이나 패턴을 전체적으로 통일
실습: Composer로 Todo 앱 만들기
완전한 Todo 애플리케이션 구축
Composer를 사용해서 처음부터 끝까지 Todo 앱을 만들어봅시다.
Step 1: 프로젝트 구조 생성
Composer에 입력:
"React Todo 앱의 기본 구조를 만들어줘. 다음이 필요해:
- Todo 목록 컴포넌트
- Todo 아이템 컴포넌트
- 추가 폼 컴포넌트
- 로컬 스토리지 저장
- 기본 CSS 스타일"
Step 2: 기능 추가
이어서 요청:
"다음 기능들을 추가해줘:
- Todo 완료 토글
- Todo 삭제
- 필터링 (전체/완료/미완료)
- 드래그 앤 드롭으로 순서 변경"
Step 3: 상태 관리 개선
상태 관리 추가:
"Context API를 사용해서 전역 상태 관리를 구현해줘.
TodoContext를 만들고 모든 컴포넌트에서 사용할 수 있게 해줘."
Step 4: UI/UX 개선
마지막 터치:
"UI를 개선해줘:
- 애니메이션 추가 (추가/삭제 시)
- 반응형 디자인
- 다크 모드 지원
- 키보드 단축키 (Enter로 추가, Delete로 삭제)"
예상 결과물
todo-app/
├── src/
│ ├── components/
│ │ ├── TodoList.jsx
│ │ ├── TodoItem.jsx
│ │ ├── AddTodoForm.jsx
│ │ ├── FilterButtons.jsx
│ │ └── Layout.jsx
│ ├── contexts/
│ │ └── TodoContext.jsx
│ ├── hooks/
│ │ ├── useLocalStorage.js
│ │ └── useDarkMode.js
│ ├── styles/
│ │ ├── globals.css
│ │ ├── components.css
│ │ └── themes.css
│ ├── utils/
│ │ └── helpers.js
│ └── App.jsx
└── index.html
Composer vs 다른 기능들
상황 | 사용할 기능 | 이유 |
---|---|---|
단일 파일의 특정 부분 수정 | Cmd+K | 빠르고 정확한 인라인 편집 |
여러 파일에 걸친 기능 구현 | Composer | 파일 간 일관성 유지 |
코드 설명이나 디버깅 도움 | Chat | 대화형 문제 해결 |
새 프로젝트 스캐폴딩 | Composer | 전체 구조 한번에 생성 |
간단한 코드 자동완성 | Tab | 즉각적인 제안 |
핵심 정리
멀티 파일 마스터
Composer는 여러 파일을 동시에 생성하고 수정할 수 있는 강력한 도구입니다.
프로젝트 수준 작업
단일 파일을 넘어 전체 기능이나 프로젝트 구조를 한 번에 구현할 수 있습니다.
대화형 개발
AI와 대화하며 점진적으로 작업을 개선하고 완성도를 높일 수 있습니다.
선택적 적용
제안된 변경사항을 검토하고 필요한 부분만 선택적으로 적용할 수 있습니다.