삐삐북 개발기 6편 — 바코드로 책을 찍다: ISBN의 세계

책 등록이 번거롭다는 문제
앱을 쓰다 보면 이런 상황이 있습니다.
책을 다 읽었습니다. 앱에 등록하려고 검색창을 엽니다. 책 제목을 입력합니다. 검색 결과가 뜹니다. 맞는 책을 선택합니다.
그냥 그렇게 하면 됩니다. 그런데 실제로 책이 손에 있는 상황이라면, 책의 바코드를 찍어서 바로 등록하는 게 훨씬 빠릅니다.
바코드 스캔 기능을 추가하기로 했습니다.
iOS의 바코드 스캔
iOS에서 바코드 스캔은 AVFoundation 프레임워크로 구현합니다.
카메라를 열고, 바코드 형식을 지정하고, 스캔된 값을 읽어오는 것. 기본적인 구현은 어렵지 않습니다.
책의 바코드는 ISBN(국제 표준 도서 번호)입니다. 보통 책 뒤표지에 있는 바코드를 찍으면 13자리 숫자가 나옵니다.
그 숫자로 API를 검색하면 바로 해당 책 정보를 가져올 수 있습니다.
그런데 ISBN이 두 개다
문제가 생겼습니다.
책 뒤표지에 바코드가 두 개 있는 경우가 있습니다. ISBN-10(10자리)과 ISBN-13(13자리)이 함께 있기도 하고, 출판사 자체 코드가 따로 있기도 합니다.
더 복잡한 건, 같은 책인데 ISBN이 여러 개인 경우입니다. 양장본과 페이퍼백이 다른 ISBN을 가집니다. 개정판도 다릅니다. 동일한 책의 다른 출판사 에디션도 다릅니다.
바코드를 찍으면 정확히 하나의 책이 나올 것이라고 기대했는데, 실제로는 여러 버전의 책이 나올 수도 있었습니다.
결국 선택하게 하는 방식으로
바코드를 찍으면 정확히 하나의 책을 자동으로 등록하는 게 이상적입니다. 하지만 ISBN의 복잡성 때문에 그게 항상 가능하지 않았습니다.
바코드 스캔 → 검색 결과 목록 표시 → 사용자가 직접 선택
이 방식으로 구현했습니다. 완전 자동보다는 한 단계가 더 있지만, 정확성이 높아집니다. 사용자가 "이 책이 맞나요?"를 확인할 수 있습니다.
자동으로 됐으면 더 좋겠다는 아쉬움은 있습니다. 하지만 잘못된 책이 자동으로 등록되는 것보다, 한 번 확인하는 게 낫습니다.
나중에 생긴 문제: 버그
1.2.0 업데이트 이후 바코드 스캐너에 버그가 생겼습니다.
업데이트 과정에서 카메라 관련 코드가 충돌했던 것 같습니다. Crashlytics 로그에서 바코드 스캔 관련 크래시가 확인됐고, 빠르게 수정해서 1.2.2에서 패치했습니다.
바코드 스캔처럼 카메라를 사용하는 기능은 업데이트 때 꼼꼼히 테스트해야 한다는 걸 배웠습니다. 카메라 권한, AVFoundation 세션 관리, 그리고 iOS 버전별 동작이 달라질 수 있어서 신경 써야 할 부분이 많습니다.