Collection Pattern

Collection pattern

rest-api์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ์ค‘์š”ํ•œ ํŒจํ„ด์ด๋‹ค. ํ”ํžˆ ๋งํ•˜๋Š” restfulํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ€๋ฅด๋Š” ์š”์†Œ ์ค‘์˜ ํ•˜๋‚˜๋กœ COllection Pattern์„ ์–ผ๋งˆ๋‚˜ ์ค€์ˆ˜ํ•˜๋Š”๊ฐ€๋กœ ํŒ๋‹จํ•  ์ •๋„์ด๋‹ค. Collection์ด๋ผ๋Š” ๋‹จ์–ด๋กœ ์ถ”์ •ํ•ด๋ณด๋ฉด ์ผ๋‹จ ๋ฌด์–ธ๊ฐ€์˜ ๋ชจ์Œ์ง‘์ด๋ผ๋Š” ์˜๋ฏธ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฆฌ์†Œ์Šค๋“ค์„ ํ•œ ๋ฌถ์Œ์œผ๋กœ ๋ชจ์•„์„œ ๋งˆ์น˜ ๋””๋ ‰ํ† ๋ฆฌ์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

post๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒŒ์‹œ๊ธ€๋“ค์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. posts๋ผ๋Š” ๋ณต์ˆ˜ํ˜•์œผ๋กœ ํ‘œ๊ธฐํ•œ๋‹ค๋ฉด ๊ฒŒ์‹œ๊ธ€์˜ ๋ณต์ˆ˜๋กœ ํ‘œํ˜„์ด ๋œ๋‹ค. /posts๋ผ๊ณ  ์ ๋Š”๋‹ค๋ฉด ์—ฌ๋Ÿฌ post๋“ค์„ ์ง€์นญํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŠน์ • post๋ฅผ ์ง€์นญํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด /posts/{post์˜ id} ํ˜น์€ /posts/:id์˜ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ id๋ผ๋Š” ๊ฐœ๋…์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ id๋Š” post์˜ id์ด์ง€ resource์˜ id๋Š” ์•„๋‹ˆ๋‹ค. posts๋ผ๋Š” ํด๋” ๋‚ด์—์„œ post๋ฅผ ์‹๋ณ„ํ•˜๋Š” id์˜ ๊ฐœ๋…์ด์ง€, ์ „์ฒด๋ฅผ ์•„์šฐ๋ฅด๋ฉฐ resource๋ฅผ ์‹๋ณ„ํ•˜๋Š” uri๊ฐ€ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋‹ค๋งŒ resource Id๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ ์ค‘์˜ ํ•˜๋‚˜๋กœ์„œ post id๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ๋‹ค. post๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๊ณ , image๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๊ฐ ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” 10๊ฐœ ์ด์ƒ์˜ ํŒŒ์ผ๋“ค์ด ๊ฐ๊ฐ ๋“ค์–ด๊ณ , ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆซ์ž๊ฐ’์˜ id๋ฅผ ๊ฐ๊ฐ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ /posts/1์ด๋ผ๊ณ  post id๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , /images/1์ด๋ผ๊ณ  image id๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ํ•˜์ž. post id์™€ image id๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ 1์ด๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜์ง€๋งŒ, ์ด๊ฒƒ์€ ๊ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ผ๋Š” ๋ฒ”์ฃผ ๋‚ด์—์„œ ํ†ต์šฉ๋˜๋Š” id๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹๋ณ„๊ฐ€๋Šฅํ•œ ๊ฐ’์œผ๋กœ์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์œ„์—์„œ ์ง€์ ํ•œ resource id๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ๋‹ค. ๊ฐ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์—์„œ๋งŒ ์œ ์ผ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์—, resource id๋กœ๋Š” ์‹๋ณ„์ž๋กœ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค. Collection pattern์—์„œ ์‚ฌ์šฉ๋˜๋Š” id๊ฐ’๊ณผ resource id๋Š” ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•˜๊ฒ ๋‹ค.

์œ„์—์„œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋น„์œ ํ•œ ๊ทธ๋ฃน๋ช…์€ ๋Œ€๋ถ€๋ถ„ ๋ณต์ˆ˜ํ˜•์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. item๋“ค์˜ ๋ชจ์Œ์ด๊ธฐ ๋•Œ๋ฌธ์— items์™€ ๊ฐ™์€ ๋ณต์ˆ˜ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค. ๋”ฐ๋ผ์„œ /post/1๋ณด๋‹ค๋Š” /posts/1๊ฐ€ ๋” ๋งฅ๋ฝ์ƒ ์ ๋‹นํ•˜๊ณ , ๋ฐฐ์šดํ‹ฐ๋ฅผ ๋‚ด๊ธฐ ์ข‹๋‹ค.

ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ˜•์‹

/posts/{id}  : ํŠน์ • ๊ฒŒ์‹œ๋ฌผ
/posts/{id}/comments : ํŠน์ • ๊ฒŒ์‹œ๋ฌผ์˜ ๋Œ“๊ธ€๋“ค
/posts/{id}/comments/{comment_id} : ํŠน์„ฑ ๊ฒŒ์‹œ๋ฌผ์˜ ํŠน์ • ๋Œ“๊ธ€

๋ฌผ๋ก  ์ ˆ๋Œ€์ ์œผ๋กœ ๊ณ ์ •๋œ ๋ฐฉ์‹์€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค. /posts/{id}/comments์˜ ๊ฒฝ์šฐ, /comments?post_id={id}๊ฐ™์ด ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

rest๋ฅผ ๊ด€ํ†ตํ•˜๋Š” ์ฒ ํ•™ ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ uri๋ฅผ ํ†ตํ•ด ์–ผ๋งˆ๋‚˜ ์ž๊ธฐ์„œ์ˆ ์ ์œผ๋กœ resource๋ฅผ ๋“œ๋Ÿฌ๋‚ด๊ณ  ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š๋ƒ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. Collection pattern๋กœ ๊ฒฐ๊ตญ resource์˜ ๊ด€์ ์—์„œ ๋ณธ๋‹ค๋ฉด ์ดํ•ด๊ฐ€ ๋น ๋ฅผ ๊ฒƒ ๊ฐ™๋‹ค. ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€, uri์— resource์— ๋Œ€ํ•œ ํ‘œํ˜„์ด ์•„๋‹Œ ๋™์ž‘์ด๋‚˜ ํ–‰์œ„์— ๋Œ€ํ•ด ์„œ์ˆ ํ•˜๊ณ  ์‹ถ์€ ์š•๊ตฌ๋ฅผ ์ฐธ๋Š” ๊ฒƒ์ด๋‹ค. restfulํ•œ ์„ค๊ณ„๋Š” ๋ชจ๋“  ๋™์ž‘์ด๋‚˜ ํ–‰์œ„๋ฅผ HTTP method๋ฅผ ํ†ตํ•ด์„œ ๋“œ๋Ÿฌ๋‚ด๊ณ , uri๋Š” resource ์œ„์ฃผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Last updated