[Spring boot] MVC ํŒจํ„ด์„ ์ด์šฉํ•œ REST API ๊ฐœ๋ฐœ

๋ฐ˜์‘ํ˜•

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ REST API๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋ฅผ ํ•ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค. REST API๋Š” HTTP Method๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–‰์œ„๋ฅผ ์ •ํ•˜๊ณ , URI๋ฅผ ์ด์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์„œ๋ฒ„์˜€๋Š”๋ฐ์š”.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” MVC ํŒจํ„ด + Spring boot 2.x ์กฐํ•ฉ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ REST API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

What is MVC ?

MVC ํŒจํ„ด์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ๊ธ€์—์„œ ๋‹ค๋ค„ ๋ณธ์ ์ด ์žˆ๋Š”๋ฐ์š”. ํ˜น์‹œ MVC ํŒจํ„ด์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋ณต์Šตํ•ด๋ณด์‹œ๊ฑฐ๋‚˜, ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด, ์•„๋ž˜์˜ ๊ธ€์„ ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2016/12/29 - [Programming/JavaFX] - MVC Pattern์— ๊ธฐ๋ฐ˜ํ•œ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ JavaFX

 

MVC Pattern์— ๊ธฐ๋ฐ˜ํ•œ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ JavaFX

Java GUI Programming ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” AWT, SWT, Swing, JavaFX๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ, AWT์™€ Swing์œผ๋กœ๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ–ˆ์—ˆ๋Š”๋ฐ์š”. ์•„๋งˆ ํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด, Java์˜ GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ข€ ๋‹ต๋‹ตํ•จ์„ ๋งŽ์ด ๋Š๋ผ์‹ค ๊ฒƒ

blog.neonkid.xyz

 

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

์ด์ œ ๋ณธ๊ฒฉ์ ์ธ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํ™˜๊ฒฝ ์„ค์ •์„ ์ง„ํ–‰ํ• ํ…๋ฐ, ๊ทธ ์ „์— ์šฐ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒŒ ์ข‹๊ฒ ์ฃ ? ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” Java 8๊ณผ MySQL์„ ์ด์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ธํ…”๋ฆฌJ์—์„œ ์ œ๊ณตํ•˜๋Š” Spring Initializr๋ฅผ ์ด์šฉํ•ด Java 8๊ณผ Gradle Project๋กœ ๋งž์ถฐ์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

์—ฌ๊ธฐ์—์„œ REST API๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Spring Web ๋””ํŽœ๋˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , DB์™€์˜ ์—ฐ๋™์„ ์œ„ํ•ด Spring Data JPA์™€ MySQL Driver๋ฅผ ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋กœ Lombok์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Lombok์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Getter, Setter ๋“ฑ์„ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ๋นŒ๋“œ ํŒจํ„ด์„ ์ง€์›ํ•˜์—ฌ ์ปจ๋ฒ„ํŒ… ๋“ฑ์˜ ํด๋ž˜์Šค ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Data JPA๋Š” Spring์—์„œ Database์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ ๋””ํŽœ๋˜์‹œ์ธ๋ฐ, ๋ณธ๋ž˜๋Š” MyBatis๋ผ๋Š” ๊ฒƒ์ด ์žˆ์ง€๋งŒ Spring boot JPA๋Š” Object-oriented Programming ํ˜•ํƒœ๋กœ DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ๋”์šฑ ๋” ์‰ฝ๊ฒŒ DB ์—ฐ๋™์„ ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ฐจํ›„, JPA์™€ Hibernate๋ฅผ ๋‹ค๋ฃจ๋Š” ํฌ์ŠคํŠธ์—์„œ ์ƒ์„ธํ•˜๊ฒŒ ์ด์•ผ๊ธฐ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์„ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์„ค์ • ํ•˜๊ธฐ ์œ„ํ•ด, application.properties๋ฅผ application.yml ํŒŒ์ผ๋กœ ์ˆ˜์ •ํ•ด์ค๋‹ˆ๋‹ค.

์ด ์„ค์ •์„ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์—, ๋จผ์ € MySQL ์„œ๋ฒ„๊ฐ€ ๊ตฌ์ถ•๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ, ๋กœ์ปฌ ํ™˜๊ฒฝ์ด๋ผ๋ฉด Docker ๋“ฑ์˜ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฌ๊ณ , ์„œ๋ฒ„๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ฃ ?

์„œ๋ฒ„ ์„ค์น˜๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด, ์œ„์˜ ์„ค์ •๋Œ€๋กœ username, password๋ฅผ ์ž…๋ ฅํ•˜๊ณ , DB๋ช…์„ ์ •ํ•ด์ค๋‹ˆ๋‹ค. ๋‹จ, DB๋Š” ๋งŒ๋“ค์–ด๋‘์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

JPA ์˜ต์…˜์—์„œ ddl-auto ์˜ต์…˜์„ create๋กœ ์„ค์ •ํ•ด์ฃผ๊ณ , Database๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

์„ค์ •์ด ๋๋‚ฌ์œผ๋ฉด, ์ƒํ’ˆ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ €์žฅํ•  Domain, API๋ฅผ ๊ตฌํ˜„ํ•  Controller์™€ Repository ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด, ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ์ ํŠธ ์„ค์ •์ด ๋ชจ๋‘ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

 

REST API ๊ตฌํ˜„

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์ด ๋๋‚ฌ์œผ๋‹ˆ ์ด์ œ ๋ฐ”๋กœ REST API ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•ด๋ณด๋„๋ก ํ•˜์ฃ . Spring boot์—์„œ REST API๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ณ , ์ด์ œ ๋‚จ์€ ๊ฑด Entity๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒํ’ˆ์— ๋Œ€ํ•œ Entity๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Spring boot JPA๋Š” ๊ฐ„๋‹จํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ๋งŒ์œผ๋กœ๋„ ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ์ปค๋ฐ‹๊นŒ์ง€ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋“ค ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ Getter์™€ Setter๋ฅผ ์ •์˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ, Getter Setter๋Š” ์ธํ…”๋ฆฌJ์—์„œ Alt + Insert ๋‹จ์ถ•ํ‚ค๋ฅผ ํ†ตํ•ด์„œ๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋ฏ€๋กœ Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” Getter ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด์„œ ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๋ณ€์ˆ˜๋“ค์— ๋Œ€ํ•œ Getter๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ์œ„์™€ ๊ฐ™์ด ๊น”๋”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Setter์˜ ๊ฒฝ์šฐ, ๊ฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ณ„๋กœ set ๋ฉ”์†Œ๋“œ๋ฅผ ์ผ์ผ์ด ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๋ฏ€๋กœ, ์ƒ์„ฑ์ž์— Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฃผ๊ณ , ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ NoArgusConstructor ์–ด๋…ธํ…Œ์ด์…˜์€ ์‹ค์ œ๋กœ REST API๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ๋•Œ, ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์–ด๋…ธํ…Œ์ด์…˜์„ ์คŒ์œผ๋กœ์จ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค๋„๋ก ํ•ด์ฃผ๋ฉด ๊น”๋”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์€ Repository๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•˜๊ณ , Spring Data JPA์—์„œ ์ œ๊ณตํ•˜๋Š” JpaRepository๋ฅผ ์ƒ์†๋ฐ›๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. Generic์—๋Š” ์œ„์—์„œ ๋งŒ๋“ค์–ด์ค€ Item ํด๋ž˜์Šค์™€ PK์˜ ํƒ€์ž…์ธ Long ํƒ€์ž…์œผ๋กœ ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ณธ๋ž˜ Repository๋ฅผ ๊ตฌํ˜„ํ•ด ์ค€ ๋’ค, ์„œ๋น„์Šค ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ, Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฃผ์ž…ํ•œ ๋‹ค์Œ, ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ํ•„์š”์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ Controller ๊ตฌํ˜„์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ค๊ณ„ ํฌ์ŠคํŠธ์—์„œ ํ–ˆ๋˜๋Œ€๋กœ GET, POST, PUT, DELETE 4๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” **Mapping์œผ๋กœ ๋๋‚˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋˜๊ณ , ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ResponseEntity๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ปค์Šคํ…€ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ResponseEntity ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค I/O ์ž‘์—…์€ Repository ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ JpaRepository์—์„œ๋Š” save ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด INSERT ํ˜น์€ UPDATE ์ฟผ๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ , find** ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด SELECT๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

 

Test

API ์„œ๋ฒ„๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด Curl์„ ์ด์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$ curl http://localhost:8080/api/items | json_pp

์ฒ˜์Œ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋Ÿฐ ์ƒํ’ˆ๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” POST ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กฑ๋ˆ„ ์ƒํ’ˆ์„ ์ถ”๊ฐ€ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

$ curl -X POST -H "Content-Type: application/json" --data '{ "name": "apple", "price": 3000 }' http://localhost:8080/api/items | json_pp

POST ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์œ„์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ ํ›„, GET ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ€๋ฅด๋ฉด, ์œ„์™€ ๊ฐ™์ด ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ƒํ’ˆ์ด ๋‚˜ํƒ€๋‚˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

$ curl -X PUT -H "Content-Type: application/json" --data '{ "name": "apple", "price": 1500 }' http://localhost:8080/api/items/1 | json_pp

๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ PUT ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒํ’ˆ์˜ ๊ฐ€๊ฒฉ์ด ๋น„์‹ธ๊ฒŒ ์ฑ…์ • ๋˜์–ด, ๊ฐ€๊ฒฉ์„ ๋‚ด๋ฆฌ๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, PUT ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PUT, POST๋ฅผ ์ด์šฉํ•ด JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ, Curl์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Header์— ๋ฐ˜๋“œ์‹œ application/json์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

$ curl -X DELETE http://localhost:8080/api/items/1 | json_pp

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ์‚ญ์ œ๋˜๋Š”์ง€๋„ ํ™•์ธํ•ด๋ณด์ฃ .

ID ๊ฐ’์„ ์ด์šฉํ•ด ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ ๋˜์–ด, GET ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋‹ˆ ๋” ์ด์ƒ ๋‚˜์˜ค์ง€ ์•Š๋Š” ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

 

 

๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ ์•„์ฃผ ๊ฐ„๋‹จํ•œ REST API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค์— ๋”ฐ๋ผ์„œ ์–ด๋–ค์‹์œผ๋กœ Controller ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๊ณ , ๋ชจ๋ธ๋ง์€ ์–ด๋–ป๊ฒŒ ํ•˜์—ฌ์•ผ ํ•˜๋ฉฐ, ๋ฐ˜ํ™˜ ๊ฐ’์ด๋‚˜ ์š”์ฒญ ๊ฐ’์˜ ํ˜•ํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ์ค˜์•ผํ• ์ง€, ์–ด๋–ค ๊ฐ’์€ ์ œ์™ธํ•˜๊ณ , ์–ด๋–ค ๊ฐ’์„ ์ค˜์•ผ ํ• ์ง€ ๋“ฑ์„ ์ƒ๊ฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์‹ค๋ฌด์—์„œ๋Š” ์ด ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ๋ณด๋‹ค ๋‹ค์†Œ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring Data Rest๋ฅผ ์ด์šฉํ•œ REST API ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments