Files
2nd/10_Wiki/Topics/Architecture/Software Engineering Principles.md
T

3.8 KiB

📌 Brief Summary

Software Engineering Principles(소프트웨어 엔지니어링 원칙)는 유지보수 가능하고 확장 용이한 시스템을 구축하기 위한 핵심 설계 지침이다. 프론트엔드 및 React 생태계에서는 SOLID, Clean Code, DRY, KISS, YAGNI 원칙을 통해 코드 복잡성을 제어하고 비즈니스 로직과 UI의 명확한 분리를 달성한다.

📖 Core Content

  1. SOLID Principles
    • SRP (단일 책임): 하나의 컴포넌트/모듈은 하나의 책임만 갖는다 (300줄 룰 등).
    • OCP (개방-폐쇄): 코드 수정 없이 컴포넌트 합성 등을 통해 기능을 확장한다.
    • ISP (인터페이스 분리): 필요한 속성(Props)만 전달하여 불필요한 의존성을 제거한다.
    • DIP (의존성 역전): 구체적 구현이 아닌 추상화(Props, Context)에 의존한다.
  2. Clean Code
    • 명확한 네이밍, 낮은 중첩 구조, 이해하기 쉬운 함수 작성을 통해 가독성을 확보한다.
  3. 효율적 개발 원칙 (DRY, KISS, YAGNI)
    • DRY: 커스텀 훅 등으로 로직을 재사용하되 과도한 추상화는 경계한다.
    • KISS: 단순함을 유지하여 디버깅 용이성을 확보한다.
    • YAGNI: 당장 필요하지 않은 기능(미래 예측)을 미리 구현하지 않아 기술 부채를 방지한다.
  4. 아키텍처적 적용 (FSD)
    • 엔지니어링 원칙을 폴더 구조와 의존성 규칙으로 구현하여 모듈 간 캡슐화를 극대화한다.

⚖️ Trade-offs & Caveats

  • DRY vs KISS: 중복을 제거하기 위해 만든 복잡한 추상화가 오히려 코드의 가독성을 떨어뜨릴 수 있으므로, 'Rule of Three'(3번 반복 시 추출)를 권장한다.
  • YAGNI vs 확장성: 미래를 대비하지 않는 것이 자칫 아키텍처의 유연성을 떨어뜨려 나중에 더 큰 수정 비용을 발생시킬 수 있으므로 적절한 밸런스가 필요하다.
  • 추상화의 비용: 인터페이스 분리와 의존성 역전을 철저히 지키려다 보면 보일러플레이트 코드가 증가하여 개발 속도가 일시적으로 저하될 수 있다.

🔗 Knowledge Connections

  • SOLID: 세부 설계 원칙의 집합 (관계: 상위 원칙)
  • Clean Code: 궁극적인 코드 상태 (관계: 품질 목표)
  • Feature-Sliced Design (FSD): 원칙의 물리적 구현 (관계: 구조적 방법론)

Deeper Research Questions

  1. 함수형 React 환경에서 상속이 없는 LSP(리스코프 치환)와 DIP(의존성 역전)의 실질적인 구현 패턴은?
  2. '추상화의 비용'이 실제 프로젝트의 유지보수 비용(TCO)을 앞지르는 임계점은 어떻게 판단하는가?
  3. 애자일 환경에서 YAGNI 원칙을 지키면서도 '기술적 런웨이(Architectural Runway)'를 확보하는 방법은?
  4. 인터페이스 분리 원칙(ISP)을 위반하여 거대 객체를 Props로 넘길 때 발생하는 리렌더링 성능 저하의 메커니즘은?
  5. Clean Code 원칙을 팀원들 사이에서 동기화하기 위한 자동화된 '코드 스멜' 탐지 도구 활용 방안은?

Practical Application Contexts

  • 신규 프로젝트 초기 설계: 아키텍처 원칙 수립 및 코드 컨벤션 강제를 통한 품질 기반 마련.
  • 레거시 코드 리팩토링: 냄새나는 코드를 식별하고 엔지니어링 원칙에 따라 구조화 및 분해.

Adjacent Topics

  • Design Patterns in Frontend
  • Refactoring Techniques
  • Test Driven Development (TDD)