@PathVariable, @RequestParam
@PathVariable, @RequestParam์ ์ฌ์ฉ
์ด ๋ฒ ์ฃผ์ ๋ฐฑ์ค๋ ์ํ์์ ๋ฑ ํ๋ ๋ชป ํผ ๋ฌธ์ ๊ฐ ์์๋ฐ. ๋ฐ๋ก @PathVairable, @RequestParam์ ์ฌ์ฉ์ด์๋ค.
REST API ์์ URI ๊ท์น์ด ์๋๋ฐ, ํน์ id๋ก ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ @PathVariable๋ฅผ ์ด์ฉํด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค.
ํ์ง๋ง, ์์ด๋ ๋ง๊ณ ํน์ ์ด๋ฆ ๋ฑ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ์ ํด์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํด์ผํ๋๋ฐ
์ด ๋ @RequestParam์ ์ด์ฉํ๋ฉฐ, ์ฝ๋๋ฅผ
์ด๋ ๊ฒ ์์ฑ์ ํ ๋ค, ์ฟผ๋ฆฌ๋ฌธ์ ํตํด
?firstNAme=??&lastNAme=?? ์ด๋ ๊ฒ ์์ฑํ์ฌ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ์๋ฌธ์ด ๋ค ์ ์๋ค. ์? id๊ฐ์ ๊ฒฝ์ฐ๋ @PathVariable๋ฅผ ์ฌ์ฉํ๋ฉฐ, @RequestParam๊ณผ ๊ตฌ๋ณ์ง์ ์ด์ ๊ฐ ๋ญ๊ฐ??
๊ทธ๋์ chat GPT๋ฅผ ์ฐธ๊ณ ํด ๋ณด์๋ค.
<<CHAT GPT>>
1.
์ผ๋ฐ์ ์ผ๋ก REST API๋ฅผ ์ค๊ณํ ๋ ๋ฆฌ์์ค์ ๊ณ ์ ์๋ณ์(ID) ๊ฐ์ ํต์ฌ ์ ๋ณด๋ ๊ฒฝ๋ก ๋ณ์(Path Variable)๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๊ณ , ์ ํ์ ์ธ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ(์: ๊ฒ์, ํํฐ, ์ ๋ ฌ ๋ฑ)๋ ์์ฒญ ๋งค๊ฐ๋ณ์(RequestParam)๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ API์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฉ์ฑ์ ๋์ด๋ฉฐ, ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๋ฐฉ์์ ๋ช ํํ๊ฒ ํฉ๋๋ค.
Path Variable (๊ฒฝ๋ก ๋ณ์)
- ์ ์: URL์ ์ผ๋ถ๋ก ์์์ ์ง์ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฒฝ๋ก ๋ณ์๋ ์ฃผ๋ก ๋ฆฌ์์ค์ ๊ณ ์ ์๋ณ์(ID)๋ฅผ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฌ์ฉ ์: /users/{userId} ์ฌ๊ธฐ์ {userId}๋ ํน์ ์ฌ์ฉ์์ ๊ณ ์ ์๋ณ์(ID)๋ฅผ ๋ํ๋ด๋ ๊ฒฝ๋ก ๋ณ์์ ๋๋ค.
- ๋ชฉ์ : ๋ฆฌ์์ค์ ๊ตฌ์ฒด์ ์ธ ์์น๋ฅผ ์ง์ ํ๊ฑฐ๋, ํน์ ๋ฆฌ์์ค์ ๋ํ ์์ ์ ์ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
Request Param (์์ฒญ ๋งค๊ฐ๋ณ์)
- ์ ์: URL์ ๋์ ? ๋ค์ ํค-๊ฐ ์์ผ๋ก ์ถ๊ฐ๋๋ ์ ํ์ ์ธ ํ๋ผ๋ฏธํฐ์ ๋๋ค. ์ฃผ๋ก ๊ฒ์, ํํฐ๋ง, ์ ๋ ฌ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฌ์ฉ ์: /users?name=JohnDoe ์ฌ๊ธฐ์ name=JohnDoe๋ ์์ฒญ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ name์ด JohnDoe์ธ ์ฌ์ฉ์๋ฅผ ์ฐพ์ต๋๋ค.
- ๋ชฉ์ : ๋ฆฌ์์ค์ ์งํฉ์์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ํญ๋ชฉ์ ๊ฒ์ํ๊ฑฐ๋ ํํฐ๋งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์์ฝ
- Path Variable ์ฌ์ฉ ์ฌ๋ก: ๋ฆฌ์์ค์ ๊ณ ์ ์๋ณ์์ ๊ฐ์ด, API์ ๊ฒฝ๋ก ๋ถ๋ถ์ ์ง์ ํฌํจ๋์ด ๋ฆฌ์์ค๋ฅผ ๋ช ํํ๊ฒ ์๋ณํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ด๋ ํน์ ๋ฆฌ์์ค์ ์ธ๋ถ ์ฌํญ์ ์์ฒญํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
- Request Param ์ฌ์ฉ ์ฌ๋ก: ์ ํ์ ์ธ ์ฟผ๋ฆฌ, ํํฐ, ํ์ด์ง๋ค์ด์ , ์ ๋ ฌ ์กฐ๊ฑด๊ณผ ๊ฐ์ด, ๋ฆฌ์์ค ์งํฉ์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์กฐํ ์กฐ๊ฑด์ ์ ๊ณตํ ๋ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ๊ตฌ๋ถ์ REST API๋ฅผ ๋์ฑ ๋ช ํํ๊ณ ์ ์ฐํ๊ฒ ์ค๊ณํ ์ ์๋๋ก ๋์์ค๋๋ค.
2.
์์ฒญ ๋งค๊ฐ๋ณ์(Request Params)๋ฅผ ์ฌ์ฉํ์ฌ API ์์ฒญ์ ํ ๋, ์ฃผ์ด์ง ์กฐ๊ฑด(์: ํํฐ, ๊ฒ์ ์กฐ๊ฑด)์ ๋ง๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค. ์ด๋ ํนํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ ์ฉํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์๊ตฌํ๋ ํน์ ์กฐ๊ฑด์ด๋ ๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก๋ถํฐ ๋ฐ์์ฌ ์ ์๋๋ก ํฉ๋๋ค.
์์
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ API๊ฐ ์๊ณ , ํน์ ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ณ ์ ํ ๋ ์์ฒญ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ฝ /users?name=John๊ณผ ๊ฐ์ ์์ฒญ์ ํ๋ค๋ฉด, ์ด๋ฆ์ด 'John'์ธ ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.
์์ฒญ ๋งค๊ฐ๋ณ์์ ์ฌ์ฉ ์ฌ๋ก
- ํํฐ๋ง: ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ ๋ ์ฌ์ฉํฉ๋๋ค. ์: /products?category=books
- ๊ฒ์: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฒ์์ด์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์: /search?query=rest+api
- ์ ๋ ฌ: ๊ฒฐ๊ณผ๋ฅผ ํน์ ์์๋ก ์ ๋ ฌํด์ผ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ์: /items?sort=price_asc
- ํ์ด์ง๋ค์ด์ : ๋๋์ ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ถ๋ง์ ์กฐํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์: /posts?page=2&limit=10
๊ฒฐ๊ณผ์ ๋ฒ์
์์ฒญ ๋งค๊ฐ๋ณ์๋ก ์์ฒญ์ ํ๋ฉด, ์๋ฒ๋ ํด๋น ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์กฐํํ์ฌ ๋ฐํํฉ๋๋ค. ์ด ๋, ์๋ฒ ์ธก์์ ์ค์ ํ ๊ธฐ๋ณธ๊ฐ์ด๋ ํด๋ผ์ด์ธํธ์์ ์ง์ ํ ์กฐ๊ฑด(์: ํ ํ์ด์ง๋น ๊ฒฐ๊ณผ ์)์ ๋ฐ๋ผ ๋ฐํ๋๋ ๋ฐ์ดํฐ์ ์์ด ๊ฒฐ์ ๋ฉ๋๋ค.
๊ฒฐ๋ก
์์ฒญ ๋งค๊ฐ๋ณ์๋ API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฐํ๊ฒ ์กฐํํ๊ณ ์กฐ์ํ ์ ์๋๋ก ํ๋ ๊ฐ๋ ฅํ ์๋จ์ ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํํฐ๋ง, ๊ฒ์, ์ ๋ ฌ, ๊ทธ๋ฆฌ๊ณ ํ์ด์ง๋ค์ด์ ํ ์ ์๊ฒ ํจ์ผ๋ก์จ, ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ค ์ ํํ๊ณ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ฆ, ์ ๋ฆฌํ์๋ฉด @PathVariable์ ํน์ ๋ฆฌ์์ค๋ก ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ฃผ๋ ์ญํ ์ ํ๊ณ , @RequestParam์ ๋ณด๋ค ์ ์ฐํ๊ฒ ๋ด๊ฐ ์ฐพ๊ณ ์ ํ๋ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ฌ ์ ์๊ฒํ๋ ๋์ ์๋ฏธ์ธ ์ ์ด๋ค.
'๊ฐ๋ฐ ์ง์, ์คํฌ๋ฆฝํธ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring security (2) | 2024.03.24 |
---|---|
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. (4) | 2024.02.23 |
Spring/Spring Boot ์ ๋ฑ์ฅ๊ณผ ํ๋ก์ ํธ ์์ฑ (1) | 2024.02.15 |
(Spring) AOP --์ ๋ฆฌ ์ค (3) | 2024.02.08 |
Mapping error(<context:component - scan base-pakage~/>) (0) | 2024.01.31 |
๋๊ธ