๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“• Spring Framework/Spring Project

2022.05.10 ใ€ŒRest Ful Api & DTO,VO mapping & Mysql Index & ์ƒ์ˆ˜ํ™”ใ€

by GroovyArea 2022. 5. 10.
ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘์— ์ˆ˜์ •์‚ฌํ•ญ์ด ๋„ˆ๋ฌด๋„ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ์ „์— ํ•™์›์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๋“  ๊ธฐํ•œ์ด ์ •ํ•ด์ ธ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„์„ฑ๋„๊ฐ€ ์šฐ์„ ์ด์—ˆ๊ณ , ์œ ์ง€๋ณด์ˆ˜์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š์•˜์—ˆ๋‹ค. 
ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ œ๋Œ€๋กœ ๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ์˜ˆ์ „ ๋ฒ„๋ฆ‡์ด ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋ฒˆ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์€ ๊น€์— ๋ฆฌํŒฉํ„ฐ๋ง์„ ๋น ๋ฅด๊ฒŒ ํ•˜๋ฉฐ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.

 

RestFul Api ์˜ return ๊ฐ’ 

1. ๋˜๋„๋ก ์ฒด์ด๋‹ ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ

2. response์— ํ•ด๋‹น๋˜๋Š” ํ—ค๋” ๋ฉ”์‹œ์ง€(์ƒํƒœ ์ฝ”๋“œ, ๋ฉ”์‹œ์ง€ ๋“ฑ๋“ฑ), ๋ฐ”๋”” ๊ฐ’์„ ๋‹ค ๋„ฃ๋„๋ก ๋…ธ๋ ฅํ•˜์ž

 

์ž„์‹œ์ ์ธ ResponseEntity์˜ ์‚ฌ์šฉ

 

DTO, VO ๊ฐ„์˜ ๋งคํ•‘

ํ˜„์žฌ Mybatis๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ฏ€๋กœ ํ…Œ์ด๋ธ” ์ž์ฒด์˜ Entity๋Š” VO

 service < - > mapper ๊ณ„์ธต ์ด๋™ ์‹œ VO๋ฅผ ์ด์šฉํ•ด์•ผ ํ•จ (์ด์œ ? DB๋ฅผ ํ‘œํ˜„ํ•œ ์ง์ ‘์ ์ธ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!)

์š”๊ฒŒ ํ•ต์‹ฌ

ํ•˜์ง€๋งŒ ๋งคํ•‘์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ๋งŒ๋“ค์ž๋‹ˆ ํ•„๋“œ๊ฐ€ ์›Œ๋‚™ ๋งŽ์•„ ๋ณต์žกํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ์นœ์ ˆํžˆ ๋ˆ„๊ตฐ๊ฐ€ ๋งŒ๋“ค์–ด ๋†“์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค~

ModelMapper ์˜์กด์„ฑ ์ถ”๊ฐ€
์ด๋Ÿฐ์‹์œผ๋กœ setter๋ฅผ ์–ธ์ œ ๋‹ค ์“ฐ๊ณ  ์žˆ์„๊นŒ?
์ด ํ•œ์ค„์ด๋ฉด ๋๋‚˜๋Š” ๊ฒƒ์„!

 

=> ModelMapper๋Š” Service์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋  ๊ฒƒ์ด๋ฏ€๋กœ ์•„์˜ˆ Bean์œผ๋กœ ๋“ฑ๋กํ–ˆ๋‹ค.

Configuration ์ด์šฉ

์ƒ์ˆ˜ํ™”

๋‹น์—ฐํžˆ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์€ ์กด์žฌํ•˜๋ฉด ๊ทธ ๊ฐ’์€ ์˜๋ฏธ์—†๋Š” ๊ฐ’์ด์ž ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ƒ์ˆ˜ํ™”๋ฅผ ํ•˜๊ฑฐ๋‚˜ Enum์„ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜์ž

ProductController ๋‚ด์—์„œ.
ResponseEntity์— ํƒœ์›Œ ๋ณด๋‚ผ ๋ฉ”์‹œ์ง€ ์—ด๊ฑฐํ˜•

Mysql Index ๊ด€๋ จ

product ํ…Œ์ด๋ธ”์˜ select ์ฟผ๋ฆฌ ๊ด€๋ จํ•ด์„œ Primary Key์ธ product_no ์ปฌ๋Ÿผ์„ ์ด์šฉํ•˜๋ ค ๊ทธ๋žฌ๋‹ค.

ํ•˜์ง€๋งŒ ์ƒํ’ˆ ์ถ”๊ฐ€ ์•ก์…˜์—์„œ ์ถ”๊ฐ€ ํ›„ ์ถ”๊ฐ€๋œ ์ƒํ’ˆ ๋‚ด์—ญ์„ ์‘๋‹ตํ•˜๋Š” ๋กœ์ง์—์„œ 

sql์€ ์•„์ง ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•œ product_no๋กœ ์ฐพ๊ณ  ์žˆ์—ˆ๋‹ค. 

ํ•ด์„œ Index๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๋ฐฉ์‹์„ ํƒํ–ˆ๋‹ค.

์ถ”๊ฐ€ํ•˜๋Š” dto๋Š” product_no๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ.
์ด๋ฆ„์„ ์ธ๋ฑ์Šค๋กœ ์ฐพ๋Š” service ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
flyway๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค ์ถ”๊ฐ€
์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋‹ˆ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•จ
์—ญ์‹œ product_name ์ปฌ๋Ÿผ์„ ์ด์šฉํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์ž˜ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•