시스템 엔지니어를 위한 인터페이스 가이드
목차
오늘은 시스템 엔지니어를 위한 인터페이스 가이드 를 소개합니다.
인터페이스는 설계 단계에서 중요도가 높은 비즈니스 로직에 비해 부차적인 것으로 여겨져 관심을 받지 못하는 경우가 많습니다.
인터페이스 설계와 관리는 아키텍처의 핵심입니다. 인터페이스는 시스템 경계를 넘어 상호 작용을 촉진할 뿐만 아니라 팀, 부서, 타사 공급업체를 연결하고 효율적으로 관리해야 하는 종속성을 제공합니다.
이 글에서는 특히 대규모 통합 프로젝트에서 제대로 작동하는 솔루션을 설계하고 엔지니어링하는 데 가장 중요한 인터페이스의 기술적 측면을 중점적으로 다룹니다.

시스템 엔지니어를 위한 인터페이스 가이드
- 시스템 인터페이스
- 소프트웨어 인터페이스
- 네트워크 인터페이스
시스템 인터페이스
1) 정의
시스템 엔지니어링에서 인터페이스는 정보(아날로그, 디지털, 무선), 에너지(전기 연결) 또는 물질(엔진룸의 연료)을 교환하여 상호 작용하는 두 시스템, 애플리케이션 또는 구성 요소를 구분하는 영역 또는 공간입니다.

인터페이스는 시스템의 두 부분을 분리하고 신뢰할 수 있는 정보 공유 메커니즘을 제공하여 상호 작용을 촉진합니다. 인터페이스는 시스템과 시스템이 작동하는 환경 사이에 자연스럽게 나타납니다. 사용자 인터페이스는 시스템 운영자에게 명령 및 제어 기능을 제공합니다.
인터페이스는 시스템을 경계를 넘어 정보 교환이 가능한 더 작은 하위 시스템으로 분할하여 생성될 수도 있습니다.
인터페이스의 예는 다음과 같습니다.
- 교통 시스템의 원형 교차로, 교차로, 장애물.
- 소프트웨어 애플리케이션의 명령줄 인터페이스(CLI) 및 그래픽 사용자 인터페이스(GUI).
- 두 컴퓨터 시스템 또는 하드웨어 구성 요소(이더넷, USB, HDMI) 간의 네트워크 인터페이스.
- 벽은 따뜻한 실내와 외부의 차가운 환경을 구분하는 열 인터페이스입니다.
인터페이스는 내부 인터페이스와 외부 인터페이스가 있습니다. 내부 인터페이스는 시스템 경계 내에서(하위 시스템과 구성 요소 간) 작동하는 반면, 외부 인터페이스는 시스템 경계 외부에서(시스템과 환경 간) 작동합니다.
이 글은 주로 소프트웨어에 관한 것이므로 애플리케이션 인터페이스, 특히 컴포넌트 또는 시스템 간의 인터페이스에만 초점을 맞출 것입니다.
2) 인터페이스와 아키텍처
소프트웨어 설계에서 인터페이스를 사용하면 클린 코드의 SOLID 원칙 중 하나인 의존성 반전 원칙(DIP)을 충족할 수 있습니다.
인터페이스를 사용하면 기본 구현에 대해 크게 걱정하지 않고 클래스를 교체할 수 있습니다. 이 추상화 방법은 코드 복잡성을 숨기고 호출 클래스가 구현에 결합되는 것을 방지합니다.
시스템 아키텍처에서 내부 인터페이스는 대규모 모놀리식 시스템을 모듈화된 구성 요소로 분해한 자연스러운 결과물입니다. 하위 시스템을 하나로 묶는 것은 인터페이스가 서비스를 게시할 때 준수하는 계약입니다.
인터페이스는 시스템, 플랫폼, 코드 클래스를 특정 방식으로 연결하는 뚜렷한 이점을 제공함으로써 비즈니스, 솔루션, 소프트웨어 아키텍처의 핵심입니다. 인터페이스는 세 가지 계층의 구성 요소를 분리할 수 있습니다.
- 서로 다르지만 상호 의존적인 비즈니스 서비스를 제공하는 플랫폼은 최상위 계층의 API 또는 파일 인터페이스를 통해 연결됩니다. 이 계층에 최종 사용자(또는 환경)를 추가할 수 있습니다.
- 중간 계층에서는 동일한 플랫폼의 하위 컴포넌트가 API, 파일 또는 데이터베이스와 같은 데이터 지속성 엔진을 통해 정보를 공유할 수 있습니다.
- 최하위 계층에서는 객체(클래스 인스턴스화)가 인터페이스라는 추상화 계층으로 대체됩니다.
소프트웨어 인터페이스 유형
네 가지 유형의 소프트웨어 인터페이스에 대해 설명합니다. 네 가지 유형의 인터페이스를 통해 두 시스템 간에 정보를 공유할 수 있습니다.
1) 사용자 인터페이스
CLI(명령줄 인터페이스)는 사용자가 소프트웨어 애플리케이션과 상호 작용할 수 있는 가장 오래된 방법입니다. 대부분의 유닉스 기반 시스템은 여전히 CLI를 제공합니다.
윈도우, 아이콘, 메뉴 및 포인터(WIMP)는 1970년대에 처음 등장한 오늘날의 그래픽 사용자 인터페이스(GUI)의 기본 구성 요소입니다. 최종 사용자는 마우스와 같은 포인팅 디바이스로 화면을 탐색하고 포인터를 사용하여 아이콘 및 메뉴와 같은 다른 화면 요소와 상호 작용합니다.
1984년 Apple은 매킨토시에 GUI를 탑재했고, 1985년 Microsoft는 최초의 GUI 기반 OS인 Windows 1.0을 출시했습니다.
공상과학 영화에서나 볼 수 있었던 자연어를 사용한 음성 인터페이스는 이제 상용화되었으며, 가장 친숙한 예로 Siri와 Cortana를 들 수 있습니다.
2) 파일 인터페이스
소프트웨어 시스템 간의 표준 데이터 공유 방법은 파일 인터페이스를 이용하는 것입니다. 파일 인터페이스는 일반적으로 빠른 응답이 중요한 명령, 쿼리 또는 기타 대화형 메시지 형식이 아닌 정적 데이터의 일괄 전송에 사용됩니다.
파일 전송 플랫폼은 파일 교환을 위한 안전하고(서명 및 암호화를 통해), 유연하고(파일 감지 메커니즘, 보관 도구), 구성 가능하며(라우팅 규칙), 강력한(예외 처리, 알림 및 경고) 수단을 제공합니다.
대부분의 파일 인터페이스는 고정 또는 가변 길이의 레코드 기반 프로토콜을 구현합니다.
3) 애플리케이션 프로그래밍 인터페이스(API)
시스템 통합은 두 소프트웨어 애플리케이션 간의 통신을 허용하는 일련의 규칙과 프로토콜인 애플리케이션 프로그래밍 인터페이스 또는 API를 통해서도 이루어질 수 있습니다.
Java 또는 C++의 인터페이스와 마찬가지로 API는 비즈니스 로직의 복잡성과 기타 여러 구현 세부사항을 숨기는 동시에 API 소비자가 제공되는 서비스를 올바르게 사용하는 데 필요한 정보만 엄격하게 노출합니다. 이러한 디커플링은 서로 다른 목적으로 설계된 시스템 간의 상호 운용성을 가능하게 합니다.
API 호출은 일반적으로 HTTPS를 통해 전달되며 동기식 또는 비동기식일 수 있습니다. 동기식 API 호출은 응답이 수신될 때까지 호출자가 차단되는 디자인 패턴입니다. 비동기식 API 호출에서는 호출자가 다른 기능의 수행을 중단하지 않고 응답이 도착하면 알림을 받습니다.
4) 데이터 리소스 공유
데이터 소스를 공유하면 두 애플리케이션이 상호 작용할 수 있는 인터페이스를 제공할 수 있습니다.

데이터베이스와 같은 공통 데이터 저장소를 통해 데이터를 간접적으로 공유할 수도 있습니다. 이러한 방식으로 배포된 동일한 애플리케이션의 여러 인스턴스는 향상된 로드 공유 및 중복 기능을 제공할 수 있습니다.
동일한 데이터베이스에 액세스하는 두 개의 시스템 구성 요소(온라인 및 배치)를 상상해 보세요. 온라인 시스템은 사용자에게 애플리케이션에 대한 액세스를 제공하며, 사용자 데이터는 데이터베이스에 유지됩니다. 배치 시스템은 특정 테이블을 정기적으로 검사하여 다음에 수행해야 할 작업에 대한 정보를 확인합니다.
이 구성(데이터베이스를 공유하는 여러 구성 요소)은 또한 고가용성을 제공하기 위해 배포되며, 이러한 방식으로 구성된 여러 개의 동일한 애플리케이션은 중복성 및 로드 공유 기능을 제공합니다.
동기화 노력을 무의미하게 만드는 연결 대신 공유 데이터베이스는 원자성, 일관성, 격리 및 내구성(ACID) 모델을 통해 모든 동시 데이터 액세스를 우아하게 처리할 수 있습니다.
네트워크 인터페이스
네트워크 인터페이스는 소프트웨어 인터페이스의 성공적인 구현을 보여주는 데 탁월합니다.

네트워크 인터페이스를 통해 두 개의 엔드포인트를 연결하는 네트워크 노드의 예로는 안테나, 인스턴트 메시징, 무선 연결, 인터넷 및 물리적 네트워크 카드가 있습니다. 이러한 시스템에 들어간 엔지니어링 노력의 양은 엄청납니다.
특히 인터넷 프로토콜 스위트는 소프트웨어 시스템 통신의 복잡성을 푸는 데 핵심이 되는 기본적인 아키텍처 컴퓨터 네트워크 설계 원칙을 소개합니다.
1) OSI 모델
개방형 시스템 상호 연결(OSI)은 1980년대 초에 모든 주요 컴퓨터 및 통신 회사에서 채택한 최초의 표준 네트워크 통신 모델입니다.
OSI 모델에서 컴퓨터 시스템 간의 통신은 7개의 추상화 계층으로 나뉩니다: 물리적, 데이터 링크, 네트워크, 전송, 세션, 프레젠테이션, 애플리케이션입니다.
통신은 통신 채널을 통한 비트 전송의 물리적 구현부터 애플리케이션의 가장 높은 데이터 표현 수준까지 설명됩니다.
추상화 모델의 각 계층은 바로 위에 있는 계층에 서비스를 제공하고 그 아래 계층으로부터 서비스를 받습니다.
현대 인터넷은 더 단순한 모델인 TCP/IP를 기반으로 합니다. 하지만 7개의 추상화 계층으로 구성된 OSI 모델은 네트워크 작동 방식을 시각화하고 소통하는 데 여전히 널리 사용되고 있으며, 네트워킹 문제를 격리하고 해결하는 데 도움이 됩니다.
2) TCP/IP 모델
TCP(전송 제어 프로토콜)는 네트워크를 통해 장치 간에 데이터 패킷을 성공적으로 교환할 수 있도록 보장합니다. 이는 오늘날 인터넷의 표준이 되었습니다.
TCP는 웹 서버, 웹사이트, 파일 전송, P2P 애플리케이션을 비롯한 다양한 애플리케이션을 구동합니다.
TCP와 인터넷 프로토콜(IP)은 함께 작동하여 온라인에서 올바른 데이터 교환을 보장합니다. IP는 각 패킷을 목적지로 라우팅하는 역할을 담당하고, TCP는 바이트가 올바른 순서로 온전하게 전송되도록 보장합니다.
이 두 프로토콜을 통칭하여 TCP/IP 또는 인터넷 프로토콜 스위트라고 부릅니다.
엔드투엔드 및 견고성 원칙과 같은 주요 아키텍처 원칙이 네트워크 인터페이스 설계에 적용됩니다.
처음에는 종단 간 원칙에 따라 데이터 통신의 보안과 안정성을 보장하기 위해 네트워크 종단 노드(데이터를 교환하는 애플리케이션)가 필요했습니다.
반면 라우터나 게이트웨이와 같은 중개 노드는 상태 비저장 상태를 유지해야 하며 효율성과 속도에만 신경 써야 했습니다.
견고성 원칙에 따르면 발신자 노드는 올바른 형식의 데이터 패킷을 신중하게 생성해야 합니다. 그러나 수신자 노드는 잘못된 패킷을 해석하는 것이 합리적이라면 자유롭게 해석을 시도할 수 있습니다.



















