๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/React

[React] ๋‹ค์Œ ์ฃผ์†Œ API ํ™œ์šฉํ•˜๊ธฐ

by ITyranno 2024. 2. 29.
728x90
๋ฐ˜์‘ํ˜•

 

 

 

 

 

 

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„๋ฅผ ํƒ๊ตฌํ•ฉ์‹œ๋‹ค.

 

 

 

 

 

 

 

 

 

๋‹ค์Œ ์ฃผ์†Œ API ํ™œ์šฉํ•˜๊ธฐ

 

 

๋‹ค์Œ ์ฃผ์†Œ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์ฃผ์†Œ ์ž…๋ ฅ ๋ฐฉ์‹์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๊ณต์‹ ๋‹ค์Œ ์ฃผ์†Œ API ์‚ฌ์šฉ์„ค๋ช…์„œ

 

https://postcode.map.daum.net/guide

 

Daum ์šฐํŽธ๋ฒˆํ˜ธ ์„œ๋น„์Šค

์šฐํŽธ๋ฒˆํ˜ธ ๊ฒ€์ƒ‰๊ณผ ๋„๋กœ๋ช… ์ฃผ์†Œ ์ž…๋ ฅ ๊ธฐ๋Šฅ์„ ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•. Daum ์šฐํŽธ๋ฒˆํ˜ธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด๋ณด์„ธ์š”. ์–ด๋Š ์‚ฌ์ดํŠธ์—์„œ๋‚˜ ๋ฌด๋ฃŒ๋กœ ์ œ์•ฝ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค.

postcode.map.daum.net

 

 

 

 

 

 

 

 

๋‹ค์Œ ์ฃผ์†Œ API ํ™œ์šฉ ํŠน์ง•

 

 

1. API ํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

2. ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

3. ๊ธฐ์—…์šฉ์ด๋“  ์ƒ์—…์  ์šฉ๋„์ด๋“  ์ƒ๊ด€์—†์ด ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

4. ๊ธฐ์ดˆ๊ตฌ์—ญ๋ฒˆํ˜ธ๊ฐ€ ๋ฐœ๊ธ‰๋œ ๋„๋กœ๋ช… ์ฃผ์†Œ, ์˜๋ฌธ ์ฃผ์†Œ๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

5. ํ–‰์ •์•ˆ์ „๋ถ€์—์„œ ์ œ๊ณตํ•˜๋Š” "๋„๋กœ๋ช… ์ฃผ์†Œ" DB๋ฅผ ์ง์ ‘ ์—…๋ฐ์ดํŠธ ๋ฐ›๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜๋‹จ ๋กœ๊ณ ๋ฅผ ์ž„์˜๋กœ ๊ฐ€๋ฆด ๊ฒฝ์šฐ, ์‚ฌ์šฉ์— ์ œ์•ฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

๋‹ค์Œ ์ฃผ์†Œ API ํ™œ์šฉ ๋ฐฉ๋ฒ•

 

 

React์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์ฃผ์†Œ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” DaumPost.jsx ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ํ•„์š”ํ•œ ํŽ˜์ด์ง€์—์„œ < DaumPost /> ์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ž„ํฌํŠธํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

๊ณต์‹ ๋ฌธ์„œ์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
    new daum.Postcode({
        oncomplete: function(data) {
            // ํŒ์—…์—์„œ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ ํ•ญ๋ชฉ์„ ํด๋ฆญํ–ˆ์„๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
            // ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™œ์šฉ๋ฒ•์„ ํ™•์ธํ•ด ๋ณด์„ธ์š”.
        }
    }).open();
</script>

 

 

DaumPost.jsx

 

์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋ฒ„ํŠผ๊นŒ์ง€ ๋ชจ๋‘ ํฌํ•จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

import React from 'react';
import style from './DaumPost.module.css';
import { useDaumPostcodePopup } from 'react-daum-postcode'; // Daum ์ฃผ์†Œ ๊ฒ€์ƒ‰ ๊ด€๋ จ hook
//์ฃผ์†Œ api

const DaumPost = ({ setAddress }) => {
    const postcodeScriptUrl = 'https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js';
    const open = useDaumPostcodePopup(postcodeScriptUrl);

    const handleComplete = (data) => {
        let fullAddress = data.address;
        let extraAddress = '';
        let localAddress = data.sido + ' ' + data.sigungu;

        if (data.addressType === 'R') {
            if (data.bname !== '') {
                extraAddress += data.bname;
            }
            if (data.buildingName !== '') {
                extraAddress += (extraAddress !== '' ? `, ${data.buildingName}` : data.buildingName);
            }
            fullAddress = fullAddress.replace(localAddress, '');
            fullAddress += (extraAddress !== '' ? ` (${extraAddress})` : '');
        }

        setAddress(fullAddress); // setAddress๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ
    };

    const handleClick = () => {
        open({ onComplete: handleComplete });
    };

    return <div className={style.find_address_button} type="button" onClick={handleClick}>์ฃผ์†Œ๊ฒ€์ƒ‰</div>;
};

export default DaumPost;

 

 

DaumPost.module.css

 

.find_address_button {
    font-size: 1.2vh;
    color: white;
    background-color: #333;
    /* ๋ฒ„ํŠผ์˜ ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ */
    border: none;
    border-radius: 0.5vh;
    cursor: pointer;
    margin-left: 0.5vw;
    /* ์ž…๋ ฅ ํ•„๋“œ์™€ ๋ฒ„ํŠผ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ */
    transition: background-color 0.3s;
    width: 10vh;
    height: 4.2vh;
    font-size: 1.5vh;
    display: flex;
    align-items: center;
    justify-content: center;
}

.find_address_button:hover {
    background-color: #5593ff;
    /* ๋ฒ„ํŠผ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ์˜ ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ ๋ณ€๊ฒฝ */
}

@media all and (min-width:1024px) and (max-width:1279px) {}

@media all and (min-width:768px) and (max-width:1023px) {}

@media all and (min-width:480px) and (max-width:767px) {}

@media all and (min-width:200px) and (max-width:479px) {}

 

 

 

 

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค์Œ ์ฃผ์†Œ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์™„์„ฑ๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

loading