제7강: Composer 기능 활용

여러 파일을 동시에 편집하는 강력한 도구

난이도: 초급 예상 시간: 45분 카테고리: 기초

학습 목표

  • Composer의 핵심 개념과 사용 시나리오 이해하기
  • 멀티 파일 편집 워크플로우 마스터하기
  • 새 프로젝트 생성과 구조 설계 방법 익히기
  • 대규모 리팩토링 작업 효율적으로 수행하기
  • Composer와 다른 기능의 시너지 활용하기

Composer란 무엇인가?

Composer는 Cursor의 혁신적인 기능으로, AI와 대화하며 여러 파일을 동시에 생성하고 편집할 수 있습니다. 단일 파일 편집을 넘어 전체 프로젝트 수준의 작업을 AI와 함께 수행할 수 있습니다.

Composer의 핵심 특징

멀티 파일 편집

여러 파일을 동시에 생성, 수정, 삭제

컨텍스트 인식

파일 간 의존성을 이해하고 일관성 있게 수정

실시간 프리뷰

변경사항을 미리 확인하고 선택적 적용

대화형 개발

AI와 대화하며 점진적으로 작업 진행

Composer 시작하기

Composer 열기

Cmd/Ctrl + I

가장 빠른 방법: 언제든지 Composer를 열 수 있습니다

새 Composer

사이드바에서 Composer 탭의 + 버튼 클릭

Composer 인터페이스

🎼 Composer

Working with:

App.js styles.css + Add files...

Composer 활용 시나리오

1. 새 기능 구현하기

시나리오: 사용자 인증 시스템 추가

"React 앱에 사용자 인증 시스템을 추가해줘. 로그인/회원가입 폼, 인증 컨텍스트, 보호된 라우트가 필요해."

Composer가 생성할 파일들:
NEW src/contexts/AuthContext.js
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}
    
  );
};
NEW src/components/LoginForm.js
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 (
    

Login

{error &&
{error}
} setEmail(e.target.value)} required /> setPassword(e.target.value)} required />
); };
NEW src/components/ProtectedRoute.js
MODIFIED src/App.js

+ 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가 제안한 변경사항을 검토하고 선택적으로 적용할 수 있습니다:

components/Header.jsx +45 -10
styles/main.css +20 -5
App.jsx +15 -8

3. 반복적인 개선

대화를 통한 점진적 개선

"React 컴포넌트들을 만들어줘"

기본 컴포넌트 구조 생성 완료

"스타일링도 추가해줘. Tailwind CSS 사용하고 싶어"

Tailwind 클래스 추가 및 스타일 적용 완료

"반응형 디자인도 적용해줘"

Composer 활용 팁

효과적인 프롬프트 작성

✅ 좋은 예

"사용자 프로필 페이지를 만들어줘. 다음 기능이 필요해:

  • 프로필 정보 표시 (이름, 이메일, 프로필 사진)
  • 프로필 편집 기능
  • 비밀번호 변경 폼
  • React Hook Form 사용
  • 기존 UserContext 활용

❌ 나쁜 예

"프로필 페이지 만들어줘"

작업 범위 관리

1. 단계별 접근

큰 작업은 여러 단계로 나누어 진행하세요:

  1. 기본 구조 생성
  2. 기능 구현
  3. 스타일링
  4. 최적화

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와 대화하며 점진적으로 작업을 개선하고 완성도를 높일 수 있습니다.

선택적 적용

제안된 변경사항을 검토하고 필요한 부분만 선택적으로 적용할 수 있습니다.

다음 강의 예고

다음 강의에서는 터미널 통합 기능을 활용하여 Cursor 내에서 명령어를 실행하고 개발 워크플로우를 효율화하는 방법을 배웁니다.

다음 강의로 이동
7/30 완료