728x90
대규모 AI시스템 설계 프로젝트에 들어가면서 위도와 경도를 다뤄야 할일이 생겼습니다.
본 글은 위도와 경도를 postgreSQL에서 어떻게 취급해야하는지 공부한 지식을 정리한 글입니다.
위도와 경도란
위도
- 정의: 지구의 적도를 기준으로 북쪽 또는 남쪽으로 얼마나 떨어져 있는지를 나타내는 값입니다.
- 범위: -90° (남극)에서 90° (북극)까지입니다.
- 예시: 서울의 위도는 약 37.5665°입니다. 이는 서울이 적도보다 북쪽에 위치한다는 것을 의미합니다.
경도
- 정의: 지구의 본초 자오선(경도 0°)을 기준으로 동쪽 또는 서쪽으로 얼마나 떨어져 있는지를 나타내는 값입니다.
- 범위: -180°에서 180°까지입니다.
- 예시: 서울의 경도는 약 126.9780°입니다. 이는 서울이 본초 자오선 기준으로 동쪽에 위치한다는 것을 의미합니다.
한마디로, 위도는 가로, 경도는 세로라고 편하게 부를 수 있습니다. 또한 위도와 경도를 함께 사용하여 지구상의 특정 지점을 정확히 지정할 수 있습니다.
예를 들어, 위도와 경도가 각각 37.5665° N, 126.9780° E인 위치는 서울의 중앙에 해당합니다.
DB에서의 위도와 경도
위도
- 위도(Latitude)의 범위는 -90°에서 90°입니다.
- 최대 3자리 숫자(예: 89.999999)로 표현되며, 위도는 지리적 좌표에서 소수점 이하 6자리까지의 정밀도로도 충분합니다.
경도
- 경도(Longitude)의 범위는 -180°에서 180°입니다.
- 최대 4자리 숫자(예: 179.999999)로 표현되며, 경도도 소수점 이하 6자리까지의 정밀도로 충분히 정확한 좌표 정보를 저장할 수 있습니다.
따라서, 위도는 DECIMAL(9,6)으로 설정하고, 경도는 DECIMAL(10,6)으로 설정하는 것이 위도와 경도의 범위 및 정밀도에 적합합니다.
물류 시스템의 허브 중 하나인 서울특별시 센터 : 서울특별시 송파구 송파대로 55을 위도와 경도를 정확히 표현하자면 다음과 같습니다.
- 위도 (Latitude): 37.4742027808565 (소수점 이하 13자리)
- 경도 (Longitude): 127.123621185562 (소수점 이하 12자리)
그런데 DECIMAL(9,6)과 DECIMAL(10,6)로 설정할 경우, 정확한 값을 저장할 수 없습니다.
- DECIMAL(9,6): 소수점 이하 6자리까지 저장 가능, 소수점 앞에는 최대 3자리 숫자 저장 가능.
- DECIMAL(10,6): 소수점 이하 6자리까지 저장 가능, 소수점 앞에는 최대 4자리 숫자 저장 가능.
따라서, 위도와 경도의 소수점 이하 13자리, 12자리는 DECIMAL(9,6) 및 DECIMAL(10,6)으로는 충분히 정확하게 저장할 수 있지만, 완벽히 정확하게 저장할 수 없습니다.
반올림을 하면 정확한 위치가 달라지기 때문에 보수적으로 잡으면 좋다는 튜터님의 답변이 있었습니다. 따라서 적절한 설정은 다음과 같습니다.
적절한 설정
- 위도: DECIMAL(11,8)로 설정하면 소수점 이하 8자리까지 저장 가능, 이는 약 ±180도의 범위를 제공하므로 위도의 정확도에 적합합니다.
- 경도: DECIMAL(12,8)로 설정하면 소수점 이하 8자리까지 저장 가능, 이는 약 ±180도의 범위를 제공하므로 경도의 정확도에 적합합니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.09.07 - Spring Cloud Config 구축 테스트 (1) | 2024.09.07 |
---|---|
[TIL, 일일 회고] 2024.09.06 - 순환 참조 해결하기 (0) | 2024.09.06 |
[TIL, 일일 회고] 2024.09.04 - Spring 심화 AI 비즈니스 검증 프로젝트 트러블 슈팅 (0) | 2024.09.04 |
[TIL, 일일 회고] 2024.09.03 - Pageable로 페이징 및 정렬 간소화하기 (0) | 2024.09.03 |
[TIL, 일일 회고] 2024.09.02 - Redis 활용하여 사용자 인증 정보 캐싱하기 (0) | 2024.09.02 |