일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Object
- maven repository jar
- object 다형성
- javascript
- 스프링
- 자바object다형성
- JS
- 자바스크립트
- 졸프
- 외부 라이브러리 jar 배포
- maver 외부 jar 배포
- java object 클래스
- maven systempath
- maven 외부 라이브러리 배포
- map vs multivaluemap
- 배포시 systempath
- map multivaluemap
- nice_v1.1.jar
- maven jar 배포
- niceid_v1.1.jar maven
- java object 다형성
- 맥북 port kill
- 도커 컨테이너에 mysql
- object 배열
- java
- object배열
- object다형성
- object tostring
- 자바
- Spring
- Today
- Total
모래블로그
[스프링] Spring RestTemplate 본문
1. RestTemplate란
REST API 호출이후 응답을 받을 때까지 기다리는 동기 방식 으로,
스프링 3.0에서부터 지원하며 스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿이고,
REST 서비스를 호출하도록 설계되어 HTTP 프로토콜의 메서드 (GET, POST, DELETE, PUT)에 맞게 여러 메서드를 제공한다고 한다.
1) RestTemplate의 특징
- HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다.(json, xml을 쉽게 응답 받음)
- 멀티쓰레드 방식을 사용한다.
- blocking 방식 사용한다.1 요청 당 1 스레드가 할당 되며 각 스레드에서는 Blocking 방식으로 처리되기 때문에 응답이 올 때 까지 해당 스레드는 다른 요청에 할당 될 수 없다.
물론 block이 꼭 필요한 경우가 있겠지만 아무래도 성능적인 부분이나 병렬 방식의 많은 스레드는 과부하를 줄 수 있을 것이므로 최근에는 WebClient를 권고하는 추세라고 한다.
WebClient는 non-Blocking 이며 이 방식이 필요한 이유는 네트워킹의 병목 현상을 줄이고 성능을 향상 시킬 수 있기 때문이다. 또한 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🙇♀️
'Framework > Spring' 카테고리의 다른 글
[스프링] Spring 의존성 주입 방법 및 생성자 주입 방법의 장점 (0) | 2023.11.22 |
---|---|
[스프링] Spring WebClient (0) | 2023.11.22 |
[스프링] Spring json 파싱하기 (1) | 2023.11.22 |
[스프링] Spring UriComponents (0) | 2023.11.22 |
REST API란 (0) | 2023.11.22 |