공룡호가 사는 세상 이야기

내가 얘기 하나 해줄까?
옛날에 어떤 멍청한 놈이 사과를 훔치다가 걸렸어,
근데, 사과밭 주인이 여기서 제일로 큰 사과를 따오면은
없었던일로 해주겠다는거야
그래서 사과를 따러 갔는데
딸라고 하면 옆에 있는 사과가 더커보이고,
또 딸라고 하면 더 큰 사과사 있는것 같고,
결국에는 하나도 못따고 시간만 다 지나버린 거야
무슨 말인지 알겠어?

놓치고나서 후회하지마라

 

있을때는 절대로 모르는거다
헤어져봐야 아는거다, 얼마나 사랑했는지

_사랑을 놓치다

'일상다반사' 카테고리의 다른 글

  (0) 2008.09.26
간만에 찾은 그 곳.  (1) 2008.09.17
영화 '놈놈놈' 감상평  (0) 2008.08.03
don't let me be misunderstood - Santa Esmeralada  (0) 2008.07.21
직장인 분들, 휴일엔 뭘 하시나요?  (3) 2008.04.10

using System;  
using System.Data;  
using System.Data.SqlClient;  
 
public class DB_TEST  
{  
    public static void Main(string[] args)  
    {  
        SqlConnection conn = new SqlConnection();  
        conn.ConnectionString =  
            "Server=ip;database=CL_ADMIN;uid=sa;pwd=password;";  
 
       try 
       {  
          conn.Open();  
          Console.WriteLine("데이터베이스 연결성공..");  
         String log = " SELECT * FROM dbo.OB_TEST"; // 쿼리문  
          SqlCommand cmd = new SqlCommand(log, conn); // 적용  
           SqlDataReader rd = cmd.ExecuteReader(); // 쿼리 수행  
 
          while (rd.Read()) //한줄씩 잃기  
          {  
            Console.WriteLine(String.Format("{0}, {1}", rd[0],rd[1]));  
            //내용 출력하는 부분         
                 
          }  
         rd.Close();  
 
       }  
       catch 
       {  
 
            Console.WriteLine("데이터베이스 연결 실패..");  
        }  
        finally 
        {  
            if (conn != null)  
            {  
                conn.Close();  
            }  
            Console.WriteLine("데이터베이스 연결해제");  
 
        }  
    }  
}

프로젝트 문서화는 소프트웨어 제품을 내 놓을 때, 종종 필요악이 됩니다.
참 맞는 말이다. 개발 할 시간도 없는데 언제 문서까지 만들고 있을까... 실제로, 학부생 때, 프로젝트를 진행 하면서, 중간 보고 때 마다 진척 상황를 문서화 해야 하는 사실이 너무나 귀찮고 어려웠다. 왜 하는 지도 몰랐었던 때가 있었는데, 얼마 후, 코드가 모두 담겨 있는 USB 메모리 스틱을 분실했다. 물론, 백업을 해 두지 않은 잘못이 크긴 하지만, 절망적이었다. 6개월 간의 코드를 분실했다고 생각해 보라.
형식도, 정형화도 되어 있지 않은 내 나름대로의 문서였지만, 나는 그 간의 문서들을 기초로 다시금 코드를 작성했고, 기간은 한 달도 채 걸리지 않았다. 그러나 여전히 필요악인 건 사실인..가(?)

문서화는 중요하다. 진행 중인 프로젝트의 팀원이 변경 되거나, 통채로 중지했다 다시 시작하거나, 실수로 데이터를 유실했을 여러가지 경우에 대해서 문서는 정말 중요한 수단이 된다. 그러나, 개발 할 시간도 부족한데, 일일이 문서를 만드는 것을 좋아 할 개발자가 어디있겠는가.. 비슷한 맥락에서 다음 내용을 보자.

내 경험에 비춰봤을 때, 두 개의 핵심 문제 때문에 소프트웨어 개발 문서화가 병들고 있다. 첫 번째는 아무도 그것을 읽지 않을 것이라는 가능성 때문이다. 두 번째로 흔한 문제는 문서 작성 시기가 거의 대부분 지연된다는 것이다.

그러면 문서작성을 자동화 하는 것을 생각해 볼 수 있다. 코드가 작성될 때 마다, 버튼 한 번으로 문서를 작성할 수 있다면, 그것을 항상 최신 상태로 유지함으로써 프로젝트에 참여한 모든 인원들 그리고 사용자 까지도 더 유용하게 만들 수 있다.
과연, 어떻게 그것을 자동화 할 수 있을까? dW에서 그 해답을 찾아보는건?

원문보기
http://www.ibm.com/developerworks/kr/library/j-ap06108/

유닉스에서 셸이란 명령줄이라고도 하는데, 운영체제 상에서 다양한 운영체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 사용자와 운영체제의 내부(커널) 사이의 인터페이스를 감싸는 층이라는 의미에서 셸 이라는 이름이 붙여졌다. 셸은 그 종류가 다양한데, 그 종류별로 세부적인 기능의 차이들이 조금씩 존재한다. 또한, 셸 스크립트 문법도 조금씩 다른데, 사용자 별로 자신에게 익숙한 셸이 하나씩은 있기 마련이다.

dW에서 소개하고 있는 배시(bash) 셸은 거의 모든 유닉스기반에서 활용 가능한데, 이번 튜토리얼에서는 배시 셸에 대한 간략한 역사, 주요 기능을 다루며, 유닉스 파일시스템, 디렉토리와 파일 조작방법 등을 설명하고 있다.

  • 배시 개괄
  • 배시에서 명령 행 프롬프트로 작업하기
  • 배시에서 파일과 디렉터리 다루기
  • 배시 개인화하기
  • 배시 작업 제어

이 튜토리얼을 읽기 위한 시스템 요구 사항은 없다. 단지 글을 읽고 배시를 익히면 된다. 하지만 이 튜토리얼을 최대로 활용하려면 튜토리얼이 제공하는 기법을 시도할 필요가 있다. 이렇게 하려면 버전 2.05 이상인 동작하는 배시 셸이 필요하다. 컴퓨터에 설치된 배시 셸 버전을 모른다면, 배시 셸 홈 페이지를 방문해 필요한 정보를 얻기 바란다.

원문 보기
http://www.ibm.com/developerworks/kr/library/tutorial/au-dw-au-bash-i.html

NIS(Network Information Service)는 유닉스, 리눅스 사이에서 시스템 파일 등을 NIS map 형태로 도메인에 참가하고 있는 이들끼리 공유하는 서비스이다. 방법은 NFS, automounter 등이 있다. 유닉스와 리눅스는 비슷하나, 두 시스템을 통합하는 과정을 어렵게 하는 몇 가지 중요한 차이점이 있다.
아직도 NIS가 무엇인지, NIS로 둘을 통합하는 것이 과연 어떤 의미를 지니는지 잘 모를 것이라 생각한다.

좀 더 자세히 이야기 해 보자. 최초 SUN에서 처음 개발되어 현재는 거의 모든 UNIX 시스템에서 사용되는 대표적인 통합 서비스이다. 기본 개념은 서버에 저장된 /etc 환경파일 정보를 유닉스 클라이언트들이 공유하는 서비스이다. 보통은 윈도우즈의 도메인 개념과 비슷한데, 서버에 저장된 사용자들은 클라이언트에서도 로그인 및 서비스를 이용할 수 있다는 의미가 된다.
유닉스 서버와 워크 스테이션들이 단일한 공간에 많이(10대 이상) 설치되어 있는 경우, NIS를 이용하면 편리하나, 실제로 많이 쓰이지는 않는다. 그래서 연구기관이나 학교같은 실습 장비가 많은 곳에 주로 사용되기도 한다.
이제, 조금 감이 오는지?

이러한 NIS를 이용하여, 유닉스, 리눅스간 통합에 대해서 dW에서 다루고 있다. 구조는 다음과 같다.

NIS 마스터와 슬레이브 구조

이를테면, 사용자가 암호를 변경할 때, 사용자가 NIS 데이터베이스에 직접 변경을 가하면 NIS 마스터로 변경 내역이 전해지며, 데이터베이스를 갱신하고 슬레이브 서버에 변경 내역을 전파하게 된다. NIS 데이터베이스에 변경이 일어나면 변경이 일어난 시점에서 슬레이브 서버로 자동으로 전파되며, yppush 명령을 사용하여 수동전파가 가능하다. 그럼, NIS 구성에 대해서 알아보자. NIS는 무엇보다 OS나 머신에 무관하게 파일시스템을 통해 각자의 파일과 자원을 계속 사용할 수 있다는 점이다.

자세한 내용과 구성방법 등에 대해서는 아래에서 확인하자.
http://www.ibm.com/developerworks/kr/library/au-linuxtogether/index.html

SSH setting for Solaris 8

Introduction:
Secure shell (SSH) is a protocol that provides a secure, remote connection to any device with ssh support. SSH is a substitute to Berkeley r-tools like telnet, rlogin, rsh and rcp which are not secure. SSH provides more security to any data that is being transported to the Internet by providing more authentication, encryption and authorization procedures. There are currently two versions of SSH available, SSH Version 1 and SSH Version 2

Required packages:
All of the required packages of this tutorial is available from http://www.sunfreeware.com

openssh
openssl (SSL)
prngd (Psuedo Random Generator Daemon)
zlib (Z library)

Installation:
#pkgadd -d openssl-0.9.6c-sol8-sparc-local

The following packages are available:
1 SMCosslc openssl
(sparc) 0.9.6c

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:

#pkgadd -d prngd-0.9.23-sol8-sparc-local

The following packages are available:
1 SMCprngd prngd
(sparc) 0.9.23

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:

#pkgadd -d zlib-1.1.4-sol8-sparc-local

The following packages are available:
1 SMCzlib zlib
(sparc) 1.1.4

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:

#pkgadd -d openssh-3.1p1-sol8-sparc-local

The following packages are available:
1 SMCossh openssh
(sparc) 3.1p1

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:

Startup Scripts:
Create a startup script for the ssh daemon.
/etc/init.d/ssh

#! /bin/sh
#
# start/stop the secure shell daemon

case "$1" in

'start')
     # Start the ssh daemon
     if [ -f /usr/local/sbin/sshd ]; then
          echo "starting SSHD daemon"
          /usr/local/sbin/sshd &
     fi
     ;;

'stop')
     # Stop the ssh deamon
     PID=`/usr/bin/ps -e -u 0 | /usr/bin/fgrep sshd | /usr/bin/awk '{print $1}'`
     if [ ! -z "$PID" ] ; then
          /usr/bin/kill ${PID} >/dev/null 2>&1
     fi
     ;;

*)
     echo "usage: /etc/init.d/sshd {start|stop}"
     ;;

esac

Make the script executable and create a startup script on run level 2.

#chmod +x /etc/init.d/sshd
#ln 뻮 /etc/init.d/sshd /etc/rc2.d/S99sshd

Create a startup script for the pseudo random generator daemon.
/etc/init.d/prngd

#! /bin/sh
#
# start/stop the pseudo random generator daemon

case "$1" in

'start')
     # Start the ssh daemon
     if [ -f /usr/local/bin/prngd ]; then
          echo "starting PRNG daemon"
          /usr/local/bin/prngd /var/spool/prngd/pool&
     fi
     ;;

'stop')
     # Stop the ssh deamon
     PID=`/usr/bin/ps -e -u 0 | /usr/bin/fgrep prngd | /usr/bin/awk '{print $1}'`
     if [ ! -z "$PID" ] ; then
          /usr/bin/kill ${PID} >/dev/null 2>&1
     fi
     ;;

*)
     echo "usage: /etc/init.d/prngd {start|stop}"
     ;;

esac

Make the script executable and create a startup script on run level 2.

#chmod +x /etc/init.d/prngd
#ln 뻮 /etc/init.d/prngd /etc/rc2.d/S99prngd

# /etc/init.d/prngd start
starting PRNG daemon
Info: Random pool not (yet) seeded
Could not bind socket to /var/spool/prngd/pool: No such file or directory
# mkdir -p /var/spool/prngd
#/etc/init.d/prngd start
starting PRNG daemon
# Info: Random pool not (yet) seeded
#
Next is to start the actual ssh daemon,
# /etc/init.d/sshd start
starting SSHD daemon
Could not load host key: /usr/local/etc/ssh_host_key
Could not load host key: /usr/local/etc/ssh_host_rsa_key
Could not load host key: /usr/local/etc/ssh_host_dsa_key
Disabling protocol version 1. Could not load host key
Disabling protocol version 2. Could not load host key
sshd: no hostkeys available -- exiting.
#

The errors above are due to the fact that we didn't create any key pairs for our ssh server.

Create a public key pair to support the new, DSA-based version 2 protocol

# /usr/local/bin/ssh-keygen -d -f /usr/local/etc/ssh_host_dsa_key -N ""

Generating public/private dsa key pair.
Your identification has been saved in /usr/local/etc/ssh_host_dsa_key.
Your public key has been saved in /usr/local/etc/ssh_host_dsa_key.pub.
The key fingerprint is:
00:91:f5:8a:55:7c:ac:ff:b7:08:1f:ce:23:aa:f2:79 root@solaris8

Create a public key pair to support the old, RSA-based version 1 protocol

# /usr/local/bin/ssh-keygen -b 1024 -f /usr/local/etc/ssh_host_rsa_key -t rsa -N ""
Generating public/private rsa1 key pair.
Your identification has been saved in /usr/local/etc/ssh_host_rsa_key.
Your public key has been saved in /usr/local/etc/ssh_host_rsa_key.pub.
The key fingerprint is:
8e:b0:1d:8a:22:f2:d2:37:1f:92:96:02:e8:74:ca:ea root@solaris8

Edit ssh daemon configuration file /usr/local/etc/sshd_config, enable protocol 2 and 1
Uncomment the line, that says

protocol 2,1

# /etc/init.d//sshd start
starting SSHD daemon
#

Your ssh server is now ready to accept a ssh session.

예상치 못한 종료 등의 경우로 솔라리스의 파일 시스템이 손상되었을 때, 재부팅시 "Read-only File system"이라는 에러가 발생하는 경우가 있다. 이럴 경우, 이미 마운트되어 있는 파일 시스템을 읽기/쓰기 권한으로 다시 마운트 해줘야 한다.

# umountall
# mount -F ufs -o rw,remount /

'유닉스' 카테고리의 다른 글

pkgadd 오류: admin 파일 <default>를 열 수 없습니다.  (0) 2008.11.11
SSH setting for solaris8  (0) 2008.08.26
Solaris10 sd.conf 동적으로 다시 읽기  (0) 2008.05.26
Dos Attack On UNIX  (0) 2008.05.08
디스크 Dump & Restore  (0) 2008.05.04

1930년대 만주를 배경으로 펼쳐지는 영화 '놈놈놈'은 현상금 사냥꾼(좋은놈), 마적단 두목(나쁜놈), 열차털이범(이상한 놈) 이 3명이 보물지도(?)를 두고 쟁탈하는 과정을 그렸다.
그 이상 스토리는 더 말할 것도, 덜 말할 것도 없이 굉장히 심플하다. 혹자는 스토리가 너무 빈약하다고도 한다.
사실, 영화제에서 수상하는 영화는 대부분 재미 보다는 탄탄한 배경과 스토리를 가진 영화가 주류를 이룬다.
이 영화 또한 그럴 것이라 예상했으나, 예고편에서 볼 수 있었던 액션 씬 들은 탄탄한 스토리에 재미까지 부가되어 있지 않을까 하는 기대감을 심어주기에 충분했다.

스틸이미지
이상한 놈의 본명은 '윤태구'다. 그런데 나는 친구 '윤대규'와 영화를 보았다. 거 참 이상하지.(웃음)
영화를 보고 나와, 비오는 밤 길을 걸어 집으로 향하면서 여러 가지 생각을 했다.
영화는 내 기대와는 다른 방식으로 나를 충분히 채워주고도 남았다.

하지만, 역시나 아쉬움은 있다. 아니, '안타까움'이라는 표현이 더 맞을 것 같다.
지도 하나를 두고 3명이 총질을 해대며 쟁탈전을 벌인다. 그런데 지도에 대한 배경이 너무 부족하다.
'지도 = 보물' 이라는 설정 하나로 끝까지 밀어 붙인다. 너무 지나친 설명과 배경은 장애물일 수 있다. 때로는 생략이 관객의 상상력을 자극하기도 하는 것은 사실이지만, 그래도 지도는 영화의 중심에 있는 핵심 물건이다.
그런데도 지도에 대한 배경은 너무도 부족하다.

스틸이미지
또, 영화는 일제시대가 배경이다. '만주 = 독립운동' 이라는 전제를 하나 두고, 아무런 설명 없이 독립군과 일본군대가 등장한다. 영화가 아무리 코믹 액션물이라지만, 그정도의 짜임새는 있어야 하지 않았을까 하는 생각이 든다.

마지막으로, 영화 중 후반부에 이르면 이병헌(박창이)이 만주 벌판에 앉아 부하들과 음식을 먹는 장면이 나온다. 부하들 중 한 명이 이병헌과 정우성을 두고 누가 최고냐는 논제를 가지고 살짝 빈정대는데, 이 때 이병헌은 영화 속에서 최고를 다투는 자리에 있음에도 불구하고 졸개와 1:1 겨루기를 시도한다. 물론 결과는 이길 수 밖에 없는 뻔 한 결과인 것은 당연하다. 당연한 장면에서 관객은 긴장하지 않는다. 그리고 말한다. "누가 최고인지 두고보자"고...
하찮은 부하와 두목이 1:1 결투를 하는 장면 자체도 억지스럽거니와 부하를 죽이고 말을 타고 가면서 내뱉은 대사 또한 참으로 아쉽다. "누가 최고인지 두고보자"라니... 더 멋있는 멘트도 있었을 텐데...
그보단, 밥을 먹으며 빈정대는 부하의 숟가락을 총으로 쏴 맞춘다거나 하는 설정이 낫지 않았을까?
조금만 빈정대도 죽여버리는 나쁜놈의 설정이라면 굳이 정당하게 1:1결투를 할 필요가 있었을까? 그냥 쏴 버려도 되었을 것을...

스틸이미지
이러한 안타까움이 남지만, 그래도 영화는 최고다.
일반 대중에게 필수 요소인 '재미'가 있다. 카메라 앵글도 수준급이다. 특히나, 정우성이 로프에 매달려 공중을 왔다 갔다 하면서 총을 쏴대는 장면은 자칫, 지나친 와이어 액션으로 치부될 수 있었으나, 멋진 카메라 앵글로 극복했다. 이병헌과 정우성이 진지한 대사들 던지며 영화의 분위기를 가라앉히려 하면, 송강호는 특유의 대사와 액션으로 코믹성을 가미시키는 감초 역할을 충분히 해 낸다. 영화의 액션들도 전혀 어색함이 없다. 우리나라의 액션 씬도 이제 이만큼 발전했구나 하는 생각도 들게 된다.

이 영화가 과연 대중에게는 어떤 평가를 받을까? 이 질문에 대한 해답은 아직도 진행중이다.
이병헌과 정우성 그리고 송강호라는 3명의 톱스타급 배우가 등장하는 것만으로도 충분히 즐겁거니와 만주 벌판에 울려퍼지는 말발굽소리와 총소리는 한국판 웨스턴 무비라는 말을 듣기에 손색이 없다는 '박성희'씨의 말에 나는 충분히 공감한다.

'일상다반사' 카테고리의 다른 글

간만에 찾은 그 곳.  (1) 2008.09.17
사랑을 놓치다  (1) 2008.09.17
don't let me be misunderstood - Santa Esmeralada  (0) 2008.07.21
직장인 분들, 휴일엔 뭘 하시나요?  (3) 2008.04.10
어수선 했던 주말  (0) 2008.04.07

포스팅을 해 놓고 비공개로 설정된 것을 몰랐다니...-_- 어쨌든 이달 마지막 리뷰.
간단한 이야기를 하나 해 보자.

'갑' 기업의 새로운 업무 프로세스를 '을'기업에서 저렴한 비용으로 개발을 하게 되었다.
많은 회의 끝에 시스템이 도입되었고, 해당 시스템 위에서 6개월간 개발되었다.
6개월 후, 프로그램 테스트에서 결함이 발견되었다. 다름아닌 '성능'이었다.
개발의 완료단계에서 '성능'이 이슈가 되어 '을'은 굉장히 당황스러웠다.
결국은 시스템의 하드웨어를 증설하여 성능 문제를 어느정도 개선시킬 수 밖에 없게 되었다.

이러한 사례를 가끔 보게되는데, 요즘같은 고성능 하드웨어 시대에서 조차 프로그램 성능을 고려하지 않을 수는 없다. dW에서 자바코드 벤치마킹을 두 편에 걸쳐 연재하게 되었는데, 그 첫번째가 번역되었다.

Listing 1. 성능 수수께끼

protected static int global;

public static void main(String[] args) {
    long t1 = System.nanoTime();

    int value = 0;
    for (int i = 0; i < 100 * 1000 * 1000; i++) {
        value = calculate(value);
    }

    long t2 = System.nanoTime();
    System.out.println("Execution time: " + ((t2 - t1) * 1e-6) + " milliseconds");
}

protected static int calculate(int arg) {
    //L1: assert (arg >= 0) : "should be positive";
    //L2: if (arg < 0) throw new IllegalArgumentException("arg = " + arg + " < 0");

    global = arg * 6;
    global += 3;
    global /= 2;
    return arg + 2;
}


 다음 중 어느 버전의 실행 속도가 가장 빠를까?

  1. 코드를 그대로 둔다(calculatearg를 테스트하지 않음).
  2. L1만 코멘트를 해제하지만 조건 확인(assertion)은 비활성화하여 실행(JVM 옵션 중 -disableassertions 사용. 이는 JVM의 기본 동작임)
  3. L1만 코멘트를 해제하지만 조건 확인은 활성화하여 실행(JVM 옵션 중 -enableassertions 사용)
  4. L2만 코멘트를 해제한다.

적어도 테스트를 전혀 하지 않는 A가 가장 빠를 것이라고 짐작할 것이다. 그리고 좋은 동적 최적화 컴파일러가 죽은 코드인 L1은 제거할 것이므로, 조건 확인을 끈 B쪽이 A에 근접한 성능을 보일 것이라 짐작하리라. 그렇지 않은가? 불행히도 이러한 짐작은 틀렸다. 위의 코드는 Cliff Click이 2002 자바원(JavaOne)에서 소개한 것을 수정하였다. 그가 발표한 실행 시간은 다음과 같다.

놀라운 결과와 다양한 이슈들은 아래 링크에서 확인하자.
링크 : http://www.ibm.com/developerworks/kr/library/j-benchmark1.html#listing1

마음이 급하여 Part 2의 원문을 확인하고 싶으신 분들은 아래로.
링크 : http://www-128.ibm.com/developerworks/java/library/j-benchmark2/

'IBM dW review' 카테고리의 다른 글

배시 셸로 작업하기  (0) 2008.08.31
유닉스와 리눅스 함께 어울리기.  (0) 2008.08.31
Ajax에서 XML 처리하기, Part 3  (0) 2008.07.30
10가지 더 좋은 유닉스 습관  (0) 2008.07.30
Ajax에서 XML 처리하기, Part 2  (0) 2008.06.30

지난 2달간, Ajax에서 XML을 처리하는 방법(Part 1, Part 2)을 리뷰했었다.
이제 연재의 마지막인 Part 3가 소개되었다.
Part 1 링크 : http://www.ibm.com/developerworks/kr/library/x-xmlajaxpt1
Part 2 링크 : http://www.ibm.com/developerworks/kr/library/x-xmlajaxpt2

1. DOM 트리 탐색 - Part 1
2. 서버쪽 XSLT - Part 2
3. 클라이언트쪽 XSLT - Part 2
4. JSON과 동적 스크립트 태그

Part 3에서는 JSON과 동적 스크립트 태그를 이용하는 방법을 알아본다.
위 1,2,3 방식 모두 Ajax 에서 자바스크립트 XMLHttpRequest 객체를 사용하는 방법이었다. 즉, 모두 일종의 웹 프록시를 사용하여 원격지 서버의 XML 데이터를 가져오는 방법으로 Ajax의 '같은 도메인'문제를 해결했다.
Part 1에서도 언급되었고, Part 3에서도 잠깐 언급하고 있는데 '같은 도메인'문제는 Ajax프로그램이 원래 페이지를 가져온 서버로만 XMLHttp Request를 보내야 한다는 보안 제약을 말한다. 그러나 현실적으로는 Ajax 프로그램에서 가져오는 정보는 한 서버에 국한되지 않는다. 그래서 흔히 웹 서버 구성을 변경하거나 특수한 스크립트를 생성하는 방법으로 '같은 도메인' 문제를 해결한다.
그러나, 또 다른 방법이 있다. 해당 문제를 우회하여 프로그래머가 위와같은 제약사항에 신경쓸 필요가 없다.
Part 3에서는 JSON을 이용하여 이 문제를 해결한다.

JSON은 JavaScript Object Notation 을 줄인 약자로, 자바스크립트 언어가 기본적으로 이해하는 자료 형식이다. XML과는 달리, JSON은 자바스크립트 코드이므로 별도의 구문 분석이 필요 없다.
Part 1, 2에서도 그랬듯 날씨 정보 NWS(XML)을 가져와 야후 파이프를 이용, JSON으로 변환한다.

그림: 야후 파이프
야후 파이프 편집기

JSON으로 변환 후, 해당 변수에 할당하면 코드 내에서 바로 참조가 가능하게 된다.
전체 파이프 라인을 보면 다음과 같다.

접근 방식 4가 따르는 파이프라인

자세한 방법 및 수순은 아래 링크에서 확인하도록 하자. 더불어 각 방법의 장단점에 대해서 고민해 보고,
해당 방법을 변형하여 새로운 접근을 만들어 낼 수도 있을 것이다.

Part 3 링크 : http://www.ibm.com/developerworks/kr/library/x-xmlajaxpt3/