거의 개발이 마무리 단계이긴 하지만 이제서야 올려보는 나의 졸업프로젝트 이야기3

스프링 환경 구축을 하고,

7월

우리는 본격적인 개발에 들어갔다.
교통 약자 지도라서 우리는 지도 api를 쓰는데 티맵 api를 쓰기로 했다.

여기서 RestTemplate를 처음 접하게 되었다.

1. RestTemplate란

REST API 호출이후 응답을 받을 때까지 기다리는 동기 방식 으로,

스프링 3.0에서부터 지원하며 스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿이고,

REST 서비스를 호출하도록 설계되어 HTTP 프로토콜의 메서드 (GET, POST, DELETE, PUT)에 맞게 여러 메서드를 제공한다고 한다.

1-1. RestTemplate의 특징은

  • HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다.(json, xml을 쉽게 응답 받음)
  • 멀티쓰레드 방식을 사용한다.
  • blocking 방식 사용한다.

    1 요청 당 1 스레드가 할당 되며 각 스레드에서는 Blocking 방식으로 처리되기 때문에 응답이 올 때 까지 해당 스레드는 다른 요청에 할당 될 수 없다.

물론 block이 꼭 필요한 경우가 있겠지만 아무래도 성능적인 부분이나 병렬 방식의 많은 스레드는 과부하를 줄 수 있을 것이므로 최근에는 WebClient를 권고하는 추세라고 한다.

WebClient는 non-Blocking 이며 이 방식이 필요한 이유는 네트워킹의 병목 현상을 줄이고 성능을 향상 시킬 수 있기 때문이다. 또한 WebClient는 비동기, 동기 둘 다 지원 가능하기 때문에 훨씬 큰 장점이 된다.

저런 점을 찾아보지 않고 무작정 RestTemplate를 썼다가 나중에 WebClient로 바꿨다는 슬픈 이야기😢

아무튼 내가 맨 처음에 했던 것은 TMAP API를 사용하여 통합검색 적용해보기!

API 적용하는 법 구글링하다가 RestTemplate를 사용하여 하는 것을 발견했고, 이를 이용해서 아래 처럼 만들었다.
처음 테스트는 검색은 find 쪽이어서

findController에 작성했다.
(findController/ findDto/ findService/ findServiceImpl)
우리는 DB를 쓸 필요가 없어서 Dao는 생략!

폭풍 구글링을 한 결과

@GetMapping("/address")
    public String address() {
        System.out.println("지도 API 테스트");
        
    @Value("${TMAP_APPKEY}")
    private String tmap_apiKey; //티맵 API 앱키 설정

    @GetMapping("/find/address")
    public String tMapAPI() {
        URI uri = UriComponentsBuilder
                .fromUriString("https://apis.openapi.sk.com/")
                .path("tmap/pois")
                .queryParam("version", 1) //version은 1
                .queryParam("searchKeyword","스타벅스 부평점") //일단 스타벅스 부평점으로 검색
                .queryParam("count",1) // 1개만 출력
                .encode()
                .build()
                .toUri();

        RestTemplate restTemplate = new RestTemplate();

        //헤더를 넣기 위한 것
        RequestEntity<Void> req = RequestEntity
                .get(uri)
                .header("appKey", tmap_apiKey)
                .build();

        ResponseEntity<String> result = restTemplate.exchange(req, String.class);

        return result.getBody();
    }

물론 나중에는 FindServiceImpl로 옮겼다.😉

2. Gitignore 설정

티맵 앱키는 application.properties에 적어놨고, gitignore로 설정해놨다.

원래는,
application-api.properties를 새로 작성해서 거기에 api key들을 정리해두고 싶었는데,

.gitignore에
application-api.properties 도 적어보고,
resources.application-api.properties,
/src/main/resources/application-api.properties 등 경로까지 다 적어보고

application.properties에는
spring.profiles.include=api를 썼는데

gitignore 설정이 제대로 안된건지 깃허브에 그대로 올라가버리지 뭐야!😫 내 서비스키 노출이라니ㅠㅠ

찾아보니 spring.profiles.include 이게 지금 버전엔 적용이 안되는 걸로 바뀐 것 같아서 결국 저 applicaion-api.properties는 삭제하고, application.properties에 앱키들을 적용하고 저걸 gitignore로 설정하니까 됐다.😢

application.properties에는

#TMAP API
TMAP_APPKEY = 내 티맵 서비스키 

이렇게 쓰고,

.gitignore에

application.properties

만 적으면 끝이다..!

나의 .gitignore

참 쉬워.. 그냥 진작 이렇게 할걸! ㅠㅠ

그럼 applicaion.properties에 적은 서비스키는 어떻게 쓰느냐?

@Value("${앱키 변수명}")

이걸 이용하면 된다!

나는 application.properties에 TMAP_APPKEY 로 설정해둬서

@Value("${TMAP_APPKEY}")
private String tmap_apiKey;

라고 써뒀다.

아무튼 result.getBody 를 return 하니까 결과가 잘 나오더라🤭
api를 사용해서 결과를 받아와보니까 새롭고 신기했다.

REFERENCE🙇‍♀️

https://sangnamja-jh.tistory.com/30?category=898945

profile
웹 백엔드 개발자가 되기 위해 열심히 공부를 하자🔥

0개의 댓글