2021. 12. 1. 17:23ใSpring
1. Transaction
https://hyejin.tistory.com/119?category=975063
ํธ๋์ญ์ ์ด๋ ๋ ผ๋ฆฌ์ ์์ ๋จ์๋ก,
ํธ๋์ญ์ ์ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ์์ ์ค ์ด๋ค ํ ๋ถ๋ถ์ ์์ ์ด ์๋ฃ๋์๋ค๊ณ ํ๋๋ผ๋,
๋ค๋ฅธ ๋ถ๋ถ์ ์์ ์ด ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ ์ ์ฒด ํธ๋์ญ์ ์ ์ทจ์๋์ด์ผ ํ๋ค.
commit : ํธ๋์ญ์ ์ ์๋ฃํ๋ ๊ฒ
rollback : ํธ๋์ญ์ ์ ์ทจ์ํ๋ ๊ฒ
2. Transaction์ ์ด์ฉํ ๊ฐ๋จํ ํฐ์ผ ๊ตฌ๋งค ์๋น์ค
์ฌ์ฉ์๊ฐ ํฐ์ผ ๊ตฌ๋งค๋ฅผ ํ๋ฉด ํฐ์ผ ํ๋งค์๋ ํฐ์ผ์ ๊ทธ์ ๋ง๊ฒ ๋ฐํํด์ค์ผํ๋ค.
๋ฐ๋ผ์ ํฐ์ผ ๊ตฌ๋งค์ ์์ ์ค ํ ๋ถ๋ถ๋ง ์๋ฃ๋์๋ค๊ณ ํด๋ ๋ค๋ฅธ ์์ ์ด ์๋ฃ๋์ง ์์ผ๋ฉด ํธ๋์ญ์ ์ ์ทจ์ํด์ผํ๋ค.
1๏ธโฃ Table ์์ฑํ๊ธฐ
SQL> create table test_card
(
user_id varchar(20) not null,
buy_amount number default 1
);
create table test_ticket
( user_id varchar(20) not null,
ticket_count number not null,
constraint ticket_buy_limit
check (ticket_count between 1 and 5)
);
์ด๋ ํฐ์ผ ์ ๊ณต์ฌ์์๋ ํ ์ ์ id๋น ํฐ์ผ์ 1๊ฐ์์ 5๊ฐ๊น์ง๋ง ๊ตฌ๋งค ๊ฐ๋ฅํ๋ค๊ณ ์ ์ฝ์ฌํญ์ ๊ฑธ์๋ค.
๋ฐ๋ผ์ ํ ์ ์ ๊ฐ 6๊ฐ ์ด์์ ๊ตฌ๋งคํ๋ค ํ๋ฉด test_card ํ ์ด๋ธ, test_ticket ํ ์ด๋ธ ๋ชจ๋ ํธ๋์ญ์ ์ ์ทจ์ํด์ผํ๋ค.
2๏ธโฃ Servlet-context.xml ์คํ๋ง ๋น ์ค์ ํ์ผ
โ TransactionTemplate
์คํ๋ง์์ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ํ๊ธฐ ์ํด์ ์ ๊ณตํ๋ค.
๋น์ผ๋ก ๋ฑ๋กํ๊ณ , TicketDAO ๊ตฌํ ํด๋์ค์์ TransactionTemplate setter ๋ฉ์๋์ ์๋์ฃผ์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐํ๊ฐ ์ป๊ฒ ํ๊ธฐ ์ํด TransactionCallbackWithoutResult() ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ํธ๋์ญ์ ์ฒ๋ฆฌํ๋ค.
3๏ธโฃ TicketVO, TicketService, TicketDAO ์ธํฐํ์ด์ค ๋ฐ ๊ตฌํ ํด๋์ค ์์ฑ
- TicketVO
- TicketService ์ธํฐํ์ด์ค
- TicketServiceImpl
- TicketDAO ์ธํฐํ์ด์ค
- TicketDAOImpl
4๏ธโฃ TicketController.java
buyPage.do๋ ํฐ์ผ ๊ตฌ๋งค๋ฅผ ํ ์ ์๋ ํ์ด์ง์ด๊ณ ,
buyTicket.do๋ ํฐ์ผ ๊ตฌ๋งค ํ์ด์ง ํผ์์ ๊ฐ ์ ๋ ฅ ํ ๊ตฌ๋งค ๋ฒํผ์ ๋๋ฅด๋ฉด ๋์ํ๋ ํธ๋ค๋ฌ์ด๋ค.
์ด๋ ํฐ์ผ ๊ฐ์๊ฐ 5๊ฐ๊ฐ ๋์ด๊ฐ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ฉด ticketSetvice์ buyTicket() ์์ ์ ์ํํ๊ณ ticket/buyDone.jsp ๋ทฐ ์ด๋ฆ์ ๋ฆฌํดํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ticket/buyFail.jsp ๋ทฐ ์ด๋ฆ์ ๋ฆฌํดํ๋ฉฐ ticketService์ buyTicket() ์์ ์ ์ํํ์ง ์์ ํธ๋์ญ์ ์์ ์ ์ทจ์ํ๋ค.
5๏ธโฃ buyPage.jsp, buyDone.jsp, buyFail.jsp
- buyPage.jsp
- buyDone.jsp
- buyFail.jsp
6๏ธโฃ ์คํ ๊ฒฐ๊ณผ