본문 바로가기
컴퓨터/기타

대용량 JSON 처리, VBA 말고 PowerShell(PS1) 해결

by 큐브빌드 2025. 4. 17.
반응형

 

😫 문제 상황: VBA로 대용량 JSON을 처리했더니 너무 느려요!

엑셀에서 JSON 데이터를 분석하고 싶을 때, 많은 분들이 VBA를 사용해 처리하려고 시도합니다.
하지만 JSON 파일이 수천 줄 이상으로 커지게 되면, VBA는 그 속도를 따라가지 못합니다.
특히 Scripting.Dictionary 또는 JsonConverter를 사용할 경우, 로딩 자체에 시간이 오래 걸리더라고요.

그래서 대안으로 떠오른 게 바로 PowerShell(. ps1) 스크립트입니다.
Windows에 기본 내장되어 있고, JSON 처리에 굉장히 강력한 기능을 제공합니다.


🧾 사용된 JSON 구조와 필드 설명

이번 작업에 사용된 JSON 데이터의 구조는 아래와 같습니다:

[
  { "a": 1, "b": [ { "c": "Value1", "d": 1 }, { "c": "Value11", "d": 111 } ] }, 
  { "a": 2, "b": [ { "c": "Value2", "d": 2 }, { "c": "Value12", "d": 112 } ] }, 
  { "a": 3, "b": [ { "c": "Value3", "d": 3 }, { "c": "Value13", "d": 113 } ] }
]

👉 필드 설명:

  • "a": 상위 항목의 고유 번호 (int)
  • "b": 하위 항목의 리스트 (배열)
  • "c": 우리가 추출하고자 하는 이름값 (string)
  • "d": 숫자 형태의 부가 정보 (int)

이번 목표는 모든 b 배열 안의 c 값만 추출하여 결과로 만드는 것이었습니다.


⚙ PowerShell(. ps1) 스크립트 설명

파일 이름: test1.ps1

$jsonPath = "e:\data.json"                   # JSON 파일 경로
$outputPath = "e:\result.txt"               # 결과 출력 파일 경로

# JSON 파일을 읽고 파싱
$json = Get-Content $jsonPath -Raw | ConvertFrom-Json

# 결과 저장할 리스트
$results = @()

# 각 항목에 대해 반복
foreach ($item in $json) {
    foreach ($bItem in $item.b) {
        $results += $bItem.c            # b 항목 안의 c 값만 추출
    }
}

# 결과를 텍스트 파일로 저장
$results | Out-File $outputPath -Encoding UTF8

🔍 코드 구성 설명

코드 줄 설명

코드 설명
$jsonPath = "data.json" JSON 파일 경로를 정의합니다. 같은 경로에 있으면 파일명만 입력
Get-Content -Raw JSON 파일 내용을 한 줄로 가져옵니다. (중요)
ConvertFrom-Json JSON 문자열을 PowerShell 객체로 변환
foreach ($item in $json) 최상위 배열 순회
foreach ($bItem in $item.b) 각 항목의 "b" 배열 순회
$bItem.c 원하는 "c" 값을 추출
Out-File 결과를 UTF-8 형식으로 저장

 

👌 PowerShellISE에서는 Json의 데이터에 맞게 자동완성도 가능하다는 사실!

처음에는 JSON 구조에 맞게 자동완성이 안되지만 1회 실행 후 에는 자동완성도 가능합니다.

 

아래 이미지처럼 json 구조 중 b는 object로 선택가능하며, 

해당 object를 $bitem으로 변수를 설정했기 때문에 b object의 하위 내용이 $bitem. 의 자동 완성도 가능하네요.

 

 


💡 왜 PowerShell이 유리한가?

  • 대용량 처리에 훨씬 빠릅니다 (수천~수만 줄도 수 초 내 처리)
  • 윈도에서 별도 프로그램 없이 실행 가능
  • UTF-8 출력도 간단히 지원
  • 엑셀과 연동하거나 VBA에서 호출도 가능합니다

📂 샘플 파일 다운로드

아래 압축 파일에는 실습용 JSON 파일과. ps1 스크립트가 포함되어 있습니다.

test1.zip
0.00MB


 

🧾 참고 사항

PowerShell 권한 획득 하기

PS1을 실행하기 전 반드시 권한을 획득해야 합니다.

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

해당 명령어를 실행하면 아래 이미지와 같이 노출되며, 모두 예 선택하여 진행하면 됩니다.

 

PowerShell 실행

PowerShell을 실행하여도 되고, PowerShell ISE를 실행하셔도 됩니다. (저는 ISE를 사용했습니다.)

 

혹은 Win+R 선택 후 PowerShell을 입력하여도 됩니다.

반응형

댓글