오늘은 친구가 작게 운영하는 게임의 유저 데이터 베이스를 가지고 재밌는 로그를 만들어보았다.
친구가 원했던 회원들의 ip가 변경될 때의 로그를 어떻게 남기면 좋을까?에 대한 질문에
프로그램 자체를 바꾸는 게 좋지 않을까라고 말했지만 프로그램을 자기가 만든 게 아니라서 건들기 힘들다는 말을 듣고 어쩔 수 없이
트리거를 이용해 유저들의 ip가 변경될 때마다 로그를 찍도록 해보자고 했다.
usertable
Login | IPAddress | lastLogin | ... user1 | 10.10.10.10 | 2021-03-20 10:00:00 | ...
usertable의 IPAddress 열은 그냥 로그인할 때마다 update 되는 형식으로 돼있어서 이전의 어떤 ip에서 접속했는지 볼 수 없었다. 즉 가장 최근의 접속했던 ip만 데이터베이스에 저장되어 있기 때문에 이에 불편함을 느꼈다.
그럼 어떻게 지금부터라도 ip 로그를 수집할 수 있을까??
트리거를 이용해 usertable의 IPAddress 열의 데이터가 업데이트될 때마다 내가 만든 새로운 테이블이 그 정보들이 저장되게 하는 것이다.
- 트리거로 저장되는 데이터를 담을 테이블을 만들자
테이블 이름은 userip
열의구성은 리스트number ,접속자id ,접속시간 ,접속ipCreate table userip( uipl int not null PRIMARY KEY, --리스트넘버 user_id nvarchar(50) not null FOREIGN KEY REFERENCES usertable(Login), updateday datetime not null, --접속시간 ip nvarchar(15) not null, --접속 ip )
2.usertable에서의 특정행인 IPAddress이 update 될 때 작동하는 trigger를 작성하자.
CREATE TRIGGER USER_UPDATE_TR ON usertable for update as begin if update(IPAddress) --특정컬럼update begin declare @login nvarchar(40) --임시변수 declare @ip nvarchar(15) select @login = Login,@ip=IPAddress from INSERTED INSERT INTO userip(login,updateday,ip,uipl) values(@login,getdate(),ip,next val for seq_userip) --시퀸스사용 end end return
3.결과