Oracle 원격지와 연동 방법 - 1

박지우·2023년 3월 10일
0
post-thumbnail

원격지 연동??

기본적으로 흔히 개발을 하면서 데이터베이스를 사용할 때 로컬 환경에 있는 데이터베이스를 사용하게 된다. 하지만 생각해보면 실제 서비스가 그런 식으로 작동할리는 없다. 서버실이 따로 존재할 것은 확실하고 클라우드와 같은 기술도 많이 사용되니 말이다.

그렇다면 이러한 점을 고려했을 때 원격지에 있는 데이터베이스는 어떻게 연동해야 할까??

Oracle 19c docs

31.2 Database Links
The central concept in distributed database systems is a database link. A database link is a connection between two physical database servers that allows a client to access them as one logical database.

공식문서에서 말하길 분산 시스템 상에서 가장 핵심적인 부분은 Database Link라고 소개하고 있다. 해당 글에서도 이와 관련하여 설명을 할려고 한다.

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/distributed-database-concepts.html#GUID-93B235DD-BF66-444D-9F0F-9D4B2F590C41

What Are Database Links?
A database link is a pointer that defines a one-way communication path from an Oracle Database server to another database server.

역시나 이번에도 공식문서를 확인해보자! 간단하게 생각하면 one-way communication path, 즉 단방향으로 형성되는 다른 서버로의 포인터라고 볼 수 있다.

예를 들어 DB A -> DB B 로 생성한 Link가 있다면 DB B -> DB A 방향으로는 통신할 수 없다는 뜻이다. (B에서 추가적으로 Link를 생성해야 함)

이러한 Link의 작동 방식을 이해할려면 먼저 이해해야 하는 것은 Global database name 이 무엇인지 아는 것이다.

기본적으로 Oracle 에서 Global database name은 DB_DOMAINDB_DOMAIN 초기화 매개변수로 형성된다고 생각할 수 있다.

위 사진에서 sales DB 를 생각해보자. 우측 트리를 확인해보면 UK, US 두 곳에 존재하는 것을 확인할 수 있는데 앞서 설명한 방식의 결합으로 이를 구분할 수 있는 것이다.

  • sales.us.americas.example_auto.com
  • sales.uk.americas.example_auto.com

자 그렇다면 우리는 이렇게 생각할 수 있다.
아니 그러면 원격지 고유한 주소도 저렇게 알 수 있는데 그냥 단순히 저 주소로 접속하면 되는 것 아닌가??

맞다. 가능하다. 네트워크 도메인 상에서 고유한 주소로 존재하기 때문에 이를 활용하여 접속할 수 있다!

SELECT * FROM hr.employees@db1.example.com;

그러나 저런 주소를 매번 작성할 수도 없는 노릇이고 저러한 데이터를 어디에 저장하는 것도 참 애매하다.

Database Link의 등장!

앞서 말한 주소 데이터를 어딘가에 저장하면 되는 것 아닐까?? 아니나 다를까 Oracle은 해당 기능을 제공한다. 바로 Database Link로!

CREATE PUBLIC DATABASE LINK db1.example.com USING 'sales1';

보편적으로 Link 이름은 원격지의 DB의 이름과 동일하게 설정한다. 위의 대표적인 예시도 실제 DB의 이름과 동일하게 설정하는 것을 볼 수 있다.
-> 물론 네트워크 도메인명 보다는 보다 간편하게 작성할 수 있을 것이다. DB_NAME 으로만 구성한다던지!

이 때 USING 키워드는 SERVICE_NAME에 해당된다. 물론 이러한 이름은 tnsnames.ora 파일에 명시된 Alias 를 사용할 수 도 있을 것이다.

DB_NAME, SID, SERVICE_NAME... 참 헷갈리는 매개변수가 많다. 만약 해당 개념이 혼동된다면 따로 찾아보자!

어쨌든 우리는 위와 같은 방식으로 Link를 생성할 수 있다. public, privae, global 과 같은 키워드가 존재하는데 간략하게 설명하면 아래와 같다.

  • Public : Link에 모든 사용자가 접근 가능
  • Private : Link를 소유한 유저만 접근 가능
  • Global : 네트워크가 Directory service를 사용하고 DB 정보가 등록되었을 시, 이를 Link 정보로 사용.

더 깊게 설명하게 되면 끝도 없다. 혹시 궁금하신 분이 있다면 아래 공식문서를 참고하면 좋을 것 같다.

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/distributed-database-concepts.html#GUID-E651A7AD-ED58-4B2F-984C-F9F7C3CE32C9

Oracle에서 스키마가 User로 관리되는 만큼 결국 원격지와 연결되는 것도 해당 DB의 User를 통하게 될 것이다. 이를 알아보자!

  • Connected User : 원격지 User 정보 미포함, 로컬에서 접속하는 User가 곧 원격지의 동일한 User로 간주됨
    CREATE PUBLIC DATABASE LINK hq USING 'hq';
    -> 해당 사용자에 대한

  • Current User : Global User를 사용, 현재 로컬의 User와 무관
    CREATE PUBLIC DATABASE LINK hq CONNECT TO CURRENT_USER using 'hq';

  • Fixed User : 원격 스키마의 User 정보를 포함하여 생성, 링크로 접속시 해당 User를 사용하게 됨
    CREATE PUBLIC DATABASE LINK hq CONNECT TO jane IDENTIFIED BY password USING 'hq';

개인적으로 가장 많이 사용하게 되는 형식은 Fixed User인 것 같다.

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/distributed-database-concepts.html#GUID-A1B3AEB2-5625-4ABF-9378-E941DC0DB2A0

앞서 말한 내용들이 헷갈린다면 대표적인 예시가 잘 설명되어 있으니 위 공식 문서를 참고하자!

장점

  • 일단 첫 번째로 너무나 당연하게도 우리는 원격지에 접속을 할 수 있다.
  • 앞서 Public, Private같은 Type이나 연결하는 User 방식을 통해 데이터에 접근하는 방식을 제한하여 보안성을 높일 수 있다!

단점

  • 어쨌든 외부 네트워크를 사용한다. 부하가 추가로 발생할 수 밖에 없다...
  • 네트워크가 불안정하다면?? 중간에 쿼리가 실패할 수도 있다!

마무리

사실 간략하게 DB Link에 대해서 소개했지만 파면 팔수록 알아야 하는 사항이 너무 많아 게시글에 모두 담진 못했다. 또한 내용 자체도 간략하게 말했으니 말이다.

가장 중요한 점은 위 방식은 같은 Oracle 일 때 해당되는 방식이다. MySQL, MariaDB 등 이기종간 접속은 추가적인 방법을 요구한다. 이는 다음 게시글로 작성할려고 한다. 뿐만 아니라 실제로 어떻게 쿼리를 작성하면 연동이 성공하는지 실습을 게시할려고 한다.

profile
다양한 학습을 진행합니다!

0개의 댓글