๐Ÿ“Œ RESTful API์™€ Axios ๋น„๋™๊ธฐ ์š”์ฒญ ์‹ค์Šต + ๋™๊ธฐ/๋น„๋™๊ธฐ ๊ฐœ๋… ์ •๋ฆฌ

My Pale Blue Dotยท2025๋…„ 4์›” 28์ผ
0

SPRING

๋ชฉ๋ก ๋ณด๊ธฐ
23/36
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025-04-28


๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ

1๏ธโƒฃ RESTful API์™€ Axios ์†Œ๊ฐœ

  • RESTful API: HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)๋ฅผ ํ™œ์šฉํ•ด ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ.
  • Axios: Promise ๊ธฐ๋ฐ˜์˜ JavaScript HTTP ํด๋ผ์ด์–ธํŠธ๋กœ, ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” JSP ํŽ˜์ด์ง€์—์„œ Axios๋ฅผ ์ด์šฉํ•ด RESTful API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณผ์ •์„ ํ•™์Šต.

2๏ธโƒฃ Axios ๋น„๋™๊ธฐ ์š”์ฒญ ์‹ค์Šต

โœ… GET ์š”์ฒญ (์กฐํšŒ)

  • ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉ. ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” URL์— ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ์ „๋‹ฌ.
axios.get(projectPath + "/rest/memo/add?id=" + form.id.value + "&text=" + form.text.value)
     .then(resp => console.log(resp))
     .catch(err => console.log(err));

โœ… POST ์š”์ฒญ (๋“ฑ๋ก)

  • ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•์‹์œผ๋กœ ์„œ๋ฒ„์— ์ „๋‹ฌ.
const headers = { 'Content-Type': 'application/json' };
const param = { "id": form.id.value, "text": form.text.value };

axios.post(projectPath + "/rest/memo/post", param, headers)
     .then(resp => console.log(resp))
     .catch(err => console.log(err));

โœ… PUT ์š”์ฒญ (์ „์ฒด ์ˆ˜์ •)

  • ๋ฆฌ์†Œ์Šค๋ฅผ ์ „์ฒด ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉ.
axios.put(projectPath + "/rest/memo/put2/" + form.id.value + "/" + form.text.value)
     .then(resp => console.log(resp))
     .catch(err => console.log(err));

โœ… DELETE ์š”์ฒญ (์‚ญ์ œ)

  • ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉ.
axios.delete(projectPath + "/memo/remove/" + form.id.value)
     .then(resp => console.log(resp))
     .catch(err => console.log(err));

3๏ธโƒฃ ๋™๊ธฐ(Synchronous) vs ๋น„๋™๊ธฐ(Asynchronous) ํ†ต์‹ 

โœ… ๊ฐœ๋… ์ •๋ฆฌ

  • ๋™๊ธฐ(Synchronous) ์š”์ฒญ โ†’ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ ํ›„ ๋‹ค์Œ ์ž‘์—… ์ˆ˜ํ–‰.
    • ์˜ˆ์‹œ: ๊ธฐ๋ณธ HTML Form ์ œ์ถœ, ํŽ˜์ด์ง€ ์ด๋™
  • ๋น„๋™๊ธฐ(Asynchronous) ์š”์ฒญ ํ›„ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ž‘์—… ์ˆ˜ํ–‰, ์‘๋‹ต์ด ์˜ค๋ฉด ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌ.
    • ์˜ˆ์‹œ: Ajax, Fetch, Axios ๋“ฑ

๐Ÿ”น ๋น„๊ต ํ‘œ

๊ตฌ๋ถ„๋™๊ธฐ(Sync)๋น„๋™๊ธฐ(Async)
์ฒ˜๋ฆฌ ๋ฐฉ์‹์š”์ฒญ ํ›„ ์‘๋‹ต๊นŒ์ง€ ๋Œ€๊ธฐ์š”์ฒญ ํ›„ ๋ฐ”๋กœ ๋‹ค์Œ ์ž‘์—…
์‚ฌ์šฉ์ž ๊ฒฝํ—˜ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ๋ฐœ์ƒํŽ˜์ด์ง€ ์œ ์ง€
๋Œ€ํ‘œ ์˜ˆ์‹œHTML Form, ๊ธฐ๋ณธ GETAjax, Fetch, Axios
์žฅ์ ๊ตฌํ˜„์ด ๋‹จ์ˆœ๋น ๋ฅธ ์‘๋‹ต, UX ํ–ฅ์ƒ
๋‹จ์ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐœ์ƒ๋ณต์žกํ•œ ๋กœ์ง ๊ฐ€๋Šฅ์„ฑ

4๏ธโƒฃ Spring RestController ๊ตฌํ˜„

@RestController
@Slf4j
@RequestMapping("/rest/memo")
public class MemoRestController {
    @Autowired
    private MemoServiceImpl memoService;

    @GetMapping("/getAll")
    public List<MemoDto> getAll() { ... }

    @GetMapping("/get/{id}")
    public ResponseEntity<MemoDto> get(@PathVariable int id) { ... }

    @PostMapping("/post")
    public void add(@RequestBody MemoDto dto) throws SQLException { ... }

    @PutMapping("/put/{id}/{text}")
    public void put(MemoDto dto) { ... }

    @PutMapping("/put2")
    public void put2(@RequestBody MemoDto dto) { ... }

    @PatchMapping("/patch/{id}/{text}")
    public void patch(MemoDto dto) { ... }

    @DeleteMapping("/remove/{id}")
    public void remove(@PathVariable int id) { ... }
}

๐Ÿ”ฅ ์ •๋ฆฌ

  • RESTful API์˜ HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ๋ฒ• ์ˆ™์ง€
  • Axios๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ ์œผ๋กœ ์„œ๋ฒ„์™€ ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ตํ™˜
  • ๋™๊ธฐ vs ๋น„๋™๊ธฐ ๊ฐœ๋…์„ ๋ช…ํ™•ํžˆ ์ดํ•ด
  • ํด๋ผ์ด์–ธํŠธ(JSP)์™€ ์„œ๋ฒ„(Spring RestController) ๊ฐ„ ์—ฐ๋™ ๊ตฌ์กฐ ์‹ค์Šต

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€