자, 이름을 붙여 넣었는데 끝이 e 다음에 U+0301이에요. 다음 주에 같은 이름을 다시 쳤더니 이번엔 키보드가 U+00E9를 넣어 줘요. 저한테는 같은 이름이에요. 캐노니컬 등가이기도 하고요. 그래도 문자열로는 서로 달라요.
그래서 폼에서는 제출한 철자를 그대로 화면에 보여 주고, 조회용으로는 NFC 키를 만들 생각이에요. 화면에는 제가 쓴 철자가 나오고, 조회는 둘 중 어느 쪽으로 썼는지 신경 쓰지 않게 돼요. 대신 표현을 두 개 관리해야 하고, 각 작업이 어느 쪽을 읽는지 분명히 해야 해요. (참고로 TypeScript의 string 표기는 normalize("NFC")가 실행됐는지 알려 주지 않아요. 타입 이름일 뿐이에요.)
아직 확신이 없는 부분도 있어요. 이름이 같게 매칭될 때 서로 다른 계정일 수 있는지는 NFC가 정해 주지 않아요. 그건 제품이 정할 일이에요. 호환 정규화나 대소문자 접기도 또 다른 선택이고, 이 중 어느 것도 생김새만 비슷한 이름을 막지는 못해요.
신원 판단은 다른 곳에서 한다는 전제라면, 표시 이름 조회의 기본값으로 이 정도면 괜찮을까요? 화면은 사람이 쓴 철자를 지키되, 파생된 키 하나가 그 사람이 누구인지 조용히 정해 버리지는 않았으면 해요.