๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Couch Coding

Couch Coding ( ์นด์šฐ์น˜ ์ฝ”๋”ฉ ) - Geolocation API ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ํ˜„์žฌ์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ

์ด ํฌ์ŠคํŠธ์—์„œ๋Š” geolocation API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

 

์šฐ๋ฆฌ ํŒ€์ด ์นด์šฐ์น˜์ฝ”๋”ฉ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” CampUs ์„œ๋น„์Šค๋Š” ๋ฉ”์ธํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ 

์‚ฌ์šฉ์ž ์ฃผ๋ณ€ ์บ ํ•‘์žฅ์„ ์ถ”์ฒœํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ ์žˆ๋‹ค. 

 

์ด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์ธํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€์ž๋งˆ์ž ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค !

 

ํ˜„์žฌ์œ„์น˜๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” navigator ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

navigator.geolocation.getCurrentPosition(์œ„์น˜๋ฅผ ๋ฐ›์€ ๋‹ค์Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜);

 

 

navigator ๊ฐ์ฒด๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ณต๊ธ‰์ž ๋ฐ ๋ฒ„์ „ ์ •๋ณด ๋“ฑ์„ ํฌํ•จํ•œ ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค .

 

getCurrentPosition() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

์ฒซ๋ฒˆ์งธ ์ธ์ž์—๋Š” ์œ„์น˜๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ›์€ ๋‹ค์Œ ์‹คํ–‰ ํ•  ํ•จ์ˆ˜, ๋‘๋ฒˆ์งธ ์ธ์ž์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ์— ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ค€๋‹ค .

 

์„ธ๋ฒˆ์งธ ํ•จ์ˆ˜๋Š” ์„ ํƒ์‚ฌํ•ญ์œผ๋กœ 3๊ฐ€์ง€์˜ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. maximumAge - ์บ์‹œ์— ์ €์žฅํ•œ ์œ„์น˜์ •๋ณด๋ฅผ ๋Œ€์‹  ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์–‘์˜ long ๊ฐ’์ž…๋‹ˆ๋‹ค. 0์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ์žฅ์น˜๊ฐ€ ์œ„์น˜์ •๋ณด ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๋ ค ์‹œ๋„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. infinity๋ฅผ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ์ง€๋‚œ ์‹œ๊ฐ„์— ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์บ์‹œ์— ์ €์žฅ๋œ ์œ„์น˜์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค.

2. timeout - ๊ธฐ๊ธฐ๊ฐ€ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ๋‚˜ํƒ€๋‚ด๋Š” ์–‘์˜ long ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ infinity๋กœ, ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์ „์—๋Š” getCurrentPosition()์ด ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

3. enableHighAccuracy - ์œ„์น˜์ •๋ณด๋ฅผ ๊ฐ€์žฅ ๋†’์€ ์ •ํ™•๋„๋กœ ์ˆ˜์‹ ํ•˜๊ณ  ์‹ถ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ž…๋‹ˆ๋‹ค. true๋ฅผ ์ง€์ •ํ–ˆ์œผ๋ฉด, ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ์žฅ์น˜๊ฐ€ ๋” ์ •ํ™•ํ•œ ์œ„์น˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‘๋‹ต ์†๋„๊ฐ€ ๋А๋ ค์ง€๋ฉฐ ์ „๋ ฅ ์†Œ๋ชจ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๋Š” ์ ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด false๋ฅผ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ๊ธฐ๊ธฐ๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•˜๊ณ  ์ „๋ ฅ ์†Œ๋ชจ๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋Œ€์‹  ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค.

- MDN

 

 

์ด์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ฒœ์ฒœํžˆ ์ดํ•ดํ•ด๋ณด์ž 

 

 

  const [geolocation, setGeolocation] = useState({
    lat: null,
    long: null,
  });

  function getLocation() {
    let lat, long;
    if (navigator.geolocation) {
      // ์œ„์น˜ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•˜๋ฉด
      navigator.geolocation.getCurrentPosition(
        function (position) {
          lat = position.coords.latitude;
          long = position.coords.longitude;
          setGeolocation((geolocation) => {
            return {
              ...geolocation,
              lat,
              long,
            };
          });
        },
        function (error) {
          console.error(error);
        },
        {
          enableHighAccuracy: false,
          maximumAge: 0,
          timeout: Infinity,
        },
      );
    } else {
      alert('์œ„์น˜ ์„ค์ •์„ ํ—ˆ์šฉํ•ด์ฃผ์„ธ์š”!');
      return;
    }
  }

  useEffect(() => {
    getLocation();
  }, []);
};

 

 

์œ„๋Š” geolocation ์œผ๋กœ ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ฝ”๋“œ์ด๋‹ค. 

 

์ฒ˜์Œ useEffect์—์„œ getLocation() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด lat๊ณผ long์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š”๋ฐ ๊ฐ ์œ„๋„์™€ ๊ฒฝ๋„๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. 

์œ„์น˜ ๊ถŒํ•œ์ด ํ—ˆ์šฉ๋˜์–ด ์œ„์น˜๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์•„์˜จ๋‹ค๋ฉด lat๊ณผ long ๋ณ€์ˆ˜์— ์œ„๋„์™€ ๊ฒฝ๋„์˜ ์ขŒํ‘œ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  

 

 geolocation ์ด๋ผ๋Š” state์— ๋‹ด์•„์ค€๋‹ค !

 

๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ์— ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ธ๋ฐ ์œ„์น˜ ๊ถŒํ•œ์ด ํ—ˆ์šฉ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด  ์œ„์น˜ ์„ค์ •์„ ํ—ˆ์šฉํ•ด ๋‹ฌ๋ผ๋Š” alert ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค

 

์„ธ๋ฒˆ์งธ ์ธ์ž๋Š” ์„ ํƒ์‚ฌํ•ญ ์ด๋ฏ€๋กœ ์ž˜ ๋ณด๊ณ  ์˜ต์…˜์„ ์„ค์ •ํ•ด์ฃผ๋„๋ก ํ•˜์ž !

 

 

์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ›์•„์™€์กŒ๋‹ค๋ฉด ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์œ„๋„์™€ ๊ฒฝ๋„๊ฐ€ ์ž˜ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค ! ๐Ÿ‘