Context 범위를 제한하기 위한 폴더구조

  • 방대한 양의 컨텍스트를 AI에게 전달하면 문맥 파악이 어려워지고 토큰 낭비가 커짐

  • 따라서 폴더 구조 단위로 컨텍스트 범위를 제한하고 관리하는 것이 효과적 → 폴더가 Context의 범위를 강제

  • 폴더는 코드를 구조화하는 '서랍장' 역할을 하고, 컨텍스트의 제한은 AI Agent의 '월권'을 방지함

아키텍처를 통한 컨텍스트 제한 (DDD와 FSD)

  • DDD/FSD와 같은 아키텍처는 결합도를 낮추고 응집도를 높히기 위해 폴더 구조를 활용하여 컨텍스트 범위를 제한

DDD

도메인(비즈니스 로직)을 가장 안쪽에 배치

  • 도메인 단위로 폴더를 구조화하여 도메인의 지식을 격리함

    • 결합도: 결합도가 높아지면 도메인이 혼재가 되면서 생기는 컨텍스트 스위칭 문제 → 복잡도 증가

    • 응집도: 하나의 도메인 단위로 묶이기 때문에 응집도가 높아지고, 다른 도메인과의 결합도는 낮아짐

  • 하나의 도메인에 대한 정보와 비즈니스 로직 프로세스에 대해서 조금 더 명확하게 가져갈 수 있음

FSD

코드를 기능 단위로 썰어 계층별로 정리하는 구조를 사용

src/
├── app/                     # 1. 앱 전체 설정
├── pages/                   # 2. 페이지 단위  
│   ├── main-page/  
│   └── book-details-page/

├── widgets/                 # 3. 여러 기능을 조합한 UI 덩어리
│   ├── Header/
│   └── BookList/
├── features/                # 4. 실제 기능 단위 (핵심)
│   ├── search-book/           # - 책 검색하기 기능
│   └── add-to-cart/           # - 장바구니 담기 기능

├── entities/                # 5. 비즈니스 단위 데이터
│   ├── book/                  # - 책 정보(표지, 제목) UI, 상태
│   └── user/                  # - 사용자 정보(아바타) UI, 상태

└── shared/                  # 6. 모든 곳에서 쓰는 공용 코드
    └── ui/
  • 도메인이 분리되지 않아 컴포넌트 내에서 발생하는 도메인간 혼재를 방지하여 상태 관리 및 프로젝트 복잡도 증가를 막는다.

개발자 역할의 범위와 Rule 구조화

특히 Cursor와 같은 도구는 이러한 구조화된 폴더를 이용하여 컨텍스트를 관리할 수 있음

하나의 작업 공간에 여러개의 폴더를 묶어 Agent가 이를 활용해서 동작하게함

  • VSCode에서 제공하는 멀티 루트 워크스페이스 기능을 활용해 하나의 작업 공간에 여러 프로젝트 폴더를 묶을 수 있음

  • Cursor는 코드베이스를 인덱싱하는 과정에서 이 여러 폴더를 활용하여 동작하며, 각 폴더 단위로 Rules를 구분하여 분석함

  • 폴더 구조에 맞게 Rules가 호출되어 AI의 작업 범위가 제한됨

폴더 단위로 Rules를 구조화하는 중첩 규칙

Rules의 구조화를 폴더 계층과 일치시키는 것이 중요

  • 따로 관리하고 싶은 폴더 구조 상위에 .cursor/rules/ 폴더를 만들어 디테일한 Rule을 추가하여 관리 가능

  • 폴더 하위마다 고유 규칙을 설정하여 Instruction 별 범위를 제한시킴

    • AI가 수정할 수 있는 범위를 명확하게 주고 다른 업무에 지장가지 않도록 조절

  • Domain별, Feature별로 폴더를 구성하고 폴더마다 개별적인 Rule을 두고 관리

  • 각자 맡고 있는 R&R이 명확할 경우 용이하다.

또는 루트에서 같이 관리하는 방법도 있음

Apply to Specific Files 구분자 선택 후 globs에 특정 폴더 경로를 입력하게 되면 자동으로 해당 폴더에서만 사용되는 rules를 정의 가능

Last updated