| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- 이미지 포맷 변경
- 렌더링 과정
- 리버스 프록시
- CI
- 검색엔진최적화
- 배포
- https
- tcp
- SSH
- DNS
- 자동화
- 인증서
- 브라우저
- 이미지 압축
- 무중단
- TLS
- 3-Way HandShake
- webp
- aws
- certbot
- 성능 개선
- workflow
- 이미지 최적화
- pm2
- nextJS
- nginx
- 로드 밸런싱
- SSL
- gitgub actions
- ec2
- Today
- Total
개발일기
카카오 지도 API 현재 위치 좌표로 주소 얻어내기(NextJs) 본문
개요
프로젝트 진행중 좌표값으로 주소를 얻어낼 수 있는 기능을 구현하는 겸 기록도 같이 해보려고 한다. 카카오 지도 공식문서를 활용 했고, 간단한 기능이였지만 sample의 코드가 생각보다 복잡하고, 자바스크립트로 되어 있어서 시간이 걸렸지만 Docs에서 기능을 찾아보니 너무 간단하게 되어 있어서 쉽게 해결했다. 코드를 확인해 보자.
공식 문서
✅︎ new kakao.maps.services.Geocoder()
주소-좌표간 변환 서비스 객체를 생성한다.
var geocoder = new kakao.maps.services.Geocoder();
geocoder의 Constructor를 이용해서 아래 4개의 메서드를 사용할 수 있다.
나는 구 주소 및 도로명 주소와 행정동, 법정동 주소를 얻을 수 있는
coord2Address, coord2RegionCode를 설명해 보겠다.

✅︎ 내 현재 위치 좌표 얻는 방법
좌표를 얻기에 앞서 내 현재 위치의 좌표를 알아야 하기 때문에 내 현재 위치 좌표를 얻는 방법부터 간단하게 설명하려고 한다.
아래의 설명과 코드를 참고 하자.
1. nextJs 사용으로 useEffect() 안에서 사용함
2. geolocation을 이용해서 현재 위치의 lat과 lng을 얻을 수 있음
3. 얻은 위치 좌표를 myLocation이라는 state에 담아서 활용(전역으로 사용하기 위해 recoil 사용)
4. 공식문서 보기
const [myLocation, setMyLocation] = useRecoilState(myLocationState);
useEffect(() => {
if (typeof window !== "undefined" && window.kakao && window.kakao.maps) {
kakao.maps.load(() => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition((position) => {
const lat = position.coords.latitude;
const lng = position.coords.longitude;
setMyLocation((prev) => ({
...prev,
center: { lat, lng },
isLoading: false,
}));
});
}
});
}
}, []);
✅︎ coord2Address(x, y, callback, options)
좌표 값에 해당하는 구 주소와 도로명 주소 정보를 요청한다.
도로명 주소는 좌표에 따라서 표출되지 않을 수 있다.
var geocoder = new kakao.maps.services.Geocoder();
var coord = new kakao.maps.LatLng(37.56496830314491, 126.93990862062978);
var callback = function(result, status) {
if (status === kakao.maps.services.Status.OK) {
console.log('그런 너를 마주칠까 ' + result[0].address.address_name + '을 못가');
}
};
geocoder.coord2Address(coord.getLng(), coord.getLat(), callback);
공식문서 Docs에서 제공하는 좌표값으로 주소 정보를 얻어올 수 있는 방법이다.
하지만 우리는 내 현재 위치 좌표의 주소를 얻어야 하기 때문에 코드를 수정해야 한다.
아래 코드를 확인해 보자.
적용된 코드
const myLocaion = useRecoilValue(myLocationState);
const [myAddress, setMyAddress] = useRecoilState<string>(myAddressState);
useEffect(() => {
if (
typeof window !== "undefined" &&
window.kakao &&
window.kakao.maps &&
window.kakao.maps.services
) {
let geocoder = new kakao.maps.services.Geocoder();
//geocoder를 이용해 coord2Address 메서드 사용
var coord = new kakao.maps.LatLng(myLocaion.center.lng, myLocaion.center.lat);
//변수 coord 좌표값에 나의 현재 위치 좌표 사용
let updateAddressFromGeocode = function (result, status) {
if (status === kakao.maps.services.Status.OK) {
setMyAddress(result[0].address_name); // 얻은 주소를 state에 담아서 사용
console.log(result[0].address_name); // expected output : 구 주소, 도로명 주소
// [0] 배열의 0번째를 사용하는 이유는 2개의 주소를 반환할 때도 있기 때문에
}
};
geocoder.coord2Address(
coord.getLat(),
coord.getLng(),
updateAddressFromGeocode
); // 함수 실행
}
}, [myLocaion]);
console.log(result)

✅︎ coord2RegionCode(x, y, callback, options)
좌표 값에 해당하는 행정동, 법정동 정보를 얻는다.
var geocoder = new kakao.maps.services.Geocoder();
var callback = function(result, status) {
if (status === kakao.maps.services.Status.OK) {
console.log('지역 명칭 : ' + result[0].address_name);
console.log('행정구역 코드 : ' + result[0].code);
}
};
geocoder.coord2RegionCode(126.9786567, 37.566826, callback);
적용된 코드
const myLocaion = useRecoilValue(myLocationState);
const [myAddress, setMyAddress] = useRecoilState<string>(myAddressState);
useEffect(() => {
if (
typeof window !== "undefined" &&
window.kakao &&
window.kakao.maps &&
window.kakao.maps.services
) {
let geocoder = new kakao.maps.services.Geocoder();
//geocoder를 이용해 coord2RegionCode 메서드 사용
let updateAddressFromGeocode = function (result, status) {
if (status === kakao.maps.services.Status.OK) {
setMyAddress(result[0].address_name); // 얻은 주소를 state에 담아서 사용
console.log(result[0].address_name) // expected output: 행정동, 법정동 주소
// [0] 배열의 0번째를 사용하는 이유는 2개의 주소를 반환할 때도 있기 때문에
}
};
geocoder.coord2RegionCode(
myLocaion.center.lng,
myLocaion.center.lat,
updateAddressFromGeocode
); // 내 현재 위치의 좌표를 넣어주고 함수 실행
}
}, [myLocaion]);
console.log(result)

마무리
공식문서를 보기 싫어하는 사람과 공식문서를 어려워 하는 사람에게 이 글이 도움 되었으면 한다. 사실 이 글은 나를 위한 글이다. 카카오 지도 api를 활용해서 프로젝트를 진행하면서 그래도 계속 새로운걸 많이 써보려고 한다. 많이 공부하고 적용해 보면서 사용한 것들을 많이 기록 해야겠다.
'SideProject(My-Selectshop-Finder)' 카테고리의 다른 글
| 카카오 지도 api에서 pagination을 통한 45개 데이터 가져오기 (1) | 2024.12.24 |
|---|---|
| supabase "Could not find the ' ' column of ' ' in the schema cache" 에러 해결 (0) | 2024.12.02 |
| 비밀번호 표시에 웹 접근성 및 사용자를 위한 tabIndex 활용 (0) | 2024.08.04 |
| 카카오 지도 크롤링 시도하기(Flask, Selenium, bs4) (0) | 2024.07.25 |
| 셀레니움(Selenium)과 뷰티풀 수프(Beautiful Soup) 차이 (0) | 2024.07.12 |