본문 바로가기
프로그래밍언어/프로그래밍 지식(programming knowledge)

separation of concerns(관심사 분리)

by 바코94 2022. 4. 17.

# 정의
관심사의 분리는 어플리케이션을 구분되는 영역으로 나누며 각 영역은 분리된 관심사를 가진다. 이것의 목적은 잘 조직화된 시스템을 만드는 것이며 이를 통해 변경에 적합한 어플리케이션이 된다.
관심사 분리는 소프트웨어 아키텍쳐 디자인 원칙이다.

# 어떻게 관심사의 분리를 할 수 있는가
소프트웨어 아키텍쳐에서 관심사의 분리는 경계(boundaries)를 만드는 것을 통해 만들어진다. 여기서 경계는 논리적이거나 물리적인 어떤 것이든 가능하다. 함수, 객체, 컴포넌트 서비스등 어떤 방식이든 분리가 되면 된다.
적용되는 범위도 어디든 가능하며 프로젝트, 솔루션, 폴더 구조, 어플리케이션 레이어 등 다 가능하다.

대표적인 예로는 백앤드 서비스에서 데이터 저장의 관심사를 repository 라는 레이어로 나누는 것이 있다.
프론트엔드의 생태계가 커짐에 따라 예전에는 백앤드와 프론트엔드를 같이 하던 것을 프론트엔드 영역을 별도로 나눈 것도 관심사의 분리로 볼 수 있다.

# 이점
프로그램을 구분되는 것들로 나누는 것의 가장 큰 이점은 역할 별로 잘 나누어져 있기 때문에 구조화된 프로그램이 된다. 구조화가 잘 되어 있으면 각각의 부분들이 하는 것들이 나누어져 때문에 유지보수에도 용이하고 변경에도 유연해진다.

# 필요성
관심사의 분리를 하지 않으면 여러 관심사를 가진 것들이 한 곳에 뭉쳐있기 때문에 복잡하고 유연성이 떨어진다.
프로그램을 만들었는데 한 모듈에서 `유저의 인터랙션 gui 구현, 검증, db에 데이터 저장 , db에서 데이터 조회, 응답을 위한 html 생성` 을 전부 구현하는 경우 아주 흉악한 코드가 되어갈 가능성이 도사리고 있다


참고
https://www.castsoftware.com/blog/how-to-implement-design-pattern-separation-of-concerns