본문 바로가기

blah/Mini-Journal

땜빵의 문제

Django REST framework에서 Seriailzer는 데이터를 직렬화(serialize)하거나 역직렬화하고, 더 나아가서는 유효성을 검사하거나 데이터를 조작할 때 쓰이는 기능이다. 당연히 많은 옵션이 내장되어 있고, 특정 순간에 적절한 옵션을 사용해야 한다.

 

serializer에는 partial=True라는 옵션이 있다. 클라이언트 측에서 기존의 데이터를 업데이트하려고 할 때, 모든 필드의 데이터를 입력할 수도 있고 아닐 수도 있다. 이럴 때 partial=True 옵션을 입력해두면 입력된 필드값만 수정되도록 유연한 처리가 가능해진다.

 

제목과 지금까지의 내용으로 보면 뻔하지만, 나는 사실 partial=True의 존재를 몰랐다. 그래서 HTTP 요청을 수용하는 단에서 조건문을 사용해가며 직접 예외 처리를 했다. 딱 그 케이스에서만 통하는 경직된 대응. 나중에 생각해보니 더 나은 옵션이 있을 것 같아서 주변에 물어보았고 partial=True라는 옵션을 쓰면 된다는 답변을 들었다. 공부를 제대로 안 한 업보를 돌려받은 셈.

 

이번 일은 전적으로 내 불민함이었다. 그러나 그렇게 선을 긋지 못할 일도 있을 법하다. 어디까지가 땜빵인가? 땜빵을 피하려면 어떻게 해야 하는가?

 

많은 것이 trade-off 관계에 있다. 특정 측면에서 상이한 비용이 드는 대안들이 있을 때 어떤 비용을 더 중요하게 여길 것인지는 대안의 선택자에게 달려 있다. 하지만 모든 측면에서 더 비싼 비용을 치러야 한다면, 예를 들어 partial=True 옵션을 쓰는 대신 딱 하나의 케이스에 대해서만 반응할 수 있는 구현의 경우에는, 대안이 아니라 땜빵이다. 많은 측면에서 하위호환이라면 땜빵이라고 할 만한 것이다.

 

땜빵을 피하려면 선택지에 대해 알아야만 한다. 내가 가진 선택지가 무엇인지, 지금 이게 "안 좋은" 선택지는 아닌지, 다른 선택지는 어떤 게 있는지. 현재 가진 선택지가 어떤 것들인지 파악하는 힘이 있어야 하고, 현재 선택지의 가치를 판단할 기준과 더 나은 선택지가 있을 거라는 의문을 가질 만한 민감함이 있어야 하며, 다른 선택지를 수입하기 위해 검색하고 물어보길 그치지 않는 적극성이 있어야 한다. 더하자면 자신이 저지른 땜빵에 대해 기억/기록하는 능력도 필요할 테고.

 

이러한 지적인 태도를 습관으로 만드는 게 굉장히 중요하다고 생각한다.

'blah > Mini-Journal' 카테고리의 다른 글

AI의 한계에 대해 생각하기  (1) 2024.06.08
성장의 문제  (0) 2024.05.29
예측의 문제  (0) 2024.04.16
(Semi-)Completeness of Tools  (0) 2024.04.10
씨앗에 물을 주고 있어요  (0) 2024.04.02