SpringMVC ๐ŸŒฑ Model์˜ ์ดํ•ด

Doridamยท2023๋…„ 6์›” 7์ผ
0

Spring๐ŸŒฑ & Boot ๐ŸŒผ

๋ชฉ๋ก ๋ณด๊ธฐ
11/12


SpringMVC Model

์ด์ „ ํฌ์ŠคํŠธ๋กœ Controller์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ์ด๋ฒˆ์—” Model์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

Model ์ด๋ž€

SpringMVC์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์ค‘ ํ•˜๋‚˜๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ ๋„๋ฉ”์ธ ๊ฐ์ฒด, DB์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ •ํ•ด์ง„ ์—ญํ• ์— ๋”ฐ๋ผ VO, DTO, DAO(Repository), Service, Entity์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

1. VO (Value Object)

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๋งŒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ฝ๊ธฐ ์ „์šฉ ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ์˜ ์บก์Šํ™”๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

2. DTO (Data Transfer Object)

public class TestDTO{
	private int no;
    private String name;
   	...getter, setter
}

๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค. ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฐ์ฒด์ด๋ฉฐ, VO์™€์˜ ์ฐจ์ด์ ์€ DTO๊ฐ€ ๊ฐ’ ๋ณ€๊ฒฝ์— ์—ด๋ ค์žˆ๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด๋ผ๋Š” ์ ์ด๋‹ค.

  • ์บก์Šํ™” : ํ•„๋“œ ์ธ์ž๋ฅผ private์œผ๋กœ ์„ ์–ธํ•˜๊ณ  getter์™€ setter๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์บก์Šํ™” ์›์น™์— ์ค€์ˆ˜ํ•˜์—ฌ ์„ค๊ณ„ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” : DB ๋˜๋Š” View๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋ฐ›๊ธฐ์œ„ํ•ด JSON ํ˜น์€ XML๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ง๋ ฌํ™” ๋˜๋Š” ์—ญ์ง๋ ฌํ™”๋ฅผ ํ•œ๋‹ค.
  • ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก : View๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ View์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ DB ๋˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Service)์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋งค๊ฐœ์ฒด๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

3. Service

@Service
public class TestService{
	...
}

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” Service ๊ฐ์ฒด์ด๋‹ค. @Service ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ DAO(Data Access Object)์™€ Controller ์‚ฌ์ด์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์ž‘์„ฑํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜, ์žฌ์‚ฌ์šฉ์„ฑ, ํ…Œ์ŠคํŠธ์— ์šฉ์ดํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ง‘์ค‘ํ™” : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์—ฌ๋Ÿฌ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ์— ์ด์ ์„ ๊ฐ€์ง„๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ : Controller์™€ DAO ์‚ฌ์ด์— ์œ„์น˜ํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘๊ณผ ๋์„ ๊ด€๋ฆฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณด์•ˆ : ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋“ฑ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๋ณด์•ˆ์— ์ด์ ์ด ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ : ๋‹ค๋ฅธ ๊ณ„์ธต๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. DAO (Data Access Object)

@Repository
public class TestDAO(){
	...
}

DB์™€์˜ ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด. @Repository ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๋ฐ์ดํ„ฐ ์—‘์„ธ์Šค ๊ณ„์ธต์˜ ํด๋ž˜์Šค์ž„์„ ๋‚˜ํƒ€๋‚ด๊ณ  Bean ๋“ฑ๋ก์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. DB Connection ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ CRUD ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. SQL์„ ์ˆ˜ํ–‰์‹œ Connection์„ ์—ด๊ณ  ๋‹ซ์Œ์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ , DAO ๊ฐ์ฒด์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋Ÿ‰์˜ ์ฟผ๋ฆฌ ์ž‘์—…์‹œ์— ๋ฐœ์ƒํ•  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  • CRUD : Create, Read, Update, Delete๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ธฐ๋ณธ ์ž‘์—…์ด๋ฉฐ, ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋กœ์ง์„ ๋‹จ์ˆœํ•˜๊ณ  ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ : DB์™€์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ์ผ๊ด€์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.
  • ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ : DB์™€ ํ†ต์‹ ํ•˜๋ฉฐ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ : DB Connection ์˜ค๋ฅ˜, ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ์˜ค๋ฅ˜๋“ฑ์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ DB Connection ๋˜๋Š” ๋ฐ์ดํ„ฐ ์—‘์„ธ์Šค ๋กœ์ง์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

5. Entity (JPA)

@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์„ ์‚ฌ์šฉํ•ด ์ปฌ๋Ÿผ๊ณผ ๋งค์นญํ•œ๋‹ค.

Model์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ 

View์™€ ๋น„์ฆˆ๋‹ˆ์Šค, DB ๋กœ์ง์„ ๋‚˜๋ˆ„๊ณ  ์ฃผ์–ด์ง„ ๊ฐ์ฒด์˜ ์—ญํ• ์— ์ผ๊ด€์„ฑ์„ ์œ ์ง€์‹œ์ผœ ์œ ์ง€๋ณด์ˆ˜, ์žฌ์‚ฌ์šฉ์„ฑ,

๋‹จ์œ„ ๋˜๋Š” ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์— ์ด์ ์„ ์–ป๊ธฐ ์œ„ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

profile
๋„๋ฆฌ๋„๋ฆฌ๋‹ด๋‹ด ๐Ÿค๐Ÿฅ๐Ÿค๐Ÿฅ๐Ÿฃ๐Ÿฃ

0๊ฐœ์˜ ๋Œ“๊ธ€