개념 사전
아티클에서 반복 등장하는 용어, 원칙, 자료를 독립 페이지로 정리합니다.
- 개념적 일관성개념적 일관성은 소프트웨어 시스템이 훌륭하고 독립적인 여러 아이디어들의 단순한 집합체가 아니라, 단일하고 통일된 설계 철학과 원칙을 바탕으로 구성되어야 함을 의미한다
- 관심사 분리관심사 분리는 소프트웨어 시스템이 다루어야 할 서로 다른 문제를 독립된 부분으로 나누어 각 부분이 하나의 관심사만 다루도록 하는 소프트웨어 공학의 설계 원칙이다.
- 구조적 프로그래밍goto문을 배제하고 순차, 선택, 반복이라는 세 가지 제어 구조만으로 프로그램의 흐름을 구성하는 프로그래밍 패러다임
- 굿 이너프 원칙완벽하거나 모든 기능을 갖춘 대안이 아니라 당면한 핵심 요구를 충분히 충족하는 대안을 우선하여 채택하는 것이 실질적으로 더 나은 결과를 낳는다고 보는 실용주의적 의사결정 및 설계 원칙
- 굿하트의 법칙측정 지표가 관리나 통제의 목표로 지정되는 순간 그 지표는 본래 나타내고자 했던 대상을 더 이상 신뢰성 있게 반영하지 못하게 된다는 사회과학의 명제
- 논리적 경계와 물리적 경계소프트웨어 아키텍처에서 코드가 개념적으로 어떻게 나뉘는지를 나타내는 논리적 경계와, 그 코드가 런타임에 어떤 프로세스·서버·저장소로 배치되는지를 나타내는 물리적 경계를 구분하고 두 경계의 관계를 정리한다.
- 모듈러 모놀리스 (Modular Monolith)단일 배포 단위를 유지하면서 내부적으로는 명확한 도메인 경계와 캡슐화된 모듈로 구성하여, 모놀리스의 운영 단순성과 마이크로서비스의 구조적 이점을 절충하려는 소프트웨어 아키텍처 스타일이다.
- 발산적 변경하나의 클래스가 서로 다른 이유로, 서로 다른 방향으로 자주 변경되는 현상
- 방어적 프로그래밍예상치 못한 입력, 오류, 오용으로부터 소프트웨어를 보호하여 예측 가능하고 안정적으로 동작하도록 만드는 프로그래밍 원칙과 기법의 총체
- 변경 증폭존 오스터하우트가 저서 『소프트웨어 설계의 철학』에서 제시한 소프트웨어 복잡도의 세 가지 증상 중 하나로, 겉보기에 단순한 하나의 논리적 변경이 코드베이스 여러 곳의 수정을 함께 요구하게 되는 현상을 가리키는 개념이다.
- 본질적 복잡성과 우발적 복잡성Brooks는 아리스토텔레스의 본질(essence) / 우연(accident) 구분을 소프트웨어에 적용하여, 개발의 어려움을 두 범주로 나눈다
- 선언형 프로그래밍선언형 프로그래밍은 계산 과정을 단계별로 지시하는 대신, 계산의 논리와 원하는 결과를 기술하는 프로그래밍 패러다임이다.
- 스펙 주도 개발소프트웨어의 명세(스펙)를 구현에 앞서는 단일 진실 공급원으로 삼아 코드를 그로부터 파생·검증하는 개발 방법론
- 의사소통사람들 과 소통 하는 행위
- 카고 컬트 과학과 카고 컬트 프로그래밍리처드 파인만이 사이비 과학을 진단하기 위해 제시한 카고 컬트 과학 개념과, 이를 소프트웨어 개발 관행에 적용한 카고 컬트 프로그래밍 개념을 함께 다루는 문서.
- 컨텍스트 엔지니어링대규모 언어 모델이 추론 시점에 참조하는 컨텍스트 윈도우의 내용을 설계하고 지속적으로 관리하는 실천과 방법론을 가리키는 용어이다
- 컴파운드 엔지니어링AI 코딩 에이전트와의 협업 과정에서 작업 결과와 학습을 다음 작업의 자산으로 축적하여 시간이 지날수록 개발 속도와 품질을 높이는 소프트웨어 개발 방법론
- 코드 리뷰 문화코드 리뷰를 결함 발견, 지식 공유, 품질 기준 형성의 장으로 운영하는 팀 문화
- 프롬프트 엔지니어링대규모 언어 모델을 비롯한 생성형 인공지능 모델이 원하는 결과를 산출하도록 입력 프롬프트를 설계하고 다듬는 실천과 그에 관한 지식 체계
- 현학형식적인 규칙 이나 중요 하지 않은 사소한 세부 사항 에 지나치게 관심을 갖는 성향
- AI 네이티브 (AI-Native)AI 네이티브는 인공지능이 나중에 덧붙인 기능이 아니라 시스템의 설계 원리이자 가치 창출의 근본 축으로 처음부터 내재된 소프트웨어, 기업, 인프라의 패러다임을 가리키는 개념이다.
- AI 레버리지인공지능을 인지, 기술, 시간, 실행 및 조직 체계에 결합하여 제한된 자원으로 수행 가능한 과업의 범위·속도·규모·지속성을 확대하는 현상과 활용 방식
- AI-powered Software Engineering인공지능 기술을 개발 생명주기 전반에 융합하여 코드 작성, 테스트, 유지보수 등 소프트웨어 개발 과정을 자동화하고 최적화함으로써 생산성과 품질을 극대화하는 혁신적인 개발 방법론이다
- AX (AI 전환)AX는 인공지능 기술을 기업과 정부 등 조직의 운영·의사결정 구조 전반에 결합하여 근본적으로 재편하는 인공지능 전환(AI Transformation)을 가리키는 용어이다.
- C4 모델C4 모델은 소프트웨어 아키텍처를 시스템 컨텍스트, 컨테이너, 컴포넌트, 코드의 계층적 추상화로 시각화하는 접근법이다.
- CUPID 프로그래밍Dan North가 제안한 Composable, Unix philosophy, Predictable, Idiomatic, Domain-based 속성의 개념과 적용 방법
- DRY 원칙소프트웨어 개발에서 동일한 지식이나 로직이 시스템 내 여러 곳에 중복되어 존재해서는 안 된다는 설계 원칙
- Frugal Engineering소프트웨어 및 시스템 공학에서 비용과 자원 소비를 설계 단계부터 핵심 요구사항으로 다루어 지속적으로 관리하는 공학적 접근을 가리키는 개념
- ISO/IEC 25010ISO/IEC 25010은 정보통신기술 및 소프트웨어 제품의 품질을 특성과 하위 특성으로 분류하는 SQuaRE 국제표준의 제품 품질 모델이다.
- ISO/IEC/IEEE 29148시스템과 소프트웨어의 생명주기 전반에서 요구사항 공학 프로세스, 요구사항의 품질 특성, 관련 정보 항목의 내용을 규정하는 국제 표준이다.
- ISO/IEC/IEEE 42010ISO/IEC/IEEE 42010은 소프트웨어·시스템·엔터프라이즈의 아키텍처 기술에 필요한 개념, 구조 및 적합성 요구사항을 규정하는 국제 표준이다.
- KISS 원칙복잡성을 피하고 단순함을 설계의 핵심 목표로 삼아야 한다는 공학 및 소프트웨어 설계 원칙
- Nextjs 앱 아키텍처Next.js App Router에서 기능 중심 구조와 서버·클라이언트 경계를 설계하는 원칙
- Ports and Adapters애플리케이션의 핵심 비즈니스 로직을 포트라는 추상 인터페이스로 감싸고, 어댑터를 통해 UI나 데이터베이스 같은 기술적 세부사항과 분리함으로써 교체 가능성과 테스트 용이성을 높이는 소프트웨어 아키텍처 패턴이다.
- Problem Solving문제를 이해하고, 계획을 세우고, 실행한 뒤 검토하고 확장하는 체계적인 해결 과정
- Railway-Oriented Programming성공과 실패라는 두 개의 트랙을 파이프라인처럼 연결해 함수를 합성함으로써, 오류 처리를 예외적인 분기가 아니라 정상적인 데이터 흐름의 일부로 다루는 함수형 오류 처리 패턴이다
- RFC 2119IETF 문서에서 요구 수준을 나타내는 규범적 핵심어의 의미와 사용 지침을 정의한 Best Current Practice 문서
- YAGNI 원칙실제로 필요하다고 확인되기 전까지는 기능이나 코드를 미리 구현하지 말아야 한다는 익스트림 프로그래밍의 소프트웨어 설계 원칙