[개발 팁] 현장에서 얻은 교훈 from 고성능파이썬 p.402
- basic/languages
- 2019. 4. 15.
1. 소통, 소통, 소통하라
2. 유망한 기술을 조망할 수 있는 위치를 유지하라
3. 단순하게 만들어, 멍청아(KISS, Keep It Simple, Stupid)
4. 데이터 파이프라인의 온전성을 수동으로 검사하라.
5. 유행에 조심히 대응하라.
1. 소통, 소통, 소통하라
뻔한 말이지만, 누차 강조할 만한 가치가 있다. 방법을 정하기 전에 고객의 문제를(사업적으로) 더 높은 수준에서 이해하라. 함께 앉아서 선입견과 잘못된 개념 없이 고객이 실제로 필요로 하는 것이 명확해 질 때까지, 고객에게 필요한 것이 무엇이라고 생각하는 지를 고객에게 들으라(여러분을 만나기 전에 고객이 구글에서 어떤 것을 검색했는지와 고객이 가능하다고 생각하는 일을 기반으로 대화를 시작하라). 해결책을 검증할 방법을 미리 합의하라. 이 과정을 구불구불한 긴 길을 닦아가는 과정으로 시각화하고는 한다. 출발점을 정확히 정하고(문제 정의, 사용 가능한 데이터의 출처) 최종 지점을 바르게 설정하면(평가 방법, 해법의 우선순위) 중간의 경로는 절로 들어맞기 마련이다.
2. 유망한 기술을 조망할 수 있는 위치를 유지하라.
업계에서는 잘 알려지지 않았지만, 견고하고 추진력을 얻기 시작하는 최신 기술들이 있다. 그런 기술은 고객(또는 여러분)에게 큰 가치를 제공할 수 있다. 예를 들어 몇 년 전 일래스틱서치는 거의 알려져 있지 않았고, 상당히 새로운 오픈 소스 프로젝트였다. 하지만 나는 그 방식이 견고하다고 판단하고(아파치 루신 위에 구축됐으며, 복제와 클러스터 샤딩 등을 제공한다) 고객에게 그 기술을 사용하라고 권했다. 우리는 곧 일래스틱서치를 핵심으로 하는 검색 시스템을 만들었고, 그 때 고려했던 다른 대안들(큰 상용 데이터베이스)과 비교할 때 고객은 라이선ㅅ, 개발, 유지보수에 드는 비용을 상당히 절약 할 수 있었다. 더 중요한 것은 새롭고 유연하며 강력한 기술을 적절히 적용해 그 제품이 큰 경쟁 우위에 설 수 있었다는 점이다. 요즘은 일래스틱서치가 기업 시장에 들어와서 더 이상 경쟁 우위를 가져다주지는 못한다. 다시 말해 누구나 그것을 알고 사용한다. 올바른 타이밍, 즉 스위트 스팟을 잘 선택한다면 가치/비용 비율을 최대화할 수 있다.
3. 단순하게 만들어, 멍청아!(Keep It Simple, Stupid!, KISS)
이 역시 쉬운 문제다. 가장 좋은 코드는 유지보수할 필요가 없는 코드다. 간단한 것으로 시작해서 필요한 만큼만 개선하고 ,이를 반복하라. 나는 "한 가지 일만 하되, 그 일을 잘하라"는 유닉스 철학을 따르는 도구를 선호한다. 상상할 수 있는 모든 것이 한 지붕 아래서 깔끔하게 맞물려 돌아가도록 한 거대한 프레임워크가 매력적으로 다가온다. 하지만 결국에는 그 대단한 프레임워크가 상상하지 못했던 무언가가 필요해지고, (개념적으로) 단순해 보이는 변경을 가하지만 결국 연쇄 과정을 거쳐 (프로그래밍적으로) 악몽으로 끝나는 날이 오기 마련이다. 대단한 프로젝트나 그 프로젝트가 제공하는 모든 것을 포함하는 API는 스스로의 무게를 이기지 못하고 무너지게 마련이다. 모듈화되고, 모듈 간의 API가 가능한 한 작으면서 복잡하지 않은, 초점이 맞춰져 있는 도구를 사용하라. 성능 때문에 어쩔 수 없는 경우를 제외하고는, 간단하고 눈으로 관찰할 수 있는 잘 공개된 텍스트 형식을 선호하라.
4. 데이터 파이프라인의 온전성을 수동으로 검사하라.
데이터 처리 시스템을 최적화하는 경우, 긴밀하게 연결된 파이프라인을 사용하고 효율적인 이진 데이터 형식을 사용하며 압축된 I/O를 고집하는 '이진법적 사고'에 머무를 수가 있다. 시스템을 흐르는 데이터를 볼 수 없고 ( 타입을 제외하고는) 검증하지도 못하기 때문에 무언가 완전히 잘못될 때까지는 데이터가 보이지 않는 상태로 남는다. 그런 상황에서 디버깅을 시작하게 된다. 나는 몇 가지 간단한 로그 메시지를 여기저기 심어서 데이터가 여러 내부 처리 지점에서 어떤 모양일지 보여주게 만드는 것을 좋은 실무 습관으로 권장한다. 멋지지는 않지만, 유닉스의 head 명령과 비슷하게 몇 가지 데이터 지점을 선택해서 시각화할 수 있으면 된다. 이렇게 하면 앞에서 말한 디버깅 시점에도 도움이 된다. 그 뿐만이 아니다. 사람이 읽을 수 있는 형태로 데이터를 살펴보다 보면, 심지어 모든게 아주 잘 돌아가는 경우라 할지라도, "아하!" 하는 깨달음의 순간을 놀랍도록 자주 경험할 수 있다. 이상한 토큰화다! 입력이 항상 latin1으로 인코딩되어 들어온다고 약속했었는데! 이 언어에 대한 문서가 왜 거기 있지? 테긋트 파일을 처리하는 파이프라인으로 이미지 파일이 흘러들어가 버렸네! 이런 정보가 자동화된 타입 검사나 고정된 단위 테스트가 제공하는 것보다 더 나은 통찰을 제공해서, 각 구성 요서의 경계를 벗어나는 문제에 대한 힌트를 제공하는 경우가 종종 있다. 실제 세계의 데이터는 더럽다. 꼭 예외나 오류를 일으키는 것이 아닐지라도, 빨리 더러운 부분을 잡아내라. 항상 지나치지 않을까 싶을 정도로 정보를 많이 제공하는 쪽을 택하라.
5. 유행에 조심히 대응하라.
고객이 어떤 X에 대해 자주 들었다며 X를 꼭 가지고 싶다고 이야기한다고 해서, 고객에게 그것이 꼭 필요한 것은 아니다. 이는 기술적인 문제보다는 마케팅 측면의 문제일 수 있다. 따라서 두 측면을 주의 깊게 잘 구분해서 적절히 대응해야 한다. X는 유행에 따라 변하기 마련이다. 최근의 X로는 빅데이터를 들 수 있다.
'basic > languages' 카테고리의 다른 글
[javascript] 제어문 (0) | 2019.04.16 |
---|---|
[javascript] 비교연산자 '===' (0) | 2019.04.16 |
[javascript] utf-8로 파일 읽기 (0) | 2019.04.16 |
[javascript] Template Literal (0) | 2019.04.16 |
how to import(absolute / relative) (0) | 2018.12.02 |