← 블로그 목록

소프트웨어 설계에서 트리즈는 정답표보다 모순을 드러내는 질문지에 가깝다

트리즈는 소프트웨어 문제를 자동으로 풀어 주는 만능 표가 아니라, ‘성능을 높이면 복잡성이 늘고 단순화하면 유연성이 떨어진다’ 같은 충돌을 더 선명하게 분해하게 만드는 사고 도구다. 40가지 원리 이름을 외우기보다 이상적 상태와 모순을 한 문장으로 적고, 시간·공간·조건으로 분리해 보는 습관이 실무에서는 더 쓸모 있다는 점을 정리한다.

소프트웨어 설계에서 트리즈는 정답표보다 모순을 드러내는 질문지에 가깝다

소프트웨어 설계에서 트리즈는 정답표보다 모순을 드러내는 질문지에 가깝다

트리즈는 러시아어 약자를 옮긴 이름으로, 발명적 문제 해결 이론(TRIZ)을 뜻한다. 소련의 발명 이론가 겐리흐 알트슐러가 기술 발명의 공통 패턴을 분석하면서 만든 접근이다. 이 방법은 원래 기계와 공학 발명에 뿌리를 두고 있지만, 소프트웨어 설계에서도 의외로 쓸모가 있다.

다만 여기서 먼저 선을 그어 둘 필요가 있다. 트리즈가 소프트웨어 문제를 자동으로 풀어 주는 만능 표는 아니다. 오히려 더 현실적인 가치는, 문제를 “성능을 높이면 복잡성이 늘고, 단순하게 만들면 유연성이 떨어지는” 식의 모순으로 분해하게 만든다는 점에 있다.

소프트웨어 문제도 결국 충돌하는 요구사항으로 보일 때가 많다

실무에서 자주 만나는 설계 문제를 떠올려 보면 대부분 이런 형태다.

트리즈의 출발점은 이런 상황을 “문제가 복잡하다”로 뭉개지 않고, 무엇을 좋게 만들려는지와 그 때문에 무엇이 나빠지는지를 따로 적는 데 있다. 이 작업만으로도 해결 방식이 꽤 달라진다.

트리즈에서 바로 가져올 만한 것은 몇 가지 질문 습관이다

트리즈의 세부 도구에는 모순 행렬, 40가지 발명 원리, 이상적 최종 결과 같은 개념이 있다. 소프트웨어에 그대로 1대1 대응시키기는 어렵지만, 다음 질문들은 꽤 유용하게 옮겨 쓸 수 있다.

이상적인 상태를 먼저 적기

트리즈는 “가능하다면 시스템이 존재하지 않아도 기능은 수행되는 상태”를 이상적인 방향으로 둔다. 소프트웨어에서 이 질문은 이렇게 바뀐다.

이상적인 상태를 먼저 적으면 불필요한 복잡성을 덜어낼 실마리가 보인다.

모순을 한 문장으로 적기

예를 들어 “플러그인 시스템을 더 유연하게 만들수록 디버깅이 어려워진다”처럼 쓰는 것이다. 이렇게 적어 두면 해결책도 좀 더 선명해진다. 정말 필요한 것이 최대 유연성인지, 아니면 제한된 확장 지점 몇 개인지 따지기 쉬워진다.

문제를 분리할 수 있는지 보기

트리즈는 시간, 공간, 조건에 따라 모순을 분리하는 발상을 자주 쓴다. 소프트웨어에서는 이것이 꽤 익숙한 형태로 나타난다.

즉 하나의 구조 안에서 모든 요구를 동시에 만족시키려 하지 말고, 맥락을 나눠 충돌을 줄이는 쪽으로 가는 것이다.

소프트웨어에서는 “원리 이름”보다 문제 프레이밍이 더 중요하다

트리즈 책을 처음 읽으면 각종 원리 이름이 먼저 눈에 들어온다. 분할, 국소성, 사전 조치, 역발상 같은 것들이다. 하지만 소프트웨어에서 더 중요한 것은 이름 암기가 아니다. 해결 전의 문제 정의가 제대로 되어 있는가가 더 중요하다.

가령 성능 문제가 생겼을 때도 마찬가지다.

이 질문이 선명하지 않으면, 트리즈든 디자인 패턴이든 결국 그럴듯한 단어만 붙인 장식이 되기 쉽다.

핵심 정리

트리즈는 소프트웨어 설계에 그대로 복사해 쓸 수 있는 정답표가 아니다. 대신 서로 충돌하는 요구사항을 더 명확하게 드러내고, 문제를 더 좋은 문장으로 다시 쓰게 만드는 사고 도구로 보면 꽤 유용하다.

그래서 트리즈를 배운다는 것은 40가지 원리를 외우는 일보다, “무엇을 좋게 하려는가”, “그 때문에 무엇이 나빠지는가”, “이 충돌을 맥락에 따라 분리할 수 있는가”를 자꾸 묻는 습관에 더 가깝다. 설계에서 좋은 질문은 종종 좋은 해답보다 먼저 온다.

참고 자료

← 목록으로
Related

함께 읽으면 좋은 글

프로그래밍데이터 구조상태 전이
모든 프로그램을 데이터와 상태 전이로 보면 설계가 더 선명해진다

‘모든 프로그램은 데이터베이스다’는 엄밀한 정의는 아니지만 사고 실험으로는 꽤 쓸모 있다. 저장·조회·갱신·삭제, 무결성, 상태 전이의 관점으로 코드를 보면 객체 이름보다 접근 패턴과 유효 상태가 먼저 보이고, 프레임워크가 바뀌어도 설계가 덜 흔들린다. 데이터를 어떻게 다루는지가 결국 프로그램의 성격을 결정한다는 점을 정리한다.

서평C++프로그래밍
『The C++ Programming Language』는 문법책이 아니라 언어 설계 감각을 키우는 책이다

비야네 스트롭스트룹의 『The C++ Programming Language』는 두꺼운 문법서로 보이지만, 실제로는 언어 기능 하나하나를 어떤 설계 판단 아래 써야 하는지를 함께 묻는 책이다. 창안자가 직접 쓴 만큼 ‘할 수 있다’와 ‘해야 한다’를 구분하는 감각이 남으며, 한 단계 올라가려는 C++ 사용자에게 한 번쯤 통과해야 할 책으로 정리한다.

프로그래밍테스트테스트 주도 개발
테스트 주도 개발은 테스트를 나중에 붙이는 습관이 아니라 설계 순서를 바꾸는 방식이다

테스트 주도 개발은 테스트를 나중에 붙이는 습관이 아니라, 실패하는 테스트부터 써서 설계 순서 자체를 바꾸는 방식이다. 레드-그린-리팩터링의 짧은 피드백 주기에서 핵심은 테스트 개수가 아니라 설계와 검증 사이의 왕복 거리이며, 마지막 단계의 리팩터링이 빠지면 TDD는 반쪽만 남는다. 진짜 가치는 커버리지 숫자보다 더 분명한 경계선과 안전한 변경 능력에 있다.