๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JAVA/Spring

[JAVA] Spring ์œผ๋กœ ์ต๋ช… ํˆฌํ‘œ(์„ ๊ฑฐ) ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ

by soy๋ฏธ๋‹ˆ 2021. 9. 17.

 

1. DB ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ฐ ์ฟผ๋ฆฌ ์ž‘์„ฑ

 

  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE DATABASE db01; # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
use DB01;

CREATE TABLE citizen(
    cid varchar(20) NOT NULL PRIMARY KEY, # cid ์ปฌ๋Ÿผ ์ƒ์„ฑ
    cname varchar(20), # cname ์ปฌ๋Ÿผ ์ƒ์„ฑ
    cvote tinyint(1) DEFAULT 0  # cvote ์ปฌ๋Ÿผ ์ƒ์„ฑ
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;


CREATE TABLE president(
    pid int AUTO_INCREMENT PRIMARY KEY NOT NULL, # pid ์ปฌ๋Ÿผ ์ƒ์„ฑ
    pname varchar(20), # pname ์ปฌ๋Ÿผ ์ƒ์„ฑ
    pvote int DEFAULT 0 # pvote ์ปฌ๋Ÿผ ์ƒ์„ฑ
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;

 

 

  • citizen ํ…Œ์ด๋ธ” 
    • cid : ํˆฌํ‘œ ์ฐธ์—ฌ์ž์˜ id
    • cname : ํˆฌํ‘œ ์ฐธ์—ฌ์ž์˜ name
    • cvote : ํˆฌํ‘œ ์ฐธ์—ฌ์ž์˜ ํˆฌํ‘œ ์œ ๋ฌด (์ค‘๋ณต ํˆฌํ‘œ ๋ฐฉ์ง€, default๋ฅผ 0์œผ๋กœ ํ•˜๊ณ  ํˆฌํ‘œ๋ฅผ ํ•˜๋ฉด 1๋กœ ์—…๋ฐ์ดํŠธ)

CitizenDAO ์˜ check() ๋ฉ”์„œ๋“œ : ํˆฌํ‘œ ์ฐธ์—ฌ์ž๊ฐ€ ํˆฌํ‘œ๋ฅผ ์ฒ˜์Œํ•˜๋Š”์ง€, ์ค‘๋ณต๋˜์—ˆ๋Š”์ง€, ์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ–ˆ๋Š”์ง€ ์ฒดํฌ

 

CitizenDAO ์˜ update() ๋ฉ”์„œ๋“œ : ์‚ฌ์šฉ์ž๊ฐ€ ํ›„๋ณด์ž๋ฅผ ์„ ํƒํ•œ ํ›„ ํˆฌํ‘œํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด citizen ํ…Œ์ด๋ธ”์˜ cvote(ํˆฌํ‘œ ์œ ๋ฌด)์„ 1๋กœ ์—…๋ฐ์ดํŠธ

 

 

  • president ํ…Œ์ด๋ธ”
    • pid : ์„ ๊ฑฐ ํ›„๋ณด์ž์˜ index (์ž๋™ ์ธ๋ฑ์Šค ์„ค์ •, int ํƒ€์ž…)
    • pname : ์„ ๊ฑฐ ํ›„๋ณด์ž์˜ name
    • pvote : ์„ ๊ฑฐ ํ›„๋ณด์ž์˜ ๋“ํ‘œ ์ˆ˜ (์ฐธ์—ฌ์ž๊ฐ€ radio ๋ฒ„ํŠผ์„ ํ†ตํ•ด ํˆฌํ‘œ๋ฅผ ํ•˜๋ฉด radio ๋ฒ„ํŠผ์˜ value ๊ฐ’์œผ๋กœ president ํ…Œ์ด๋ธ”์˜ pid ์— ์ ‘๊ทผํ•˜์—ฌ pvote = pvote+1 ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.)

 

  • DB์— citizen ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
# ํˆฌํ‘œ ์ฐธ๊ฐ€์ž ์ž…๋ ฅ
INSERT INTO citizen(cid, cname) VALUES('abc1', '๋ฐ•์ •๋ฏผ');
INSERT INTO citizen(cid, cname) VALUES('abc2', '๊น€๊น€๊น€');
INSERT INTO citizen(cid, cname) VALUES('abc3', '๋ฐ•๋ฐ•๋ฐ•');
INSERT INTO citizen(cid, cname) VALUES('abc4', '์ด์ด์ด');
INSERT INTO citizen(cid, cname) VALUES('abc5', '์ตœ์ตœ์ตœ');

 

  • DB์— president ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
# ์„ ๊ฑฐ ํ›„๋ณด์ž ์ž…๋ ฅ
INSERT INTO president(pname) VALUES('๊ฐ€');
INSERT INTO president(pname) VALUES('๋‚˜');
INSERT INTO president(pname) VALUES('๋‹ค');
INSERT INTO president(pname) VALUES('๊ธฐ๊ถŒ');

 

2. ํ”„๋กœ๊ทธ๋žจ ์•„ํ‚คํ…์ฒ˜ (ํ”„๋กœ์ ํŠธ) ์„ค๊ณ„

  • index.jsp ๊ฐ€ main ํŽ˜์ด์ง€
  • index.jsp ์—์„œ ํˆฌํ‘œ ์ฐธ์—ฌ์ž์˜ cid์™€ cname ์„ ํผ์œผ๋กœ ๋ฐ›๊ณ  ๊ทธ ์ •๋ณด๋ฅผ /vote ๋กœ ๋„˜๊ฒจ์ค€๋‹ค.
  • /vote์—์„œ CitizenDAO์˜ ๋ฉ”์„œ๋“œ check(String cid, String cname) ์™€ update(String cid)๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ db์™€ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • chek()์™€ update() ์— citizen ํ…Œ์ด๋ธ”์˜ cid์™€ cvote๋ฅผ selectํ•˜๊ณ  cvote๋ฅผ 0 ์—์„œ 1๋กœ updateํ•˜๊ธฐ
  • ์„ ๊ฑฐ ํ›„๋ณด์ž ์ค‘ ํ•œ ๋ช…์„ ์„ ํƒํ•˜๊ณ  ํˆฌํ‘œํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด /result ๋กœ ์ด๋™
  • /result ๋กœ ์ด๋™ํ•  ๋•Œ ํˆฌํ‘œ ์ฐธ์—ฌ์ž๊ฐ€ ์„ ํƒํ•œ ์„ ๊ฑฐ ํ›„๋ณด์ž์˜ pid๋ฅผ ๊ฐ™์ด ๋„˜๊ธด๋‹ค.
  • /result ์—์„œ PresidentDAO์˜ ๋ฉ”์„œ๋“œ update(int pid)๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ pid ์ •๋ณด๋กœ president ํ…Œ์ด๋ธ”์˜ pvote์— ์ ‘๊ทผํ•ด์„œ pvote๋ฅผ pvote=pvote+1๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

์„ ๊ฑฐ ํ›„๋ณด์ž ์ค‘ ํ•œ ๋ช…์„ ์„ ํƒํ•˜๋Š” ํผ์—์„œ value ๊ฐ’์„ /result ๋กœ ์ „๋‹ฌ
PresidentDAO ์˜ update() ๋ฉ”์„œ๋“œ : ์‚ฌ์šฉ์ž๊ฐ€ ํ›„๋ณด์ž๋ฅผ ์„ ํƒํ•œ ํ›„ ํˆฌํ‘œํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด president ํ…Œ์ด๋ธ”์˜ pvote(๋“ํ‘œ ์ˆ˜)๋ฅผ pvote+1 ๋กœ ์—…๋ฐ์ดํŠธ

 

  • ํ…Œ์ด๋ธ”์„ citizen๊ณผ president๋กœ ๋‚˜๋ˆˆ ์ด์œ ๋Š” ์ต๋ช… ํˆฌํ‘œ๋กœ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— citizen์˜ ์ •๋ณด์™€ president์˜ ์ •๋ณด๊ฐ€ ๋งค์นญ์ด ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‘ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์„ฑํ–ˆ๋‹ค. 

 

 

3. Spring MVC ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • MVC : Model - View - Controller ๊ตฌ์กฐ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

  • CitizenDAO.java : citizen ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜์—ฌ select, update ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
  • Citizen.java : citizen ์˜ cid, cname ์„ ์œ„ํ•œ getter, setter (JavaBean)
  • PresidentDAO.java : president ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜์—ฌ update ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
  • President.java : president ์˜ pid ๋ฅผ ์œ„ํ•œ getter, setter (JavaBean)
  • Result.java : index.jsp ์—์„œ VoteView.jsp ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ Controller
  • Vote.java : VoteView.jsp ์—์„œ ResultView.jsp ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ Controller
  • VoteView.jsp : ํˆฌํ‘œ ์ฐธ์—ฌ์ž๊ฐ€ id์™€ ์ด๋ฆ„์„ ์ž…๋ ฅํ•œ ํ›„์— ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€ (ํˆฌํ‘œ ์ฐฝ, ์ด๋ฏธ ํˆฌํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค ์ฐฝ, ์ž˜๋ชป๋œ ์ •๋ณด์ž…๋‹ˆ๋‹ค ์ฐฝ)
  • ResultView.jsp : ์ฒ˜์Œ ํˆฌํ‘œํ•˜๋Š” ํˆฌํ‘œ ์ฐธ์—ฌ์ž๊ฐ€ ์„ ๊ฑฐ ํ›„๋ณด์ž ์ค‘ ํ•œ ๋ช…์„ ์„ ํƒํ•ด์„œ ํˆฌํ‘œํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„์— ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€ (ํˆฌํ‘œ ์™„๋ฃŒํ•˜์˜€์Šต๋‹ˆ๋‹ค ์ฐฝ)

 

  • view ํŒŒ์ผ์€ webapp/WEB-INF/Views ์— ๋„ฃ๋„๋ก dispatcher-servlet.xml ์— ์„ค์ •

 

 

4. ๊ฒฐ๊ณผ ํ™•์ธ

 

 

  • DB ์—ฐ๋™ ํ™•์ธ

 

 

 

 

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

๋Œ“๊ธ€