https://claremont.tistory.com/entry/AJAX%EC%99%80-CSV-XML-JSON-YAML
이전의 포스팅에서는 데이터를 저장하고 전송하기 위한 포맷을 알아보았다. 각각의 포맷은 데이터 표현 방식과 사용 목적에 따라 장단점이 있어서, 필요에 맞는 포맷을 선택하는 것이 중요하다. 이번 포스팅에서는 대표적인 데이터 포맷인 CSV, XML, JSON, YAML의 데이터 파싱에 대해서 알아보고, 각 포맷의 예시를 통해 실제 사용 방법을 확인해 보겠다.
ㅇ데이터 파싱(Data Parsing): 특정 형식으로 저장된 데이터를 프로그램이 이해하고 처리할 수 있는 구조로 변환하는 과정
예를 들어 CSV, XML, JSON, YAML과 같은 다양한 데이터 포맷을 프로그램 내에서 활용하기 위해서는 해당 포맷을 올바르게 해석하고 필요한 정보를 추출해야 한다. 각 데이터 포맷마다 파싱 방법이 다르며, 이를 효과적으로 수행하기 위해 다양한 라이브러리와 도구들이 제공된다. 이번 글에서는 각 데이터 포맷별로 데이터 파싱이 무엇인지, 어떻게 수행하는지에 대해 자세히 알아보겠다.
1. CSV(Comma-Separated Values)
CSV 파싱은 각 행을 읽고 쉼표를 기준으로 필드를 분리하는 과정이다. 각 행은 레코드를 나타내며, 각 필드는 쉼표로 구분된다.
[파싱 도구 및 라이브러리]
- 자바: OpenCSV 라이브러리, Apache Commons CSV
- 자바스크립트: `PapaParse` 라이브러리
- 파이썬: `csv` 모듈, `pandas` 라이브러리
- PHP: fgetcsv 함수
예시) 자바 OpenCSV 라이브러리
import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;
public class CsvParsingExample {
public static void main(String[] args) {
String csvFile = "employees.csv";
try (CSVReader reader = new CSVReader(new FileReader(csvFile))) {
String[] nextLine;
// 첫 번째 줄은 헤더이므로 읽지 않음
reader.readNext();
while ((nextLine = reader.readNext()) != null) {
String 이름 = nextLine[0];
String 나이 = nextLine[1];
String 직업 = nextLine[2];
String 도시 = nextLine[3];
System.out.println(이름 + " " + 나이 + " " + 직업 + " " + 도시);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. XML(eXtensible Markup Language)
XML 파싱은 XML 문서를 읽고, 태그와 속성을 기반으로 데이터 구조를 해석하는 과정이다. DOM(Document Object Model) 파서와 SAX(Simple API for XML) 파서 두 가지 주요 방식이 있다.
[파싱 도구 및 라이브러리]
- 자바: JAXB, DOM, SAX 파서, Jackson XML
- 자바스크립트: 브라우저 내장 DOMParser, xml2js 라이브러리
- 파이썬: xml.etree.ElementTree, lxml
- PHP: SimpleXML, DOMDocument
예시) 자바 DOM 파서
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.*;
import java.io.File;
public class XmlParsingExample {
public static void main(String[] args) {
try {
File inputFile = new File("employees.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("직원");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String 이름 = eElement.getElementsByTagName("이름").item(0).getTextContent();
String 나이 = eElement.getElementsByTagName("나이").item(0).getTextContent();
String 직업 = eElement.getElementsByTagName("직업").item(0).getTextContent();
String 도시 = eElement.getElementsByTagName("도시").item(0).getTextContent();
System.out.println(이름 + " " + 나이 + " " + 직업 + " " + 도시);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. JSON(JavaScript Object Notation)
JSON 파싱은 JSON 문자열을 읽어 들여 객체나 데이터 구조로 변환하는 과정이다.
[파싱 도구 및 라이브러리]
- 자바: Jackson 라이브러리, Gson 라이브러리, org.json 라이브러리
- 자바스크립트: JSON.parse() 메서드
- 파이썬: json 모듈
- PHP: json_decode 함수
예시) 자바 Jackson 라이브러리
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.List;
public class JsonParsingExample {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
try {
Employees employees = mapper.readValue(new File("employees.json"), Employees.class);
for (Employee employee : employees.get직원목록()) {
System.out.println(employee.get이름() + " " + employee.get나이() + " " + employee.get직업() + " " + employee.get도시());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Employees {
private List<Employee> 직원목록;
public List<Employee> get직원목록() {
return 직원목록;
}
public void set직원목록(List<Employee> 직원목록) {
this.직원목록 = 직원목록;
}
}
class Employee {
private String 이름;
private int 나이;
private String 직업;
private String 도시;
public String get이름() {
return 이름;
}
public void set이름(String 이름) {
this.이름 = 이름;
}
public int get나이() {
return 나이;
}
public void set나이(int 나이) {
this.나이 = 나이;
}
public String get직업() {
return 직업;
}
public void set직업(String 직업) {
this.직업 = 직업;
}
public String get도시() {
return 도시;
}
public void set도시(String 도시) {
this.도시 = 도시;
}
}
4. YAML(YAML Ain't Markup Language)
YAML 파싱은 YAML 문서를 읽고, 들여쓰기와 키-값 쌍을 기반으로 데이터 구조를 해석하는 과정이다.
[파싱 도구 및 라이브러리]
- 자바: SnakeYAML 라이브러리, Jackson YAML 모듈
- 자바스크립트: js-yaml 라이브러리
- 파이썬: PyYAML 라이브러리
- PHP: Symfony YAML 컴포넌트
예시) 자바 SnakeYAML 라이브러리
import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
public class YamlParsingExample {
public static void main(String[] args) {
Yaml yaml = new Yaml();
try (InputStream in = YamlParsingExample.class.getResourceAsStream("/employees.yaml")) {
Map<String, Object> data = yaml.load(in);
List<Map<String, Object>> 직원목록 = (List<Map<String, Object>>) data.get("직원목록");
for (Map<String, Object> employee : 직원목록) {
System.out.println(employee.get("이름") + " " + employee.get("나이") + " " + employee.get("직업") + " " + employee.get("도시"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. AJAX(Asynchronous JavaScript and XML)
AJAX는 웹 페이지를 새로고침하지 않고도 서버와 비동기적으로 데이터를 주고받는 기술이다. AJAX를 통해 주고받는 데이터는 주로 JSON, XML, CSV, YAML 등의 포맷을 사용한다. AJAX에서 데이터를 파싱하는 방법은 데이터 포맷에 따라 다르다.
[파싱 도구 및 라이브러리]
- 자바스크립트: 브라우저 내장 XMLHttpRequest, fetch API, axios 라이브러리
- 서버 측: 클라이언트에서 받은 데이터를 서버에서 적절한 방식으로 파싱하여 처리
각 데이터 포맷에 대한 AJAX 파싱 예시는 다음에 자세히 다루도록 하겠다
[데이터 파싱 시 고려사항]
- 데이터의 정확성: 파싱 과정에서 데이터가 손상되지 않도록 주의해야 한다. 특히, 인코딩 문제나 형식 오류가 발생하지 않도록 검증 절차를 마련하는 것이 중요하다.
- 성능: 대용량 데이터를 파싱할 때는 성능이 중요한 요소가 될 수 있다. 효율적인 파싱 알고리즘과 최적화된 라이브러리를 선택해야 한다.
- 보안: 파싱 과정에서 외부 입력을 처리할 때는 보안 취약점에 주의해야 한다. 특히, XML 파싱 시 외부 엔티티(XML External Entity, XXE) 공격에 취약할 수 있으므로, 안전한 파싱 설정을 사용하는 것이 좋다.
- 에러 처리: 파싱 도중 발생할 수 있는 오류를 적절히 처리해야 한다. 데이터 형식이 예상과 다르거나 손상된 경우, 이를 감지하고 적절한 조치를 취할 수 있어야 한다.
- 라이브러리 선택: 각 언어와 플랫폼에 맞는 신뢰할 수 있는 파싱 라이브러리를 선택하는 것이 중요하다. 라이브러리의 유지보수 상태, 성능, 기능 등을 고려해야 한다.
데이터 파싱은 다양한 데이터 포맷을 프로그램 내에서 효과적으로 활용하기 위한 필수적인 과정이다. CSV, XML, JSON, YAML 각각의 포맷은 고유한 구조와 특징을 가지고 있으며, 이를 올바르게 파싱하기 위해서는 해당 포맷에 맞는 도구와 방법을 선택해야 한다. 데이터의 정확성과 효율성을 보장하기 위해서는 적절한 라이브러리를 활용하고, 파싱 과정에서 발생할 수 있는 문제들을 사전에 대비하는 것이 중요하다.
프로젝트의 요구 사항과 데이터의 특성에 맞추어 적절한 데이터 파싱 방법을 선택하고 구현함으로써, 데이터 관리와 처리 과정에서의 효율성과 신뢰성을 높일 수가 있다.
'웹 > 웹 지식' 카테고리의 다른 글
[웹 지식] 사용자 경험(UX)에 대해서 (1) | 2024.10.05 |
---|---|
[웹 지식] 프론트엔드 개발자가 탄생하게 된 배경 (0) | 2024.10.04 |
[웹 지식] AJAX와 CSV, XML, JSON, YAML (7) | 2024.10.04 |
[웹 지식] 렌더링 - CSR과 SSR (w/TTV, TTI) (5) | 2024.10.02 |
[웹 지식] 웹 서버와 WAS(Web Application Server) (1) | 2024.10.01 |