Ch.2 JavaScript 라이브러리 15선
Leaflet — 인터랙티브 지도
핵심 내용
Leaflet은 웹에 인터랙티브 지도를 삽입하는 라이브러리
한 줄 요약: 구글 지도처럼 확대/축소/드래그되는 인터랙티브 지도를 웹페이지에 삽입하는 오픈소스 JS 라이브러리. 실생활 비유: 배달앱에서 라이더 위치를 실시간으로 보여주는 지도, 부동산 앱에서 매물 위치를 표시하는 지도 — 이런 지도를 직접 만들 수 있게 해주는 도구입니다. 무료이고, 42KB밖에 안 돼서 가볍습니다.
Google Maps API: 강력하지만 유료(월 200달러 무료 후 과금). API 키 필수. 커스터마이징 제한적.
Leaflet + OpenStreetMap: 완전 무료. API 키 불필요. 마커, 팝업, 경로 등 자유롭게 커스터마이징 가능.
위치 데이터를 지도 위에 표시할 때
Leaflet이 특히 좋은 이유: Google Maps는 월 28,000회 이상 호출하면 과금이 발생합니다. 개인 프로젝트나 소규모 서비스라면 Leaflet + OpenStreetMap 조합이 무료이면서도 충분히 강력해요.
HTML 파일 하나로 바로 시작합니다
<!DOCTYPE html>
<html>
<head>
<title>내 첫 지도</title>
<link rel="stylesheet"
href="https://unpkg.com/leaflet@1.9/dist/leaflet.css" />
<script
src="https://unpkg.com/leaflet@1.9/dist/leaflet.js">
</script>
<style>
#map { width: 100%; height: 400px; }
</style>
</head>
<body>
<h1>우리 동네 지도</h1>
<div id="map"></div>
<script>
// 서울 시청 좌표로 지도 생성
const map = L.map("map").setView(
[37.5665, 126.978], 15
);
// OpenStreetMap 타일 추가
L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
).addTo(map);
// 마커 + 팝업
L.marker([37.5665, 126.978])
.addTo(map)
.bindPopup("서울 시청입니다!")
.openPopup();
</script>
</body>
</html>실행 결과: HTML 파일을 브라우저로 열면 서울 시청 중심의 인터랙티브 지도가 나타납니다. 마우스로 드래그하고, 스크롤로 확대/축소할 수 있어요. CDN 링크 두 줄이면 설치 끝!
표시할 위치와 정보를 구체적으로 알려주세요
좋은 프롬프트 예시 "Leaflet으로 우리 매장 5곳 지도에 마커+팝업 표시해줘. OpenStreetMap 사용, HTML 한 파일로 만들어줘. 각 매장 이름과 영업시간이 팝업에 나오게 해줘."
프롬프트 변형 • "마커를 클릭하면 상세 정보가 사이드바에 표시되게 해줘" • "두 지점 사이에 직선/곡선 경로를 그려줘" • "현재 위치를 자동 감지해서 지도 중심으로 설정해줘" • "마커 아이콘을 커스텀 이미지로 바꿔줘"
L.map(): 지도 컨테이너 생성 + 중심 좌표 설정
L.tileLayer(): OpenStreetMap 배경 타일 추가
L.marker(): 원하는 좌표에 마커 핀 찍기
.bindPopup(): 마커 클릭 시 팝업 정보 표시
우리 동네 맛집 지도
<!DOCTYPE html>
<html>
<head>
<title>우리 동네 맛집 지도</title>
<link rel="stylesheet"
href="https://unpkg.com/leaflet@1.9/dist/leaflet.css" />
<script
src="https://unpkg.com/leaflet@1.9/dist/leaflet.js">
</script>
<style>
body { font-family: sans-serif; margin: 20px; }
#map { width: 100%; height: 500px; border-radius: 12px; }
h1 { text-align: center; }
</style>
</head>
<body>
<h1>🍜 우리 동네 맛집 지도</h1>
<div id="map"></div>
<script>
// 맛집 데이터 (위도, 경도, 이름, 메뉴, 평점)
const restaurants = [
{ lat: 37.5563, lng: 126.9724,
name: "명동교자", menu: "칼국수, 만두",
rating: "⭐ 4.5" },
{ lat: 37.5595, lng: 126.9860,
name: "을지면옥", menu: "냉면, 불고기",
rating: "⭐ 4.3" },
{ lat: 37.5537, lng: 126.9706,
name: "남산돈까스", menu: "왕돈까스",
rating: "⭐ 4.1" },
{ lat: 37.5612, lng: 126.9830,
name: "광장시장 빈대떡", menu: "빈대떡, 마약김밥",
rating: "⭐ 4.6" },
{ lat: 37.5650, lng: 126.9755,
name: "종로김밥", menu: "참치김밥, 떡볶이",
rating: "⭐ 4.0" },
];
// 지도 생성 (서울 중심)
const map = L.map("map").setView(
[37.5585, 126.9770], 14
);
L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{ attribution: "© OpenStreetMap" }
).addTo(map);
// 맛집마다 마커 + 팝업 추가
restaurants.forEach(r => {
L.marker([r.lat, r.lng])
.addTo(map)
.bindPopup(
`<strong>${r.name}</strong><br>` +
`메뉴: ${r.menu}<br>` +
`${r.rating}`
);
});
</script>
</body>
</html>실행 방법: 이 HTML 파일을 `맛집지도.html`로 저장하고 브라우저로 열면 끝! 서울 중심부에 맛집 5곳의 마커가 표시되고, 클릭하면 가게 이름, 메뉴, 평점이 팝업으로 나타납니다. 좌표와 정보만 바꾸면 내 동네 맛집 지도를 바로 만들 수 있어요.
Leaflet이 Google Maps API 대비 가장 큰 장점은?
핵심 용어
📍 매장 안내
우리 가게 위치를 지도에 마커로 표시하고 영업 시간 팝업
🚚 배달 경로
출발지→경유지→도착지 경로를 지도 위에 선으로 표시
🏠 부동산
매물 위치를 지도에 핀으로 찍고 가격/면적 정보 팝업
📊 데이터 시각화
지역별 인구, 매출 등을 지도 위에 색상으로 표현 (히트맵)
📱 반응형
CSS media query로 모바일에서도 꽉 차는 지도 레이아웃
🔍 검색 필터
메뉴 종류별 필터 버튼 추가 (한식/중식/일식)
📍 현재 위치
navigator.geolocation으로 내 위치 자동 표시
핵심 정리
- 1Leaflet은 인터랙티브 지도를 웹에 삽입하는 오픈소스 라이브러리 (42KB, 무료)
- 2CDN 링크 2줄이면 설치 완료. HTML 파일 하나로 바로 시작 가능
- 3L.map → L.tileLayer → L.marker → .bindPopup 4단계로 지도 완성
- 4OpenStreetMap과 함께 쓰면 Google Maps와 달리 완전 무료
- 5AI 프롬프트에 좌표, 표시할 정보, 인터랙션 방식을 구체적으로 명시하면 정확한 코드 생성
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작