안녕하세요, 데이터매니저입니다. 회사에서 구글 스프레드시트(Google Sheets)로 여러 부서와 협업을 하다 보면, 다른 팀의 파일이나 마스터 데이터 파일에서 실시간으로 자료를 끌어와야 할 때가 잦습니다. 이때 실무자들이 가장 많이 쓰는 마법의 함수가 바로 다른 파일의 데이터를 원격으로 복사해오는 IMPORTRANGE입니다.

하지만 이 함수를 처음 쓰면 열에 아홉은 당황스러운 화면을 마주하게 됩니다. 셀에 #REF!라는 빨간 오류가 뜨면서 멈춰버리거나, 데이터가 수만 줄이 넘어갈 경우 하루 종일 '로딩 중(Loading...)'이라는 글자만 깜빡거리며 시트 전체가 뻗어버리는 현상이죠. 저도 과거에 영업팀 데이터를 실시간으로 가져오려고 이 함수를 마구잡이로 썼다가 파일이 렉이 걸려 회의 시간에 보고를 망친 뼈아픈 실수가 있습니다. 오늘은 데이터 연동의 필수 함수인 IMPORTRANGE의 권한 오류 원인과, 무거운 로딩 지연을 10배 이상 쾌적하게 만드는 실전 최적화 비법을 명쾌하게 해부해 드립니다.

#REF! 오류의 진실: 수식 문제가 아니라 '허락'을 구해야 한다

오프라인 프로그램인 엑셀과 달리 구글 스프레드시트는 파일(URL) 단위로 클라우드 상에 존재합니다. 따라서 A파일에서 B파일의 데이터를 수식으로 끌어오려면, 보안상 반드시 두 파일 간의 '연결 허락(액세스 허용)' 절차가 필요합니다.

=IMPORTRANGE("파일URL", "시트명!A1:Z100") 수식을 오타 없이 정확히 썼는데도 #REF! 오류가 뜬다면 수식이 틀린 게 아닙니다. 오류가 난 셀 위에 마우스 커서를 가만히 올려보세요. 그러면 "이 시트를 연결하려면 액세스 권한을 허용해야 합니다"라는 팝업창과 함께 [액세스 허용]이라는 파란색 버튼이 나타납니다. 이 버튼을 한 번만 클릭해 주면 두 파일의 보이지 않는 벽이 허물어지면서 데이터가 쫙 밀려 들어옵니다.

여기서 초보자들이 자주 빠지는 함정이 있습니다. 만약 내가 원본 파일(가져올 대상 파일)에 대한 '보기' 또는 '편집' 권한이 없는 상태라면, 아무리 수식을 완벽히 치고 버튼을 눌러도 데이터는 절대 넘어오지 않습니다. 함수를 작성하기 전, 반드시 원본 파일의 소유자에게 내 구글 계정의 열람 권한을 먼저 요청하는 것이 0순위 작업입니다.

로딩 지연(무한 렉)의 주범: 함수를 1,000번 호출하는 악습

권한을 해결하고 데이터가 들어오기 시작했는데, 시트가 너무 느려져서 스크롤조차 버벅거린다면 시트의 설계 구조 자체가 잘못된 것입니다.

실무에서 발견되는 가장 최악의 사례는, 1,000명의 사원 데이터를 각 줄마다 가져오기 위해 1,000개의 행에 일일이 IMPORTRANGE 함수를 복사해서 아래로 붙여넣는 것입니다. 구글 서버 입장에서는 "B파일에서 데이터 가져와!"라는 명령(API 호출)을 1,000번이나 동시에 받게 되니 과부하가 걸려 다운될 수밖에 없습니다.

[해결책: 1 Sheet, 1 Import 원칙] 이 무거운 로딩 지연을 해결하려면 반드시 '로(Raw) 데이터 전용 숨김 탭'을 하나 만들어야 합니다. 새 탭(시트)을 하나 만들고, A1 셀 딱 한 곳에만 IMPORTRANGE 함수를 써서 원본 데이터 표를 통째로 큼직하게 불러옵니다. 그러면 구글 서버 호출은 딱 '1번'으로 끝납니다. 그 후, 내가 실제로 작업할 메인 화면에서는 굳이 외부 연동 함수를 쓰지 말고, 방금 불러온 내부의 숨김 탭을 대상으로 VLOOKUP이나 일반 수식을 걸어 계산하세요. 외부 서버를 수천 번 찌르던 방식에서 내부 계산으로 바뀌며 시트 속도가 눈에 띄게 쾌적해집니다.

QUERY 함수와 결합하여 데이터 다이어트 하기

만약 원본 파일의 데이터가 5만 줄이 넘는 초대형 사이즈라면, 1번만 불러와도 파일 자체가 무거워져 뻗어버릴 수 있습니다. 예를 들어 5만 줄 중에서 '영업팀' 데이터 500줄만 필요한 상황이라면 통째로 가져올 필요가 없죠. 이때는 IMPORTRANGE와 데이터베이스 추출 함수인 QUERY 함수를 중첩해서 사용해야 합니다.

  • 최적화 수식: =QUERY(IMPORTRANGE("파일URL", "시트명!A:Z"), "Select * where Col2 = '영업팀'")

이렇게 두 함수를 결합하면, 원본 파일에서 데이터를 끌어오는 과정에서 '2번째 열(Col2)이 영업팀인 데이터만' 알아서 걸러내어 아주 가벼운 상태로 가져오게 됩니다. 불필요한 트래픽 낭비를 원천 차단하여 무한 로딩을 막는 실무자들의 핵심 치트키입니다. (단, IMPORTRANGE를 QUERY로 감싸서 사용할 때는 열 이름을 A, B, C가 아니라 Col1, Col2, Col3 형식으로 표기해야 오류가 나지 않는다는 점을 꼭 기억하세요.)

데이터 갱신 주기와 태생적 한계점 (주의사항)

IMPORTRANGE는 떨어져 있는 팀들을 하나로 묶어주는 마법 같지만, 실무에 적용할 때 반드시 인지해야 할 명확한 한계(Limit)를 가지고 있습니다.

구글 공식 문서에 따르면 이 함수의 데이터 갱신 주기는 '최대 30분'입니다. 즉, 영업팀 원본 시트에서 숫자가 바뀌었다고 해서 내 시트에도 0.1초 만에 실시간으로 즉시 반영되는 것이 아니라, 약간의 통신 지연(Delay)이 발생할 수 있습니다. 1분 1초가 중요한 주식 단가나 초를 다투는 발주 시스템에 이 함수를 맹신하면 낭패를 볼 수 있습니다.

또한, 한 번에 불러올 수 있는 데이터 셀의 최대 한도 크기가 제한되어 있어, 너무 거대한 범위를 지정하면 "결과가 너무 큽니다"라는 오류를 뱉어냅니다. 수십만 단위의 빅데이터를 연동해야 하는 상황이라면 이 단일 함수에 의존하기보다, '구글 앱스 스크립트(Google Apps Script)'를 활용한 새벽 시간대 일일 자동 백업이나 구글 빅쿼리(BigQuery) 같은 전문 데이터베이스 시스템으로 넘어가야 하는 시점임을 아셔야 합니다.

오늘 글의 핵심 요약

  • IMPORTRANGE 함수의 #REF! 오류는 수식 에러가 아니라 마우스를 올려 [액세스 허용] 버튼을 눌러야 풀리는 보안 절차입니다.

  • 함수를 셀마다 복사하면 무한 로딩에 빠지므로, 전용 탭 하나에 통째로 불러온 뒤 그 안에서 내부 참조(VLOOKUP)를 하는 것이 쾌적합니다.

  • 대용량 데이터는 QUERY 함수와 결합해 필요한 조건(Col)만 필터링해서 가져와야 시트의 렉(과부하)을 막고 속도를 높일 수 있습니다.

다음 4편에서는 실무에서 조건부 합계를 구할 때 가장 많이 쓰는 함수인 SUMIF와 SUMIFS를 다룹니다. 분명 엑셀 공식대로 썼는데 금액이 누락되거나 엉뚱한 값이 나오는 치명적 이유, 바로 ‘실무에서 SUMIF와 SUMIFS를 쓸 때 조건 범위가 어긋나 누락되는 치명적 실수’에 대해 파헤쳐 보겠습니다. 퇴근을 앞당기는 범위 고정의 원리를 다음 시간에 공개합니다!

여러분은 다른 팀 시트에서 데이터를 끌어오다가 시트가 멈춰버려서 곤란했던 적이 있으신가요? 나만의 구글 스프레드시트 렉 줄이는 꿀팁이 있다면 댓글로 자유롭게 나눠주세요!