AOP와 트랜잭션 처리 실습 (데이터베이스로 테스트)

Back-End/Spring 2019. 6. 24. 23:17
728x90
반응형

AOP 실습예제


사용자가 메시지를 남기면 포인트 10 증가

메시지를 읽으면 포인트 5 증가


  

  com.examplt.spring02.aop

  ㄴMessageAdvice.java


  com.example.spring02.controller.message

  ㄴMessageController.java


  com.example.spring02.model.message.dto

  ㄴUserDTO.java

  ㄴMessageDTO.java


  com.example.spring02.model.message.dao

  ㄴMessageDAO.java

  ㄴMessageDAOImpl.java

  ㄴPointDAO.java

  ㄴPointDAOImpl.java


  com.example.spring02.service.message

  ㄴMessageService.java

  ㄴMessageServiceImpl.java






-AOP 실습용 테이블을 생성-


(데이터베이스를 이용한 실습)


AOP와 트랜잭션 처리를 활용한 실습


글쓰기를 하면 포인트 10을 부여

글읽기를 하면 열람시간을 수정하고 포인트 5를 부여


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
drop table tbl_user cascade constraints //혹시 중복된 테이블이 있을수도 있기 때문에 테이블 삭제
 
 
create table tbl_user (            //tbl_user 테이블을 생성
userid varchar2(50not null,    //id
upw varchar2(50not null,        //비밀번호
uname varchar2(100not null,    //이름
upoint number default 0,        //포인트, 기본값은 0으로 한다
primary key(userid)                //기본키는 id로 한다.
);
 
 
 
create table tbl_message(        //tbl_message (메시지를 저장) 테이블을 생성
mid number not null,            //메시지의 id
targerid varchar2(50not null,    //메시지를 받을 사람의 id
sender varchar2(50not null,    //메시지를 보낸 사람의 id
message varchar2(4000not null,//메시지의 내용
opendate date,                    //메시지를 열어본 시간
senddate date default sysdate,    //메시지를 보낸 시간 (보낼 당시 현재 시간)
primary key(mid)                //기본키를 메시지의 id로 설정
);
 
 
 
--시퀀스 생성--
create sequence message_seq        //message_seq 시퀀스를 생성 (메시지가 하나 생길때마다 숫자가 1씩증가, 초기값은 1로 설정)
start with 1
increment by 1;
 
 
--제약 조건 설정--
alter table tbl_message add constraint fk_usertarger //tbl_message테이블에 제약조건을 설정
foreign key (targetid) references tbl_user(userid);     //무결성이 깨질수 있기 때문에 targetid값에 userid값만 들어갈 수 있도록 설정 (아무id나 들어가면 안되기 때문에)
 
alter table tbl_message add constraint fk_usersender //tbl_message테이블에 제약조건을 설정
foreign key (sender) references tbl_user(userid);     //위쪽과 마찬가지로 sender값에 userid값만 들어갈 수 있도록 설정함
 
 
--사용자 추가--
insert into tbl_user (userid, upw, uname) values ('user00','user00','kim');
insert into tbl_user (userid, upw, uname) values ('user01','user01','park');
insert into tbl_user (userid, upw, uname) values ('user02','user02','hong');
insert into tbl_user(userid, upw, uname) values ('user03','user03','choi');
insert into tbl_user(userid, upw, uname) values ('user04','user04','lee');
 
 
select * from tbl_user;
 
 
--user02가 user00에게 메시지를 전송
insert into tbl_message (mid, targetid, sender, message)
values (message_seq.nextval, 'user00','user02','안녕...');
 
 
--user02에게 포인트 10 추가
update tbl_user set upoint=upoint+10 where userid='user02';
select * from tbl_user;
 
 
--user00의 메시지박스 조회
select * from tbl_message where targetid='user00';
update tbl_message set opendate=sysdate where mid=2;  //메시지를 읽으면 읽은 시간을 현재시간으로 바꾼다.
select * from tbl_message;
 
update tbl_user set upoint=upoint+5 where userid='user00'//userid가 user00과 같으면 포인트를 5포인트 증가시킨다.
select * from tbl_user;
 
delete from tbl_message;
update tbl_user set upoint=0//tbl_message테이블이 삭제될때 tbl_user테이블의 포인트를 0으로 한다.
 
 
--메시지 일련번호를 관리할 시퀀스 객체
 
create sequence message_seq
start with 1 --1부터 시작
increment by 1--1씩 증가
 
 
 
--시퀀스.nextval => 다음번호
 
select message_seq.nextval from dual;
 
//이 구문을 실행시키게 되면 마치 은행에서 번호표를 뽑듯이 번호가 1씩 계속 증가가된다.
//또한 이미 내가 뽑은 번호의 앞번호로 돌아갈수는 없고, 내가 뽑은 번호가 기억이 된다.
 
 
 
 
====================포인트를 얻게하는 테스트========================================================================

--테스트를 위한 사용자 계정을 추가한다.
insert into tbl_user (userid, upw, uname) values ('user00','user00','kim'); //아이디, 비밀번호, 이름
insert into tbl_user (userid, upw, uname) values ('user01','user01','park');
insert into tbl_user (userid, upw, uname) values ('user02','user02','hong');
insert into tbl_user (userid, upw, uname) values ('user03','user03','choi');
insert into tbl_user (userid, upw, uname) values ('user04','user04','lee');
 
select * from tbl_user;
 
 
--메시지 보내기 테스트--
 
--user02가 user00에게 메시지 전송
insert into tbl_message (mid, targetid, sender, message) values
(message_seq.nextval,'user00','user02','안녕'); //해석 : user02가 user00에게 '안녕'이라는 메시지를 보낸다.
 
select * from tbl_message;
 
--user02에게 포인트 10 추가
update tbl_user set upoint=upoint+10 where userid='user02';
select * from tbl_user;
 
 
--user00이 메시지 목록
select * from tbl_message where targetid='user00';
 
--메시지를 읽으면 열람시간을 저장
update tbl_message set opendate=sysdate where mid=18//18번 메시지를 읽으면 읽은 열람시간을 현재시간으로 바꾸기
select * from tbl_message;
 
--메시지를 읽으면 읽은 사람한테 5포인트를 추가
update tbl_user set upoint=upoint+5 where userid='user00';
select * from tbl_user;
 
 

 
cs


테스트 종료 후 테이블 삭제 및 commit 실시


1
2
3
delete from tbl_message; //메시지 테이블은 지금 필요 없기 때문에 일단 삭제
 
commit; //지금까지 한 작업들을 반영하기 위해 commit를 
cs




728x90
반응형
: