본문 바로가기

신변잡기/일상생각

[코딩호러] 사용자의 데이터를 손상하지 마라! and 커뮤니티의 의견을 듣되 너의 행동을 결정하도록 하지 말라!

코딩호러를 읽다가(오래도 읽는다 참..ㅋ) 최근 경험한 구절이 있어서 남겨봅니다.


1. 사용자의 데이터를 손상하지 마라!

저는 윈도우 애플리케이션 개발자로서, 인턴때 테스트겸 실무적용겸으로 만든 소프트웨어를 하나 책임지고 있습니다.


그 소프트웨어는 회사의 솔루션의 데이터에 직접적으로 접근이 가능한,

만들때는 몰랐지만 너무나도 위험한 애플리케이션입니다.


데이터들은 손상되면 데이터를 기반으로 다음동작을 이어나갈 수 있는 솔루션은 동작을 멈추거나, 비정상적으로 동작을 마치게됩니다.


물론 개발할 당시에도 이 점은 고려되어, 선배 개발자들의 리뷰를 통해 안정성을 검증하곤 했습니다.

그러나 완전할 순 없었고, 이는 간헐적이며 재현이 어려운 버그로 나타났습니다.


일부 데이터를 갱신해야 함에도, 이전값이 보존되지 않고 새로 생성해버려 NULL로 덮어써버리는 버그가 있었습니다.

해당환경에서는 종종 나타나지만, 다른 곳에서는 동일한 동작임에도 나타나지 않았습니다.


무언가의 영향을 받아, 메모리에 있던 정보가 사라지는 것이 분명했습니다.

아직 그 원인이 무엇인지 모릅니다.


저는 소프트웨어의 중요한 점인, 사용자의 데이터를 손상시키는 우를 범했습니다.

이건 정말 심각합니다. 사용자가 동작을 한번은 더 하게 만들고(데이터 복구) 데이터의 크기가 큰 경우는 복구마저 되지 않습니다.


이건 프로그램의 신뢰의 문제입니다. 더 나아가면 소프트웨어 산업의 신뢰도의 문제입니다.

이런 상태가 나타남을 정정하지 못한다면, 누가 나의 소프트웨어를 써주겠습니까

그래서 저의 소프트웨어는 사용범위가 넓지 않고, 그마저도 대체재가 없기때문에(독점...) 사용되고 있습니다.


버그는 계속해서 고쳐지고 있고, 수정버전은 계속 나오고 있지만..

모자란 시야에서 만들어진 수많은 버그들은 제 코드에 그대로 남아서 숨쉬고 있습니다.


2. 커뮤니티의 의견을 듣되 너의 행동을 결정하도록 하지 말라!


사용자의 요구사항을 수용하는 것은 매우 중요합니다.

그러나 사용자들의 이야기에 너무 귀를 기울이면 본질에서 벗어나버립니다.


예를 들어, 저는 1번에서 언급한 애플리케이션에서 사용자의 요구를 충실히 반영했습니다.

고객의 범위는 넓지 않았고, 요구사항역시 그다지 크지 않았습니다.


그러나 사용자가 요구하는 내용과 그들이 말한 내용은 엄연한 차이가 있습니다.

그들은 본인이 사용해본 이미 익숙한 포멧을 예로 들어 설명합니다.


"이 부분은 어떤 방식과 이런 툴처럼 이러이러하게 만들어주세요"


좋다. 아주 좋다. 방식과 UI마저 정해줬다. 난 로직만 적당히 구성해서 그대로 만들기만 하면 된다.

만들고나서 사용자가 써보니 꽤나 괜찮아했다. 만족스럽다.


만족스럽다? 이건 만족스러운 결과인걸까?


지금까지 그렇게 작업해왔고 지금도 그런 애플리케이션이지만

이건 무언가 잘못된 가능성을 내포하고 있습니다.(메모리 문제에 이어 또...ㅠ)

궁극적으로 사용자는 어떤 순수한 이미지, 상황을 언어로 매우 단순화 시켜서(깎고 또 깎아서) 나에게 이야기할 것입니다.


나는 그걸 듣고 수용할 것이고, 당연히 깎인 이미지만 왔으니 나는 그대로 이해할 수 있습니다.

그러나 거기에서 조금 살을 붙인다해서 원본으로 복구되는 것은 아닙니다.


익숙한 무언가를 통해 이미지를 최대한 덜 깎으려 함을 이해해야 합니다.

이점을 반성하려 합니다.

과연 저는 얼마나 깍인 이미지를 가지고 원본이라 믿으며 작업했을까요...


지금도 돌고있을 프로그램들에게 미안하고(조금) 동시에 그들이 무섭습니다(많이)ㄷㄷ