brunch

You can make anything
by writing

C.S.Lewis

by 맛소금 Feb 20. 2024

계층 사회와 소프트웨어

놀랍게도 인간 세상의 계층도 의존성이 단방향으로 이뤄져 있다

소프트웨어 아키텍처에는 계층, 즉, Layer라는 개념이 있다. 기능과 역할에 따라서 계층을 나눔으로 시스템의 복잡도를 낮출 수 있고 안정적으로 변화에 대응할 수 있도록 해주는 아주 유용한 기술 개념이다.


Layer의 핵심은 분명한 역할을 기준으로 계층을 나눠서 기술 응집도를 높이고, 계층 간의 의존성을 명확히 관리해서 시스템의 안정성과 유지보수성을 높이는 것인데, 쉽게 말하면 한 계층의 모듈이 다른 계층의 구성에 대해서 의존하지 않으면서 명확하게 역할 분담을 하는 것이다.


Open Systems Interconnection 7 Layer


Layer라는 개념을 설명하기 좋은 대표적인 예는, IT 계열 전공자라면 반드시 들어봤을 OSI 7 Layer가 있다. OSI 7 Layer는 통신 시스템의 근간을 이루는 기본 개념의 시초와도 같아서 거의 모든 자격증 시험이나 인터뷰에 등장하고, 이공계 학생이라면 한 번쯤은 꼭 배우게 된다. 하지만, 기본 개념들이 늘 그렇듯 정작 실무에서 줄줄 외우거나 꿰뚫고 있어야 하는 경우는 매우 드물다. 그렇다고 몰라도 된다는 것은 절대 아니다.


OSI 7 layer는 국제 표준화 기구(ISO)에서 개발한 통신에 관한 계층화 표준 모델로써 다양한 시스템이 서로 통신을 할 수 있도록 설계되었다. 이 모델은 통신 시스템을 7개의 추상적 계층으로 나누며 각 계층은 다음 계층 위에 차곡차곡 쌓이는 구조를 갖는다. 각 계층마다 고유의 역할이 있으며 7개의 계층을 차례대로 통과해서 시스템 간에 통신을 할 수 있게 해주는 개념이다.


그림을 보면 이해가 더 쉽다.


https://community.fs.com/article/tcpip-vs-osi-whats-the-difference-between-the-two-models.html


그림에서 보는 것과 같이 OSI 7 Layer는 소프트웨어뿐만 아니라 하드웨어도 함께 포함하고 있는 개념적인 모델로써 사용자의 데이터를 네트워크를 통해 다른 사용자에게 전달하는 모든 과정을 단계별로 표현하고 있다. 이렇게 계층을 나눔으로써 각각의 계층은 자신이 담당한 역할을 충실히 하는 것에 집중하면 되므로 구현해야 할 기술의 복잡도를 낮추고, 핵심 기능에 보다 집중할 수 있게 된다. HTTP를 사용한 애플리케이션은 기기의 IP나 MAC에 대해서 전혀 신경 쓰지 않아도 되고, 라우터 제조사 역시 랜 케이블이나 TCP 기술을 몰라도 무관하다.


Android OS Project


세계에서 가장 많은 사용자를 보유하고 있는 운영체제 Android 역시 Layered Architecture를 채택하고 있다. Android Platform 오픈 소스 프로젝트인 만큼 관련된 연구와 기술 자료도 매우 많이 공개되어 있어서 아키텍처 학습 자료로 사용하기 좋다.


안드로이드 플랫폼 아키텍처 - https://developer.android.com/guide/platform?hl=ko

OSI 7 Layer와는 조금 다르지만 여러 모듈이 계층구조로 나눠져 있는 것을 확인할 수 있다. 계층을 구분함로써 관심사가 비슷한 모듈끼리 묶어서 기술 응집도를 높일 수 있고, 동시에 의존성을 명확히 관리함으로써 전체 시스템의 안정성과 유지보수성을 높일 수 있다.


Android OS는 상위 계층이 하위 계층에 의존하지만, 하위 계층은 상위 계층에 의존하지 않는 단방향 의존성을 유지한다. 예를 들어 애플리케이션은 애플리케이션 프레임웍을 사용하고, 라이브러리들을 활용할 수 있지만 반대로 애플리케이션 프레임웍이나 커널은 어떤 애플리케이션이 존재하는지 알 수도 없고, 어떻게 구성되는지 전혀 의존하지 않는다.


3-Tier Architecture


앞에 소개한 두 개의 기술만큼 유명한 계층 구조를 갖는 것이 3-Tier Architecture이다. 3티어를 3계층 아키텍처라고 하기도 하는데, 조금 어색한 느낌이 들기도 하지만, 정확한 표현이다. 앞에서 알아본 OSI 7 Layer와 안드로이드와 동일한 목적으로 계층을 구분해서 시스템을 구성하는 것이며, 일반적으로 웹서비스에 많이 사용된다.


https://www.collidu.com/presentation-3-tier-architecture

3계층 구조 역시 단방향으로 의존성을 관리하는데, 프레젠테이션은 애플리케이션과 데이터에 의존하지만, 애플리케이션은 프레젠테이션에 의존하지 않으며, 데이터는 다른 어떤 계층에도 의존하지 않는다. 예를 들어, 카카오 뱅크 앱으로 계좌에서 돈을 이체한다고 하면, 앱은 서버에 접속해서 계좌 정보를 가져오지만, 서버는 앱의 동작과 무관하게 요청받은 것을 처리 할 수 있어야 하며, 계좌 정보는 앱과 서버의 동작과는 무관하게 온전히 정해진 인터페이스를 사용해서 기록을 저장하고 조회할 수 있어야 하는 것과 같다.


개발자는 선을 잘 그어야 한다


이쯤 하면, 좋은 소프트웨어 개발자는 선을 잘 그어야 한다는 것을 알 수 있을 것이다. 선을 잘 긋고 계층을 나누는 것으로 시스템을 보다 안정적이고 효율적으로 관리할 수 있기 때문에 뛰어나 개발자들은 선을 긋고 지키는 것을 중요시한다. 처음부터 계층이 나눠져 있는 경우도 있지만, 프로젝트가 진행되면서 자연스럽게 계층이 나눠지고 분리 관리되기도 하기 때문에 계층을 나누는 것에 늘 민감하게 반응한다.


소프트웨어 아키턱처는 선을 긋는 기술이며, 나는 이러한 선을 경계라고 부른다. 경계는 소프트웨어 요소를 서로 분리하고, 경계 한편에 있는 요소가 반대편에 있는 요소를 알지 못하도록 막는다. - Clean Architecture, Robert C. Martin


소프트웨어 아키텍트 역할을 하다 보면 맨날 하는 것이 구조를 살펴보고, 선을 긋고 분리하고, 합치는 것이다 보니 일상에서도 유난히 그런 것들이 잘 보인다. 집안 가구의 구조를 변경할 때도, 가족들과 가사 역할 분담을 할 때도, 사람들의 행동을 관찰 할 때도 그런 생각을 하곤 한다.


그런데, 요즘 보면 우리 사회에도 계층이 있는 것 같다. 게다가 놀랍게도 인간 세상의 계층도 의존성이 단방향으로 이뤄져 있는 것이 느껴진다. 모두가 상위 계층의 삶은 잘 알고 관심을 갖지만 반대로 하위 계층에는 별로 관심이 없다.


작가의 이전글 자연에 이름 붙이기, 캐럴 계숙 윤
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari