인트라넷과 인터넷이 분리된 환경에서 자동화 설계하기

웹 · 앱 개발5분 읽기

공공기관이나 규모 있는 기업의 업무를 자동화하다 보면 기술보다 환경이 더 큰 제약이 되는 경우가 있습니다. 대표적인 것이 망분리입니다. 내부 업무 시스템이 도는 인트라넷과 외부 인터넷이 물리적으로 나뉘어 있고 두 망 사이에 직접적인 통신 통로가 없는 구조입니다. 한 통행료 정산 시스템의 미납 알림 발송을 자동화할 때가 그랬습니다. 미납 조회는 인트라넷에서만 되고 알림 발송은 인터넷에서만 됐습니다. 이 글은 그렇게 갈라진 두 세계를 하나의 자동화 흐름으로 잇는 설계를 정리한 것입니다.

망분리라는 제약을 먼저 인정한다

망분리 환경에서 흔히 저지르는 실수는 어떻게든 두 망을 잇는 통로를 만들려는 것입니다. 그러나 망분리는 보안을 위해 의도적으로 세운 벽이고 이 벽을 우회하는 설계는 정책 위반일 뿐 아니라 애초에 허용되지도 않습니다. 그래서 출발점은 벽을 뚫는 것이 아니라 벽을 그대로 두고 설계하는 것이었습니다. 두 망은 서로 직접 대화할 수 없다는 사실을 제약이 아니라 설계 조건으로 받아들이는 것입니다.

이 관점에서 자연스럽게 나온 결론이 프로그램을 둘로 나누는 것이었습니다. 하나는 인트라넷 PC에서 도는 프로그램으로, 내부 업무 시스템에 접근해 데이터를 조회하고 발송에 쓸 자료를 만드는 일을 맡습니다. 다른 하나는 인터넷 PC에서 도는 프로그램으로, 그 자료를 받아 실제 알림을 외부로 발송합니다. 각 프로그램은 자기 망에서만 할 수 있는 일에 충실하고 상대 망의 일에는 관여하지 않습니다. 하나의 큰 프로그램이 두 망을 넘나드는 것이 아니라, 두 개의 독립된 프로그램이 각자의 자리를 지키는 구조입니다.

연결은 오직 파일 하나로

두 프로그램을 잇는 유일한 다리는 파일이었습니다. 인트라넷 프로그램이 발송에 필요한 모든 정보를 담은 자료 파일을 만들면, 그 파일을 저장 매체에 담아 사람이 직접 인터넷 PC로 옮기고 인터넷 프로그램이 그 파일을 읽어 발송합니다. 두 망 사이에 오가는 것은 오직 이 파일 하나뿐입니다. 실행 가능한 코드가 넘어가는 것이 아니라 정해진 형식의 데이터만 넘어가므로, 망분리의 취지를 해치지 않으면서도 업무를 잇습니다.

이 방식이 성립하려면 파일의 형식이 두 프로그램 사이의 확실한 약속이어야 합니다. 어떤 항목이 어떤 순서로 들어가는지, 각 항목이 무엇을 뜻하는지가 양쪽에서 정확히 일치해야 합니다. 그래서 이 자료 파일의 형식을 계약처럼 고정하고 인터넷 프로그램은 파일을 읽을 때 첫머리부터 이 형식이 맞는지 검증하도록 했습니다. 형식이 조금이라도 어긋나면 잘못된 발송을 하는 대신 즉시 멈춥니다. 두 프로그램이 물리적으로 떨어져 있어 서로를 직접 확인할 수 없는 만큼, 파일이라는 접점에서 하는 검증이 더욱 중요합니다.

각 망에서 무인으로 도는 구조

두 프로그램은 각각 자기 PC에서 무인으로 실행됩니다. 원격 접속이 불가능한 환경이라 중앙에서 통제할 수는 없었고 대신 각 PC의 작업 스케줄러가 정해진 시각에 프로그램을 돌리는 방식을 택했습니다. 인트라넷 프로그램은 브라우저나 엑셀 같은 무거운 도구 없이 서버와 직접 통신만으로 자료를 만들기 때문에, 화면이 없는 무인 환경에서도 안정적으로 돌 수 있습니다. 각 단계는 서로 격리되어 있어 한 단계의 문제가 전체를 무너뜨리지 않고 무엇이 언제 실패했는지 기록으로 남습니다.

여기에 실데이터를 다루는 업무이니만큼 안전장치를 얹었습니다. 실제로 데이터를 등록하거나 발송하는 쓰기 동작에는 기본적으로 안전 가드를 두어 명시적으로 실행을 지정하기 전에는 실제 전송이 일어나지 않게 했습니다. 또한 자료에 포함되는 차량번호나 연락처 같은 개인정보는 로그와 리포트에 원본 그대로 남기지 않고 마스킹했습니다. 무인으로 돌면서 실데이터를 만지는 프로그램일수록, 잘못 눌러도 큰일이 안 나는 구조와 흔적을 최소화하는 습관이 필요합니다.

제약을 존중한 설계가 오래간다

이 프로젝트가 남긴 교훈은 제약을 이기려 하지 말고 존중하라는 것입니다. 망분리를 우회하려는 설계는 설령 기술적으로 가능하더라도 정책과 충돌하고 결국 오래가지 못합니다. 반대로 두 망이 갈라져 있다는 사실을 그대로 받아들이고 각 망의 프로그램을 나눈 뒤 검증된 파일 하나로만 잇는 설계는 단순하고 견고하며 기관의 보안 정책과도 어긋나지 않습니다. 좋은 자동화는 환경을 거스르는 것이 아니라 환경에 맞춰 흐르는 것입니다.

이 2프로그램 구조가 실제로 어떤 레거시 시스템 위에서 어떻게 돌아가는지, 그리고 그 시스템의 통신을 어떻게 해석해 붙였는지는 레거시 통행료 시스템 역설계 연동 사례에 전체 그림으로 정리했습니다. 무인 운영에서 세션이 풀렸을 때의 복구 설계는 오류 대신 로그인 페이지를 주는 서버, 세션 만료를 다루는 법에서 이어집니다.

자주 묻는 질문

망분리 환경에서는 자동화가 아예 불가능한가요?

가능합니다. 다만 두 망을 직접 잇는 방식은 안 됩니다. 각 망에서 할 수 있는 일을 맡는 프로그램을 따로 두고 그 사이를 검증된 형식의 파일로만 연결하면 됩니다. 실행 코드가 아니라 데이터만 오가므로 망분리의 취지를 해치지 않으면서 업무를 이을 수 있습니다.

파일로 잇는 방식은 안전한가요?

파일의 형식을 두 프로그램 사이의 고정된 약속으로 두고 받는 쪽이 파일을 읽을 때 형식을 처음부터 검증하게 하면 안전합니다. 형식이 어긋나면 잘못된 처리를 하는 대신 즉시 멈추도록 설계했습니다. 또한 파일에 담기는 개인정보는 로그에 원본으로 남기지 않도록 마스킹합니다.

원격 접속이 안 되는데 무인 운영이 되나요?

각 PC의 작업 스케줄러로 정해진 시각에 프로그램을 실행하는 방식으로 무인 운영합니다. 중앙에서 통제하지는 못하지만 각 단계를 격리하고 실행 이력을 기록으로 남겨 무엇이 언제 실패했는지 확인할 수 있게 했습니다. 브라우저 없이 서버와 직접 통신하므로 화면 없는 환경에서도 안정적입니다.

#망분리#아키텍처#무인운영#자동화설계#보안

업무자동화 구축이 필요하신가요?

무료 상담 신청