JiwonDev

#18 JSP Model1, Model2 (MVC)

by JiwonDev

# JavaBean์ด๋ž€

์›น์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ Java Bean๊ทœ์น™์— ๋งž์ถฐ ์„ค๊ณ„ํ•œ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Java Bean์„ ๊ตฌํ˜„ํ•˜๋ฉด JSP์—์„œ ํƒœ๊ทธ ๋ชจ์–‘ <jsp:userBean .../> ์œผ๋กœ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ณ , ๋„คํŠธ์›Œํฌ ์ „์†ก์— ํ•„์š”ํ•œ ํด๋ž˜์Šค ์ง๋ ฌํ™”๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜ ์ž๋ฐ”์ฝ”๋“œ๋ฅผ JavaBean์œผ๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์‰ฝ๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

Java Bean ํด๋ž˜์Šค ๊ทœ์น™์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ํŒจํ‚ค์ง€ - ์ž๋ฐ”๋นˆ์€ ๊ธฐ๋ณธ(default)ํŒจํ‚ค์ง€ ์ด์™ธ์˜ ํŠน์ • ํŒจํ‚ค์ง€์— ์†ํ•ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ์ ‘๊ทผ์ œ์–ด์ž๋Š” private๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฉค๋ฒ„๋ณ€์ˆ˜์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ getter ์™€ setter ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  • getter ์™€ setter๋Š” ์ ‘๊ทผ์ž๊ฐ€ public์œผ๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ์ง๋ ฌํ™” ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. (์„ ํƒ์‚ฌํ•ญ)
package com.dololak;                                                                             
//default ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹Œ com.dololak.servlet ํŒจํ‚ค์ง€์— ์†ํ•จ
 
 
public class User { 
     
     //๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ ์ œ์–ด์ž๋Š” private 
     private String name; 
     private Long age; 
     private String address; 
     
     //๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•จ 
     public User() {} 
     
     /* 
      * ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ getter setter๊ฐ€ ์กด์žฌํ•˜๋ฉฐ,
      * get ๋˜๋Š” set ์ดํ›„์— ์ฒซ๊ธ€์ž๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ช…์˜ ๋Œ€๋ฌธ์ž๋กœ
      * ๊ทธ ์ดํ›„๋Š” ์†Œ๋ฌธ์ž๋กœ ํ•จ
      */
     public String getName() { return name; } 
     public void setName(String name) { this.name = name; } 
     
     public Long getAge() { return age; } 
     public void setAge(Long age) { this.age = age; } 
     
     public String getAddress() { return address; } 
     public void setAddress(String address) { this.address = address; } 
     
}

 

 

# ๊ธฐ์กด์˜ Model1

๊ธฐ์กด์˜ ์›น ๊ฐœ๋ฐœ์—์„œ๋Š” ๋ทฐ์™€ ๋กœ์ง์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•˜์ง€์•Š๊ณ , JSP ํŽ˜์ด์ง€ ํ•˜๋‚˜์—์„œ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ–ˆ์—ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์— ํŽ˜์ด์ง€ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด [JSP ํŽ˜์ด์ง€]์•ˆ์— ์‚ฌ์šฉ๋˜๋Š” JavaBean์ด๋‚˜ ๋”ฐ๋กœ ์ž‘์„ฑํ•œ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ WAS์—์„œ ์„œ๋ธ”๋ฆฟ์„ ์ƒ์„ฑ, ๋กœ์ง ์ฒ˜๋ฆฌ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•œ๋‹ค.

 

์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ๊ฐœ๋ฐœ์ด ์‰ฝ์ง€๋งŒ, ์ถœ๋ ฅ์„ ์œ„ํ•œ View ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฝ”๋“œ๊ฐ€ ํ•จ๊ป˜ ์„ž์ธ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ํ•ด๋‹น JSP ์ฝ”๋“œ๋Š” ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜‘์—…ํ•˜๊ธฐ ์–ด๋ ค์› ๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋ณต์žกํ•ด์กŒ๋‹ค.


# Model2

๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๋ฐฉ๋ฒ•์ด MVC (Model-View-Controller) ๊ฐœ๋…์„ ๋„์ž…ํ•œ Model2์ด๋‹ค.

๋‹จ ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ž๋ฐ” ์ฝ”๋“œ๋“ค๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , View ์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋งŒ JSP์— ๋‚จ๊ธด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด [ ์„œ๋ธ”๋ฆฟ(Controller) ] - [ ์ž๋ฐ” ํด๋ž˜์Šค, JavaBean(Model) ] - [ JSP ํŽ˜์ด์ง€(View) ]๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•.

 

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ถœ๋ ฅ ์ฝ”๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๊ณ , ํ˜‘์—…์— ์ข‹์ง€๋งŒ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  Model๊ณผ View๋ฅผ ๋‚˜๋ˆ„๊ธฐ์œ„ํ•ด์„œ Java์™€ ๊ฐ์ฒด์ง€ํ–ฅ์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ด ์„ค๊ณ„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

  • Model (์„œ๋น„์Šค ํด๋ž˜์Šค, ์ž๋ฐ” ๋นˆ)
    ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์ด ๋ชจ๋ธ์— ์†ํ•œ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ View ์ฝ”๋“œ๋ฅผ ์ œ์™ธํ•œ ๋กœ์ง๋“ค์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ ๊ฐ’์„ ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด request ๊ฐ์ฒด๋‚˜ session ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • View ( JSP ํŽ˜์ด์ง€ )
    ์ถœ๋ ฅ์— ํ•ด๋‹นํ•˜๋Š” ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ JSP๋กœ ์ž‘์„ฑํ•œ๋‹ค. ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , request ๋‚˜ session ๊ฐ์ฒด๋“ฑ์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ HTML ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
  • Controller ( ์„œ๋ธ”๋ฆฟ )
    ๋ธŒ๋ผ์šฐ์ € ์š”์ฒญ์„ ๋ถ„์„ํ•˜์—ฌ ์ ์ ˆํ•˜๊ฒŒ Model, View๋ฅผ ์‹คํ–‰์‹œ์ผœ Model๊ณผ View ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ์„œ๋ธ”๋ฆฟ์—์„œ ์–ด๋–ค ์š”์ฒญ์ธ์ง€ ๋ถ„์„ํ•˜์—ฌ ํ•„์š”ํ•œ Model์„ ํ˜ธ์ถœํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค. Model์—์„œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์œผ๋ฉด request๋‚˜ session ๊ฐ์ฒด๋“ฑ์— ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ํ›„ ๊ทธ๋Œ€๋กœ View, ์ฆ‰ JSP ์— ๋„˜๊ธด๋‹ค. (foward๋‚˜ redirect) ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ JSP์—์„œ  ํด๋ผ์ด์–ธํŠธ์— ์ถœ๋ ฅํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค. 

foward, redirect ๊ฐ€ ๋ญ์ฃ ?

๋”๋ณด๊ธฐ

WAS๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(URL)์„ ์ฒ˜๋ฆฌํ•˜๋‹ค๊ฐ€, ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ์ด๋‚˜ JSP๋กœ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

Redirect๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋‹ค๋ฅธ URL์ฃผ์†Œ๋ฅผ ๋„˜๊ฒจ์ฃผ์–ด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๋„๋ก ๋„์™€์ค€๋‹ค. ์ฆ‰ request, response ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ํ•œ๋ฒˆ ๋” ์‹คํ–‰ํ•œ๋‹ค. ์‹คํ–‰ํ•œ ๋’ค์—๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ์ ธ์žˆ๋‹ค.

 

Foward๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ์—๊ฒŒ ์œ„์ž„ํ•œ๋‹ค. ์„œ๋ฒ„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ์ด ์ผ์„ ์ฒ˜๋ฆฌํ–ˆ์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ๋Š” ๋™์ผํ•œ URL์—์„œ ์‹คํ–‰๋˜์—ˆ์œผ๋ฏ€๋กœ ํ•œ ๊ณณ์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๊ฒจ์ง„๋‹ค. request, response๋Š” ๊ฐ์ฒด๋กœ ์ „๋‹ฌ๋˜๊ธฐ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

'๐ŸŒฑBackend > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

#20 JDBC ํŠธ๋žœ์žญ์…˜ (Spring -@Transaction)  (0) 2021.07.21
#19 JDBC  (0) 2021.07.21
#17 Servlet Filter  (0) 2021.07.18
#16 Servlet ์ดํ•ด  (1) 2021.07.18
#15 JSP ์ฟ ํ‚ค์™€ ์„ธ์…˜  (0) 2021.07.16

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ