본문 바로가기
IT 공부/공부하며 알게된 사실들

소프트웨어의 사용자 관점에서 느낀 것들, 소프트웨어 개발의 본질.

by exdus3156 2023. 11. 12.

개발 공부를 하다보면 (당연하겠지만) 개발자, 즉 제품 생산자의 관점에서 기술을 바라볼 수 밖에 없다.

그러나 개발의 본질은 소프트웨어를 만드는 것이고, 해당 소프트웨어는 사용자의 편의를 위한 기술이다.

어떤 기술이 되었든, 그것을 만드는 총체적인 과정에서 만나는 여러 사항들을 해결하기 위해 기술들이 탄생한다.

그래서 가끔은 어떤 기술이 있을 때, 이것이 왜 존재하는지 생각해보곤 한다. (정답인지와는 별개로)

 

나는 밀리의 서재라는 소프트웨어를 애용한다. 구독 시스템을 기반으로 한 디지털 이북 소프트웨어다.

그런데 쓰면서 불만이 이만저만이 아니다. 

지속적으로 업데이트되곤 하지만 사용자 입장에서는 "왜 이런 기술이 없는거지?"라는 의문이 들 때가 많다.

예를 들어, 나는 책을 읽다가 하이라이트를 많이 하는데, 나중에 내가 기록한 하이라이트를 보려면 하이라이트 항목에 들어가서 해당 책을 드래그해서 찾아야 한다.

즉, 책을 선택하고 그 책에 해당하는 하이라이트를 보는 것이 아니라, 하이라이트라는 거대한 카테고리에 들어가서 책을 찾아야 하는 것이다.

그런데 책 검색 기능이 없다...!!

하이라이트 항목에서 원하는 책을 찾으려면 끊임없이 드래그를 해서 책을 찾아야 한다. 

정렬 기능이 있으나, "하이라이트 많은 항목", 그리고 "최근에 작성한 하이라이트" 순으로만 정렬이 가능하다.

따라서 각 정렬 기준에 따라 정렬은 할 수 있지만, 결국 책을 찾으려면 순차 접근만 가능하다.

이런 기술로는 책을 많이 읽고 하이라이트를 많이 한 사용자일수록 원하는 하이라이트를 더욱 찾기 힘들다.

하이라이트 항목에서 특정 책을 검색하는 기능의 구현이 불가능할 것 같진 않은데, 이상하게도 그런 기능을 아직 제공하지 않는 것 같다.

하지만 나 같은 사용자가 몇 만이 된다고 상상하면, 아마 밀리의 서재 팀이 고려하는 사용자의 요구사항도 수 백 가지가 넘을 것이다.

이런 것을 생각하면 왜 소프트웨어 개발 프로세스가 탑 다운 방식(모든 세부 사항을 전부 수집한 후에 완성으로 한 번에 나아가는 방식)으로는 만들 수 없는 건지 알 것 같다는 기분이 든다.

어떤 소프트웨어든 요구 사항과 기획에 대한 변경이 있을 수 밖에 없다.

아무리 고객 혹은 사용자의 관점에서 제품을 디자인해도, 사용하면서 받는 느낌 전부를 알 수 없기 때문이다. 

따라서 사용하는 과정에서 이런저런 기능 업데이트를 요구할 수 있고, 기능을 빼달라고 할 수도 있고, 버그가 생길 수도 있다.

이것이 소프트웨어와 하드웨어의 차이가 아닐까? 

자동차와 같은 하드웨어는 부품을 바꾸기가 쉽지 않다. 물론 인터페이스를 통해 외부 장치와 호환이 되는 다른 부품을 바꿀 수 있는 하드웨어도 존재한다. 그러나 소프트웨어와 비교하면 정말 말 그대로, 하드웨어는 하드(hard, 딱딱한)하다.

소프트웨어는 반대로 소프트(soft)하다. 그래서 역설적으로 소프트해야 한다. 그래서 개발이 어려운 것 같다. 컴퓨터라는 하드웨어 위에서 소프트한 무언가를 탑재해야 하는 것이다.

데이터는 쌓이고, 기능은 자꾸 변경되고, 버그가 생기고, 사용자의 관점에서 요구 사항을 반영해야 하고, 심지어 경쟁 사업보다 앞서기 위해 사용자가 인식하지 못하지만 원하는 요구 사항도 미리 파악해야 한다.

기능을 실컷 구현했지만, 그 이상의 새로운 기능을 구현하려고 보니 기존 기능 구현 코드와 충돌할 수도 있다.

그래서 소프트(soft)와 애자일(agile)이 그렇게 강조되나 싶다. 또한 클린 코드(clean code)와 객체지향(OOP)적 설계가 강조되는 것도 무리가 아니다. 읽기 쉬워야 변경이 쉽고, 객체지향적으로 잘 설계해야 변경에 있어 버그를 최소화하고 의존성을 관리할 수 있다.

스프링과 같은 프레임워크(framework) 또한 소프트웨어의 전체적인 시스템에 대한 일관되고 잘 알려진 구조를 미리 설정하여 개발자 사이의 충돌과 커뮤니케이션을 최소화하려는 것이 아닐까?

이렇게 놓고 보면, 소프트웨어의 본질은 이미 정답이 단어 자체에 녹아들어 있다는 생각이 든다. 

 

소프트웨어는 소프트해야 한다!