์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- aws saa ํฉ๊ฒฉ
- ์คํํ๋ ๋ฏธ์ค
- prod docker-compose
- ํ์ดํผ๋ฐ์ด์
- ์๋ฐ
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- ๋ค์ค ์ปจํ ์ด๋
- redis ์กฐํ
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- Kafka
- redis ํ ์คํธ์ฝ๋
- docker compose
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- AWS Certified Solutions Architect - Associate
- Entity
- Codedeploy ์ค๋ฅ
- private subnet ec2 ๋ก์ปฌ ์ ์
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- docker-compose kafka
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- docker ps -a
- docker
- s3 log ์ ์ฅ
- JPA
- nGrinder
- aws ์ฟ ํฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[Spring] RestTemplate, UriComponentsBuilder ๋ณธ๋ฌธ
[Spring] RestTemplate, UriComponentsBuilder
๐คRyusun๐ค 2023. 6. 28. 16:02RestTemplate
- Spring์์ ์ง์ํ๋ ๊ฐ์ฒด๋ก ๊ฐํธํ๊ฒ Rest ๋ฐฉ์ API๋ฅผ ํธ์ถํ ์ ์๋ Spring ๋ด์ฅ ํด๋์ค์ ๋๋ค.
- Spring 3.0๋ถํฐ ์ง์๋์๊ณ , json, xml ์๋ต์ ๋ชจ๋ ๋ฐ์ ์ ์์ต๋๋ค.
Rest API ์๋น์ค๋ฅผ ์์ฒญ ํ ์๋ต ๋ฐ์ ์ ์๋๋ก ์ค๊ณ๋์ด์์ผ๋ฉฐ HTTP ํ๋กํ ์ฝ์ ๋ฉ์๋(ex. GET, POST, DELETE, PUT)๋ค์ ์ ํฉํ ์ฌ๋ฌ ๋ฉ์๋๋ค์ ์ ๊ณตํฉ๋๋ค. - Spring Framework 5๋ถํฐ๋ WebClient ๋ผ๋ ์๋ก์ด HTTP ํด๋ผ์ด์ธํธ๋ฅผ ๋์ ํ์ฌ ๊ธฐ์กด์ ๋๊ธฐ์ API๋ฅผ ์ ๊ณตํ ๋ฟ ๋ง ์๋๋ผ ํจ์จ์ ์ธ ๋น์ฐจ๋จ ๋ฐ ๋น๋๊ธฐ ์ ๊ทผ ๋ฐฉ์์ ์ง์ํ์ฌ, Spring 5.0 ์ดํ ๋ถํฐ๋ RestTemplate๋ deprecated ๋์์ต๋๋ค. (WebClient ์ฌ์ฉ ์งํฅ)
RestTemplate์ ํน์ง
· Spring 3.0 ๋ถํฐ ์ง์ํ๋ Spring์ HTTP ํต์ ํ
ํ๋ฆฟ
· HTTP ์์ฒญ ํ JSON, XML, String ๊ณผ ๊ฐ์ ์๋ต์ ๋ฐ์ ์ ์๋ ํ
ํ๋ฆฟ
· Blocking I/O ๊ธฐ๋ฐ์ ๋๊ธฐ๋ฐฉ์์ ์ฌ์ฉํ๋ ํ
ํ๋ฆฟ
· RESTful ํ์์ ๋ง์ถ์ด์ง ํ
ํ๋ฆฟ
· Header, Content-Tpye๋ฑ์ ์ค์ ํ์ฌ ์ธ๋ถ API ํธ์ถ
· Server to Server ํต์ ์ ์ฌ์ฉ
RestTemplate ๋ฉ์๋
Api ํธ์ถ ํด๋์ค ์ข ๋ฅ
- RestTemplate
- Spring 3๋ถํฐ ์ง์ ๋์๊ณ REST API ํธ์ถ์ดํ ์๋ต์ ๋ฐ์ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋๊ธฐ๋ฐฉ์์ ๋๋ค
- AsyncRestTemplate
- Spring 4์ ์ถ๊ฐ๋ ๋น๋๊ธฐ RestTemplate์ ๋๋ค
- Spring 5.0์์๋ deprecated ๋์์ต๋๋ค
- WebClient
- Spring 5์ ์ถ๊ฐ๋ ๋ ผ๋ธ๋ญ, ๋ฆฌ์ํฐ๋ธ ์น ํด๋ฆฌ์ด์ธํธ๋ก ๋๊ธฐ, ๋น๋๊ธฐ ๋ฐฉ์์ ์ง์ํฉ๋๋ค.
RestTemplate ์ฌ์ฉ ๋ฐฉ๋ฒ
0. ๊ฒฐ๊ณผ๊ฐ์ ๋ด์ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
1. ํ์์์ ์ค์ ์ HttpComponentsClientHttpRequestFactory ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
2. RestTemplate ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
3. header ์ค์ ์ ์ํด HttpHeader ํด๋์ค๋ฅผ ์์ฑํ ํ HttpEntity ๊ฐ์ฒด์ ๋ฃ์ด์ค๋๋ค.
4. ์์ฒญ URL์ ์ ์ํด์ค๋๋ค.
5. exchange() ๋ฉ์๋๋ก api๋ฅผ ํธ์ถํฉ๋๋ค.
6. ์์ฒญํ ๊ฒฐ๊ณผ๋ฅผ HashMap์ ์ถ๊ฐํฉ๋๋ค.
UriComponents
- URI๋ฅผ ๊ตฌ์ฑํ๋ Components๋ค์ ํจ๊ณผ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ํ๋ ํด๋์ค
- URI์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ ๊ตฌ์ฑ์์๋ณ๋ก ๋ถ๋ฆฌํ์ฌ ๋ณ์์ ์ ์ฅํ์ฌ ๊ฐ์ง๊ณ ์๋ URI ๊ตฌ์ฑ์์์ ์งํฉ
- URI๋ฅผ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ
- Scheme
- UserInfo
- Host
- Port
- Path
- Query
- Fragment
UriComponentsBuilder
- UriComponents ๋ฅผ Buildํ ์ ์๋๋ก ๋์์ฃผ๋ ํด๋์ค
- ์ฌ๋ฌ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ค์ ์ฐ๊ฒฐํ์ฌ URL ํํ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
- ์ฆ Controller๋จ์์ addAttribute๋ก ํ๋ ํ๋ ์์ฑ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ด class๋ฅผ ์ด์ฉํ๋ฉด ์์ฝ๊ณ ๊ฐ๋จํ๊ฒ ํ๋ผ๋ฏธํฐ๋ค์ ์ ๋ฌํ ์ ์์ต๋๋ค.
์์ ์ฝ๋
//์์ฒญํ๋ ๊ฒ์ uri ์์ฑ
public SearchLocalRes searchLocal(SearchLocalReq searchLocalReq){
URI uri = UriComponentsBuilder.fromUriString(naverLocalSearchUrl)
.queryParams(searchLocalReq.toMultiValueMap())
.build()
.encode()
.toUri();
HttpHeaders headers = new HttpHeaders();
headers.set("X-Naver-Client-Id", naverClientId);
headers.set("X-Naver-Client-Secret", naverClientSecret);
headers.setContentType(MediaType.APPLICATION_JSON);
// ์ด header๋ฅผ entity ์ ๋ด๊ธฐ
HttpEntity httpEntity = new HttpEntity<>(headers);
//responseType ์ค์
// ParameterizedTypeReference: ์ ๋ค๋ฆญ ํ์
์ ์ธ์ํ๊ณ ์ ๋ฌํ๋ค.
// ์์ธํ๊ฒ๋ RestTemplate์ ์๋ต ํ์
์ ์ง์ ํ ๋ ์ ๋ค๋ฆญ ์ ๋ณด๋ฅผ ์ ํํ๊ฒ ์์์ผ ํ ํ์๊ฐ ์๋ค.
// ParameterizedTypeReference์ <SearchLocalRes> ์ ๋ณด๋ฅผ ์ค์ ์ต๋ช
์์ ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
// (์ฐธ๊ณ ๋ก ParameterizedTypeReference๋ abstract ํด๋์ค๋ผ ์ง์ ์์ฑ์ด ๋ถ๊ฐ๋ฅํ๋ค)
// ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก API์ ์๋ต๊ฐ์ <SearchLocalRes> ํ์
์ผ๋ก ๋ณํํด์ ๋ฐ์ ์ ์๋ ๊ฒ์ด๋ค.
var responseType = new ParameterizedTypeReference<SearchLocalRes>(){};
//restTemplate ํตํด์ ์์ฒญ๊ฐ ๋ฐ๊ธฐ
ResponseEntity<SearchLocalRes> responseEntity = new RestTemplate().exchange(
uri,
HttpMethod.GET,
httpEntity,
responseType
);
// ResponseEntity ํ์
์ผ๋ก ๋ฆฌํด๋ฐ์ผ๋ฉด ์ข์์ ์ ์ํ์ฝ๋, ํค๋์ ๋ณด ๋ฑ๋ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
// getBody๋ฅผ ํตํด์ ๊ฒฐ๊ณผ๋ฅผ return
return responseEntity.getBody();
์ฐธ์กฐhttps://juntcom.tistory.com/141
https://blog.naver.com/PostView.naver?blogId=aservmz&logNo=222322019981
'๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ด๐ป > ๐๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] QueryDSL (0) | 2023.07.18 |
---|---|
[Spring] ์์ธ ์ฒ๋ฆฌ (0) | 2023.06.30 |
[Spring Batch] JobInstance, JobParameter, JobExecution, JobScope (0) | 2023.06.23 |
[Spring Batch] Tasklet, Chunk (0) | 2023.06.22 |
[Spring] Batch (0) | 2023.06.21 |