데이터 흐름도(DFD)를 통해 시스템을 명확히 분석하고 소통하기 위해서는 DFD가 사용하는 네 가지의 기본적인 언어, 즉 구성요소를 완벽하게 이해해야 합니다. 이 네 가지 요소인 처리기(Process), 데이터 흐름(Data Flow), 데이터 저장소(Data Store), 단말(External Entity)은 단순히 다이어그램을 채우는 도형이 아닙니다. 이것들은 세상의 모든 정보 시스템이 수행하는 근본적인 활동, 즉 데이터를 변환하고(처리기), 이동시키고(데이터 흐름), 보관하며(데이터 저장소), 외부와 소통하는(단말) 행위를 상징적으로 나타내는 본질적인 개념입니다. 이 구성요소들의 역할과 규칙을 깊이 있게 이해할 때, 비로소 DFD는 복잡한 시스템의 구조를 명쾌하게 밝혀주는 강력한 지도가 될 수 있습니다.
시스템의 심장, 처리기 (Process)
처리기(프로세스)는 DFD의 가장 활동적인 요소이자 시스템의 심장입니다. 처리기의 유일한 존재 이유는 입력된 데이터를 정해진 규칙에 따라 가공하여 새로운 가치를 지닌 데이터로 변환한 후 출력하는 것입니다. ‘주문 정보’라는 데이터를 입력받아 ‘결제 요청 정보’와 ‘배송 지시서’라는 새로운 데이터를 만들어내는 ‘주문 처리’ 기능이 바로 처리기의 대표적인 예입니다.
이러한 처리기를 명확하게 정의하기 위해서는 몇 가지 중요한 원칙을 따라야 합니다. 첫째, 처리기의 이름은 반드시 무엇을 하는지 명확하게 알 수 있도록 ‘명사 + 동사’ 형태로 구체적으로 작성해야 합니다. ‘데이터 처리’나 ‘정보 관리’와 같이 모호하고 포괄적인 이름은 처리기의 역할을 불분명하게 만듭니다. 대신 ‘고객 신용도 검증’, ‘월별 판매 보고서 생성’처럼 구체적인 행위가 드러나도록 명명해야 합니다. 둘째, 모든 처리기는 반드시 하나 이상의 입력 데이터 흐름과 하나 이상의 출력 데이터 흐름을 가져야 합니다. 만약 입력은 있는데 출력이 없는 처리기가 있다면, 이는 데이터가 사라지는 ‘블랙홀(Black Hole)’을 의미하며, 반대로 입력 없이 출력만 만들어내는 처리기는 데이터가 저절로 생겨나는 ‘기적(Miracle)’을 의미합니다. 이러한 경우는 대부분 분석 과정의 논리적 오류이므로 반드시 수정되어야 합니다. 마지막으로, 처리기는 더 이상 분해할 수 없는 가장 작은 단위의 기능(Functional Primitive)이 될 때까지 계층적으로 상세화될 수 있습니다.
데이터의 혈관, 데이터 흐름 (Data Flow)
데이터 흐름은 처리기, 데이터 저장소, 단말 등 DFD의 각 구성 요소 사이를 흐르는 데이터의 이동 경로를 나타냅니다. 시스템의 혈관과도 같은 역할을 하며, 화살표를 통해 데이터가 어느 방향으로 움직이는지를 명시합니다. 이 데이터 흐름 위에는 반드시 ‘고객 ID’, ‘주문 상품 목록’과 같이 이동하는 데이터의 내용을 구체적인 명사로 기술해야 합니다. ‘정보’나 ‘자료’와 같이 불분명한 이름은 해당 흐름의 의미를 파악하기 어렵게 만듭니다.
데이터 흐름을 그릴 때는 몇 가지 중요한 규칙이 있습니다. 데이터 흐름은 반드시 처리기를 거쳐야만 합니다. 예를 들어, 단말에서 데이터 저장소로 직접 데이터가 흘러 들어갈 수 없으며, 반드시 중간에 데이터를 검증하고 가공하는 처리기가 존재해야 합니다. 또한, 하나의 데이터 흐름은 하나의 데이터 묶음을 의미합니다. ‘고객 정보’라는 데이터 흐름은 내부적으로 고객 이름, 주소, 연락처 등 여러 데이터 항목으로 구성될 수 있습니다. 때로는 하나의 처리기에서 나온 데이터 흐름이 여러 목적지로 나뉘어 흘러가는 ‘분기(Diverging)’ 흐름이나, 여러 곳에서 온 데이터 흐름이 하나의 처리기로 합쳐지는 ‘합류(Converging)’ 흐름이 발생할 수도 있습니다. 이러한 흐름을 정확히 표현하는 것은 시스템의 데이터 분배 및 통합 로직을 이해하는 데 핵심적인 역할을 합니다.
지식의 창고, 데이터 저장소 (Data Store)
데이터 저장소는 처리기가 사용하기 위해 데이터를 보관해두는 장소, 즉 ‘움직이지 않는 데이터(Data at Rest)’를 의미합니다. ‘회원 목록’, ‘상품 재고’, ‘주문 기록’과 같이 시스템이 기억해야 할 정보들의 집합이며, 데이터베이스의 테이블이나 파일과 같은 물리적 저장소를 논리적으로 표현한 것입니다. 이름은 주로 복수형 명사를 사용하여 여러 데이터의 집합임을 나타냅니다.
데이터 저장소는 DFD에서 가장 수동적인 요소입니다. 스스로는 아무런 동작도 할 수 없으며, 오직 처리기에 의해서만 데이터가 기록(Write)되거나 조회(Read)될 수 있습니다. 이는 시스템의 데이터 무결성을 지키는 매우 중요한 규칙입니다. 만약 데이터 저장소가 직접 다른 데이터 저장소에 데이터를 보내거나 단말과 통신할 수 있다면, 데이터의 정합성을 검증하고 통제할 방법이 사라지기 때문입니다. 따라서 모든 데이터 저장소는 반드시 처리기라는 문지기를 통해서만 외부와 소통해야 합니다. 데이터 저장소에 입력되는 데이터 흐름은 데이터의 생성, 수정, 삭제를 의미하며, 데이터 저장소에서 나가는 데이터 흐름은 데이터의 조회를 의미합니다.
시스템의 이웃, 단말 (External Entity)
단말은 우리가 만들려는 시스템의 경계 ‘외부’에 존재하면서 시스템과 데이터를 주고받는 모든 대상을 의미합니다. 데이터의 최종적인 출발지(Source)이자 목적지(Sink) 역할을 하며, 시스템과 상호작용하는 사용자, 다른 부서, 외부 기관, 혹은 연동되는 다른 시스템 등이 모두 단말이 될 수 있습니다. 예를 들어, ‘온라인 서점 시스템’에서 ‘고객’은 주문 정보를 입력하는 단말이고, ‘신용카드사’는 결제 승인 결과를 보내주는 단말입니다.
단말을 정의하는 것은 시스템의 범위(Scope)를 결정하는 것과 같습니다. 단말은 우리 시스템의 통제 밖에 있는 존재이므로, 우리는 단말의 내부 구조나 동작 방식에 대해서는 전혀 신경 쓸 필요가 없습니다. 오직 우리 시스템과 어떤 데이터를 주고받는지, 즉 인터페이스에만 집중하면 됩니다. DFD 작성 시 가장 중요한 규칙 중 하나는 단말끼리 직접 데이터를 주고받는 흐름을 그려서는 안 된다는 것입니다. 만약 ‘고객’과 ‘판매자’가 직접 소통한다면, 그것은 우리 시스템을 거치지 않은 상호작용이므로 DFD에 포함될 대상이 아닙니다. 모든 단말은 반드시 우리 시스템 내부의 처리기를 통해서만 다른 요소와 데이터를 교환할 수 있습니다.
결론: 4가지 요소의 조화가 완벽한 DFD를 만든다
데이터 흐름도를 구성하는 처리기, 데이터 흐름, 데이터 저장소, 단말은 각기 다른 역할을 수행하지만, 결국 하나의 목표를 위해 조화롭게 상호작용합니다. 처리기는 데이터를 변환하는 엔진 역할을 하고, 데이터 흐름은 이 변환에 필요한 재료와 결과를 실어 나르는 혈관이 됩니다. 데이터 저장소는 처리기가 필요할 때 언제든 꺼내 쓸 수 있는 지식의 창고가 되며, 단말은 시스템이 세상과 소통하는 창구 역할을 합니다. 이 네 가지 구성 요소의 역할과 그들 사이의 엄격한 규칙을 정확히 이해하고 적용할 때, 비로소 DFD는 복잡한 시스템의 논리를 명쾌하게 드러내고 모든 이해관계자가 동일한 비전을 공유하게 만드는 강력한 분석 도구로 완성될 수 있습니다.