최근 내부 시스템 개선 작업을 진행하면서, 파라미터 이름에 특수문자가 포함되었을 때 발생하는 문제를 직접 경험하게 되었습니다. 단순히 UI 상에 표시되는 이름이라고 생각했던 이 값이, 실제로는 시스템 전반에 걸쳐 영향을 줄 수 있다는 사실을 알게 되었고, 그 과정에서 많은 것을 배우게 되었습니다.
이번 글에서는 저의 실제 경험을 바탕으로, 왜 특수문자 제거가 필요한지, 어떤 부작용이 발생할 수 있는지를 공유드리고자 합니다.
문제의 시작: 특수문자가 포함된 파라미터 이름
우리는 여러 설비에서 발생하는 데이터를 주기적으로 수집해 처리하고 있습니다. 각 설비의 파라미터(예: 온도, 압력 등)는 사용자가 등록할 수 있도록 되어 있는데, 이 이름에 #
, %
, @
, -
같은 특수문자가 포함되면 문제가 생기기 시작합니다.
당시에는 별다른 제약 없이 특수문자가 포함된 이름도 허용하고 있었지만, 결과적으로 이로 인해 예상치 못한 다양한 문제가 나타났습니다.
데이터 처리 흐름 개요
전체 데이터는 다음과 같은 과정을 거쳐 시스템에 반영됩니다:
원천 데이터 수집 → 파라미터 파싱 → 데이터 전송 → 저장 및 처리 → UI 표시
여기서 1분 단위로 반복되는 파라미터 파싱 단계에서 특수문자가 있는 경우, 이를 제거하거나 수정하는 작업이 필요했는데, 이 과정이 여러 부작용을 유발했습니다.
반복적인 특수문자 제거 작업의 부작용
1. 성능 저하
수많은 파라미터 이름을 1분마다 파싱하면서, 특수문자를 매번 확인하고 제거하는 작업이 누적 연산 비용을 초래했습니다.
→ 특히 장비 수나 파라미터 수가 많아질수록 처리 지연이 발생할 수 있었습니다.
2. 데이터 불일치 및 혼란
예를 들어, 사용자가 온도#센서
로 등록했는데 시스템에서 이를 온도센서
로 자동 처리하면,
→ 사용자가 인식한 이름과 실제 저장된 이름이 달라지며, UI와 데이터 간의 불일치 문제가 발생합니다.
이로 인해 알림 설정, 분석 결과, UI 표시 값이 의도와 다르게 연결되는 경우가 생겼습니다.
3. 파싱 오류 및 전송 실패
특수문자가 포함된 이름은, 데이터 처리 과정에서 구분자나 예약어로 오인될 수 있습니다.
→ 이로 인해 포맷 오류, 데이터 누락, 전송 실패와 같은 문제가 발생할 수 있었습니다.
4. 파라미터명 충돌
다른 이름인 val@temp
, val-temp
, val_temp
등이 모두 특수문자 제거 후 valtemp
로 처리되면
→ 중복 처리되거나 덮어쓰기 오류가 생길 수 있습니다. 특히 여러 장비에서 비슷한 이름이 있을 때 충돌 가능성이 높아집니다.
5. 예외 처리 및 디버깅 어려움
문제가 생겼을 때, 원래 등록된 이름과 시스템에 저장된 이름이 다르면
→ 문제 원인을 추적하거나 복구하는 데 시간이 오래 걸리고, 사용자 혼란도 큽니다.
해결 방법: 등록 시점에서 사전 제한
이러한 문제를 경험한 후, 우리는 특수문자가 포함된 파라미터 이름은 등록 단계에서부터 제한하는 방식으로 정책을 변경했습니다.
→ 영문자, 숫자, 밑줄(_)만 허용하도록 가이드하고, 등록 시 UI에서 사용자에게 명확히 안내하고 있습니다.
이렇게 사전 제한을 적용하니,
- 파싱 속도가 안정화되었고
- 파라미터명 충돌이나 오류가 줄어들었으며
- 사용자에게도 더 일관된 경험을 제공할 수 있게 되었습니다
고객에게도 설명이 필요한 이유
사용자 입장에서는 "왜 특수문자가 안 되나요?"라는 질문이 자연스럽게 나올 수 있습니다. 그래서 아래와 같은 방식으로 설명을 드리고 있습니다:
“등록하신 파라미터 이름은 시스템 전체에서 사용되며, 특수문자가 포함되면 데이터 처리나 저장 과정에서 오류가 발생할 수 있습니다. 안정적인 운영을 위해 특수문자 없이 등록해 주세요.”
마무리하며
이번 일을 통해, 단순한 이름 하나도 시스템 전체에 영향을 줄 수 있음을 깨달았습니다. 특히, 반복적이고 자동화된 데이터 처리 환경에서는 초기에 정의된 기준 하나가 시스템의 품질을 좌우합니다.
정리하자면:
- 처음부터 특수문자 없는 이름을 쓰는 것이 시스템 전체에 가장 안전합니다.
- 자동 문자열 수정보다는 사전 제한이 명확하고 관리하기 쉽습니다.
- 고객 안내 문구도 명확하고 간단하게 준비해두는 것이 중요합니다.
같은 고민을 하고 있는 분들에게 작은 참고가 되었으면 좋겠습니다.
'개발 (Development) > General' 카테고리의 다른 글
[General] 어플리케이션의 동시 접속자 수, 어떻게 정해야 할까? (2) | 2025.08.03 |
---|---|
[General] UI 평균 응답시간 측정 방법 정리 (4) | 2025.08.03 |
[General] Windows에서 Plane 서비스 Docker로 로컬 실행하기 (1) | 2025.06.28 |
[General] Data Model 문서와 인터페이스 정의 문서 (0) | 2025.04.12 |
[General] 시스템 운영자 매뉴얼, 이렇게 작성해보세요 (0) | 2025.04.06 |