๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒฟ Spring

[Spring Boot/RESTful] Spring Boot๋กœ ๊ฐœ๋ฐœํ•˜๋Š” RESTful Service

by nitronium102 2022. 2. 17.

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์ง€๊ธˆ๊นŒ์ง€๋Š” ํ•ญ์ƒ start.spring.io๋ฅผ ์ด์šฉํ•ด์™”๋Š”๋ฐ, IntelliJ ์•ˆ์—์„œ ๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค!

์•„๋ž˜์ฒ˜๋Ÿผ dependency๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด pom.xml์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

  • Spring web → embedded tomcat ์‹คํ–‰ ๊ฐ€๋Šฅ

 

REST API ์„ค๊ณ„

HTTPS API Name
GET /users retrieve all users
POST /users create a user
GET /users/{id} retrieve one user
DELETE /users/{id} delete a user
GET /users/{id}/posts retrieve all posts for a user
POST /users/{id}/posts create a post for a user
GET /users/{id}/posts/{post_id} retrieve details of a user

 

๊ตฌ์กฐ ํ™•์ธ

- application.properties : ์Šคํ”„๋ง ๋ถ€ํŠธ ํ™˜๊ฒฝ ์„ค์ • ์ง€์ •(application.yml๋กœ ๋ฐ”๊พธ๋Š” ๊ฒŒ ๋” ํŽธํ•˜๋‹ค)

- pom.xml : ์ „์ฒด ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ maven ์„ค์ • ๊ด€๋ฆฌ

 

Controller

RESTController ํด๋ž˜์Šค๋กœ ์ž‘๋™ํ•จ(์ผ๋ฐ˜ MVC Controller์™€๋Š” ๋‹ค๋ฆ„)

@RestController
  • Mapping
// GET
@RequestMapping(method=RequestMethod.GET, path="/hello-world")
@GetMapping(path = "/hello-world")/

 

Bean

์Šคํ”„๋ง์—์„œ ์„ ์–ธ๋˜์–ด ๊ด€๋ฆฌ๋˜๋Š” ์ธ์Šคํ„ด์Šค ⇒ ์˜์กด์„ฑ ์ฃผ์ž…์œผ๋กœ ๊ด€๋ฆฌ๋จ

  • BEAN ํ˜•์‹ : ๊ธฐ๋ณธ์ ์œผ๋กœ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ฐ˜ํ™˜๋œ๋‹ค
// Bean
@Data
@AllArgsConstructor -> ๋ชจ๋“  ์ƒ์„ฑ์ž 
@NoArgsConstructor -> ๊ธฐ๋ณธ ์ƒ์„ฑ์ž

 

DispatcherServlet๊ณผ ํ”„๋กœ์ ํŠธ ๋™์ž‘์˜ ์ดํ•ด

๋™์ž‘ ์›๋ฆฌ

  1. application.yml → ์„ค์ •์ด๋ฆ„: ๊ฐ’
  2. application.properties → ์„ค์ •์ด๋ฆ„=๊ฐ’
server:
  port: 8088
  
logging:
  level:
    org.springframework: DEBUG

DispatcherServlet → “/”

ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ํ•œ ๊ณณ์œผ๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ

→ ์š”์ฒญ์— ๋งž๋Š” handler๋กœ ์š”์ฒญ ์ „๋‹ฌ

→ handler์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ http response ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜

 

์‹คํ–‰ ์ˆœ์„œ : http request → dispatcher servlet → handler mapping → REST controller → http response

์„ธ๋ฏธ๋‚˜ ๋•Œ ๋งŒ๋“ค์—ˆ๋˜ ๊ตฌ์กฐ๋„

 

RestController

@RestController → @Controller + @RequestBody

View๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” REST Data(JSON/XML) ๋ฐ˜ํ™˜(์ž๋™์œผ๋กœ ResponseBody์— ๋„ฃ์–ด์คŒ)

 

Path Variable

์ด ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋  ๊ฒƒ์ž„์„ ๋ช…์‹œ

@GetMaping(path="/intro/{name}")
public HelloWorldBean helloWorldBean(@PathVariable String name){
	return new HelloWorldBean(String.format("Hello World, %s", name));
}

[๋‹ค๋ฅธ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ]
@GetMaping(path="/intro/{name}")
public HelloWorldBean helloWorldBean(@PathVariable(value="hey")String name){
	return new HelloWorldBean(String.format("Hello World, %s", name));
}

๋Œ“๊ธ€