소프트웨어 엔지니어링 분야에서, 관심사의 분리(이하 SoC(Seperation Of Concern))는 시스템 내부에서 질서를 유지하기 위해 소프트웨어 요소의 상관관계와 설계를 적용하는 것이다. 적절한 SoC를 통해 복잡성은 관리 가능해진다.
목표
- SoC원칙 이해
- 지속가능한 시스템 개발에 대해 개발자들이 가져야할 기본적인 컨셉
SoC 법칙이란 시스템 요소가 단일 목적이고 배타성을 가져야 한다는 것을 명시한다. 그 말은, 어떤 요소도 다른 요소와의 책임을 공유하면 안되고, 그 요소와 관계가 없는 책임을 포함시킬 수 없다는 것이다.
SoC란 경계를 세우는 것으로서 달성된다. 경계란 주어진 책임 세트를 설명하는 논리적이거나 물리적인 제한이다. 경계란 애플리케이션 내에 핵심 행동을 정의하는 메소드, 객체, 컴포넌트, 서비스 등의 사용을 의미한다. 혹은 소스 구성에 대한 프로젝트, 솔루션, 폴도 구조를 포함하기도 한다.
혹은 구조를 짜기 위한 애플리케이션 레이어와 티어들을 포함하기도 하고, 프로덕트 릴리즈 구성에 필요한 버전화 되어있는 라이브러리나 설치 파일을 포함하기도 한다.
목표는 시스템을 분리되지 않는 파트들로 조각 내는 것이 아니라, 시스템을 반복되지 않고 응집력이 있는 요소들로 구성하기 위함이다.
핵심 : SoC는 질서에 관한 것이다. SoC의 종합적인 목표는 각각의 파트가 의미있고 직관적인 역할을 수행하지만 변화에 적응하는 능력을 극대화시킨, 잘 조직된 시스템을 설립하는 것이다.
개별 컴포넌트의 복제가 없어지고, 목적이 단일화되어 전체 시스템을 유지보수하기 쉽게 만든다.
시스템 전체가 유지보수성이 올라감으로써 생겨난 부산물로 인해 더 안정적이게 된다.
각각의 컴포넌트가 응집력 높은 단일 책임으로 자신의 관심사만 챙기게 요구되는 전략들은 자연스러운 확장 가능성들을 낳는다.
컴포넌트들을 단일 목적에 집중할 수 있게 요구됨으로써 생기는 디커플링은 시스템 사이에서 더 쉽게 사용되게 만든다.
유지보수성과 확장가능성의 증대는 시장성과 시스템 채택률에 큰 영향을 줄 수 있다.
수평적 SoC는 애플리케이션 내에 동일한 역할을 수행하는 기능의 논리적 레이어 단위로 앱을 분리하는 프로세스를 말한다.

수직적 SoC는 애플리케이션을 기능 모듈로 분리하는 프로세스를 말한다.
관점 지향 프로그래밍으로 더 잘 알려진 관심사의 관점 분리는 애플리케이션의 핵심 관심사에서 나온 횡단 관심사(cross-cutting concerns)를 분리하는 프로세스를 뜻한다.
횡단 관심사 혹은 관점은 애플리케이션 내에 여러 경계를 가로지르며 심어지는 관심사를 의미한다.
횡단 관심사는 애플리케이션 도체에 널리 퍼져서 사용되기 때문에 유지보수가 어려워질 수 있다. 핵심 관심사와 섞이게 되면 복잡도가 증가하고, 애플리케이션을 더 유지 보수하기 어렵게 만든다. 그런 관심사들을 분리함으로써, 핵심 관심사들과 횡단 관심사들 모두 더 관리하기 쉬워진다.