회원 데이터멤버에 주소를 저장하는 법(카카오 API)

이형석·2024년 6월 13일
0

WelCheck 프로젝트 

목록 보기
21/22

나한테 필요한 방법을 찾는게 JavaMailSender 때와 다르게 쉽지 않았데, ChatGPT가 기가막히게 답변을 해줬다.
https://chatgpt.com/share/3f28d12d-e306-4234-8ca2-fa713898c07c
이를 토대로 구현해보려 한다.


구현 후 테스트까지 완료했다. 그 과정을 기록하고자 한다.

구현하기

1. developers.kakao.com에서 앱 등록, 사이트 도메인 등록, 앱 키 확인
카카오 개발자 등록 참고 자료 : https://fromnowwon.tistory.com/entry/kakao-api
2. depndency 추가

implementation 'com.fasterxml.jackson.core:jackson-databind'

3. application 설정 파일에 카카오 api url과 key 설정

kakao.api.url=https://dapi.kakao.com/v2/local/search/address.json
kakao.api.key= 위 1번에서 발급 된 REST API 키

4. KaKaoAddressService 구현

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class KakaoAddressService {
    @Value("${kakao.api.url}")
    private String apiUrl;
    @Value("${kakao.api.key}")
    private String apiKey;
    private final RestTemplate restTemplate = new RestTemplate();
    public String searchAddress(String query) {
        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization", "KakaoAK " + apiKey);
        HttpEntity<String> entity = new HttpEntity<>(headers);
        String url = apiUrl + "?query=" + query;
        return restTemplate.exchange(url, org.springframework.http.HttpMethod.GET, entity, String.class).getBody();
    }
}
  1. KakaoAddressService를 이용해 실주소 리스트를 찾아 JSON형식으로 return해주는 컨트롤러 메서드 생성
@RestController
@RequiredArgsConstructor
public class KakaoApiControllerImpl implements KakaoApiController{
    private final KakaoAddressService kakaoAddressService;
    @Override
    @GetMapping("/searchAddress")
    public String searchAddress(String query) {
        return kakaoAddressService.searchAddress(query);
    }
}

테스트

  • Postman에서 Get메서드, 쿼리파라미터로 검색어 전달 받기
  • 반환된 결과 확인

    위 JSON데이터 형식은 다음과 같다.
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
  "meta": {
    "total_count": 4,
    "pageable_count": 4,
    "is_end": true
  },
  "documents": [
    {
      "address_name": "전북 익산시 부송동 100",
      "y": "35.97664845766847",
      "x": "126.99597295767953",
      "address_type": "REGION_ADDR",
      "address": {
        "address_name": "전북 익산시 부송동 100",
        "region_1depth_name": "전북",
        "region_2depth_name": "익산시",
        "region_3depth_name": "부송동",
        "region_3depth_h_name": "삼성동",
        "h_code": "4514069000",
        "b_code": "4514013400",
        "mountain_yn": "N",
        "main_address_no": "100",
        "sub_address_no": "",
        "x": "126.99597295767953",
        "y": "35.97664845766847"
      },
      "road_address": {
        "address_name": "전북 익산시 망산길 11-17",
        "region_1depth_name": "전북",
        "region_2depth_name": "익산시",
        "region_3depth_name": "부송동",
        "road_name": "망산길",
        "underground_yn": "N",
        "main_building_no": "11",
        "sub_building_no": "17",
        "building_name": "",
        "zone_no": "54547",
        "y": "35.976749396987046",
        "x": "126.99599512792346"
      }
    },
    ...
  ]
}

자세한 정보는 아래 Kakao Developers 사이트의 문서를 참고
https://developers.kakao.com/docs/latest/ko/local/dev-guide
+ 여기서 403Forbidden이 반환되는 상황이 발생할 수 있다. SpringSecurity의 Configuration클래스에서 경로허용을 제대로 해주었다면 이 글을 참고바람

  • 추후 프로젝트 배포 시, 본 API를 사용할 서버를 developers.kakao.com에서 수정해주어야 한다.
    (developers.kakao.com - 내 애플리케이션 - WelCheck - 플랫폼 - 사이트도메인 수정)

여기까지 프론트 단에서 검색할 주소를 String으로 전달받은 후, 검색된 실주소 리스트를 JSON형식으로 응답해주는 데까지 구현되었다.
그런 다음에는 다시 프론트단에서 전달받은 실주소를 선택하여, 저장할 주소를 백엔드에 전달해주면 이를 회원 객체에 저장해준다.(회원가입)

Kakao API를 통해서 검색된 데이터는 위 사진과 같이 도로명, 지번, 심지어 위도 경도까지 보여주는데 이 중 어디부터 어디까지 회원 객체의 주소로 저장해야 할 지, 동시에 프론트로부터 전달 받아야 할지 의논해보아야 겠다.

profile
금융IT 개발자

0개의 댓글