Spring์—์„œ ์‚ฌ์šฉํ•˜๋Š” RestTemplate , OkHttp, REST API ์˜ˆ์ œ ์‚ฌ์ดํŠธ

2022. 6. 28. 16:08ใ†Spring

728x90

 

1๏ธโƒฃ RestTemplate๋ž€? 

์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ http ํ†ต์‹ ์— ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ์ด๋‹ค. 

REST API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” Spring ๋‚ด์žฅ ํด๋ž˜์Šค๋กœ  REST API ํ˜ธ์ถœ์ดํ›„ ์‘๋‹ต๋ฐ›์„ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™๊ธฐ๋ฐฉ์‹์ด๋‹ค. 

 

OkHttp๋ž€? 

REST API, HTTP ํ†ต์‹ ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 

Okhttp ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด REST api, Http ๊ธฐ๋ฐ˜์˜ ์š”์ฒญ, ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

//okhttp
implementation 'com.squareup.okhttp3:okhttp:4.9.3'

-> build.gradle์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  refresh ํ•ด์ค€๋‹ค. 

 

-> Spring boot๋Š” RestTemplate + Okhttp ์—ฐ๊ฒฐํ’€์„ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค. 

Okhttp ์„ค์ •์„ ์œ„ํ•œ OkhttpConfiguration  ์ฐธ๊ณ  ์‚ฌ์ดํŠธ 

https://programmer.help/blogs/springboot-uses-resttemplate-okhttp-connection-pool-to-send-http-messages.html

 

RestTemplate ์„ค์ • ํŒŒ์ผ 

-> restTemplate.setErrorHandller์—์„œ  return false๋กœ ํ•ด์ค˜์•ผ 4xx, 5xx ์—๋Ÿฌ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

2๏ธโƒฃ RestTemplate ๋ฉ”์„œ๋“œ 

GET 

- getForObject() :  ์ฃผ์–ด์ง„ URL ์ฃผ์†Œ๋กœ HTTP GET ๋ฉ”์„œ๋“œ๋กœ ๊ฐ์ฒด์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค. 

- getForEntity() : ์ฃผ์–ด์ง„ URL ์ฃผ์†Œ๋กœ HTTP GET ๋ฉ”์„œ๋“œ๋กœ ๊ฒฐ๊ณผ๋Š” ResponseEntity๋กœ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค. 

 

POST

- postForObject() : POST๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ฐ์ฒด๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค.

- postForEntity() : POST๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๋กœ ResponseEntity๋กœ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค. 

 

exchange() : HTTP ํ—ค๋”๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ๊ณ  ์–ด๋–ค HTTP ๋ฉ”์„œ๋“œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

โ— 

์ฐธ๊ณ ๋กœ REST API ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์ œ ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์•˜๋‹ค! 

https://jsonplaceholder.typicode.com/

 

JSONPlaceholder - Free Fake REST API

{JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. As of Oct 2021, serving ~1.7 billion requests each month.

jsonplaceholder.typicode.com

์ด ์‚ฌ์ดํŠธ์—์„œ GET, POST ๋“ฑ์˜ ์š”์ฒญ์„ ํ•ด์„œ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค. 

 

 

3๏ธโƒฃ GET ๋ฉ”์„œ๋“œ 

 

- getForObject() 

: ์ฃผ์–ด์ง„ URL ์ฃผ์†Œ๋กœ HTTP GET ๋ฉ”์„œ๋“œ๋กœ ๊ฐ์ฒด์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค. 

์‹คํ–‰ ๊ฒฐ๊ณผ

(TestVo๋กœ์˜ ๋งคํ•‘์€ jackson-databind๊ฐ€ ํ•ด์ค€๋‹ค. )

 

 

- getForEntity()

: ์ฃผ์–ด์ง„ URL ์ฃผ์†Œ๋กœ HTTP GET ๋ฉ”์„œ๋“œ๋กœ ๊ฒฐ๊ณผ๋Š” ResponseEntity๋กœ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค. 

์ด ์žฅ์ ์€ ์‘๋‹ต์„ ResponseEntity ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ ๋ฐ›์•„์„œ getForObject()์™€๋Š” ๋‹ฌ๋ฆฌ HTTP ์‘๋‹ต์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์–ด get ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ์ฝ”๋“œ, ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ResponseEntity<T> ์ง€๋„ค๋ฆญ ํƒ€์ž…์— ๋”ฐ๋ผ์„œ ์‘๋‹ต์„ String์ด๋‚˜ Object ๊ฐ์ฒด๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

- exchange() 

: HTTP ํ—ค๋”๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ๊ณ  ์–ด๋–ค HTTP ๋ฉ”์„œ๋“œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

4๏ธโƒฃ POST ๋ฉ”์„œ๋“œ 

 

- postForObject()

: POST๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ฐ์ฒด๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ

 

 

- postForEntity()

:  POST๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๋กœ ResponseEntity๋กœ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค.

-> header ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์„œ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

- exchange()

: HTTP ํ—ค๋”๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ๊ณ  ์–ด๋–ค HTTP ๋ฉ”์„œ๋“œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

728x90