4week
๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ

DataBinding
Data Binding์ ์์ฒญ ๋งค๊ฐ๋ณ์๋ฅผ "ํผ ๋น" ๋๋ "์ปค๋งจ๋ ๊ฐ์ฒด"์ ๋ฐ์ธ๋ฉํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค. ํผ์์ ์ค๋ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋ ์ ์์ต๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ ์์ฒญ์์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฐ ๊ฐ์ฒด์ ๋งคํํ์ฌ ์ฒ๋ฆฌํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ํผ์์ ์ ๋ ฅํ ์ฌ์ฉ์์ ์ด๋ฆ, ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ฑ์ ๋ฐ์ดํฐ๊ฐ ์๋ฐ ๊ฐ์ฒด์ ํ๋์ ๋งคํ๋์ด ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋์ผ๋ก ์ถ์ถํ๊ณ ๋ณํํ๋ ์๊ณ ๋ฅผ ๋ ์ ์๊ณ , ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ ์ ์์ต๋๋ค.
@RequestMapping(value="/docreate", method=RequestMethod.POST)
public String doCreate(Offer offer) {
// offer object will be automatically populated
// with request parameters
}
์์ ์ฝ๋์์ @RequestMapping ์ด๋ ธํ ์ด์ ์ผ๋ก ์ง์ ๋ ๋ฉ์๋๋ POST ์์ฒญ์ด "/docreate" ๊ฒฝ๋ก๋ก ๋ค์ด์ฌ ๋ ํธ์ถ๋ฉ๋๋ค. ์ด ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก Offer ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์ ์ธ๋์ด ์์ต๋๋ค. Spring์ ์ด ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋ฐ์ธ๋ฉํ์ฌ ํด๋น ๊ฐ์ฒด์ ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ์ด๋ฃจ์ด์ง๋๋ค.
ํด๋น ๋ฐ์ธ๋ฉ์ ๋ค์๊ณผ ๊ฐ์ ์์
1. ์๋ก์ด ํผ ๋น(form bean)์ด ์ธ์คํด์คํ๋ฉ๋๋ค.
2. ํผ ๋น์ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ก๋ถํฐ ๊ฐ์ ๋ฐ์์ต๋๋ค. (์ฆ, ์์ฒญ ํ๋ผ๋ฏธํฐ๊ฐ ํผ ๋น์ ํ๋์ ๋งคํ๋ฉ๋๋ค.)
3. ํผ ๋น์ ๋ชจ๋ธ์ ์ถ๊ฐ๋ฉ๋๋ค. (๋ชจ๋ธ์ ํผ ๋น์ด ์ถ๊ฐ๋๋ฉด, ์ด ํผ ๋น์ ๋ทฐ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.)
ํผ ๋น์ด ์ด๋ป๊ฒ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋ชจ๋ธ์ ์ฐ๊ฒฐ

"offer" ํผ ๋น์ด ์๋์ผ๋ก ๋ชจ๋ธ์ ์ถ๊ฐ๋ ๊ฒ์ด๋ฉฐ, ํผ ๋น์ ๋ชจ๋ธ ์์ฑ ์ ๋๋ค. ๋ค์ ๋งํด, ์ปจํธ๋กค๋ฌ์์ ์์ฑ๋ "offer" ํผ ๋น์ ๋ชจ๋ธ์ ์๋์ผ๋ก ์ถ๊ฐ๋์ด ๋ทฐ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.

Hibernate Validator
Hibernate Validator๋ ์ฌ์ฉ์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด ํผ ๋น์ ์บก์ํ๋ ํผ ๋ฐ์ดํฐ๋ฅผ ์ ํจ์ฑ ๊ฒ์ฌํ๋ ๊ฒ์ด ํ์ํฉ๋๋ค. Bean Validation API (JSR-303)๋ JavaBean ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํ API๋ฅผ ์ ์ํ๋ ๋ช ์ธ์ ๋๋ค. ๋น ์์ฑ์ ์ ์ธ์ ์ ํจ์ฑ ์ ์ฝ์ ์ฃผ์์ผ๋ก ๋ฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด @NotNull, @Pattern, @Size์ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Data Buffering