무료 방법부터

어느 나라에 다녀왔는지, 사진은 이미 알고 있습니다

2026년 9월 21일 작성, 9월 23일 업데이트  ·  글쓴이: Aki Takashima, Shiori Studio

다녀온 나라의 목록을 적어 두는 사람은 거의 없습니다. 하지만 10년 치 사진은 거의 누구에게나 있습니다. 위치 서비스를 켜고 찍은 사진에는 찍은 곳의 좌표가 들어 있습니다. 카메라가 파일 안에 써넣은 것입니다. 그러니 목록은 보관함 곳곳에 흩어진 채로 이미 존재하고, 남은 일은 꺼내는 것뿐입니다.

이 페이지에 그 방법을 전부 담았습니다. 휴대폰에서 2분이면 되는 무료 방법, 실제 나라와 날짜 목록을 만들어 주는 무료 명령줄 방법, 그리고 방법이 틀리는 경우들입니다. 마지막 부분이 가장 흥미롭고, 처음 얻은 답이 틀리게 되는 이유이기도 합니다.

먼저 사진에 위치 정보가 있기는 한지 확인하세요

사진 앱에서 아무 사진이나 열고 위로 쓸어올려 보세요. 사진 아래에 지도가 나오면 그 파일에는 좌표가 들어 있습니다. 지도가 없으면 좌표도 없습니다. 제가 만든 것을 포함해 어떤 도구도 없는 좌표를 만들어 낼 수는 없습니다.

보통 위치 정보가 없는 것: 스크린샷, 메신저 앱이나 웹에서 저장한 이미지, 카메라의 위치 서비스를 꺼 둔 상태에서 찍은 사진, 공유할 때 위치를 직접 제거한 사진. 대개 위치 정보가 있는 것: iPhone 카메라로 직접 찍은 사진과 비디오, 그리고 휴대폰과 연결되는 요즘 카메라 대부분으로 찍은 사진과 비디오.

iPhone에서 2분이면 되는 방법

사진 → 보관함 → 메뉴 버튼 → 지도 보기. Apple은 이 방법을 iPhone 사용 설명서에 안내해 두었으며, 중요한 제한 하나도 함께 적어 두었습니다. 내장된 위치 정보가 있는 사진과 비디오만 포함된다는 점입니다.

이제 핀이 꽂힌 세계 지도가 생겼습니다. 보는 것만으로도 정말 뿌듯하지만, 알려 주는 것은 거의 없습니다. 나라가 몇 개인지, 각 나라에 언제 있었는지, 각 핀이 어느 여행에 속하는지는 알려 주지 않습니다. 그걸 알려면 숫자를 꺼내야 합니다.

아무것도 설치하지 않는 방법

다음 절의 작업을 대신 해 주는 무료 웹 페이지 counter.getdriftlog.com(영문)을 만들었습니다. 사진, 내보낸 폴더 전체, 압축을 푼 Google Takeout 폴더, 또는 Google 지도 타임라인(Google Maps Timeline) 내보내기 파일(영문)을 끌어다 놓으면, 나라마다 첫 해와 마지막 해를 붙여 목록으로 보여 주고 저장할 수 있는 지도에 표시해 줍니다. 메타데이터만 읽고, 전부 브라우저 안에서 실행되며, 아무것도 업로드하지 않습니다. 페이지가 로드된 뒤에는 Wi-Fi를 꺼도 계속 작동합니다. iPhone의 Safari에서도 실행되는데, 사진 선택 화면에 “위치가 포함됨”이라고 표시되어 있으면 선택 화면이 위치 정보를 함께 넘겨줍니다.

그래도 좌표 원본이 필요하거나 연도가 아니라 날짜 단위로 보고 싶다면, 아래의 명령줄 방법을 알아 둘 만합니다.

실제 나라 목록을 뽑아 주는 방법

Mac이나 PC에서 실행하며, 처음에는 15분쯤 걸리고, 비용이 들지 않으며, 사진을 어디에도 절대 업로드하지 않습니다. 세 단계입니다.

1단계

원본 내보내기

macOS의 사진 앱에서 전체를 선택한 뒤(편집 → 전체 선택) 파일 → 내보내기 → 무수정 원본 내보내기를 사용합니다. 빈 폴더로 내보내세요. 무수정 원본으로 내보내는 것이 중요합니다. 편집본으로 내보내면 다시 인코딩될 수 있고, 위치 데이터는 바로 그 과정에서 사라집니다.

사진이 이미 디스크의 폴더에 들어 있다면 이 단계는 통째로 건너뛰세요.

2단계

ExifTool로 좌표 꺼내기

ExifTool은 무료이고, 갖고 있을 만한 형식은 모두 읽으며, 읽기만 할 때는 아무것도 수정하지 않습니다. 명령어 하나로 사진 폴더를 좌표와 날짜가 담긴 CSV로 바꿀 수 있습니다.

exiftool -r -m -q -f -n \
  -if '$gpslatitude' \
  -p '$gpslatitude,$gpslongitude,$datetimeoriginal' \
  ~/Desktop/photo-export > coords.csv

-r은 하위 폴더까지 훑고, -if는 GPS 정보가 없는 파일을 건너뛰며, -n은 보기 좋게 꾸민 형식 대신 단순한 십진수 도 단위로 출력하고, -f는 파일에 원본 날짜가 없을 때 그 줄을 빼는 대신 대시를 출력합니다. 파일이 수만 개인 보관함이라도 몇 시간이 아니라 몇 분이면 끝나며, 다음과 같은 결과가 나옵니다.

33.9850,-118.4695,2026:08:31 14:06:22
35.6595,139.7005,2025:04:02 09:11:47
-
3단계

오프라인에서 좌표를 나라 이름으로 바꾸기

API 키는 필요 없습니다. 이걸 알아내자고 내 좌표 1만 개를 웹 서비스에 보내서도 안 됩니다. 로컬 조회로 충분합니다.

pip install reverse_geocoder
import csv, collections
import reverse_geocoder as rg          # 오프라인: 데이터셋이 패키지에 들어 있음

rows = [r for r in csv.reader(open("coords.csv")) if len(r) >= 2]
pts  = [(float(r[0]), float(r[1])) for r in rows]
hits = rg.search(pts, mode=1)

days = collections.defaultdict(set)    # 국가 코드 -> 날짜 집합
for row, hit in zip(rows, hits):
    stamp = row[2] if len(row) > 2 else "-"
    day   = stamp[:10].replace(":", "-") if stamp != "-" else None
    days[hit["cc"]].add(day)

for cc, d in sorted(days.items(), key=lambda kv: -len(kv[1])):
    print(f"{cc}\t사진이 있는 날 {len(d)}일")

이렇게 하면 그곳에 있었다는 사진 증거가 남은 날이 많은 순서대로 나라가 출력됩니다. 사람들이 프로필에 적는 그 숫자의 정직한 버전입니다.

그 답을 틀리게 만드는 다섯 가지

앞의 세 가지는 오늘 당장 CSV에서 드러납니다. 이 다섯 가지 때문에 이 문제는 보기보다 어렵습니다.

1. 위의 조회는 서 있던 나라가 아니라 가장 가까운 도시를 찾습니다

reverse_geocoder는 좌표를 데이터셋 안에서 가장 가까운 거주지와 짝지어 줍니다. 국경에서 10킬로미터 떨어진 곳이나 바다 위에서는 가장 가까운 도시가 옆 나라에 있을 수 있습니다. 해결책은 행정 경계 파일을 가지고 제대로 된 점-다각형 포함 판정(point-in-polygon)을 하는 것입니다. 무료로는 Natural Earth의 admin-0 데이터셋을 흔히 씁니다. 다만 저해상도 버전은 정밀함이 필요한 바로 그 해안선과 월경지를 대충 처리한다는 점을 알아 두세요.

2. 하늘에서 찍은 사진은 들어간 적도 없는 나라를 만들어 냅니다

순항 고도에서 창가 자리에 앉아 찍은 사진은, 착륙하지 않고 지나가기만 한 나라 상공의 완벽하게 유효한 GPS 위치를 담고 있습니다. 가장 가까운 도시를 찾는 조회는 이 사진을 아무렇지 않게 그 나라에 배정합니다. 근거를 댈 수 있는 목록을 원한다면 시간과 공간 양쪽에서 홀로 떨어져 있는 위치를 버리세요. 그날의 다른 지점들과 수백 킬로미터 떨어져 있고 앞뒤로 아무것도 없는 단 하나의 점 같은 것입니다. 아니면 EXIF에 고도가 기록되어 있는 경우 고도로 걸러 내세요.

3. EXIF 타임스탬프에는 시간대가 없습니다

DateTimeOriginal은 현지 시계가 가리키던 시각이며, 어느 시간대의 시계인지 알려 주는 정보는 붙어 있지 않습니다. 최근 파일에는 OffsetTimeOriginal도 들어 있지만, 오래된 파일에는 없는 경우가 많습니다. 그래서 날짜별로 묶으면 여행의 양 끝에서 최대 하루씩 어긋납니다. 날수를 세는 중이라면 아주 큰 문제이고, 나라를 세는 중이라면 전혀 문제가 되지 않습니다.

4. 사진은 여행 단위로 잘 묶이지 않습니다

날짜가 붙은 지점들의 목록을 보면, 자연스럽게 간격을 기준으로 여행을 나누고 싶어집니다. N일 동안 비어 있거나 M킬로미터를 이동하면 새 여행이 시작된다고 보는 식입니다. 두 기준 모두 무너집니다. 휴가 중간에 사진이 없는 날이 하루 끼면 여행 하나가 둘이나 셋으로 쪼개집니다. 경유는 나라 방문이 됩니다. 긴 해외 체류 중간에 집에서 보낸 주말은 모든 것을 다시 쪼갭니다.

5. 사는 도시가 모든 것을 덮어 버립니다

대부분의 사람은 사는 곳에서 찍은 사진이 압도적으로 많습니다. 집 주변 반경을 제외하지 않으면, 현관에서 5킬로미터 안에서 찍힌 수천 개의 지점 아래에 정작 흥미로운 항목이 파묻힌 목록이 나옵니다.

휴대폰에서 코드로 직접 하고 싶다면

스크립트를 돌리는 대신 직접 코드를 짜려 한다면 Apple의 PhotoKit에서 알아 둘 만한 점이 하나 있습니다. PHAsset은 에셋의 위치를 직접 제공하므로, 이미지를 단 한 장도 디코딩하지 않고 보관함 전체를 훑으며 좌표와 날짜를 읽을 수 있습니다. 휴대폰에서 사진 가져오기가 몇 초 만에 끝날 수 있는 것도, 사진의 내용이 전혀 필요하지 않은 것도 이 때문입니다.

나머지 절반은 권한입니다. 보관함 접근이 제한된 상태, 즉 “선택한 사진” 옵션에서는 사용자가 고른 사진만 보이므로, 복원 결과가 아무 경고 없이 실제보다 적게 나옵니다. 이런 기능을 만들려 한다면 Apple의 사진 앱을 위한 개인정보 보호 지침부터 읽어 보세요.

이 가운데 어느 것도 직접 하고 싶지 않다면

이해관계를 밝힙니다. 저는 Driftlog를 만듭니다. 위의 일을 해 주고 그 뒤로도 계속 기록하는 iPhone·Android용 앱입니다. 기존 사진의 위치 데이터를 읽어 지난 여행을 되살리고, 앞으로는 앱이 닫혀 있는 동안에도 휴대폰의 대략적인 중요 위치 변경 신호를 이용해 지나가는 나라, 지역, 도시를 기록합니다. US$6.99를 한 번만 결제하면 되고, 구독도 광고도 계정도 없습니다. 무료 버전에서는 사는 나라와 첫 번째 해외 나라가 전부 열리며, 그 밖의 나라도 모두 지도에 채워집니다. iOS 17 이상의 iPhone과 iPad, 그리고 Google Play를 통해 Android에서 쓸 수 있습니다.

한계도 함께 적습니다. 사진의 메타데이터만 읽고 이미지는 절대 읽지 않습니다. 사진 가져오기에는 사진 접근 권한이 “모든 사진”으로 설정되어 있어야 하며, 위치 정보가 있는 사진만 볼 수 있습니다. 경로가 아니라 장소를 기록합니다. 실시간 기록에는 위치 권한이 “항상”으로 설정되어 있고 정확한 위치가 켜져 있어야 합니다. 좌표는 지명으로 바꾸기 위해 휴대폰 밖으로 나가며, 이것이 앱이 외부로 보내는 유일한 요청입니다. 그리고 이 페이지에 나온 모든 실패 사례는 Driftlog에도 그대로 해당됩니다. 다만 거기에 대처하려는 제 나름의 시도가 앱에 들어 있을 뿐입니다.

App Store에서 Driftlog 보기

Android에서는 Google Play

이 방법으로 되찾을 수 없는 것

정정 제보를 환영합니다. 여기에 나온 명령어가 사용 중인 시스템에서 작동하지 않거나 절차가 바뀌었다면 shiori.sutudio@gmail.com으로 메일을 보내 주세요. 페이지를 고치고 날짜를 새로 적겠습니다.