본문 바로가기

MS-SQL

MSSQL 연결된 서버에서 RPC란 무엇인가?

반응형

MSSQL에서 연결된 서버(Linked Server) 를 사용하다 보면 RPC 또는 RPC OUT 설정 때문에 프로시저 실행이 안 되는 경우를 자주 겪게 됩니다.
이 글에서는 RPC의 개념, 왜 필요한지, 어떻게 설정하는지, 그리고 실무에서 자주 겪는 오류까지 정리해보겠습니다.


1️⃣ RPC란?

RPC(Remote Procedure Call) 는 말 그대로 원격 서버에 있는 저장 프로시저(Stored Procedure)를 호출하는 기능입니다.

MSSQL에서 연결된 서버를 설정하면:

  • 다른 SQL Server의 테이블 조회(SELECT) 는 기본적으로 가능
  • 하지만 저장 프로시저 실행(EXEC) 은 RPC 설정이 꺼져 있으면 불가능

즉,

🔹 RPC = 연결된 서버에서 저장 프로시저를 실행하기 위한 권한/기능


2️⃣ RPC 와 RPC OUT 차이

연결된 서버 설정에는 두 가지 옵션이 있습니다.

옵션설명

RPC 원격 서버에서 로컬 서버의 프로시저 호출 허용
RPC OUT 로컬 서버에서 원격 서버의 프로시저 호출 허용

👉 우리가 보통 필요로 하는 것은 RPC OUT 입니다.

예시

EXEC LinkedServerName.Database.dbo.usp_Test

위와 같이 내 서버 → 연결된 서버 로 프로시저를 실행하려면

RPC OUT = TRUE 가 반드시 필요합니다.


3️⃣ RPC 설정 안 했을 때 발생하는 오류

RPC 설정이 꺼져 있으면 다음과 같은 오류를 만날 수 있습니다.

서버 'LinkedServerName'에 대해 RPC가 구성되지 않았습니다.

또는

OLE DB 공급자 "SQLNCLI"에서 메시지 "RPC 사용이 설정되지 않았습니다"를 반환했습니다.

👉 이 오류가 보이면 100% RPC OUT 설정 문제입니다.


4️⃣ SSMS에서 RPC 설정하는 방법 (GUI)

① 연결된 서버 속성 열기

  1. SSMS 실행
  2. 서버 개체 → 연결된 서버 → 해당 서버 우클릭 → 속성

② 서버 옵션 탭

아래 옵션을 변경합니다.

옵션
RPC True
RPC Out True

✔ 확인 버튼 클릭


5️⃣ T-SQL로 RPC 설정하는 방법 (권장)

운영 서버나 자동화 스크립트에서는 T-SQL 방식이 더 많이 사용됩니다.

EXEC sp_serveroption
@server = 'LinkedServerName',
@optname = 'rpc',
@optvalue = 'true';


EXEC sp_serveroption
@server = 'LinkedServerName',
@optname = 'rpc out',
@optvalue = 'true';

설정 확인

EXEC sp_helpserver 'LinkedServerName';

또는

SELECT *
FROM sys.servers
WHERE name = 'LinkedServerName';

6️⃣ RPC 사용 예제

🔹 원격 저장 프로시저 실행

EXEC LinkedServerName.MyDB.dbo.usp_InsertLog
@UserId = 1,
@Message = 'Test';

🔹 OPENQUERY 사용 (RPC와 무관)

SELECT *
FROM OPENQUERY(LinkedServerName,
'SELECT * FROM MyDB.dbo.TableA'
);

OPENQUERY는 SELECT에는 사용 가능하지만, 프로시저 실행에는 한계가 있습니다.


7️⃣ 실무 주의사항 ⚠

✅ 1. 보안 문제

  • RPC OUT은 원격 서버에서 임의의 프로시저 실행 가능
  • 최소 권한 계정 사용 권장

✅ 2. 트랜잭션 주의

  • 분산 트랜잭션(DTC) 발생 가능
  • MSDTC 설정이 안 되어 있으면 오류 발생

✅ 3. 성능 이슈

  • 네트워크 왕복 발생
  • 대량 호출 시 성능 저하 가능

8️⃣ 언제 RPC를 사용해야 할까?

✔ 이런 경우에 사용하세요

  • 공통 로그 저장
  • 다른 DB의 배치/집계 프로시저 실행
  • ERP, CRM 등 시스템 간 DB 연동

❌ 이런 경우는 피하세요

  • 단순 조회 (→ OPENQUERY 또는 ETL 권장)
  • 대량 반복 호출

9️⃣ 정리

  • RPC는 연결된 서버에서 저장 프로시저를 실행하기 위한 필수 설정
  • 대부분의 경우 RPC OUT = TRUE 가 핵심
  • GUI보다 T-SQL 설정 방식이 실무에서 안정적

연결된 서버에서 프로시저 실행이 안 된다면, 👉 가장 먼저 RPC OUT 설정을 확인하세요.

반응형