본문 바로가기
서버 개발

JSON과 XML에 대해 알아보자

by 현댕5697 2021. 4. 19.
반응형

 

💻 웹 기반 서비스 서버

- 웹 브라우저

- 모바일 웹 브라우저

클라이언트는 서버에 html, css, js, 이미지 등을 요청하여 얻은 데이터를 바탕으로 웹 페이지를 구성함.

 

 

📱 모바일 서버

- 네이티브 앱

웹 처럼 html이 아닌 자체적인 코드를 가지고 화면을 구성함.

html, css, js 등이 필요 없다.

xml, json 등의 포멧의 데이터를 필요로 한다.

화면 이동을 클라이언트(앱)에서 담당해서 라우팅이 필요하지 않다.

 

 

📃 JSON

1. 특징

- 'property: value' 형식

- 문서 크기가 작아서 네트워크를 이용하여 주고 받기에 편리하다

- property의 이름은 중복될 수 없음

{
	'greeting': 'hello',
	title: 'name',
	price: [4,5,6]
}

 

2. 요청과 응답

- JSON 생성: JSON.stringfy() 함수를 사용

- JSON 파싱: JSON.parse() 함수를 사용

var http = require('http');

var movieList = [{title:'아바타', director:'제임스 카메론'}];

// 서버 생성
http.createServer((req, res)=>{
	// post
	if(req.method.toLowerCase()=='post') {
		var buffer = '';
        
		// event handling
		req.on('data', (chunk)=>{
			buffer += chunk;
		});

		// event handling
		req.on('end', ()=>{
			var parsed = JSON.parse(buffer);
			
			// post된 data 저장
			var title = parsed.title;
			var director = parsed.director;

			movieList.push({title: title, director: director});

			res.writeHead(200, {'Content-Type':'application/json'});
			res.end(JSON.stringify({result:'success'}));
		});
	}
	// get
	else {
		// 서버에 저장된 데이터 반환
		var result = {
			count: movieList.length,
			data: movieList
		};
		
        res.writeHead(200, {'Content-Type':'application/json'});
		res.end(JSON.stringify(result));
	}
}).listen(3000); // port number = 3000 으로 서버를 연다

1) JSON 요청

요청 객체(req)의 body 부분의 JSON을 JSON.parse()를 사용하여 분석한다.

2) JSON 응답

응답 객체(res)의 body 부분에 JSON 데이터를 저장한다. 이를 위해 JSON 데이터를 생성한다.

 

 

📃 XML

1. 특징

- 메타 데이터로 문서 구조를 표현하는 markup 언어

html: 웹 브라우저를 위한 언어로 사람을 위한 렌더링 정보를 포함한다.

xml: 기계해석을 위한 언어로 코드로 분석이 가능하다.

<h1>아바타</h1> //html
<title>아바타</title> //xml

- 오피스 앱이나 안드로이드, ios 레이아웃 정의 파일에서 사용

<feed>
  <entry>
    <title>아바타</title>
    <price currency="USD">$1.5</price>
  </entry>
  <entry>
    <title>아바타2</title>
    <price currency="USD">$1.7</price>
  </entry>
</feed>

 

2. 요청과 응답

기본적인 방식은 JSON의 요청·응답과 비슷하다.

var http = require('http');

var movieList = [{title:'avartar', director:'james cameron'}];

var libxmljs = require('libxmljs');
var jstoxml = require('jstoxml');

http.createServer((req, res)=>{
    if(req.method.toLowerCase()=='post') {
        req.on('end', ()=>{
            var xmlDoc = libxmljs.parseXmlString(buffer);
            var title = xmlDoc.get('/movie/title').text();
            var director = xmlDoc.get('/movie/director').text();
            movieList.push({title:title, director:director});
            res.writeHead(200, {'Content-Type':'application/xml'});
            res.end(jstoxml.toXML({result:'success'}));
        });
    }
    else{
        res.writeHead(200, {'Content-Type':'application/xml'});
        var data = {count:movieList.length, data:movieList};
        var result = jstoxml.toXML({result:data});
        res.end(result);
    }
}).listen(3000);

1) xml 요청

요청 받은 데이터를 파싱해서 분석하는 과정이 필요

- xml 파싱: xml 파싱 모듈이 필요하다

  → libxmljs, xml-stream, xmldoc

- xml 파싱은 여러 종류가 있지만 그중에서 DOM 파싱을 이 글에 작성하였다.

- DOM parser: 부모 자식 관계의 노드들로 구성되어 있는 데이터(ex: feed->entry->title,price)를 이러한 관계를 이용하여 파싱한다.

 

2) xml 응답

xml 데이터를 생성하는 과정이 필요

- xml 생성: xml 생성 모듈이 필요하다

   jstoxml

 

* libxmljs 모듈이 설치가 안되서 실제로 구동하는지 확인을 할 수 없었다...ㅠㅜㅠ

blog.naver.com/PostView.nhn?blogId=brilliantjay&logNo=221790257116&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

 

libxmljs 문제

​https://github.com/libxmljs/libxmljs/releaseshttps://github.com/nodejs/node-gyp/issues/611https://...

blog.naver.com

어떤 분이 블로그에 해결 방법 링크들을 모아두신 것 같은데 나중에 한 번 해결해봐야 겠다....

 


 

* 본 게시물은 Tacademy 영상을 참고하여 작성되었습니다.

tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=71 

 

Node.js 프로그래밍 | T아카데미 온라인강의

Node.js를 이용해서 모바일 서비스에 필요한 서버 작성하는 방법을 다룹니다. 비동기 I/O와 이벤트 기반의 자바 스크립트와 Node.js 아키텍처 구조, Node.js 코어..

tacademy.skplanet.com

 

반응형

'서버 개발' 카테고리의 다른 글

개발 방법론에 대해 알아보자  (0) 2021.05.16
OAuth로 구글 로그인을 구현해보자  (0) 2021.05.08
MongoDB 연결하기  (0) 2021.04.21
Express란 무엇일까?  (0) 2021.04.20
Node.js 이해하기  (0) 2021.04.19

댓글