249. KISS (Keep It Simple, Stupid) 원칙 - 단순함 설계 소프트웨어 공학 유지보수 오버 엔지니어링 방지 클린 코드 가독성
핵심 인사이트: (똑똑한 바보들의 뇌절을 막는 브레이크) 신입이 들어왔다. 고객이 "게시판에 글쓰기 버튼 달아줘"라고 했다. 신입이 "오! 나 어제 216번 헥사고날 아키텍처랑 222번 CQRS 패턴 배웠어! 게시판 글쓰기 하나 만드는데 도커 띄우고 카프카 연결하고 인터페이스 20개 파서 우주 최강의 구조를 만들어야지!!" 1주일 뒤, 글쓰기 버튼 하나에 자바 파일이 100개가 생겼다. 고참이 코드를 까보다가 토를 하고 쓰러졌다. "야 이 미친놈아!! 그냥 HTML에
insert쿼리 1줄 쏘면 5분 만에 끝날 걸 왜 이렇게 미치도록 복잡하게 꼬아놨어!! 네가 1년 뒤에 퇴사하면 이 100개의 파일 스파게티를 도대체 누가 유지보수하란 말이야!! '야, 이 바보야, 제발 좀 단순하게 짜!! (Keep It Simple, Stupid)'. 10줄로 돌아가는 로직을 잘난 척한다고 100줄로 늘리지 마! 복잡한 건 버그가 숨기 좋고, 남이 읽기 지옥이야! 당장 초등학생이 봐도 이해할 수 있는 1차원적인 코드로 다 쳐내버려!!" 천재병에 걸린 오버 엔지니어링(Over-engineering)을 야구 빠따로 부숴버리는 미니멀리즘의 극치, KISS 원칙이다.
Ⅰ. 오버 엔지니어링(Over-engineering)의 망상
- 개발자는 항상 두려움에 떱니다. "내년에 카카오톡처럼 동접자 1,000만 명이 몰리면 어떡하지?"
- 사실 이 쇼핑몰은 하루에 10명밖에 안 오는 동네 구멍가게인데, 혼자 1,000만 명을 대비하겠다고 아마존 K8s, MSA, NoSQL 등 듣도 보도 못한 신기술을 떡칠해서 로직을 미치도록 복잡하게 꼬아버립니다.
- 비극: 트래픽은 영원히 안 오고, 정작 로그인 버튼에 버그 하나 났는데 고치는 데 3일이 걸립니다. (코드가 너무 복잡해서 작성자 본인도 못 읽음)
Ⅱ. KISS (Keep It Simple, Stupid) 원칙의 개념 🌟
- 명칭 유래: 1960년대 미국 해군에서 전투기 수리 매뉴얼을 만들 때 쓰던 표어. (전투 중에 기계가 복잡하면 수리를 못 하고 죽으니까 제발 멍청할 정도로 단순하게 만들라는 뜻)
- 개념: 시스템과 소스 코드는 필요한 목적을 달성하는 선에서 무조건 가장 '단순하고, 직관적이고, 읽기 쉽게' 작성되어야 한다는 원칙입니다.
- 복잡함은 소프트웨어 공학의 가장 큰 적입니다. 복잡할수록 버그가 터질 확률(결함 밀도)이 기하급수적으로 올라가고 유지보수 비용(시간)이 폭발하기 때문입니다.
Ⅲ. 단순함이 만들어내는 3가지 기적 🌟
어렵게 짠 코드는 나쁜 코드입니다. 쉽게 짠 코드가 천재의 코드입니다.
1. 극강의 가독성 (Readability)과 인수인계
- 좋은 코드는 암호 해독기가 필요 없습니다. 소설책 읽듯 위에서 아래로 스르륵 읽힙니다.
- 신입 사원이 입사해서 시스템을 파악하는 데 걸리는 시간(학습 곡선)이 3달에서 1주일로 줄어듭니다.
2. 숨을 곳이 없는 버그 (명확성)
- 코드가 10줄이고 조건문(if)이 1개면 버그가 숨을 구멍이 없습니다.
- 코드가 100줄이고 조건문이 10개 중첩(Nested)되어 있으면, 해커가 그 복잡한 틈바구니 사이의 논리적 허점을 뚫고 들어와 돈을 빼돌립니다.
3. YAGNI (250번 스포일러) 와의 시너지
- "설마 내년에 쓸 수도 있으니까 미리 복잡하게 짜놓자!" ➜ KISS는 이걸 극혐합니다. "내일 일은 내일 모레 생각해라 바보야! 오늘 당장 돌아가는 제일 짧은 코드로 퉁 쳐!"
Ⅳ. 어떻게 단순해질 것인가?
- 불필요한 상속(Extends) 뎁스 줄이기 (부모 ➜ 자식 ➜ 손자 ➜ 증손자... 미쳐버립니다).
- 불필요한 디자인 패턴(GoF) 남용하지 않기. (단순히 게시판 짜는데 전략 패턴, 데코레이터 패턴 떡칠하면 맞아 죽습니다.)
- 변수명과 함수명을 줄이지 말고
calc_total_monthly_salary()처럼 멍청할 정도로 길고 명확하게 적기.
📢 섹션 요약 비유: KISS(Keep It Simple, Stupid) 원칙은 파리 한 마리를 잡으려는 사람에게 **'파리채 대신 레이저 유도 미사일 시스템을 만드는 짓거리 방지법'**입니다. 방에 파리가 한 마리 날아다닙니다. 오버 엔지니어링에 빠진 멍청한 천재 기술자(KISS 위반)는, 천장에 적외선 스캐너를 달고, AI 딥러닝으로 파리 날갯짓을 분석한 뒤, 소형 레이저 터렛으로 0.1초 만에 파리를 태워 죽이는 1억짜리 복잡한 방공망(스파게티 아키텍처)을 설계합니다. 시스템은 무겁고, 툭하면 합선되어 집이 불타고, 레이저가 고장 나면 수리에 한 달이 걸립니다. KISS 원칙을 깨달은 동네 아저씨(클린 코더)는 코웃음을 칩니다. "야 이 바보야, 제발 좀 단순하게 살아라(Keep it simple, stupid)!!" 그리고 500원짜리 싸구려 파리채(가장 단순하고 직관적인 10줄짜리 코드)를 들고 와서 1초 만에 파리를 쳐 죽이고 벽에 탁 걸어놓습니다. 파리채는 고장 나지도 않고, 배터리도 안 들고, 3살짜리 조카가 와도 사용법(유지보수 및 가독성)을 1초 만에 이해합니다. 복잡한 겉멋을 철저히 버리고, 기능 목적만 100% 달성하는 가장 원시적이고 단순한 도구(코드)야말로 수백 년이 지나도 썩지 않는 최강의 소프트웨어라는 미니멀리즘 헌법입니다.