
우리 서비스에서는 사용자가 특정 장소를 공유할 수 있게 하고 있다.
하지만 피드백 중 "위치 직접 입력이 번거롭다. 인스타그램처럼 사진에 위치가 자동으로 잡히면 좋겠다”는 의견이 있었다.
“사진에 담긴 GPS 정보를 읽어서 위치를 자동으로 입력하자!”
| 도구 | 특징 | 사용 여부 |
|---|---|---|
exifr | GPS 추출에 특화, 작고 가볍고 Promise 지원 | 선택 |
exifreader | 다양한 메타데이터 지원, 구조 복잡, DMS 가공 필요 | 불필요하게 무거움 |
exifr는 GPS 좌표 추출 목적에 딱 맞는 가벼운 라이브러리라 선택함.| 도구 | 장점 | 단점 | 사용 여부 |
|---|---|---|---|
| OpenCage API | 상업용에 안정적, 2,500건 무료, 응답 깔끔 | 월간 제한 이후 유료 | 선택 |
| Google Maps API | 정밀도 높고 정보 많음 | 사용료 비쌈, 키 관리 번거로움 | ❌ |
| Nominatim (OSM) | 완전 무료, 다국어 가능 | Rate limit 엄격, 속도 느림 | ❌ (비상용 대안으로 고려) |
→ OpenCage는 글로벌 주소 + 안정성 + 다국어 지원까지 모두 만족해서 최종 선택.
[사용자 사진 업로드]
↓
[exifr로 GPS 추출]
↓
[서버 API 호출: /api/reverse-geocode]
↓
[OpenCage에서 주소 조회 → 응답]
↓
[input 필드 자동 채움 + 상태 저장]
accept-language를 함께 보내면 주소도 ko, en에 맞게 자동 번역됨 → next-intl 연동 OK위치 자동 입력 기능은 exifr 라이브러리를 통해 이미지의 EXIF 메타데이터에 포함된 GPS 좌표를 추출해 구현한다.
하지만 모든 이미지가 GPS 정보를 갖고 있는 것은 아니다. 실제 사용 중 다음과 같은 경우에는 위치 정보가 추출되지 않거나 undefined로 반환된다.
| 경우 | 설명 |
|---|---|
| PNG, AVIF 포맷 | EXIF 메타데이터 자체를 저장하지 않는 이미지 포맷이라 GPS 추출이 불가능하다. 손실/무손실 여부와는 무관하며, 이는 포맷 구조(사양)의 차이에서 비롯된다. |
| SNS/카카오톡 등으로 받은 이미지 | 사진 전송 시 개인 정보 보호를 위해 자동으로 EXIF 정보가 제거된다. 특히 카카오톡, 인스타그램 저장본은 대부분 위치 정보가 제거된 상태다. |
| 위치 기능 비활성화된 카메라로 촬영 | 사진을 찍을 당시 스마트폰에서 '위치 정보 저장' 기능이 꺼져 있었다면 EXIF 자체에 GPS 정보가 담기지 않는다. |
| GPS 태그만 있고 좌표는 비어 있음 | 일부 JPG 파일은 GPSLatitude: [0, 0, 0]처럼 GPS 태그는 있으나 실제 좌표 값이 없는 경우도 있다. 이는 위치 정보가 없는 것과 동일하게 간주된다. |
| 이미지 편집 앱으로 저장 후 재업로드한 경우 | 필터 앱이나 압축 앱은 용량 최적화를 위해 EXIF 정보를 제거하거나 변형하는 경우가 많다. |
| EXIF 정보가 깨지거나 구조가 손상된 이미지 | 클라우드 저장/변환 과정에서 EXIF 데이터가 누락되거나 깨져 GPS 파싱이 실패할 수 있다. |
참고
JPEG은 손실 압축 포맷이지만 EXIF 메타데이터를 저장하는 구조를 갖고 있기 때문에 GPS 정보를 포함할 수 있다.
반면, PNG는 무손실 압축이지만 EXIF 저장 구조를 지원하지 않는다.
즉, EXIF 저장 가능 여부는 압축 방식이 아니라 포맷 구조 자체의 차이에서 비롯된다.
JPG라고 해도 반드시 위치 정보가 포함되어 있는 건 아니라는 점을 UX에서 명확히 안내
위치 정보가 없거나 exifr.gps()가 실패할 경우:
"위치 자동 입력이 불가능한 이미지입니다. JPG 형식 또는 위치 정보가 포함된 원본 이미지를 사용해주세요." 안내인스타그램 역시 GPS 정보가 없는 이미지에는 사용자 현재 위치 기반 자동 추천 기능을 제공한다. 우리 서비스도 비슷한 UX 개선을 적용할 계획이다.