커스텀 마커 및 정보창 만들기, 정보창에 장소 정보 및 이미지, 링크 추가하기

웹 애플리케이션에서 사용자에게 더 많은 정보를 제공하고, 경험을 향상시키기 위해 맵(Mapping) 기능은 아주 중요합니다. 이 강좌에서는 리액트(React)와 구글 맵 API를 사용하여 커스텀 마커 및 정보창을 만들고, 해당 정보창에 장소 정보, 이미지 및 링크를 추가하는 방법에 대해 알아보겠습니다.

1. 환경 세팅하기

시작하기 전에 프로젝트 환경을 설정해야 합니다. Create React App을 사용하여 새로운 리액트 프로젝트를 생성합니다.

npx create-react-app custom-marker-example
cd custom-marker-example
npm install @react-google-maps/api

2. 구글 맵 API 키 얻기

구글 맵을 사용하기 위해서는 API 키가 필요합니다. 구글 클라우드 플랫폼에서 새로운 프로젝트를 생성하고, ‘Maps JavaScript API’를 활성화한 후 API 키를 생성하세요.

3. 기본 맵 컴포넌트 만들기

이제 기본적인 맵 컴포넌트를 만들어보겠습니다. App.js 파일을 열고 다음 코드를 추가합니다.

import React from 'react';
import { GoogleMap, LoadScript } from '@react-google-maps/api';

const containerStyle = {
  width: '800px',
  height: '400px'
};

const center = {
  lat: -3.745,
  lng: -38.523
};

function MyMapComponent() {
  return (
    
      
        {/* 여기에 마커를 추가할 것입니다 */}
      
    
  );
}

export default MyMapComponent;

4. 커스텀 마커 추가하기

구글 맵에 커스텀 마커를 추가하려면, 다음과 같이 컴포넌트를 수정합니다. 마커의 위치와 이미지를 설정하여 사용자에게 명확한 정보를 제공합니다.

import React from 'react';
import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';

const containerStyle = {
  width: '800px',
  height: '400px'
};

const center = {
  lat: -3.745,
  lng: -38.523
};

const markerPosition = {
  lat: -3.745,
  lng: -38.523
};

function MyMapComponent() {
  return (
    
      
         {
            alert('Marker clicked');
          }}
        />
      
    
  );
}

export default MyMapComponent;

5. 정보창(InfoWindow) 추가하기

정보창은 사용자에게 추가 정보를 제공할 수 있는 유용한 도구입니다. 마커와 함께 정보창을 추가하여 장소에 대한 설명, 이미지 및 링크를 표시할 수 있습니다.

import React, { useState } from 'react';
import { GoogleMap, LoadScript, Marker, InfoWindow } from '@react-google-maps/api';

const containerStyle = {
  width: '800px',
  height: '400px'
};

const center = {
  lat: -3.745,
  lng: -38.523
};

const markerPosition = {
  lat: -3.745,
  lng: -38.523
};

function MyMapComponent() {
  const [selected, setSelected] = useState(null);

  return (
    
      
         {
            setSelected(markerPosition);
          }}
        />

        {selected ? (
           {
              setSelected(null);
            }}
          >
            

장소 제목

여기에는 장소에 대한 간단한 설명을 추가합니다.

장소 이미지 자세한 정보 보기
) : null}
); } export default MyMapComponent;

6. 다수의 마커 및 정보창 추가하기

이제 여러 마커와 정보창을 추가하는 방법을 살펴보겠습니다. 예를 들어, 장소 목록을 배열로 저장하고 맵에서 동적으로 렌더링할 수 있습니다.

import React, { useState } from 'react';
import { GoogleMap, LoadScript, Marker, InfoWindow } from '@react-google-maps/api';

const containerStyle = {
  width: '800px',
  height: '400px'
};

const center = {
  lat: -3.745,
  lng: -38.523
};

const locations = [
  {
    id: 1,
    title: "장소 1",
    position: { lat: -3.745, lng: -38.523 },
    description: "장소 1 설명",
    imageUrl: "http://example.com/image1.jpg",
    link: "http://example.com/location1"
  },
  {
    id: 2,
    title: "장소 2",
    position: { lat: -3.755, lng: -38.513 },
    description: "장소 2 설명",
    imageUrl: "http://example.com/image2.jpg",
    link: "http://example.com/location2"
  },
  // 추가 장소를 여기에 더할 수 있습니다
];

function MyMapComponent() {
  const [selected, setSelected] = useState(null);

  return (
    
      
        {locations.map(location => (
           {
              setSelected(location);
            }}
          />
        ))}

        {selected ? (
           {
              setSelected(null);
            }}
          >
            

{selected.title}

{selected.description}

장소 이미지 자세한 정보 보기
) : null}
); } export default MyMapComponent;

7. 스타일 및 최적화

사용자 경험을 위한 스타일은 매우 중요합니다. CSS를 사용하여 마커와 정보창의 디자인을 개선할 수 있습니다. 또한, 마커나 정보창을 동적으로 조절하여 성능을 최적화할 수 있습니다. 예를 들어, Lazy loading 또는 코드 스플리팅을 고려하여 사용자에게 더 나은 성능을 제공할 수 있습니다.

8. 결론

이번 강좌에서는 리액트에서 구글 맵을 활용하여 커스텀 마커 및 정보창을 만드는 방법에 대해 배웠습니다. 장소에 대한 정보, 이미지 및 링크를 포함하는 방법을 소개했으며, 다수의 마커를 관리하는 방법도 설명했습니다. 이 기술은 다양한 웹 애플리케이션에 적용할 수 있으며, 사용자에게 풍부한 경험을 제공하는 데 큰 도움이 될 것입니다. 더 나아가 주어진 데이터를 바탕으로 다양한 마커와 정보창을 자유롭게 구성하여 사용자의 필요에 맞춘 웹 애플리케이션을 제작해 보세요.

9. 참고 자료