카테고리 없음

엑셀 없이 CSV, JSON 데이터 다루기: Import & Export 완벽 가이드

스워플 2026. 2. 8. 16:31

IT 현업에서 일하다 보면 가장 많이 마주치는 파일 형식이 바로 **CSV(Comma Separated Values)**와 **JSON(JavaScript Object Notation)**입니다. 사용자 목록, 서버 로그, 설정 파일 등이 대부분 이 두 가지 형식으로 되어 있죠.

많은 분이 습관적으로 엑셀을 실행하여 데이터를 열어보지만, 파워셸을 활용하면 엑셀보다 훨씬 가볍고 빠르게, 심지어 자동화된 스크립트로 이 데이터들을 주무를 수 있습니다. "텍스트를 객체로 다룬다"는 파워셸의 철학이 가장 빛을 발하는 순간이 바로 이때입니다.

1. CSV 파일 다루기: 엑셀보다 빠르고 정교하게

파워셸에서 CSV를 다루는 명령어는 직관적입니다. 가져올 때는 Import-Csv, 내보낼 때는 Export-Csv를 사용합니다.

(1) Import-Csv: 파일이 객체로 변하는 마법

가장 놀라운 점은 파워셸이 CSV의 헤더(첫 번째 줄)를 자동으로 인식하여 속성(Property)으로 변환한다는 것입니다.

예를 들어, 아래와 같은 users.csv 파일이 있다고 가정해 봅시다.

Name,Department,ID
김철수,인사팀,1001
이영희,개발팀,1002
박민수,개발팀,1003

이 파일을 파워셸로 불러오는 순간, 단순한 텍스트가 아니라 Name, Department, ID라는 속성을 가진 '사용자 객체'들의 배열이 됩니다.

# CSV 파일 불러오기
$users = Import-Csv "C:\Data\users.csv"

# 첫 번째 사람의 이름만 확인하기
$users[0].Name 
# 결과: 김철수

별도의 파싱(Parsing) 코드를 짤 필요가 전혀 없습니다. 그냥 불러오면 바로 데이터가 됩니다.

(2) 데이터 가공: 개발팀 직원만 골라내기

데이터를 객체로 불러왔으니, 지난 시간에 배운 파이프라인(|)과 Where-Object를 이용해 원하는 데이터만 쏙 뽑아낼 수 있습니다.

# 부서가 '개발팀'인 사람만 필터링하여 변수에 저장
$devTeam = $users | Where-Object { $_.Department -eq '개발팀' }

(3) Export-Csv: 가공된 데이터 저장하기 (한글 깨짐 주의!)

원하는 데이터를 뽑아냈다면 파일로 저장해야겠죠. 이때 Export-Csv를 사용합니다. 단, 한국어 사용자라면 **인코딩(Encoding)**에 각별히 주의해야 합니다.

# 개발팀 목록을 새로운 CSV로 저장
$devTeam | Export-Csv "C:\Data\dev_team.csv" -NoTypeInformation -Encoding UTF8
  • -NoTypeInformation: 이 옵션을 쓰지 않으면 CSV 파일 첫 줄에 #TYPE System.Management.Automation.PSCustomObject 같은 이상한 외계어가 포함됩니다. 깔끔한 CSV를 원한다면 필수 옵션입니다. (PowerShell 6.0 이후부터는 기본값이 되어 생략 가능합니다.)
  • -Encoding UTF8: 엑셀이나 다른 프로그램 호환성을 위해 UTF-8 인코딩을 명시해 주는 것이 좋습니다. 만약 엑셀 구버전에서 한글이 깨진다면 -Encoding Default (EUC-KR)를 시도해 보세요.

2. JSON 데이터 다루기: 웹 시대의 표준

최근의 클라우드 설정 파일(AWS, Azure)이나 웹 API 응답값은 대부분 JSON 형식입니다. 파워셸은 JSON 또한 완벽하게 지원합니다.

(1) ConvertFrom-Json: JSON을 파워셸 객체로

CSV와 달리 JSON은 계층 구조(Hierarchy)를 가질 수 있습니다. 하지만 파워셸은 이마저도 완벽하게 객체로 변환합니다.

# JSON 형식의 텍스트 데이터
$jsonStr = '{
    "ServerName": "Web01",
    "IP": "192.168.0.1",
    "InstalledRoles": ["IIS", "FileServer"]
}'

# JSON을 파워셸 객체로 변환
$serverInfo = $jsonStr | ConvertFrom-Json

# 배열 데이터 접근도 자유자재
$serverInfo.InstalledRoles[0]
# 결과: IIS

만약 .json 파일로 저장되어 있다면 Get-Content 명령어와 조합해서 사용합니다.

$config = Get-Content "config.json" -Raw | ConvertFrom-Json
  • -Raw: JSON 파일은 보통 여러 줄로 되어 있습니다. 이를 한 줄씩 읽지 않고 통째로 읽어서 넘겨주기 위해 사용하는 옵션입니다.

(2) ConvertTo-Json: 객체를 다시 JSON으로

파워셸에서 가공한 데이터를 웹 서버로 보내거나 설정 파일로 저장할 때는 다시 JSON 문자열로 바꿔야 합니다.

# 객체를 JSON 문자열로 변환
$jsonOutput = $serverInfo | ConvertTo-Json -Depth 5
  • -Depth: JSON 구조가 복잡하고 깊을 때(중첩된 객체), 파워셸은 성능을 위해 일정 깊이 이상은 생략해 버립니다. 안전하게 모든 데이터를 변환하려면 -Depth 값을 5~10 정도로 넉넉하게 주는 것이 팁입니다.

3. 실전 응용: CSV를 JSON으로 변환기 만들기

이 두 가지를 조합하면, 개발자들이 자주 필요로 하는 **"CSV 파일을 JSON으로 변환하는 도구"**를 단 한 줄의 코드로 만들 수 있습니다.

# users.csv를 읽어서 -> JSON으로 변환한 뒤 -> users.json 파일로 저장
Import-Csv "users.csv" | ConvertTo-Json -Depth 10 | Set-Content "users.json" -Encoding UTF8

파이썬이나 다른 언어였다면 파일을 열고, 라이브러리를 임포트하고, 반복문을 돌려야 했을 작업을 파워셸은 파이프라인 몇 개로 끝내버립니다. 이것이 바로 파워셸이 데이터 가공의 최강자라 불리는 이유입니다.

마치며

오늘 우리는 엑셀 없이 데이터를 다루는 법을 배웠습니다. Import해서 객체로 만들고, 입맛대로 수정한 뒤, Export나 Convert로 내보내는 이 흐름은 파워셸 자동화의 가장 기본이 되는 패턴입니다.

이제 여러분은 수천 명의 사용자 목록에서 퇴사자만 골라내거나, 서버 설정 파일(JSON)의 특정 IP만 일괄 변경하는 작업을 1초 만에 끝낼 수 있는 기초 체력을 다지셨습니다.

다음 포스팅에서는 이 데이터 처리 능력을 바탕으로, 수백 개의 파일 이름을 내 맘대로 바꾸는 '정규표현식(Regex)을 이용한 초고속 파일 이름 일괄 변경' 기술에 대해 다뤄보겠습니다. 단순한 이름 변경을 넘어, 복잡한 패턴(날짜, 번호 등)을 다루는 고급 기법을 기대해 주세요.