์ด์ ํฌ์คํธ๋ก Controller์ ๋ํด ์์๋ณด์๋ค. ์ด๋ฒ์ Model์ ๋ํด ์์๋ณด์.
SpringMVC์์ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ์ค ํ๋๋ก ๋น์ฆ๋์ค ๋ก์ง ๋ฐ ๋๋ฉ์ธ ๊ฐ์ฒด, DB์ ์ํธ์์ฉ์ ํ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. ์ ํด์ง ์ญํ ์ ๋ฐ๋ผ VO, DTO, DAO(Repository), Service, Entity์ผ๋ก ๋๋๋ค.
public class TestVO{ private int no; private String name; public TestVO(int no, String name){ this.no = no; this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return no == user.no && Objects.equals(name, user.name); } @Override public int hashCode() { return Objects.hash(userNo, userId, userPw); } ...getter }
๊ฐ ๊ฐ์ฒด ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ VO๋ ๋๋ฉ์ธ์ ๊ฐ ๋น๊ต ๋ฐ ๋๋ฉ์ธ ๊ฐ์ฒด๊ฐ์ ์ํธ์์ฉ์ ์ํด ์ฌ์ฉํ๋ค.
- ๋ถ๋ณ์ฑ : VO๋ ์์ฑ ํ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ถ๋ณ๊ฐ์ฒด๋ก ์์ฑ๋๋ค. ์ด๋ ์์ฑ์๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ Setter๋ฅผ ๊ตฌํํ์ง ์์์ผ๋ก์จ ์ฑ๋ฆฝ๋๋ค. ๋ฐ์ดํฐ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ค.
- ๊ฐ ๊ธฐ๋ฐ ๋น๊ต : ์ฃผ๋ก ๊ฐ์ ํตํ ๋น๊ต๋ฅผ ์ํํ๋ค. ์ด๋ฅผ ์ํด hashCode, equals ํจ์๋ฅผ Overrideํ์ฌ ๊ฐ์ฒด ๋ด๋ถ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋๋ฑ์ฑ์ ํ๋จํ๋ค.
- ๋ฐ์ดํฐ ์บก์ํ : Setter๊ฐ ์๊ณ Getter๋ง์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ์ ์บก์ํ๋ฅผ ๋ณด์ฅํ๋ค.
public class TestDTO{ private int no; private String name; ...getter, setter }
๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด๋ผ๋ ์๋ฏธ๋ฅผ ์ง๋๊ณ ์๋ค. ๊ณ์ธต๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๊ฐ์ฒด์ด๋ฉฐ, VO์์ ์ฐจ์ด์ ์ DTO๊ฐ ๊ฐ ๋ณ๊ฒฝ์ ์ด๋ ค์๋ ๊ฐ๋ณ ๊ฐ์ฒด๋ผ๋ ์ ์ด๋ค.
- ์บก์ํ : ํ๋ ์ธ์๋ฅผ private์ผ๋ก ์ ์ธํ๊ณ getter์ setter๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ์บก์ํ ์์น์ ์ค์ํ์ฌ ์ค๊ณํ๋ค.
- ๋ฐ์ดํฐ ์ง๋ ฌํ : DB ๋๋ View๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ฑฐ๋ ๋ฐ๊ธฐ์ํด JSON ํน์ XML๊ณผ ๊ฐ์ ํํ๋ก ๋ณํํ์ฌ ์ง๋ ฌํ ๋๋ ์ญ์ง๋ ฌํ๋ฅผ ํ๋ค.
- ๊ณ์ธต๊ฐ ๋ฐ์ดํฐ ์ ์ก : View๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ฑฐ๋ View์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ DB ๋๋ ๋น์ฆ๋์ค ๋ก์ง(Service)์ผ๋ก ์ ๋ฌํ๋ ๋งค๊ฐ์ฒด๋ก ์ฌ์ฉ๋๋ค.
@Service public class TestService{ ... }
๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ Service ๊ฐ์ฒด์ด๋ค. @Service ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ DAO(Data Access Object)์ Controller ์ฌ์ด์์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ํ๋์ ํด๋์ค์ ์์ฑํ์ฌ ์ ์ง๋ณด์, ์ฌ์ฌ์ฉ์ฑ, ํ ์คํธ์ ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์๋ค.
- ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ : ๋น์ฆ๋์ค ๋ก์ง์ ํ๋์ ํด๋์ค์ ๊ตฌํํจ์ผ๋ก์จ ์ฌ๋ฌ ์ปจํธ๋กค๋ฌ์์ ์ฌ์ฉ๋๊ฑฐ๋ ์ค๋ณต์ ์ต์ํํ์ฌ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์ ์ง๋ณด์ ๋ฐ ์ฌ์ฌ์ฉ์ฑ์ ์ด์ ์ ๊ฐ์ง๋ค.
- ํธ๋์ญ์ ๊ด๋ฆฌ : Controller์ DAO ์ฌ์ด์ ์์นํ์ฌ ํธ๋์ญ์ ์ ์์๊ณผ ๋์ ๊ด๋ฆฌํ์ฌ ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๋ค.
- ๋ณด์ : ์ ๊ทผ ๊ถํ์ ๊ฒ์ฌํ๋ ๋ฑ ํธ๋์ญ์ ์ ์์ํ๊ธฐ ์ ์ํํ ์ ์์ด ๋ณด์์ ์ด์ ์ด ์๋ค.
- ํ ์คํธ : ๋ค๋ฅธ ๊ณ์ธต๊ณผ ๋ถ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๋ํ ๋จ์ ํ ์คํธ ๋ฐ ํตํฉ ํ ์คํธ๋ฅผ ์งํํ ์ ์๋ค.
@Repository public class TestDAO(){ ... }
DB์์ ํธ๋์ญ์ ์ ์ํํ๋ ๊ฐ์ฒด. @Repository ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ํด๋น ํด๋์ค๊ฐ ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต์ ํด๋์ค์์ ๋ํ๋ด๊ณ Bean ๋ฑ๋ก์ ์ํํ๋ค. DB Connection ๊ฐ์ฒด๋ฅผ ๊ตฌํํ์ฌ CRUD ์์ ์ ์ํํ๋ค. SQL์ ์ํ์ Connection์ ์ด๊ณ ๋ซ์์ ๋ฐ๋ณตํ์ง ์๊ณ , DAO ๊ฐ์ฒด์์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ค๋์ ์ฟผ๋ฆฌ ์์ ์์ ๋ฐ์ํ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๋ค.
- CRUD : Create, Read, Update, Delete๋ฅผ ์๋ฏธํ๋ ๊ธฐ๋ณธ ์์ ์ด๋ฉฐ, ํด๋น ์์ ์ ์ํํ๊ณ ๋ฐ์ดํฐ ๋ก์ง์ ๋จ์ํ๊ณ ์ผ๊ด์ฑ์๊ฒ ๊ตฌํํ๊ณ ์ํํ๋ค.
- ํธ๋์ญ์ ๊ด๋ฆฌ : DB์์ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๊ณ ํธ๋์ญ์ ์ ๋ํ ์ผ๊ด์ฑ๊ณผ ์์ ์ฑ์ ์ ์งํ๋ค.
- ์ฟผ๋ฆฌ ์ํ : DB์ ํต์ ํ๋ฉฐ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ฑฐ๋ ๊ด๋ฆฌํ๋ค.
- ์์ธ์ฒ๋ฆฌ : DB Connection ์ค๋ฅ, ์ฟผ๋ฆฌ ์ํ ์ค๋ฅ๋ฑ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
- ํ ์คํธ ์ํ : ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ DB Connection ๋๋ ๋ฐ์ดํฐ ์์ธ์ค ๋ก์ง์ ์์ํ๊ฒ ํ ์คํธํ ์ ์๋ค.
@Entity public class TestEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) privae int no; @Column(nullable = false) private String name; }
์ฃผ๋ก JPA์์ ์ฌ์ฉ๋๋ Model ๊ฐ์ฒด. Entity๋ ํ ์ด๋ธ๊ณผ 1:1๋ก ๋งคํํด ์ฌ์ฉํ๋ค. ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธํค ๋๋ ์ปฌ๋ผ๊ณผ ํ๋์ธ์๋ฅผ ๋งคํํ์ฌ ์ฌ์ฉํ๋ค.
- @Entity์ ํตํด Entity ๊ฐ์ฒด์์ ๋ํ๋ธ๋ค.
- @Id์ ์ฌ์ฉํด ํ ์ด๋ธ์ primarty key์ ๋งค์นญํ๋ค.
- @Column์ ์ฌ์ฉํด ์ปฌ๋ผ๊ณผ ๋งค์นญํ๋ค.
View์ ๋น์ฆ๋์ค, DB ๋ก์ง์ ๋๋๊ณ ์ฃผ์ด์ง ๊ฐ์ฒด์ ์ญํ ์ ์ผ๊ด์ฑ์ ์ ์ง์์ผ ์ ์ง๋ณด์, ์ฌ์ฌ์ฉ์ฑ,
๋จ์ ๋๋ ํตํฉ ํ ์คํธ์ ์ด์ ์ ์ป๊ธฐ ์ํจ์ ์ ์ ์๋ค.