Input Value. 즉, 프로그램 사용자의 입력은 정말 무궁무진하다.

 

이 사용자의 입력에 관해서는 CUI와 GUI는 확연히 큰 차이를 보인다.

 

GUI의 경우, 예를 들면 C# WinForm, HTML/CSS와 같은...

사용자의 입력 Value를 입력 받음과 동시에 제어할 수가 있다.

 

문자열일 경우 Text Box에 길이 제한을 두어 Max 길이 이상 입력이 되지 않게 한다든지...

ENUM의 값을 갖는 경우 Select Box를 만들어 한정된 값 내에서 사용자가 선택하게 한다든지...


이전 회사에서 쓰던 GUI 화면 예시

  •   PFX는 숫자만 입력이 될 것이며 최소 3자리, 최대 15자리까지만 입력이 가능하다.
  •   IDTYPE은 Select Box로 되어 사용자가 정의된 값들만 입력할 수 있다.
  •   DESC는 어떠한 문자도 입력이 가능하고 최대 20자까지만 입력할 수 있다.

하지만 CUI는 사용자가 입력하는 대로 무궁무진하게 입력 받는다.

CUI환경에서는 Input Data Validation(검증) 작업이 무엇보다 중요하며, 시스템 장애를 막을 수 있는 가장 첫번째 관문이다.


 

그럼 System의 어떤 모듈에서 이 작업을 해야 가장 효율적일까?

 

GUI의 경우를 보면 알수 있듯이...당연히 최초 입력값이 생성되는 시점이다.

이전 회사에서는 아래와 같이 하나의 시스템이 대부분 동일한 구조를 갖고 있었다.

 

TCP/IP를 통해 들어오는 특정 Protocol 형식의 패킷이 Application까지 전달되는 과정의 계층 구조

Input Data Validation 작업은 어디서 해야할까?

당연히 Stack 모듈에서 해야하는, 아니 Stack 모듈에서 구현되어야 하는 기본 기능중의 하나이다.. 

그래야 그 위에서 동작하는 모든 Application들이 사용하는 Value들에 대해 의심하지 않고 

사용할 수 있기 때문이다. 

 

Stack 모듈에서 걸러주지 않는다면....?

각각의 Application들이 실제 사용하는 값들만 직접 검증하면....?

만약 100개의 입력값이 있다고 가정해 보자. 하지만 각각의 Application들은 100개 중 일부(약 10개? 15개?)의 

서로 다른 값을 사용한다고 했을 때, 후자가 훨씬 적합해 보이지 않을까? 필요한 것들만 골라서 쓰면 전체적인 작업도 훨씬 줄어 들고.

 

약 20개의 Application이 Stack 위에서 동작한다고 했을 때, 물론 서로 다른 입력값들을 사용할 수 있지만, 일부 필수 값들(Mandatory)은 중복되서 사용할 수 있다. 마치 동일한 상위 클래스를 상속받은 클래스들 처럼....

그렇게 될 경우, Stack 모듈에서 1번만 검증하면 되는 작업을 20개의 Application이 똑같은 값을 다~ 검증하고 있는 셈이 된다. (5개라고 가정한다면...시스템 입장에서는 100개의 입력 값을 검증하는 셈이지 않을까? 다 같은 값인데...). 아무리 봐도 비효율적이다.

 

10년간의 경험적 측면에서의 핵심은 '실수를 최소화 할 수 있는 방향'을 선택하는 것이다.

실수가 없을것 같지...?만! 어디에도 있더라...그리고 언젠가는 장애가 나더라...사람이 만드는 것이니...

더 큰 문제는 그 수많은 값들 중에 어떤 값인지 정확히 알수가 없었다는 것....

(시스템 마다 다르겠지만 1초에 수십만의 패킷이 유입되는 시스템이라면 유입되는 모든 패킷의 Parameter들을 실시간으로 전부 Logging할 수 없으니...H/W 용량도 용량이지만...File Writing 작업이....)

 

이 정도면 Input Data Validation이 귀찮고 하찮은것 같지만 무엇보다 중요하다는 것을 알수 있을 것이다. 

 

그럼 Python으로 Data 검증 함수들을 하나씩 만들어 보자. 

막상 보면 엄청 심플하고 필요 없을 것만 같은 작업이다. 실제로도 간단하고.... 하지만 실전에서는 필수 작업이다.

 

2020/05/27 - [Python] - [Python] Check Validation

'Developer' 카테고리의 다른 글

[Developer] 전역변수  (0) 2020.05.28
[Developer] 개발할 때가 좋았는데.....  (0) 2020.05.25
Posted by [ 브랜든 ]
,