본문으로 건너뛰기
유환호 연락하기

홈 / 기록

자동으로 만든 문장에서 조사가 이상하게 붙는 버그가 반복됐다

한눈에 답변

자동으로 문장을 조합해 만드는 로직에서 두 가지 버그가 함께 발견됐다. 하나는 지역 이름 뒤에 조사를 이어 붙이는 코드가 받침 유무를 따지지 않고 그대로 붙여 '경기은', '대구은' 같은 어색한 문장을 만들고 있던 것이고, 다른 하나는 업종 이름에서 앞부분만 잘라내는 코드가 두 글자짜리 단어를 만나면 한 글자만 남겨 뜻이 통하지 않는 질문을 만들어내고 있던 것이다.

조사 버그는 어떻게 생겼나

지역 이름 뒤에 ‘은’ 또는 ‘는’ 같은 조사를 붙여 문장을 자동으로 만드는 코드가 있었다. 이 코드가 받침이 있는지 없는지를 구분하지 않고 조사를 그대로 이어 붙이는 바람에, ‘경기’나 ‘대구’처럼 받침 없는 지역 이름 뒤에 ‘은’이 붙어 ‘경기은’, ‘대구은’ 같은 문법적으로 어색한 결과가 나가고 있었다.

왜 이 유형의 버그가 반복됐나

이 저장소는 예전에 지역 페이지에서 비슷한 조사 버그를 겪은 적이 있다. 그때 이 문제를 해결하는 헬퍼 함수를 만들어 뒀는데, 이번에 새로 추가된 자동 문장 생성 코드는 그 함수를 쓰지 않고 직접 조사를 이어 붙이고 있었다. 같은 문제를 해결하는 도구가 이미 있어도, 새로 코드를 짤 때 그 도구를 쓰지 않으면 같은 버그가 다시 생긴다.

업종 이름을 자르는 버그는 무엇이었나

업종을 나타내는 문자열 중에는 가운뎃점으로 여러 단어를 이어 붙인 것이 있었다(예: 농산물과 특산물을 합친 표현). 이 문자열에서 첫 단어만 뽑아 질문을 만드는 코드가, 가운뎃점 앞부분이 한 글자뿐인 경우를 예상하지 못했다. 그 결과 뜻이 통하지 않는 한 글자짜리 단어로 질문이 만들어지고 있었다.

이런 버그는 왜 알아채기 어려운가

자동으로 생성되는 조합이 워낙 많아서, 사람이 결과물을 하나하나 다 읽어 보지 않으면 이상한 조합이 섞여 나가고 있어도 눈에 띄지 않는다. 이번에도 화면을 하나씩 열어 실제 렌더 결과를 확인하는 점검 과정에서 우연히 발견했다.

재발 방지를 위해 무엇을 했나

조사를 붙이는 로직은 전용 헬퍼 함수 하나로 통일해서, 새로운 코드가 생기더라도 그 함수를 거치지 않고는 조사를 붙일 수 없게 만들었다. 단어를 잘라내는 로직에는 앞부분이 한 글자뿐이면 뒷부분을 대신 쓰도록 예외 처리를 추가했다.