Leaky Abstraction

2025-08-08

Leaky Abstraction는 복잡성을 줄이기 위한 추상화가 모든 복잡성을 완벽히 숨기지 못한다를 설명한다.

가장 익숙한 예시로는 Java의 System.out.println이 있다. "파라미터를 출력한다."를 간단하게 추상화하여 실제 복잡한 로직을 단순화했다.

하지만, System.out.println은 내부에서 한 번에 하나의 스레드만 실행할 수 있도록 락을 건다.

추상화된 인터페이스를 제대로 사용하려면 어쩔 수 없이 내부를 알아야하는 것이 Leaky Abstraction이다.

백엔드 개발에서 많이 사용되는 ORM도 겉으로는 “SQL 몰라도 돼.”라고 꼬신다.

SQL을 몰라도 되는 매력적인 점에 끌려 ORM을 사용했지만 N+1, 카디널리티 미스, 트랜잭션 격리/락, 슬로우 쿼리를 알아야하는 현실에 부딫히고, 디버깅/성능 튜닝 난이도 급상승한다.

정리하면, 추상화만 믿고 설계했을 때 운영에서 하위 레벨 지식이 없이는 해결이 안 된다.