Context 범위를 제한하기 위한 폴더구조
방대한 양의 컨텍스트를 AI에게 전달하면 문맥 파악이 어려워지고 토큰 낭비가 커짐
따라서 폴더 구조 단위로 컨텍스트 범위를 제한하고 관리하는 것이 효과적 → 폴더가 Context의 범위를 강제
폴더는 코드를 구조화하는 '서랍장' 역할을 하고, 컨텍스트의 제한은 AI Agent의 '월권'을 방지함
아키텍처를 통한 컨텍스트 제한 (DDD와 FSD)
프로젝트의 복잡성을 관리하기 위해 DDD(Domain Driven Design)이 등장했고, Front-End 세계에서는 비교적 나중에 FSD(Feature Sliced Design) 아키텍처가 등장했다.
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이 명확할 경우 용이하다.
Last updated