Spring boot ์ REST api
์ด๊ธฐ spring ํ๋ก์ ํธ๋ ์คํ๋ง ๊ตฌ์ฑ์ ํ์ํ XML ์ฝ๋๊ฐ ๋ง์๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๋ ค๊ณ ์คํ๋ง 2.5๋ ์ ๋ํ ์ด์ (Annotation) ๊ธฐ๋ฐ์ผ๋ก ์ปดํฌ๋ํธ ๊ฒ์ ๊ธฐ๋ฅ์ ๋์ ํ๊ณ ๋ง์ ๋ ธ๋ ฅ์๋ ๋ถ๊ตฌํ๊ณ ๋ณต์กํ ๊ตฌ์ฑ์์ ๋ฒ์ด๋์ง ๋ชปํ์๊ณ ํธ๋์ญ์ ๊ด๋ฆฌ์ ์คํผ๋ง mvc๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ช ์์ ์ธ XML ์ด๋ ์๋ฐ ๊ตฌ์ฑ์ด ํ์ํ๋ค. ์ด๋ฌํ ๊ฒ์ Spring boot๊ฐ ํด๊ฒฐํด์ค๋ค.
์คํ๋ง๋ถํธ์ ๊ธฐ๋ฅ
- Create stand-alone Spring applications
- ๋จ๋ ์คํ๊ฐ๋ฅํ ์คํ๋ง์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ค.
- Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
- ๋ด์ฅํ ํฐ์บฃ, ์ ํฐ ํน์ ์ธ๋ํ ์ฐ๋ฅผ ๋ด์ฅํ๋ค.
- Provide opinionated 'starter' component to simplify your build configuration
- ๊ธฐ๋ณธ์ค์ ๋์ด์๋ 'starter' ์ปดํฌ๋ํธ๋ค์ ์ฝ๊ฒ ๋น๋์ ์ถ๊ฐํ ์ ์๋ค.
- Automatically configure Spring whenever possible
- ๊ฐ๋ฅํ ์๋์ค์ ๋์ด์๋ค.
- Provide production-ready features such as metrics, health checks and externalized configuration
- ์์ฉํ์ ํ์ํ ํต๊ณ ๋ฐ ์ ๊ฒ, ์ธ๋ถ์ํ๋ฅผ ์ ๊ณตํ๋ค.
- Absolutely no code generation and no requirement for XML configuration
- ์ค์ ์ ์ํ XML ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์๊ตฌํ์ง ์๋๋ค.
Rest API
Repressentational State Transfer์ ์ฝ์ด๋ก ํ๋์ URL์ ํ๋์ ๊ณ ์ ํ ๋ฆฌ์์ค๋ฅผ ๋ํํ๋๋ก ์ค๊ณ๋๋ค ๋ผ๋ ๊ฐ๋
HTTP -GET method (Controller of MVC)
- ์ฃผ์์ฐฝ์ ํ๋ผ๋ฏธํฐ๊ฐ ๋
ธ์ถ๋๋ค.
www.localhost:8080/search?id=account&password=1234
- ๋ธ๋ผ์ฐ์ ์์ ์ฃผ์์ ๋ํ ์บ์๊ฐ ์ด๋ฃจ์ด์ง๋ฏ๋ก, ์ ๋ณด๋ฅผ ์ป์ ๋ ์ฌ์ฉ ํ๋ค.
์ฌ์ฉ์๋ก๋ถํฐ ์ ์์ ๋ฐ๊ธฐ ์ํด์ ์ฃผ์๋ฅผ ์ค์ ํด์ผ ํ๋๋ฐ ๊ทธ ์ฃผ์์ ๋ฌถ์์ Controller๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฐ๋ฆฌ๋ Controller ํจํค์ง๋ฅผ ๋ง๋ค๊ณ ๋งคํ๋ ์ฃผ์์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ ์ปจํธ๋กค๋ฌ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด์
๊ฒฝ๋ก: com.test.study.controller/GetController.java/
package com.test.study.controller;
import org.springframework.web.bind.annotition.RequestMapping
import org.springframework.web.bind.annotition.RequestMethod
import org.springframework.web.bind.annotition.RestController
@RestController
/*
@RestController ์ @Controller ์ด๋
ธํ
์ด์
๊ณผ @ResponseBody ์ด๋
ธํ
์ด์
์
ํฉ์ณ๋์ ์ด๋
ธํ
์ด์
์ผ๋ก ํด๋์ค ์๋จ์ @RestController ์ด๋
ธํ
์ด์
์ ์ ์ ํ๋ฉด Method๋ง๋ค
@ResponseBody ๋ฅผ ๋ถ์ฌ์ฃผ์ง ์์๋ ๋๋ค.
*/
@RequestMapping("/api"); // URL์ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋์ ๋งคํํ ๋ ์ฌ์ฉํ๋ ์คํ๋ง์ ์ด๋
ธํ
์ด์
public class GetController {
/*
Method๋ ์ด๋ ํ ํ์
์ผ๋ก ๋ฐ์ ๊ฒ์ธ์ง (Post,GET,...) ์ด๋
ธํ
์ด์
์ธ์ 1์์ ๊ฒฐ์ ํ๊ณ
path๋ ์ด๋ ํ ์ฃผ์๋ก ๋ฐ๊ฒ ๋ค.๋ฅผ ๋ปํ๋ค.
*/
@RequestMapping(method = RequestMethod.GET, path = "/getMethod") // -> localhost:8080/api/getMethod
public String getRequest() {
return "Hi getMethod";
}
}
์ฌ์ฉ์์๊ฒ ์ง์ ๋ URL์ ํตํด์ "Hi getMethod ๋ฅผ ํ์ํด์ฃผ์๋ค." ํ์ง๋ง ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์
๊ทธ ๋ณด์์ ํด๋ณด์
package com.test.study.controller;
import org.springframework.web.bind.annotition.RequestMapping
@RestController
@RequestMapping("/api"); // URL์ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋์ ๋งคํํ ๋ ์ฌ์ฉํ๋ ์คํ๋ง์ ์ด๋
ธํ
์ด์
public class GetController {
@RequestMapping(method = RequestMethod.GET, path = "/getMethod"))
public String getRequest() {
return "Hi getMethod";
}
@Getmapping("/getParameter") //getMapping ์ผ๋ก Parameter์ ๋ฐ์์ค๋ค.
public String getParam(@RequestParam String id, @RequestParam String password){
return id+password;
}
}
์ด๋ ๊ฒ ์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค ๋ฟ ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ , ์์ฒญํ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์๊ฒ ๋์๋ค.
ํ์ง๋ง ๋ณ์๊ฐ ๋ฐ์์ง๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ง๊ธ ์์์๋ ํ๋ผ๋ฏธํฐ๋ก id์ password๋ง ๋ฐ์ง๋ง ๋ง์ฝ (Email, Address, name, id, password)์ ๋ฐ๋๋ค๊ณ ์น์.
@Getmapping("/getParameter") //getMapping ์ผ๋ก Parameter์ ๋ฐ์์ค๋ค.
public String getParam(@RequestParam String id,
@RequestParam String email,
@RequestParam String Address,
@RequestParam String name,
@RequestParam String id,
@RequestParam String password,
){
return id+password;
}
์ด๋ฐ์์ผ๋ก ์ฌ์ฉ์์๊ฒ ๋ฐ์์ผํ Data๊ฐ ๋ง์์ง๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ํตํด์ ํ๋์ ๋ฌถ์์ผ๋ก ๋ฐ๋๊ฒ์ด ํจ์ฌ ํธํ ๊ฒ์ด๋ค.
์ด์ mvc์ model์ ๋ํด์ ๋ค์ด๊ฐ๋ณด์.
Model (Model of MVC)
๊ฒฝ๋ก: com.test.study.model/SearchParam.java
์๊น controller์ ์ ์นํ ๊ฒฝ๋ก์ model์ด๋ผ๋ ํจํค์ง๋ฅผ ์์ฑํ๊ณ SearchParam ์ด๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
//SearchParam.java
public class Searchparam {
private String email;
private String address;
private String name;
private String id;
private String password;
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
... getter/setter ๊ฒ์ ์์ฑ
}
ํ์ ๋ค์ controller
ํจํค์ง๋ก ๋์์์ ๋งคํ์ ์์ผ์ค๋ค.
ํ์ง๋ง ์ด๋ฒ์๋ @RequestParam ์ด๋ ธํ ์ด์ ์ผ๋ก ๋งคํํ๋๊ฒ ์๋๋ผ ๊ฐ์ฒด ํ์์ผ๋ก ๋งคํ์ ์์ผ์ค๋ค.
@GetMapping("/getMultParam")
public String getMultP(SearchParam searchparam) {
return "ok";
}
ํ์ง๋ง ์ฐ๋ฆฌ๋ ๋คํธ์ํฌ ํต์ ์ ํ ๋ JSON ํ์์ผ๋ก Data๊ฐ ํํ๋๋ค๋ ๊ฒ์ ์๊ณ ์๋ค ๊ทธ๋ฌ๋ Servlet,jsp
์์๋ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง๋ง ์คํ๋ง์ return ๊ฐ์ ๊ฐ์ฒด๋ก ์ฃผ๋ฉด ๋๋ค.
์ง๊ธ์ String ํ์์ผ๋ก Data๋ฅผ ๋ฐ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋๋ฐ ์ด๋ ค์์ด ์์ผ๋ฏ๋ก JSON ํ์์ผ๋ก
๋ฐ์๋ณด์.
@GetMapping("/getMultParam")
public SearchParam getMultP(SearchParam searchparam) {
return searchParam;
}
์ผ๋ก ์ง์ ํด์ค๋ค๋ฉด JSON ํ์ ์ผ๋ก ๋ฐ์ ์ ์๊ฒ ๋๋ค.
HTTP -POST method (Controller of MVC)
- ์ฃผ์์ฐฝ์ ํ๋ผ๋ฏธํฐ๊ฐ ๋
ธ์ถ๋์ง ์๋๋ค
www.localhost:8080/search
- ์ฃผ์ ์ฐฝ์ ์ฌ์ฉ์์ ์์ฒญ ์ฌํญ์ด ๋ ธ์ถ๋์ง ์๋๋ค.
- GET ๋ฐฉ์์์๋ ์ฃผ์ ๊ธธ์ด ์ ํ์ด ์์ง๋ง POST๋ ๊ทธ๋ณด๋ค ๊ธธ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค (์ ํ ์กด์ฌ)
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ฃผ์ ์บ์๋ฅผ ํ์ง๋ชปํ๋ ํน์ฑ์ด ์๋ค.
package com.test.study.controller;
import org.springframework.web.bind.annotition.RequestMapping
import org.springframework.web.bind.annotition.RequestMethod
import org.springframework.web.bind.annotition.RestController
@RestController
@RequestMapping("/api"); // URL์ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋์ ๋งคํํ ๋ ์ฌ์ฉํ๋ ์คํ๋ง์ ์ด๋
ธํ
์ด์
public class GetController {
@PostMappint(value = "/postMethod")
public SearchParam postMehod(SearchParam searchParam) {
return "searchParam";
}
}
HTTP - PUT/PATCH/DELETE
- PUT/PATCH ๋ POST์ ๋ง์ฐฌ๊ฐ์ง๋ก BODY์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ผ๋ฉฐ, ์ฃผ๋ก ์ ๋ฐ์ดํธ์ ์ฌ์ฉ๋๋ค.
๊ฒฐ๋ก
REST API์ ๊ฐ๋
- Http ํ๋กํ ์ฝ์ ์๋ Method๋ฅผ ํ์ฉํ ์ํคํ ์ฒ ์คํ์ผ์ด๋ค.
- Http ๋ฉ์๋๋ฅผ ํตํด์ Resource๋ฅผ ์ฒ๋ฆฌํ๋ค.
- CRUD๋ฅผ ํตํ Resource๋ฅผ ์กฐ์ํ ๋ ์ฌ์ฉํ๋ค.
'๐ Java & Kotlin & Spring > - spring framework +' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring & Springboot-JPA] JPA๋ฅผ ์ด์ฉํ CRUD ๋ฉ์๋ ์์ฑํ๊ธฐ - 1 (Entity ์ค์ ๋ฐ Repository ์ค์ ) (0) | 2020.01.27 |
---|---|
[Spring & Springboot ๊ณตํต] HTTP Method - POST (0) | 2020.01.24 |
[Spring & SpringBoot ๊ณตํต] HTTP Method - GET (0) | 2020.01.19 |
[Spring & Springboot-JPA] 1) Springboot์์ Mysql์ JPA ์ ์ฐ๋ํ๊ธฐ. (1) | 2019.11.23 |
02 Lombok (0) | 2019.11.23 |
๋๊ธ