2025-08-03 09:47

Status:

Tags: 소프트웨어 공학

레이어 Layers

레이어 구조는 복잡한 시스템을 여러 층으로 나누어 각 층이 특정 역할을 담당하도록 설계하는 방법이다. 각 레이어는 특정 역할이나 기능에 집중하며, 서로 독립적이지만 필요할 때 상호작용한다. 레이어는 종속적 관계보다는 기능별 분리에 초점이 맞춰져 있다.

예컨대 네트워크의 OSI 모델의 경우 물리 레이어, 데이터 링크 레이어, 네트워크 레이어 등으로 독립적으로 분리되고 필요한 경우 캡슐화, 디캡슐화라는 방식으로 데이터를 주고받는다.

레이어 방식의 장점은 각 레이어가 독립적이기 때문에 어디선가 문제가 생기면 문제가 생긴 곳에서 처리하면 된다는 점이다. 즉 책임 소재가 명확해지고 어디를 해결해야 할 지 명확 해진다. 만약 거대한 시스템에서 아무 레이어가 없다면 문제가 터졌을 때 어디서 문제가 터진 건지, 어디서 책임을 져야 할지 애매 해진다. 이런 경우 심하면 버그 하나 때문에 시스템 전체를 갈아 엎어야 할 수도 있다.

반대로 시스템의 규모가 그렇게 크지 않다면 억지로 레이어 구조를 만드는 것이 낭비일 수도 있다. 예컨대 한때 유행했던 마이크로 서비스 아키텍쳐(MSA)의 경우 여러 작은 서비스를 독립적으로 개발, 배포하는 방식이다. 하지만 프로젝트 규모가 그렇게 크지도 않은데 별 고민 없이 도입하면 오히려 복잡도가 높아져 관리하지 못하게 될 수도 있다.

일상적으로 비유하면 햄버거로 이해할 수 있다. 햄버거는 여러 층으로 구성되어 있고, 각 층은 고유한 역할을 한다. 참깨 빵은 재료를 지탱하는 기반 역할과 모든 재료를 덮어 마무리하는 역할을 하고, 패티는 핵심 맛과 풍미를 제공하는 역할을 한다. 또한 양상추는 건강을 위한 야채 쿼터제를 책임진다.

햄버거의 각 층은 독립적으로 존재할 수 있지만, 함께 조합되어 하나의 완성된 요리가 된다. 이처럼 레이어 구조는 각 층이 자신만의 역할을 수행하면서도 전체적으로 조화를 이루는 것이 핵심이다.

References

분할 정복 레이어(Layers) 핸드북