INTRO
Vol.231
건물을 세울 때 중요한 것은 설계도다.
사용 목적에 맞게, 정확한 치수로 꼼꼼하게 작성된 설계도일수록 완벽한 건물을 지을 수 있다.
시스템을 만들때에도 동일하다.
추상적인 시스템의 구성을 시각화한 설계도를 일컫는 아키텍처.
시스템의 기반을 어떻게 구성하느냐에 따라서 추후 업데이트를 하거나
유지보수를 할 때 사용되는 비용과 시간을 줄일 수 있다.
아키텍처(Architecture)는 시스템이 최적의 상태로 운영될 수 있도록 동작 원리나 구성 환경 등을 설계하는 설계도이다. 그렇다면 시스템 아키텍처는 무엇일까? 시스템을 구성하는 소프트웨어 컴포넌트*들이 어떤 구조를 가져야 하는지 보여주는 구성도이다. 시스템을 구성하는 소프트웨어 컴포넌트가 어떤 것이고, 각각의 컴포넌트가 어떻게 상호작용하며 정보를 교환하는지를 알기 쉽게 보여주는 설계도라고 할 수 있다.
* 컴포넌트(Component): 소프트웨어 시스템에서 독립적인 기능을 수행할 수 있는 모듈(module)을 말한다.
시스템 아키텍처는 소프트웨어 응용 프로그램과 네트워크 장치, 하드웨어와 같은 여러 구성요소를 구조화하기 위해 크게 두 가지 분류법을 사용한다. 첫째는 중앙 집중식 조직이다. 이를 대표하는 구조는 클라이언트-서버 시스템이다. 이는 다수의 클라이언트가 네트워크 통신을 활용하여 서버에 접속하고, 서버에 저장된 데이터베이스를 활용할 수 있는 시스템을 말한다.
클라이언트와 서버가 통신할 때 크게 UDP(User Datagram Protocol)와 TCP(Transmission Control Protocol)라는 두 가지 방식을 사용한다. UDP는 비연결형 프로토콜*로 클라이언트와 서버가 데이터를 주고받을 때, 서버 쪽에서 일방적으로 데이터를 전달하는 방식이다. TCP는 연결 지향형 프로토콜이다. 서버가 데이터를 전달하면서 클라이언트에게 제대로 도착했는지 확인이 가능하고, 이를 기반으로 데이터가 올바르게 전달된다.
클라이언트-서버 시스템은 서버가 모든 클라이언트와 1:N 구조로 연결되어 데이터를 관리하기 때문에 보안상 안전하고 관리가 쉽다. 또한 클라이언트-서버 시스템은 서로 다른 운영체제를 사용해도 정보 교환이 가능하다는 장점이 있다. 그러나 서버가 작동하지 않게 되면 시스템 자체가 멈춰버린다는 단일 장애점(Single Point of Failure)이라는 단점이 있다.
* 프로토콜(Protocol): 통신 규약 및 약속을 일컫는다. 통신장비 사이에서 메시지를 주고받는 규칙 체계다.
중앙 집중식 구조를 보완하기 위해 나온 것이 바로 분산형 조직이다. 이는 P2P(Peer to Peer) 시스템이라고도 불린다. 중앙 집중식 조직은 클라이언트와 서버가 수직적 구성이었다면, P2P는 클라이언트와 서버의 구분이 없는 수평적 구성으로 볼 수 있다. 그래서 P2P 시스템은 클라이언트와 서버의 개념이 사라지고 Peer의 개념이 등장한다. 동등한 위치의 Peer들이 직접 연결되어 서로 데이터를 주고받는 구조인 것이다.
P2P 시스템은 중앙 서버 없이 노드를 연결하는 네트워크가 필요한데, 이를 오버레이 네트워크라 한다. 이 네트워크는 크게 비구조화 P2P 네트워크와 구조화 P2P 네트워크로 구분된다. 비구조화 P2P 네트워크는 각각의 노드가 제약 없이 다양한 노드를 선택하여 자유롭게 데이터를 주고받을 수 있다. 반면 구조화 P2P 네트워크는 각 노드별로 ID를 배정한다. 배정된 ID에 따라 연결 상대가 정해지는 것이다. 따라서 데이터는 ID와 가장 가까운 위치에 있는 ID를 가진 노드에 저장된다. 비구조화 P2P 네트워크보다는 유연한 탐색이 불가능하다.
P2P 시스템은 서버가 없기에, 단일 장애점 문제를 해결할 수 있다. 또한 Peer의 수가 늘어나도 특정한 서버에 부하가 집중되지 않는다. 따라서 데이터 전송 시 속도가 크게 변하지 않는다는 장점이 있다. 그러나 새로운 기능을 추가하거나 업데이트를 하게 되면 관리가 어렵고, Peer간의 데이터 공유 시 통신 경로가 매번 달라 네트워크 속도가 일정하지 않다는 단점이 있다.