3.5 KiB
3.5 KiB
📌 Brief Summary
Software Engineering Principles(소프트웨어 엔지니어링 원칙)는 유지보수 가능하고 확장 용이한 시스템을 구축하기 위한 핵심 설계 지침이다. 프론트엔드 및 React 생태계에서는 SOLID, Clean Code, DRY, KISS, YAGNI 원칙을 통해 코드 복잡성을 제어하고 비즈니스 로직과 UI의 명확한 분리를 달성한다.
📖 Core Content
- SOLID Principles
- SRP (단일 책임): 하나의 컴포넌트/모듈은 하나의 책임만 갖는다 (300줄 룰 등).
- OCP (개방-폐쇄): 코드 수정 없이 컴포넌트 합성 등을 통해 기능을 확장한다.
- ISP (인터페이스 분리): 필요한 속성(Props)만 전달하여 불필요한 의존성을 제거한다.
- DIP (의존성 역전): 구체적 구현이 아닌 추상화(Props, Context)에 의존한다.
- Clean Code
- 명확한 네이밍, 낮은 중첩 구조, 이해하기 쉬운 함수 작성을 통해 가독성을 확보한다.
- 효율적 개발 원칙 (DRY, KISS, YAGNI)
- DRY: 커스텀 훅 등으로 로직을 재사용하되 과도한 추상화는 경계한다.
- KISS: 단순함을 유지하여 디버깅 용이성을 확보한다.
- YAGNI: 당장 필요하지 않은 기능(미래 예측)을 미리 구현하지 않아 기술 부채를 방지한다.
- 아키텍처적 적용 (FSD)
- 엔지니어링 원칙을 폴더 구조와 의존성 규칙으로 구현하여 모듈 간 캡슐화를 극대화한다.
⚖️ Trade-offs & Caveats
- DRY vs KISS: 중복을 제거하기 위해 만든 복잡한 추상화가 오히려 코드의 가독성을 떨어뜨릴 수 있으므로, 'Rule of Three'(3번 반복 시 추출)를 권장한다.
- YAGNI vs 확장성: 미래를 대비하지 않는 것이 자칫 아키텍처의 유연성을 떨어뜨려 나중에 더 큰 수정 비용을 발생시킬 수 있으므로 적절한 밸런스가 필요하다.
- 추상화의 비용: 인터페이스 분리와 의존성 역전을 철저히 지키려다 보면 보일러플레이트 코드가 증가하여 개발 속도가 일시적으로 저하될 수 있다.
🔗 Knowledge Connections
Related Concepts
- SOLID: 세부 설계 원칙의 집합 (관계: 상위 원칙)
- Clean Code: 궁극적인 코드 상태 (관계: 품질 목표)
- Feature-Sliced Design (FSD): 원칙의 물리적 구현 (관계: 구조적 방법론)
Deeper Research Questions
- 함수형 React 환경에서 상속이 없는 LSP(리스코프 치환)와 DIP(의존성 역전)의 실질적인 구현 패턴은?
- '추상화의 비용'이 실제 프로젝트의 유지보수 비용(TCO)을 앞지르는 임계점은 어떻게 판단하는가?
- 애자일 환경에서 YAGNI 원칙을 지키면서도 '기술적 런웨이(Architectural Runway)'를 확보하는 방법은?
- 인터페이스 분리 원칙(ISP)을 위반하여 거대 객체를 Props로 넘길 때 발생하는 리렌더링 성능 저하의 메커니즘은?
- Clean Code 원칙을 팀원들 사이에서 동기화하기 위한 자동화된 '코드 스멜' 탐지 도구 활용 방안은?
Practical Application Contexts
- 신규 프로젝트 초기 설계: 아키텍처 원칙 수립 및 코드 컨벤션 강제를 통한 품질 기반 마련.
- 레거시 코드 리팩토링: 냄새나는 코드를 식별하고 엔지니어링 원칙에 따라 구조화 및 분해.
Adjacent Topics
- Design Patterns in Frontend
- Refactoring Techniques
- Test Driven Development (TDD)