콘텐츠로 이동

02-구조

02 — 구조: 슬롭의 5가지 시그니처

섹션 제목: “02 — 구조: 슬롭의 5가지 시그니처”

슬롭은 무작위로 생기지 않는다. 5가지 구조적 시그니처(Structural Signatures)가 반복된다.

1. 그럴듯한 변수명, 동작하지 않는 로직

섹션 제목: “1. 그럴듯한 변수명, 동작하지 않는 로직”

LLM은 읽기 좋은 코드를 잘 생성한다. 그러나 함수 이름이 validateUserInput이라고 해서 실제로 검증을 한다는 뜻은 아니다. 슬롭의 첫 번째 시그니처는 이름과 행위의 불일치(name–behavior mismatch) 다.

진단: “이 함수가 진짜로 그 일을 하는지 한 줄씩 따라가 봤는가?“

문서가 모두 불릿 리스트로 채워져 있다면 슬롭일 확률이 높다. 사람이 쓴 글은 산문(prose)과 리스트가 섞이지만, LLM은 기본 모드가 리스트다. 카파시는 이 현상을 “불필요한 과도한 구조화”로 분류했다.

“Common AI coding errors observed: hallucinated assumptions, lack of reflection, over-complication.” — 카파시

의역: “관찰된 흔한 AI 코딩 오류 — 환각 가정, 반성 부족, 과잉 복잡성.”

“As of 2025, X is the most popular Y” 같은 문장이 출처 없이 등장한다면 슬롭이다. 자세한 절차는 4장 — 출처 없는 사실 진술에서 다룬다.

feat: comprehensively refactor authentication system with robust error handling

comprehensively, robust, seamless 같은 형용사가 들어간 커밋 메시지는 거의 100% LLM이 자기 자신을 칭찬한 결과다. 사람이 쓴 커밋은 무엇을 바꿨는지에 집중한다.

5. 테스트가 통과하지만 아무것도 검증하지 않는 테스트

섹션 제목: “5. 테스트가 통과하지만 아무것도 검증하지 않는 테스트”
def test_user_login():
user = create_user()
assert user is not None # 슬롭 — 그냥 None만 아니면 통과

LLM은 통과하는 테스트를 만드는 데 능하지만, 의미 있는 테스트를 만드는 데에는 별도의 압력이 필요하다. 압력이 없으면 슬롭 테스트가 누적된다.

위 5가지는 독립적이지 않다. 한 번 슬롭이 컨텍스트에 들어가면, 다음 생성에서 더 많은 슬롭을 촉발한다. 이를 슬롭 증식(slop proliferation) 이라 한다. Chroma의 Context Rot 보고서가 보여주듯, 입력 길이가 늘수록 모델 성능이 떨어지고, 그 안에 노이즈가 섞이면 가속된다.