TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 23 READS

'a'냐 'an'이냐: 철자가 아니라 소리가 규칙을 정한다

'a'냐 'an'이냐: 철자가 아니라 소리가 규칙을 정한다
SOURCE IMAGE · HACKER NEWS

영어를 다루는 소프트웨어를 만들어 본 사람이라면 한 번쯤 마주치는 사소하지만 성가신 문제가 있다. 부정관사 'a'와 'an' 중 무엇을 붙일지 자동으로 결정하는 일이다. 겉보기에는 규칙이 단순해 보인다. 뒤에 오는 단어가 모음으로 시작하면 'an', 자음으로 시작하면 'a'를 쓰면 된다. 'a raccoon(너구리)'과 'an apple(사과)'이 그 예다. 그런데 절차적으로 문장을 생성하는 코드에서 이 규칙을 곧이곧대로 구현하면 곧바로 어긋난다. redblobgames의 저자는 텍스트 생성기를 만들며 'a_or_an("apple")' 같은 함수가 필요했고, 첫 글자가 모음인지 검사하는 방식으로는 부족하다는 사실을 데이터로 확인했다.

글자가 아니라 발음이 기준이다

핵심은 판단 기준이 '철자상 모음으로 시작하는가'가 아니라 '발음상 모음 소리로 시작하는가'라는 점이다. 대표적인 반례가 'unicorn(유니콘)'이다. 철자는 모음 'u'로 시작하지만, 실제 발음은 자음에 해당하는 반모음 소리(발음 사전 cmudict 기준 Y, IPA로는 /j/)로 시작한다. 그래서 'an unicorn'이 아니라 'a unicorn'이 맞다. 반대 방향의 예도 있다. 'hour(시간)'는 철자상 자음 'h'로 시작하지만 이 h는 묵음이라 발음은 모음 /aʊ/(cmudict AW)로 시작한다. 따라서 'a hour'가 아니라 'an hour'가 된다. 첫 글자만 보는 알고리즘은 이 두 경우를 모두 틀리게 처리한다.

이 구분이 실무에서 중요한 이유는, 관사 선택 로직을 철자 기반으로 짜 두면 눈에 잘 띄지 않는 곳에서 어색한 출력이 새어 나오기 때문이다. 게임의 아이템 설명, 알림 문구 템플릿, 데이터로부터 문장을 조립하는 리포트 생성기처럼 사람이 일일이 검수하지 않는 대량 텍스트일수록 이런 오류가 방치되기 쉽다. 문법적으로 사소해 보이지만, 읽는 사람에게는 기계가 만든 문장이라는 인상을 주는 대표적 신호가 된다.

예외는 생각보다 적었다

저자가 궁금했던 것은 이런 예외가 얼마나 자주 나타나는가, 그리고 몇 가지 유형으로 묶을 수 있는가였다. 그는 하루를 들여 발음 데이터를 살펴보고 시각화를 만들어 결과를 정리했다. 결론은 다소 뜻밖이었다. 그가 다룬 3만 2,455개 단어 가운데 예외 처리가 필요했던 것은 129개뿐이었다. 비율로 보면 0.4% 남짓이다. 다시 말해, 첫 글자가 모음인지 검사하는 단순한 규칙만으로도 대다수 단어는 올바르게 처리되며, 문제가 되는 것은 소수의 특정 단어 집합이다.

이 수치는 구현 전략에 실질적인 시사점을 준다. 모든 단어의 발음을 사전에서 조회하는 무거운 방식 대신, 단순한 철자 규칙을 기본값으로 두고 소수의 예외 목록만 별도로 관리하는 접근이 충분히 현실적이라는 뜻이다. 예외가 수만 개였다면 발음 사전 전체를 참조하는 것이 불가피했겠지만, 100여 개 수준이라면 예외 테이블을 두는 편이 가볍고 예측 가능하다. 다만 이 목록은 저자가 사용한 단어 집합에 한정된 결과이므로, 고유명사나 약어, 새로운 외래어처럼 사전에 없는 입력이 들어오는 서비스라면 그대로 안전을 보장하지는 않는다는 점은 유념해야 한다.

정답만 있으면 되는 코드

저자는 작업 회고에서 흥미로운 관점을 덧붙였다. 이 코드는 한 가지 질문에 답하기 위한 일회성 코드였고, 깔끔하거나 유지보수하기 좋을 필요는 없으며 오직 정확하기만 하면 됐다는 것이다. 그는 이 코드를 작성하는 데 LLM을 전혀 쓰지 않았지만, 돌이켜 보면 오히려 활용했어야 했다고 말한다. cmudict를 파싱하고 d3.js를 다시 익히는 데 시간을 쏟는 대신, 예외를 압축하는 트라이(trie) 단순화 알고리즘 같은 본질적인 부분에 더 집중할 수 있었으리라는 아쉬움이다.

이 대목은 도구 선택에 관한 실무적 판단으로 읽을 만하다. 결과물이 오래 살아남을 제품 코드인지, 한 번의 궁금증을 해소하고 버릴 탐색용 코드인지에 따라 들여야 할 노력의 성격이 달라진다. 후자라면 보일러플레이트나 재학습에 드는 시간을 줄이고 정작 흥미로운 문제에 자원을 몰아주는 편이 합리적이다. 'a와 an'이라는 작은 문법 문제 하나가, 철자와 발음의 간극이라는 언어학적 사실부터 예외를 어떻게 관리하고 코드에 얼마나 공을 들일지에 대한 판단까지 연결되는 셈이다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://www.redblobgames.com/blog/2026-09-16-english-a-vs-an...
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...