XML이 너무 나쁘면… 왜 그렇게 많은 사람들이 그것을 사용합니까? [닫은]


37

나는 XML의 목적을 이해하지만 사람들이 BAD가 얼마나 나쁜지에 대해 항상 불평하는 것을 듣는가? 나는 무엇이 그렇게 나쁜지 이해하지 못합니까? 나는 보통“부풀어 오른”과“느린”이라는 용어를 던졌다.

그러나 프로그래머로서, 주로 무엇을 사용합니까? 정말로 "나쁘다"고 생각하십니까? ... 그렇다면 많은 사람들이 데이터를 전송하는 데 사용하기 때문에 ...


1
당신의 대답은 질문에 있습니다. 사람들은 여전히 ​​사람들이 그것을 사용했기 때문에 그것을 사용하며 옵션은 (1) JSON과 YAML 이전에 사용했던 모든 코드를 다시 작성하거나 (2) 그것을 빨고 바보 같은 일을하는 것입니다. 많은 사람들이 여전히 폭력의주기를 영속합니다. 그것은 연습의 본질적인 가치를 증명하지 않습니다.
Parthian Shot

5
실제 문서 (Man page, Knuth, Hamlet 등)에 JSON을 사용해보십시오. 그런 다음 왜 XML이 필수적인지 이해할 것입니다. 이것은 JSON이 짜증나는 공간입니다 (앞으로 시도하십시오). 다른 디자인 공간에서 하나를 사용하는 것은 의문의 여지가 있습니다. JSON 공간에서 XML을 사용할 때 발생하는 문제는 주로 장황하고 속도가 빠르며 XML 공간에서 JSON을 사용할 때 발생하는 문제는 이식성 (JSON에서 책을 한 친구와 상호 작용하지만 자신의 방식으로 상호 작용하려는 시도), 무결성 및 해결하기 위해 많은 사람의 노력이 필요한 해석 문제. 작업에 적합한 도구를 사용하십시오.
TextGeek

XML은 많은 사람들이 의도하지 않은 것을 위해 그것을 남용하기 때문에 나쁘다. 데이터를 쉽게 확장 할 필요가없는 경우 (예 : 한 명의 권위있는 당사자가 중앙에서 지시하는 것이 아니라 상호 운용이 필요한 여러 당사자가이 체계를 사용하는 경우) 데이터가 문서가 아닌 경우 (예 : DOM이 데이터의 추상화가 좋지 않은 경우) XML은 해당 응용 프로그램에 적합하지 않습니다. 문제 도메인이 XML을 위해 설계된 것이라면, XML과 일치하는 것은 없습니다. JSON, YAML 등은 XML이 실제로 설계된 공간에 적합하지 않습니다.
거짓말 라이언

답변:


90

Xml은 낮은 수준에서 데이터 유효성 검사를 시행 할 수있는 기능을 갖춘 플랫폼 중립적이고 사람이 읽을 수있는 데이터 전송 프로토콜로 설계되었습니다. 이런 식으로 Xml을 사용하는 사람에게는 실제로 불만이있는 것 같습니다. 가장 간결한 와이어 형식입니까? 아니요. 그러나 더 나쁜 옵션이 있습니다. 사용자 정의 이진 형식을 읽는 것만 큼 빠릅니까? 아니요. 그러나 비즈니스 파트너는 사용중인 스택에서 읽을 수 있습니다.

그러나 문제는 인간, 특히 엔터프라이즈 아키텍트라고 알려진 품종은 악이며 선한 일을 취하여 악하게 만든다는 것입니다. Xml의 경우, 금세기 초 Xml은 모든 IT 문제의 보편적 망치로 간주되었습니다. 위원회별로 작은 디자인을 뿌려서 SOAP 및 oXML 과 같은 끔찍한 괴물이 생깁니다 . 어느 쪽도 적에게 소원해서는 안되며 친구 나 동료에게 신경 쓰지 마십시오.


15
+1-EDI를 다루어야했던 사람은 그 혼란이 일어나기 전에 XML이 발명되기를 바란다.
Scott Whitlock

12
+1 내 생각과 거의 일치합니다. 나는 평범하고 간단한 데이터를 저장하기 위해 단지 계층 적이지만 (너무 깊지 않고 다른 것과 잘 혼합되지는 않지만 ) JSON과 YAML과 같이 잘 작동하는 특정 형식이 있습니다. 후자는 인간의 가독성과 관련하여 매우 훌륭합니다.

11
jwz의 말을 인용하자면 : "어떤 문제를보고 '나는 XML을 사용할 것입니다.'라고 말하는 특정한 종류의 프로그래머가 있습니다." 이제 그는 두 가지 문제가 있습니다. "
Adam Crossland

13
oXML은 Brainfuck, Whitespace 또는 LOLCODE와 같은 농담으로 만들어 졌다고 말해주십시오.
dsimcha

9
@Shamim Hafiz, SOAP은 인류가 지금까지 자란 최악의 괴물 중 하나입니다.
SK-logic

24

XML은 다양한 맛과 용도로 제공되는 도구 일뿐입니다. XML은 어떤면에서는 뛰어나고 다른 것은 빠릅니다. 문제 중 하나는 사람들이 불필요하게 네임 스페이스와 흩어져있는 쓰레기 (SOAP, 누구나?)가있는 "엔터프라이즈"XML을 본 것입니다. 인간을위한 XML 형식을 디자인하는 비결은 데이터에 압도적 인 영향을 미치지 않으면 서 데이터에 진정한 의미를 더하는 것입니다.

사람들이 문제를 제기하는 것 중 하나는 XML이 때로는 일부 문자 또는 누락 된 대괄호를 질식 시킨다는 것입니다. 그러나 그것의 단점과 단점도 있습니다. 단점은 반 유효 구문이 다른 경우를 다르게 해석 할 수있는 HTML과 같이 모호함이 없다는 것입니다.

단점은 작성하기가 더 어렵고 배우기가 더 어렵다는 것입니다. HTML이 XML만큼 엄격하다면 웹이 그렇게 빨리 커지지 않았을 것이라는 주장에 동의하지만, 오늘날에도 그렇게한다면 기쁠 것이라고 주장합니다. :)

또한 모든 것을 위해 그것을 사용하지 마십시오. 적절하게 적용 할 수있는 감각과 판단력이 있어야합니다. 당신이 가진 모든 것이 XML이라면, 당신은 항상 당신이 원하는 것을 멀리 XSLT 변환하는 경향이 있습니다. :)

나는 사람들이 형식과 상호 작용해야 할 때만 형식이 중요하다고 주장합니다. 무언가를 직렬화하여 다른 프로그램이 소비 할 수있는 곳으로 보내는 프로그램을 작성하는 경우, 가능한 한 효율적인 것처럼 보이는 것을 누가 신경 쓰겠습니까? 내가 걱정하는 모든 것에 바이너리 형식이나 토끼와 유니콘을 사용하십시오.

XML의 장점

  • YAML과 JSON이하지 않는 많은 경우를 다룹니다.
  • 다양한 플랫폼 및 언어 배열에서 XML을 구문 분석하고 유효성을 검사하는 데 유용한 도구가 있습니다.
  • XSLT와 같은 것을 통해 XML을 쉽고 강력하게 다른 형식으로 변환 할 수 있습니다.
  • 합리적인 XML 문서는 사람이 읽고 편집하기가 쉽습니다. JSON이 더 쉽다고 말하지 마십시오.
  • XML은 어느 정도 자체적으로 설명합니다. 즉, 대부분의 이진 형식과 달리 구조와 의미에 대한 정보를 직접 포함합니다.
  • 인코딩 처리
  • 크로스 플랫폼 사용이 더 쉬운 공백 불가지론
  • 형식이 올바르지 않으면 중단됩니다 (데이터가 구조적으로 올바른지 확인).
  • SGML이 아닙니다

단점

  • 말 수가 많은
  • 바이너리만큼 파싱하는 것은 빠르지 않습니다.
  • 제대로 구성되어 있지 않으면 중단됩니다 (응용 프로그램이 손상됨)

좋은 용도

  • 구성 파일
  • 데이터 교환 형식
  • 탄력적 인 파일 형식
  • 데이터베이스에 문서 저장

그렇게 잘 사용하지

  • 데이터 전송 형식
  • 객체 직렬화
  • 데이터베이스에 관계형 데이터 저장
  • 고성능 I / O 시나리오를위한 파일 형식

13
"구성 파일"이 "잘 사용됨"에 있어야한다고 의심합니다. 그것들은 데이터가 아니라 지침입니다.
daknøk

3
나는 여기에 @ daknøk와 함께 있습니다. 종속성 주입을 지정하는 긴 XML 파일의 수백 줄에 구성 버그를 파악하는 데 많은 시간을 소비 한 시간을 계산할 수 없었습니다. XML 속성.
Gjallar

3
잘못된 데이터가 앱과 충돌하면 문제가있는 데이터입니까?
James Snell

4
잘못된 형식의 파일 형식은 손상된 소프트웨어를 손상시킬 수 있습니다. 따라서 XML은 여기서 범인이 아니라 응용 프로그램입니다. 그렇지 않으면 좋은 소식입니다.
Thomas Eding

3
"YAML과 JSON이 제공하지 않는 많은 최첨단 사례를 해결"할 수 있습니까?
Trevor Hickey 2016 년

14

Jeff Atwood는 XML에 대한 꽤 좋은 블로그 게시물을 가지고 있습니다.

가장 일반적인 용도는 다음과 같습니다.

  • 서로 대화하는 서비스. 예를 들어, 컨텐츠 관리 시스템을 사용하는 웹 사이트는 일부 데이터를 고객 관계 관리 시스템으로 보내야하며 이는 XML로 수행됩니다.

  • 구성 저장소. Web.config 및 app.config는 일반적인 예이지만 nAnt 스크립트는 일부 XML도 사용할 수 있습니다.

나는 그것이 최적이라고 생각하지 않지만 그것만으로도 내 마음이 나빠지지는 않습니다.


11

두 가지 이유 :

  1. 거기에는 끔찍한 프로그래머가 많이 있습니다. XML은 좋지 않을 수도 있지만, 최소한 표면에서는 단순하고 나쁜 소프트웨어를 작성하기가 매우 쉽습니다. VB와 같은 일종.
  2. 이러한 결정을 내리는 많은 사람들이 프로그래머는 아니지만 "모두가 XML을 사용하고있다"는 말만 듣고 자신의 제품에서도 XML을 사용하기로 결정한 비즈니스 유형입니다.

터무니없고 전혀 쓸모없는 점. 1) XML은 나쁘지 않으며 사람들이 소프트웨어를 선택했는지 여부에 관계없이 쓰는 소프트웨어의 품질과는 전혀 관련이 없습니다 .VB 프로그래머는 VB를 사용하면 실제로 나쁜 소프트웨어를 작성한다는 것을 암시합니다. 소프트웨어를 작성하는 방법과 소프트웨어를 작성하는 데 사용하는 것과 완전히 분리되어 있기 때문에 바보입니다. 2) 또 다른 잘못된 가정은 XML을 선택하는 것이 좋으며 더 나은지 또는 더 나쁜지에 대해 XML을 선택하는 사람들은 분명히 프로그래머입니다. XML은 은색 총알이 아니지만 특정 일에는 좋습니다.
Eyal Solnik

2
@EyalSolnik : 일부 사람들은 문제가 제시 될 때, "나는 XML을 사용하는 것, 알고있다."생각<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription> </ProblemWorsening>
메이슨 윌러에게

3
사람들이 무언가를 남용한다고해서 기술 자체가 나쁘다는 것을 의미하지는 않으므로 여러 곳에서 동일한 증후군을 볼 수 있습니다.
Eyal Solnik

8

나는 보통“부풀어 오른”과“느린”이라는 용어를 던졌다.

가장 간결한 구문은 아니지만 분명히 가장 표현적인 구문입니다. 인간이 읽을 수 있습니까? 언어를 디자인하는 방법에 따라 다릅니다. 대부분의 사람들은 XML 언어를 디자인하지 않고 단지 객체를 XML로 직렬화합니다.

… 왜 그렇게 많은 사람들이 그것을 사용합니까?

유비쿼터스입니다. XQuery로 XML 데이터베이스를 쿼리하고 XSLT를 사용하여 XHTML 또는 Atom으로 결과를 변환하고 다른 웹 서비스에서 Atom 또는 기타 XML 형식을 가져오고 XForms를 사용하여 사용자로부터 XML을 가져오고 XMLSchema, Relax NG 또는 Schematron을 사용하여 XML을 확인하고 처리 할 수 ​​있습니다. XProc, XQuery 업데이트를 사용하여 데이터베이스에 다시 저장하십시오. 이러한 모든 도구는 XML을 이해하므로 다른 표현간에 매핑 할 필요가 없습니다.

XML은 직렬화 기술이 아니며 범용 정보 세트입니다.


... 우리는 왜 chrissakes를 위해 SOAP가 XML에 기반을두고 있는지 스스로에게 묻습니다.
JensG

6

여기서는 다른 내부 표현을 가진 다른 공급 업체가 만든 다른 시스템 간의 데이터 교환에 사용합니다. 데이터를 앞뒤로 셔틀하기 위해 XML 변환 / 교환 시스템을 구축합니다. 그것은 잘 작동합니다.

XML은 본질적으로 나쁘지는 않지만 XML을 사용하여 "좋은"솔루션을 디자인하는 것은 쉽지 않다는 것을 인정합니다.


5

"XML의 본질은 이것입니다. 해결하는 문제는 어렵지 않으며 문제를 잘 해결하지 못합니다." -Phil Wadler, POPL 2003

내 개인적인 의견은 유효성 검사, 스키마, XSLT 및 나머지 추악한 것들에 신경 쓰지 않고 파일 크기를 작게 유지하는 한 (그렇지 않으면 구문 분석이 느려집니다) XML을 잘 사용할 수 있다는 것입니다 (예 : INI 파일을 사용하는 대신 응용 프로그램을 구성하기위한 것입니다).


4

내 경험상 사람들은 주로 기술 자체가 아니라 사용 방식에 대해 불평합니다.

사람들이 불평하는 부풀고 느린 비트는 일반적으로 정보를 가져 오는 데 사용되는 라이브러리 / 메소드입니다.

디스크에 저장하거나 (데이터베이스 또는 이진 직렬화없이) 소량의 구조화 된 정보를 저장하거나 다른 응용 프로그램 (기본적으로 SOAP도 설명)에 전달할 때 사용합니다.


2

그 이유는 다음과 같습니다.

여러 이기종 시스템이 통신하는 데 사용할 수 있는 표준 "인터페이스" 입니다. "인간"판독 가능 ( 종종 , 5MB XML을 쳐다보십시오)

그 이유는 다음과 같습니다.

부풀어 오르고 더 큰 크기 = 더 많은 대역폭 = 더 많은 $$

다른 이유가 있습니다. 모두가 다른 그립을 가지고 있습니다 ...


4
@Darknight : 나는 도전하는 인간 (개인 초조) ... 당신 XML을 엔티티를 던져 읽을 수를
매튜 M.

1
나는 XML이 본질적으로 부풀어 오른 것으로 생각하지 않지만 구현은 그렇게한다. XML-RPC가 불필요한 팽창으로 인해 특히 심각하다는 것을 알았습니다.
HorusKol

3
@HorusKol : <advanceAcceptanceIndicator>Y</advanceAcceptanceIndicator>비율 데이터 / 마크 업이 너무 낮습니다. 나는 이것을 "부풀어"라고 부릅니다. 예를 들어 JSon은 절반 만 부풀어 올 것 advanceAcceptanceIndicator: "Y"입니다. 태그 사이의 텍스트 가 유효 하다는 사실도 있기 때문에 Xml을 읽을 때이 cruft로 무엇을 해야할지 결정해야 \n\t\t\t하며 솔루션은 일반적으로이를 처음부터 관심이 없었기 때문에 무시해야합니다.
Matthieu M.

1
@HorusKol : 부울 값이라고 말한 적이 없으며 단지 단일 문자 일뿐 value입니다. 태그.
Matthieu M.

1
"부풀어 오르고, 더 큰 크기 = 더 많은 대역폭 = 더 많은 $$"압축이 아직 구현되지 않은 것 같습니다.
Andy

2

다른 기술과 마찬가지로 사용 가능한 도구와 라이브러리가 많이 있습니다.

XML이 마음에 들지 않습니다. 특히 사람들이 읽을 수 있다고 말하면 사람들이 읽을 수 있다고 말하면 농담이나 생각하거나 XML을 속성에 포함하려고 시도했을 때 XML을 읽지 않았습니다. 읽을 수 없습니다. 또한 중복 엔드 태그와 자유 텍스트와 데이터를 혼합하는 기능으로 인해 낭비되는 공간이 얼마나 놀라운 지 ...

그러나:

  • Xml을 지정할 수 있으며 (xsd) Xml 데이터의 적합성을 확인하는 도구를 사용할 수 있습니다
  • Xml을 지원하는 많은 도구 (텍스트 편집기 등)
  • Xml을 지원하는 많은 라이브러리 (모든 프로그래밍 언어에서)

또한 대부분의 경우 우선 순위라는 이점이 있습니다. Xml에서 이미 웹 서비스를 제공하고 있고 새로운 서비스를 요청하는 경우 Xml에서 수행 될 것입니다.


5
XML은 이진 또는 위치 또는 쉼표로 구분 된 데이터보다 더 읽기 쉽습니다.
FrustratedWithFormsDesigner

순진한 사용자에게만 해당됩니다. 일부 데이터가 누락 된 레코드를 찾기 위해 수백 개의 레코드를 시각적으로 스캔 해야하는 경우 고정 길이 레코드 블록에서 빈 태그를 찾는 것보다 많은 요소와 속성을 잃어 버리는 것보다 빈 열을 찾는 것이 좋습니다.
TMN

1
@FrustratedWithFormsDesigner : 실제로 데이터에 의존합니다. Xml은 정보의 특성을 적절한 정보 근처에 포함시킵니다. 함수형 프로그래밍 언어를 살펴보면 (Haskell) :과 같은 것을 data Person = Person { surname :: String, firstName :: String, age :: Int }Person "Doe" "John" 42수 있습니다. 읽을 수 있고 많은 균열을 피하지만 쉼표로 구분됩니다.
Matthieu M.

1
좋아, 귀하의 예제는 마크 업없이 쉽게 읽을 수 있지만 사소한 (8 또는 9 개 미만의 데이터 요소라고 말하면) 예제는 모든 형식 (이진 제외 제외)을 지원하도록 만들 수 있습니다. 메인 프레임의 데이터 피드는 위치로 구분 된 문자열 (대부분 숫자 코드 일뿐) 로 시작되며 XML로 변환 된 후 읽고 디버깅하고 관리하기 가 훨씬 쉽습니다. 당신이 말했듯이, 그것은 의존 할 수 있습니다 ...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner : 그렇습니다. 정확히 제 요점입니다.) XML에 대한 풍부한 생태계가 있기 때문에 하나의 도구 / 라이브러리 세트 만 유지 관리하기가 쉽기 때문에 사람들은 일반적으로 모든 것을 위해 XML을 사용합니다. 개인적으로, 나는 XML보다 JSon을 선호하지만 들여 쓰기없이 다시 한 번 지저분한 일이 있습니다 .p
Matthieu M.

-1

XML은 사람이 관리해야하는 파일에는 적합하지 않습니다. 마크 업과 내용을 시각적으로 구분하지 않으므로 읽기가 어렵습니다. 특수 목적 편집기없이 올바르게 작성하는 것은 지루합니다. XML 문서의 오류는 치명적입니다. XML 문서는 부분적으로 처리 할 수 ​​없습니다. XML 파일이 유효하지 않은 경우 결과 오류 메시지가 도움이되지 않는 경우가 많습니다.

사람이 유지 관리 해야하는 파일의 경우 JSON, YAML 또는 소스 코드를 일부 해석 언어 (Python, Ruby, Groovy 등)로 사용하는 것이 좋습니다. 레거시 코드에 대한 XML 구성을 생성하는 좋은 방법은 Groovy MarkupBuilder를 사용하는 것입니다. 또 다른 좋은 선택은 도메인 별 언어를 만드는 것입니다. 이것은 Ruby, Groovy 및 기타 여러 언어로 수행하기가 매우 쉽습니다.


8
난 당신이 XML의 요점을 놓치고있는 것은, 마크 업 생각 입니다 내용. XML의 목적은 데이터의 의미를 설명하는 것입니다. 예를 들어 전화 번호가있는 경우 유선 전화 번호 또는 휴대 전화 번호로 태그를 지정하면 다른 사람이 사용할 수있는 컨텍스트가 추가됩니다. 또는 그 문제에 대해 텍스트 주위에 전화 태그를 추가하면 휴대 전화에서 해당 번호를 호출 할 수 있습니다. 다른 점에 대해서도 동의하지 않습니다. XML 문서 작성은 일반적으로 매우 간단합니다. 오류 메시지는 항상 올바른 형식과 관련이 있으며, 하루 종일 JSON을 통해 xml을 편집해야합니다.
Homde

@konrad 전화 예제는 HTML에 유효합니다.
Florian F

"XML 문서의 오류는 치명적이며 XML 문서를 부분적으로 처리 할 수 ​​없습니다." 그렇습니다. 그것은 XML의 관점에서 큰 차이입니다.
Andy

@Andy XML이 사람에 의해 작성되었고 응용 프로그램에 "잘못된!"이라는 메시지가 표시되면 쓸모가 없습니다. 인간 편집자는 오류가 감지 된 행을 알아야합니다.
케빈 클라인

여러 도구를 사용하면 오류가 감지되는 줄과 문자를 정확하게 알 수 있습니다. 예를 들어 Note ++++의 XML 도구. .Net은 .config 파일의 위치를 ​​정확하게 알려줍니다. API에 대해 이야기하고 있다면 XML의 장점 중 하나는 API 개발자가 XSD를 제공 할 수 있다는 것입니다. 또한 유효한 XML 구문을 보장하는 것 외에 속하지 않는 요소가 있는지 여부를 알려줄 수도 있습니다. 필기 요소 인 json을 사용하는 것이 훨씬 쉽습니다.
Andy

-2

사람이 읽을 수있는 동시에 구문 분석이 비교적 쉽습니다.

그리고 멋진 파서 (예 : Xerces {c ++})를 쉽게 사용할 수 있습니다.


2
문서가 작 으면 쉬워요. 메모리에 합리적으로 들어가기에는 너무 큰 문서를 구문 분석해야 할 경우 상황이 어두워집니다.
TMN

나는 인간의 가독성 부분에 의문을 제기했다. 동등한 JSON을 읽는 것보다 XML을 읽는 데 너무 많은 노력이 필요합니다.
cmaster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.