DB링크 쓰시나요~? (하나의 server내에 있는 서로 다른 db간 연동이 필요할 경우)

2012-12-12 12:18

위와 같은 상황이 어쩌다 보니... 자주 발생하네요 ㅠㅠ 전제는 jdbctemplate 이구요 저는 지금까지의 구현은 service layer에서 트랜잭션을 걸고 각기의 database source를 참조하는 DAO를 호출하는 형식으로 진행해왔습니다. 예를 위한 예를 들자면 로그인시에 LoginService에서 user라는 database를 참조하는 UserDAO 를 생성(스프링 사용중이라면 해당 bean이 DI되어있겠죠), 해당 쿼리를 수행하는 메소드를 호출한 후에 결과값이 무엇이 되었든 그 결과를 user_info_log 라는 database를 참조하는 UserInfoLogDAO 를 생성(역시 스프링이라면 주입되어있을거구요), 로그를 저장하는 쿼리를 수행하는 메소드를 호출 합니다. 전 예와 같이 진행해왔는데 서로 다른 database 참조를 진행해왔습니다. -_-;;;; 지금 있는 곳에서 DB링크를 사용을 원치 않아서 이렇게 진행해왔는데 오늘 조금 곤란해진 것이 서로 다른 DB간의 참조가 하나의 row마다 발생하는 query가 실행되어야 하는 요구사항을 받았거든요;;; 예를 들자면 ... 위의 예에서 user_info_log의 login_result 라는 로그인 결과를 저장하는 테이블이 있다면 이 테이블에서 user id를 저장하는게 아니라 다른 유니크값(user라는 database에 있는 table의 데이타가 되겠죠)을 저장해왔다면 그 유니크값을 user id로 변환하는 작업이 필요하겠죠. log를 보기 위함이다보니 엄청 많은 data들을 보여주어야할텐데 이게 좀 아니다 싶거든요;;

그래서 고민중인건... 디비구조를 다시 잡아서 애초에 다른 db의 테이블을 참조하는 일 자체를 없게끔 만들까 하는 것이 있고, 아예 데이터베이스명.스키마명.테이블명 이렇게 진행을 할까 하거든요...;; (예로 아래는 user_info_log를 참조하는 DAO에서 수행되는 쿼리입니다. SELECT user_id FROM login_result JOIN user.schema.user_tbl ON login_result.user_idx = user.schema.user_tbl ) (제목과는 달리 DB링크는 못쓰다보니 ㅠㅠ)

익숙하지 않은 부분이라 어떻게 할까 고민하다 다른 분들은 어떻게 작업하시나 싶어 질문을 드려요~

3개의 의견 from SLiPP

2012-12-12 13:11

음 저같은 경우는 DB Link의 사용은 최대한 지양하는 편인거 같네요.

DBMS간의 연계 및 이기종 DB의 연동을 처리하는 경우에는

각 DB를 연결하는 DataSource 정보를 xml에 설정한 후 DAO에서 각 DB에서 정보를 처리한 후 Service 레벨에서

merge 하는 방식을 활용합니다.

말씀하신대로, 각 row 단위의 행 변경이 일어나는 경우엔

실시간으로 조회가 일어나는 사항은 어쩔 수 없이 DB Link로 처리할 수 밖에 없을듯 하네요 ㅠㅠ

(동일한 DBMS에 존재하는 User의 경우엔 DBLink가 필요없이 select 권한을 요청한 뒤 synonym 처리를 해서

제가 가진 테이블인것 처럼 처리하곤 하지만... 원격지에 있는 DB의 경우에는 DB Link 밖엔 방법이 없을듯 하네요 ㅠㅠ)

2012-12-12 14:17

@keisus 아 동일한 서버구요 원격지는 아니에요 ㅎㅎ 현재 어플리케이션의 계정권한은 프로시저 실행 권한외엔 없습니다. 사용중인 DBMS 는 ms-sql 이구요. 말씀하신 synonym 에 대해서 조회해보니 ... 와 많네요 ㅎㅎㅎㅎㅎㅎㅎ http://msdn.microsoft.com/ko-kr/library/ms177544.aspx 위 자료를 보니 제가 고민중인 부분이 깔끔해지는 느낌이네요. 원격지는 아니더라도 같은 서버내의 같은 DBMS라면 (제 작업환경 기준 mssql, 참고문서도 mssql^^;;) 다른 DB의 table을 하나의 object로 보고 작업이 수행되네요. 어서 적용해야겠어요 ㅎㅎ 물론... 허락먼저 받구요 ㅎㅎ;;;

의견 추가하기

연관태그

← 목록으로