๐REST
๐กOpen API (Application Programming Interface)
- ํฌํธ ์๋น์ค ์ฌ์ดํธ๋ ๊ด๊ณต์, ๊ณต๊ณต ๋ฐ์ดํฐ ํฌํธ์ด ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ ์์ฉ ํ๋ก๊ทธ๋จ(Java, Python ๋ฑ)์์ ์ฌ์ฉํ ์ ์๋๋ก Open API๋ฅผ ์ ๊ณต
- ๋๋ถ๋ถ์ Open API๋ REST ๋ฐฉ์์ผ๋ก ์ง์
๐กREST(Representational State Transfer)
- URI(๋ฆฌ์์ค, ๋ฐ์ดํฐ) + ์ ์ก๋ฐฉ์(GET/POST/PUT/DELETE) โ ์ํ๋ ์์
(command)์ ์ง์
- HTTP URI๋ฅผ ํตํด ์ ์ดํ ์์์ ๋ช
์ํ๊ณ , HTTP Method(GET, POST, PUT(UPDATE), DELETE)์ ํตํด ํด๋น ์์์ ์ ์ดํ๋ ๋ช
๋ น์ ๋ด๋ฆฌ๋ ๋ฐฉ์์ ์ํคํ
์ฒ
๐กREST ๊ตฌ์ฑ
- ์์(Resource) - URI๋ก ์๋ณ
- ํ์(Verb) - HTTP Method๋ก ์ ์
- ํํ(Representations) : JSON, XML ๋ฑ์ ํ์
์ ํํ๋ HTTP URI๋ก ๋ฆฌ์์ค๋ฅผ ์ ์ํ๊ณ HTTP method๋ก ๋ฆฌ์์ค์ ๋ํ ํ์๋ฅผ ์ ์
๐ก๊ธฐ์กด Service์ REST Service
- ๊ธฐ์กด Service
- ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ํ ๊ฐ๊ณต๋ data๋ฅผ ์ด์ฉํ์ฌ ํน์ ํ๋ซํผ์ ์ ํฉํ ํํ์ View๋ก ๋ง๋ค์ด์ ๋ฐํ
- form or link๋ฅผ ํตํด parameter๋ก ์์ฒญ
โ๏ธ์ฆ, ํ๋ฉด์ ๋ง๋๋ ๊ณณ์ Server.
- REST Service
- data ์ฒ๋ฆฌ๋ง ํ๋ค๊ฑฐ๋, ์ฒ๋ฆฌ ํ ๋ฐํ๋ data๊ฐ ์๋ค๋ฉด JSON์ด๋ XML ํ์์ผ๋ก ์ ๋ฌ
- AJAX๋ก ์์ฒญ (fetch)
โ๏ธ์ฆ, ํ๋ฉด์ ๋ง๋๋ ๊ณณ์ Client.

๐REST API
์๋ฒ๋ ์์ฒญ์ผ๋ก ๋ฐ์ ๋ฆฌ์์ค์ ๋ํด ์์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.
- GET/POST/PUT/ DELETE ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค์ ๋ํ CRUD ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
- HTTP URI์ ํตํด ์ ์ดํ ์์์ ๋ช
์ํ๊ณ , HTTP Method๋ฅผ ํตํด ํด๋น ์์์ ์ ์ดํ๋ ๋ช
๋ น์ ๋ด๋ฆฌ๋ ๋ฐฉ์์ Architecture
- ์์์ ํํํ ๋ Collection(๋ฌธ์, ๊ฐ์ฒด์ ์งํฉ)๊ณผ Document(ํ๋์ ๋ฌธ์, ๊ฐ์ฒด) ์ฌ์ฉ

๐ก๊ด๋ จ Annotation
- @RestController : Controller๊ฐ REST ๋ฐฉ์์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฒ์์ ๋ช
์
- @ResponseBody : JSP ๊ฐ์ ๋ทฐ๋ก ์ ๋ฌ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ์ ๋ฌ
- @PathVariable : URL ๊ฒฝ๋ก์ ์๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ์ถ์ถ
- @CrossOrigin : AJAX์ ํฌ๋ก์ค ๋๋ฉ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- @RequestBody : JSON ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ํ์
์ผ๋ก ๋ฐ์ธ๋ฉ
๐ก Jackson library
- jackson-databind ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๊ฐ์ฒด๋ฅผ JSON ํฌ๋งท์ ๋ฌธ์์ด๋ก ๋ณํ์์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก
- RESTful API์์ ๋ฐ์ดํฐ๋ฅผ JSON ํ์์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ์กํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- jackson-dataformat-xml ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๊ฐ์ฒด๋ฅผ xml๋ก ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก
- XML ํ์์ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ์กํด์ผ ํ ๋ ์ฌ์ฉ
๐ResponseEntity< T >
๐กResponseEntity< T >์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
- HTTP ์๋ต์ ์ธ๋ถ์ ์ผ๋ก ๊ตฌ์ฑํ๊ณ ๋ฐํํ ์ ์๊ฒ ํ๋ ํด๋์ค
- ์ฃผ๋ก REST API์์ client์๊ฒ ์ํ ์ฝ๋, ์๋ต ํค๋, ๋ณธ๋ฌธ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์๋ต์ ๋ณด๋ผ ๋ ์ฌ์ฉ
- ์๋ต ๋ณธ๋ฌธ(response body)์ ํฌํจ๋ ๋ฐ์ดํฐ ํ์
์ ์ง์
- T์ ํ์
์ผ๋ก๋ String, Object, Dto ๋ฑ์ด ์ผ๋ฐ์ , ํ์์ ๋ฐ๋ผ Void๋ ๊ฐ๋ฅ
public class ResponseEntity<T> extends HttpEntity<T> {}
๐ก ResponseEntity ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ์ค์ ์์
- ์ํ ์ฝ๋ ์ค์
- HTTP ์๋ต์ ํฌํจ๋ ์ฝ๋๋ฅผ ์ค์
ResponseEntity<String> response = new ResopnseEntity<>(HttpStatus.OK);
- ๋ณธ๋ฌธ ์ค์
- ์๋ต์ ๋ณธ๋ฌธ์ผ๋ก ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ง์
- JSON, XML ๋ฑ์ผ๋ก ์ง๋ ฌํ๋์ด ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
ResponseEntity<List<MemberDto>> response = new ResponseEntity<List<MemberDto>>(list, HttpStatus.OK);
- ํค๋ ์ค์
- Content-Type, Location ๋ฑ์ ํค๋ ๊ฐ ์ค์ ๊ฐ๋ฅ
- HTTP ์๋ต ํค๋๋ฅผ ์ปค์คํฐ๋ง์ด์ฆํ ์ ์๋ค.
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "HeaderValue");
ResponseEntity<String> response = new ResponseEntity<>("Body Content", headers, HttpStatus.OK);
๐กResponseEntity< T >์ ์์ฑ ๋ฐฉ์
-
์์ฑ์๋ฅผ ์ฌ์ฉํ ๋ฐฉ์
- body, headers, status๋ฅผ ์ง์ ์ง์ ํ์ฌ ResponseEntity๋ฅผ ์์ฑํ๋ค.
return new ResponseEntity<T>(body, headers, HttpStatus.Ok);
-
๋น๋ ํจํด์ ์ฌ์ฉํ ๋ฐฉ์