히라노 아야 - 스즈미야 하루히의 우울의 성우

바로 앞 포스팅에서 히라노 아야의 성우일때와 평소 목소리의 갭에 충격 과 놀라움을 금치 못하다가
문득 히라노 아야에 대해 더 알고 싶어져서 여기저기서 자료를 긁어 모아 봤습니다.

히라노 아야
平野綾 (히라노 아야)
구 도쿄 아동극단
현 스페이스 크래프트 소속
1987년 10월 8일 아이치현 출생
신장 : 159cm
3사이즈(...) : B74-W64-H79
혈액형 : O형
취미 : 만화대사 암기, 상형문자 읽기(?!)
특기 : 피아노, 탭댄스


우선, 2007년 1월 4일 발매된 보이차(voicha) 와의 인터뷰와 DVD영상

- 성우가 된 계기는요?
히 : 성우 일을 처음 하게 된 건 소학교 6학년 때. 드라마 속에 애니메이션 부분이 있어 제가 갑자기 아니메가 된다는,
거기다 대사도 많은 역할이라…… 처음부터 끝까지 모놀로그 같은 역할이었어요. 그걸 들은 애니메 부의 매니
저에게서 '목소리도 재미있는데 애니메 일쪽을 해보면 어떨까?'라는 말을 들은 게 계기가 되었습니다. 저 자신
이 애니메이션이 좋아서 애니를 보고 자랐기 때문에 일로서 스스로의 목표의 하나로 성우가 있었습니다. 그래
서 '꼭 하게 해주세요'라고 말해서 오디션을 받도록 만들었죠 (웃음) 어릴적부터 만화 대사에 아테레코(대사 치기?)
를 한다든지 소설을 소리내어 읽는다든지 하는 연습을 했다고요.

- 배우와 성우의 차이점이라면?
히 : 제 컴플렉스는 얼굴이 동안이라는 점이에요. 어른역을 하고 싶어도 얼굴이 나오는 배우 일을 할 때는 목소리만
어른처럼 되어서 '그 갭을 없애라'는 말을 자주 들어서 그게 고민거리였습니다. 하지만 성우의 경우는 만들어진
캐릭터에 대하여 목소리를 맞추는 거라 역으로 자신을 내보이기 쉬웠습니다. 엄청 성격에도 맞고 또한
'새로운 자신'이 나오는 것 같아요. 본격적으로 성우의 일을 하게 된 건 5년 정도 지나서였지만, 최근 갑자기 일이
많아졌어요. 이 짧은 기간으로 제가 점점 변하고 있다는 것도 알게 되었으니 그만큼 목소리의 폭도 넓히고
연기도 더 공부해야 한다는 것도 알았습니다. 주위 분들을 보고 훔칠 부분은 훔쳐서 (웃음), 자신의 것으로 해야
겠다고 느낍니다.

- 히라노 씨에게 있어 성우 일은 할 만한 일인가요?
히 : 올해로 연예계 들어온지 10년 정도 해왔는데 지금이 가장 즐겁습니다. 스스로에게도 힘을 내야 겠다는 기분이
들고 앞으로 어떤 전개가 기다리고 있을까 어떤 역할을 할 수 있을까 생각하면 정말 즐거워져요. 정말로
매일 충실히 보내고 있습니다. 올해(2006년) 3월에 CD 데뷔를 해서 저만의 스탭분들이 생겨서 솔선하여 노력하지
않으면 안 될 입장이 되었습니다. 노래에 대한 의식도 그렇고, 다른 일에 대해서도 보는 분들이 변했고
하나하나의 일에 대해 책임을 갖지 않으면 안되게 되었습니다. 애니 일에 대해서도 지금까지 보다도 책임감이
늘었다는 느낌이 듭니다.

- 앞으로의 목표가 있다면?
히 : 여러가지 역을 맡게 되어 정말 많은 분들에게 알려질 수 있게 되었습니다. 아직은 멀었지만, 한다면 top을 목표로
하고 싶습니다. 스스로 '여기까지'라고 한계를 정해버리면 거기까지밖에 가지 못한다고 생각하고, 목표로 하는
사람을 정하면 그 사람밖에는 되지 못하니까, 아예 정하지 않았어요. 앞으로도 자신의 페이스로 저다움을 잃지
않도록 하고 싶어요. 지금 자신의 베스트를 이뤄낼 수 있다면 좋겠다고 생각합니다.

- 휴일에는 어떻게 보내고 있나요?
히 : 요즘 빠진 건 아로마오일이나 캔들 정도. 그거하고 가정용 플라네타리움을 설치해서 천장을 별로 채웠죠. (웃음)
또 독서를 좋아해서 미야베 미유키 씨랑 쿄코쿠 나츠히코 씨랑 오노 후유미 씨 등의 추리물을 좋아합니다.
중학생 때부터 엄청 독서를 하게 되어서 그 후로 쭉 이어졌어요. 책이 두꺼우면 두꺼울 수록 좋아요. (웃음)
거기다 철학서 읽는 것도 좋아하거든요. 중학교 때는 사르트르를 좋아했었는데, 도움이 되는 말이 많이
있었죠. 전 '모르는 새' 라든지 '오래 생각해서' 같은 말을 많이 하는데요, 스스로를 붙잡아주는 부분이 있어요.
어쩔 수 없다고 생각하는 게 싫어서 스스로에게도 엄격하게 대하고 있기도 하고, 지금은 엄격한 부분이 대답해
서 돌아오는 시기라고도 생각하고 있습니다.

- 마지막으로 팬과 성우를 지망하는 분에게 메시지를 부탁드리겠습니다.
성우 일을 본격적으로 하게 된 후로 저 자신도 모를 정도의 속도로 시간이 흐르고 있습니다. 그런 속에서도 팬 여러분
이 응원을 해주셔서, 제 등을 밀어주고 있어요. 거기다 각 작품에 대한 사랑을 가져주니…….
애니메이션이 인기를 얻고 있는 속에서 자신이 하는 일의 중요함을 이해하게 된 것도, 자신이 어떤 위치에 있는가 하는 점도,
팬 여러분이 가르쳐주셨습니다. 기대를 얻고 있는 것도 요 몇 개월동안에 확실히 알게 되었고,
매번 응원으로부터 힘을 얻고 있습니다.
언젠가 되갚을 수 있도록 앞으로도 열심히 활동할 테니 따스한 시선으로 지켜봐주셨으면 좋겠다고 생각합니다.
성우를 지망하는 분에게 어드바이스 같은 건 제겐 아직 부끄러운 일이지만, 스스로에게 자신을 가지는 부분이 있다면
좋을 거라고 생각합니다. 하나의 일이 여러가지로 이어져 있으니까 목소리를 만드는 것만이 아니라 전체적으
로 자신을 만들어가야 한다는 걸 명심하고 매일 노력한다면 좋지 않을까요. 저도 자신을 갖고 노력하면 좋겠다고 생각합니다.



http://maystorm.egloos.com/1164659에 가보시면 히라노 아야 정보가 잘 정리 되어 있습니다.

めちゃめちゃ明るい女... 점점 빠져드는데...(이거 이거 위험하잖아!!)
우~~~ 히라노 아야의 블로그는 어디냐~~

공식홈페이지
綾魂 - 히라노 아야 오피셜 홈페이지
http://www.bye-nee.jp/ (Springs 오피셜 홈페이지)
2007/06/13 15:23 2007/06/13 15:23
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

스즈미야 하루히 성우 히라노 아야 인터뷰 동영상

스즈미야 하루히의 우울에서 주인공 스즈미야의 성우역을 맡은 히라노 아야의 인터뷰 영상.
18살, 이제 대학생이란 사실도 놀랍고 방송활동을한지 9년이나 됐다는데 더 놀랐다.
실제 그녀의 목소리는 진짜 완전 깬다.

2007/06/13 02:28 2007/06/13 02:28
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 헙..이거 완전 깨네요.ㅋㅋㅋ-_-;;;

    근데 블로그가 파폭에서 깨져요..ㅠㅠ

  2. 아미료님~~
    찾아 주셨군요~~
    opera 쓰기 시작한 이후로는 파폭을 쓰지 않아서
    몰랐네요.. 바로 확인 해 봐야 겠어요..
    고마워요.

또 한명의 뉴타입..

이건 뭐... 연습한다고 따라갈 수준이 아닌듯...
진정 뉴타입 이십니다...

2007/06/13 01:43 2007/06/13 01:43
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

집과 가족을 안전하게 - 안전수칙 테스트

travelers 홈페이지에서 꽤나 재미있는 플래시를 발견 했습니다.
용량이 좀 되서 로딩에 시간이 좀 걸리지만 들러볼만한 가치가 있습니다.
집에서 지켜야하는 안전수칙이나 방범/보안에 관련된 테스트를 해 볼 수 있도록 아기자기하게 꾸며져있더군요.
총 11가지 테스트를 친절한 해설과 함께 풀어보면서 가족이 안전하고 편안하게 지낼 수 있는
집에 대해 생각 해 보는 계기가 될 수도 있을것 같습니다.



위 플래시무비가 열리지 않으면 travelers 홈페이지 방문 하세요.
2007/06/11 21:45 2007/06/11 21:45
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

특수문자로 표현한 럭키스타 오프닝( Lucky Star OP. )

변환 프로그램을 이용했다고 하는데요..
나름대로 재미있게 표현이 된듯 합니다.




아래는 파이날판타지6 로 표현한 오프닝

2007/06/11 17:06 2007/06/11 17:06
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

로코클럽( rokkor club ) 6월 모델 출사 - 올림픽 공원

지난 9일 로코클럽( rokkor club ) 6월 출사가 있었습니다.
조금 덥긴 했지만, 해가 쨍쨍한, 사진을 담기에 너무 좋은 날이 었습니다.
때마침 보리도 잘 익어 한창 보리베기 작업을 진행 하고 있더군요..
이번 출사 역시 지난 2월 출사 때와 마찬가지로 올림픽공원과 필름여행 조명 전시장에서
약 4시간 반 정도에 걸쳐 진행했습니다.

모델로는 이정희님이 수고 해 주셨습니다.












minolta @7, 50mm, 100mm macro, fuji 160s, kodak portra 160vc, vista 400, 5400hs
2007/06/11 11:20 2007/06/11 11:20
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

미모의 육상선수 앨리슨 스토키 (Allison Stokke) 사진

앨리슨 스토키 Allison Stokke
앨리슨 스토키 Allison Stokke
앨리슨 스토키 Allison Stokke
앨리슨 스토키 Allison Stokke

이름 : 앨리슨 스토키 (Allison Stokke)
출생 : 1989년 3월 22일
출신지 : 미국
직업 : 육상선수
학력 : 뉴포트하버고등학교 재학중
종목 : 장대 높이뛰기

원문출처 : http://chala.freeweb7.com/wp/?p=54

2007/06/10 13:00 2007/06/10 13:00
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

AGLOCO ( 아글로코 ) 광고 뷰바 다운로드가 가능해 졌습니다.

지난번 '나도 새로운 광고수익 모델에 참여해 볼까?' 포스팅을 통해 소개 해 드렸던 아글로코의 광고 뷰바 다운로드를
시작한다는 메일을 agloco측으로부터 받았습니다.
현재 뷰바는 윈도우즈 2000 , XP 그리고 Vista 와 인터넷익스플로러와 파이어폭스에서 동작 한다고 합니다.

아직까지 광고 수입을 어떤식으로 배분하는지에 대한 구체적 언급은 없지만, 한번 뷰바 설치를 해 봐야 겠습니다.


agloco 안내 메일
2007/06/08 17:19 2007/06/08 17:19
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. Blog Icon
    리치팸

    아글로코 하위회원 늘리기 좋은 곳 - 리치패밀리
    http://richfamily.oranc.co.kr/index.html?rich=RICH0174

  2. 리치팸님 방식으로 적극적으로 회원을 유치하는 방법도 있군요..
    저는 하위회원 늘리기엔 관심이 없는지라..
    리치팸님, 좋은 결실 있으시길 바랍니다.

정규식을 이용한 문서 편집

문서편집이나 프로그래밍, 코딩 작업을 할때 단순 반복 작업을 할 경우들이 있다. 편집할 내용이 얼마 안된다면 빠른 손동작으로 수정을 하면 되겠지만 편집할 분량이 많은 때 손동작 만으로 편집을 하게 될 경우 몇날 몇일을 수정하고 확인해야 하는 지루한 작업이 될 수 있다. 어찌 보면 단순 반복작업인데 바꿔야할 내용도 편집할 분량도 많다면 컴퓨터 초보자에게는 난감한 일이 아닐 수 없다. 이럴 경우에 정규식 치환을 이용하는 것이 좋다. 아래 동영상은 에디트플러스(editplus)라는 편집기로 바꾸기를 할때 정규식 체크를 해서 대량의 데이타를 구미에 맞게 변환하는 모습을 보여준다. 몇자 안되는 변환식으로 몇날 몇일 했던 반복 작업을 순식간에 처리할 수 있다. 단, 편집할 내용에 적당한 규칙이 있어야 한다. 그러나 대부분의 반복작업의 경우 규칙이 있게 마련이다. 자유롭게 데이타를 바꾸는 것은 학습이 어느 정도 필요하므로 필요에 따라 정규식을 알고 있는 전문가나 개발자에게 도움을 구하는 것도 현명한 방법일 수 있다.



* 첫번째 바꾸기 변환식) ([a-z]+)\n ===> \1','
  - 배열문에 데이타를 일괄 적용할 때 응용할 수 있다.
* 두번째 바꾸기 변환식) ([a-z]+)\n ===> color_array[]='\1';\n
  - 자바스크립트나 액션스크립트에서 배열문을 만들때 응용할 수 있다.
* 세번째 바꾸기 변환식) ([a-z]+)\n ===> \1='$x_\1',\n
  - PHP에서 SQL 문을 만들때 응용할 수 있다.

처음 정규식을 접하는 분들은 어려워서 배우는 것을 쉽게 포기할 수 있다. 사람은 누구나 필요하면 하게 되 있다. 필요한 것부터 하나 하나 만들거나 배껴 쓰다 보면 어느 순간 전문 편집가가 되어 있을 것이다.
당신이 프로그래머라면 정규식, 스크립트 언어, 데이타베이스, 매크로들을 잘 조합하면 번역기 같은 고난이도 변환 프로그램도 만들수 있을 것이다.

다음 시간에는 실생활에 응용할 수 있는 다양한 정규식에 대해 다뤄보기로 하자!


원문 출처 : http://hompy.info/103
2007/06/08 16:42 2007/06/08 16:42
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

성공하는 블로그를 위한 10가지 조언

새로운 사업이나 프로젝트를 시작한다면 성공하는 확률은 얼마나 될까?
식당을 새로 연다면 첫 6개월 동안 5개중 1개는 문을 닫는다고 한다.
2년이라는 시간 후에는 10개중 9개는 실패한다는 좀 암울한 사실이 있다.
나도 최근에 새롭게 큰일을 벌렸지만 한 달이 지난 지금 매우 성공적이라고 생각하고 있으나 역시 6개월 도는 2년후에 어떤 모습일지는 장담하지 못하는 상황이다.

그렇다면 블로그는 어떨까?
하루에 수십만개의 블로그들이 탄생하지만 과연 어떤 블로그가 살아남아서 1년, 2년 뒤에도 꾸준한 인기로 살아남을 수 있을까?
물론 블로그가 꼭 다른 사람들에게 인기가 있을 필요도 없고 성공한 블로그의 기준은 어떤 것인지도 아직 확실하게 설립된 것이 없다.
그러나 많은 사람들이 방문하고 읽어주기를 원해서 블로그를 시작했는데 아직 욕심을 채울만한 트랙픽이 발생하지 않는다면 한번쯤 블로그의 문제가 무엇인지는 생각해볼 필요가 있을 것 같다.
블로그를 운영하기위한 교훈들은 많지만 실천하기 어려운 것은 사실이고 어떻게 생각해보면 오직 운이 따라야 한다는 생각이 들기도 한다.
오늘 Search-This에 올라온 글이 있어서 소개한다..블로그를 하면서 하는 실수 10가지다.

1. Hopelessly Devoted To You - 현신을 다해야 한다.
어떤 주제를 가지고 블로그를 하느냐는 중요하지 않다.
만화, 게임, IT, 음악, 스포츠, 정치 등 어떠한 주제를 가지고 하더라도 전념과 현신을 다해야 한다.
타이거우즈는 매일 1000개의 공을 치면서 연습을 한다고 한다..바로 이런 것이 현신이다.
자신의 블로그에 현신하지 않는다면 블로그는 실패할 수 밖에 없다.
당신은 얼마나 많은 시간을 블로그에 투자하나요?
부끄러운 대답이라면 한번쯤  내가  과연 블로그를 위해서 현신하고  있는지 생각해볼 필요가 있다.

2. Going Solo - 홀로서기
가수들이 그룹에서 성공하다 솔로로 가는 순간 실패하는 경우를 많이 봤을 것이다.
물론 블로그의 주제가 나의 일상 이라든가 내가 본 영화들의 리뷰 같은 주제이면 솔로로도 가능하지만 좀 더 광범위한 주제의 블로그를 운영한다면 솔로로 운영하기에는 상당한 많은 어려움이 따른다.
팀블로그나 블로그 커뮤니티를 형성해서 함께 운영하는 것이 더욱 효율적이고 성공할 확률이 높다.
Technorati에 따르면 매일 175,000개의 새로운 블로그들이 탄생한다고 한다.
미래의 블로그는 더 이상 한 개인의 독불장군식의 블로그가 아닌 팀 블로그의 시대를 맏이하게 될 것이다.
물론 훌륭한 개인 블로그들이 많이 있다.
그러나 이런 분들의 블로그는 오랜 세월동안 쌓아온 경험과 열정으로 성공한 경우이지만 시간이 흐를수록 성공을 유지한다는 것은 힘들 것 같다.
뭉치면 살고 흩어지면 죽는 다를 기억하자.

3. You Gotta Serve Someone - 누군가를 위해서 일해야 한다.
누구를 위한 블로그인가?
이 문제에 정확하고 확실한 답변을 하지 못한다면 당신의 블로그는 지금 힘든 상황에 처해 있을 것이다.
만약 당신이 많은 사람들을 위한 해결책과 유익한 정보들을 제공한다면 당신이 떠들지 다니지 않고도 많은 사람들이 알아서 찾아올 것이고 이들은 더욱 더 많은 사람들을 계속 몰고 올 것이다.

4. It's Not About the Money - 돈의 문제가 아니다.
최근에 많은 사람들이 블로그를 시작하는 이유로 금전적인 이유가 많다.
그러나 돈은 블로그의 좋은 동기가 될 수 없다.
물론 금전적인 보상을 받는 것이 나쁜 것은 절대 아니다.
그러나 오직 돈을 목적으로만 블로그를 한다면 결국 시간이 지나면서 그 블로그는 실패할 수 밖에는 없다.

5. The Bandwagon Is Not a Good Ride - 유행을 따르는 것이 항상 좋은 것은 아니다.
벌써 많은 다른 블로그에 올라온 글을 또 다시 올리는 것은 좋지 않다.
벌써 여기저기서 어느 한 뉴스에 대한 글이 널리 퍼져 있는데도 불구하고 같은 내용의 글을 올리는 것은 시간 낭비다.
또 다른 나의 견해를 올린다는 착각을 할 수는 있지만 대부분의 글들을 보면 대충 2-3개의 견해로 요약이 된다.
결국 12명이 각자 다른 의견을 올렸다고 생각할 수도 있지만 막상 종합해 보면 2-3개의 결론이 대부분이기 때문이다.
역시 블로그의 내용은 창작물이 최고다..펌 블로그는 반드시 실패한다.

6. Give The People What They Want - 사람들이 원하는 것을 제공하자.
요즘은 나의 블로그에 어떤 사람들이 들어오는지, 어느 글을 가장 좋아하는지, 얼마나 많은 시간을 보내는지, 어떤 내용을 내 블로그에서 가장 많이 검색을 했는지 알 수가 있다.
구글 Analytics나 다음 Webinside를 통해서 내 블로그의 통계를 살피고 분석을 하자.
방문객들이 어떤 내용을 가장 좋아하고 관심 있어 하는지 분석해서 그들이 원하는 주제를 다루도록 하자.
이렇게 간편하고 좋은 툴들을 잘만 활용하면 나의 블로그를 최적화해서 꾸준한 방문객들을 모을 수 있다.

7. Prune Your Website - 내 블로그를 잘 다듬어라.
블로그에 문제가 있다면 즉시 반영해서 고치고 새롭게 만들어야 한다.
방문객들이 블로그 디자인에 대한 불평을 하고 사용에 불편함을 느낀다면 즉시 반응해서 고쳐야 한다.
계속해서  블로그 손질을 하고 다듬어서 방문객들이 지루하거나 불편하지 않게 만들어야 한다.

8. Use An Editor - 편집자를 활용하라.
혼자 쓴 글을 그대로 올리지 말고 다른 사람들의 검증을 먼저 받고 편집을 거친 뒤에 발행하도록 하자.
친구나 가족이 먼저 글을 읽고 문법과 철자를 바로 잡아줄수 있으며 문장의 흐름을 바꾸어서 더 완벽하고 멋진 글로 탈바꿈 할 수가 있다.
문장 몇 개 빼고 더함으로 재미없고 복잡한 글이 재미있고 이해하기 쉬운 글로 만들어 질수가 있다.
아무도 관심을 주지 않을 뻔한 글이 최고의 인기글이 될 수도 있는 것이다.

9. RSS Feeds - RSS피드를 잘 활용하자.
이젠 더 이상 직접 블로그를 방문해서 글을 읽는 시대는 지나갔다.
시간에 쫓기는 많은 현대인들은 RSS리더를 통하여 더욱 많은 글들을 읽는다.
그렇기 때문에 자신의 RSS피드를 최적화 시킬 필요가 있다.
FeedBurner와 같은 서비스를 사용해서 bandwidth를 절약하자.
FeedFlare기능을 사용해서 Digg나 Technorati같은 소셜사이트에 등록을 할 수 있게 하자.
블로그의 RSS feed를 원하는 리더로 등록 시킬 수 있도록 add버튼을 다는 것도 생각해보자.


10. Post Titles(Title Tags) - 제목에 신경을 쓰고 태그를 활용하자.
아주 좋은 글을 발행했고 초반에 인기글로도 노출이 되었지만 시간이 흐르면 많고 많은 글들 속으로 사라지고 사람들의 머릿속에서 없어진다.
그러나 제목에 적절한 단어를 사용하였고 적절하고 정확한 태그를 활용했다면 그 글은 세월이 지나도 계속 서치엔진에 노출이 되어 계속 읽혀지게 된다.
짧은 순간 사람들을 모으려고 낚시성 제목을 사용하는 것 보다는 장기적인 목표로 정확하고 적절한 제목과 태그를 사용하자.
물론 조금의 낚시성 제목도 사람들을 모으기 위한 하나의 방법이니 꼭 나쁜 것은 아니라는 것을 알자.


출처 : 10 Blogging Mistakes / Why Your Blog Struggles
2007/06/08 03:21 2007/06/08 03:21
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

자바 프로그래밍으로 온라인 XML 데이터 검색하기

소스 파일 :



인터넷에 정보를 퍼블리싱하는 것이 보편화 되어 가면서 이러한 정보를 발견하고 요청하는 것 또한 자연스러운 일이 되었다. 이 글은 자바 프로그래밍을 사용하여 웹 기반 XML 데이터를 얻고 데이터를 파싱하여 필요한 엘리먼트와 속성들을 필터링하고 요청된 정보를 이용하여 작업을 수행하는 방법을 설명한다.

인터넷에 정보를 내보내는 것이 자연스러운 현상인 만큼 정보를 발견하고 요청하는 것도 자연스러운 일이 되었다. XML은 비즈니스와 소비자가 정보를 더욱 쉽게 공유할 수 있도록 데이터를 설명하는데 사용할 수 있는 기술 중 하나이다. 웹 상의 XML 정보의 예제에는 날씨 정보, 증권 시세표, 선적표, 항공요금표, 경매가격, 오늘의 유머 같은 정보들을 포함하고 있다. 이 데이터에 왜 액세스하려 하는가? 아마도 자기 지역의 날씨 데이터를 저장하고 검색하거나, 선적 과정을 조사 할 작은 유틸리티를 작성해야 할 이유에서 일 것이다. 여러분이 자바 개발자라고 가정한다면 파싱과 조작이 쉬운 XML 정보를 찾을것이다.

물론 HTML 페이지가 있지만 대부분의 데이터는 XML 포맷에서 비롯되고 웹 서버에는 HTML로 변환된다. 많은 웹 사이트들은 두 포맷으로 정보를 제공한다. 구 브라우저와 데이터를 단순히 검색하고자 하는 사람들에게는 HTML로 제공되고, 데이터 모음과 분석을 원하는 넷 정통 프로그래머에게는 XML 포맷으로 제공된다. HTML 페이지에서 데이터를 가져오는 것 보다는 자바 프로그래밍으로 XML 정보를 파싱하고 모으는 것이 훨씬 더 쉽다. 우선 표준 XML 파서가 있으면 다운로드하기가 쉽다. 둘째, 문서 구조는 시간이 흐르면서 변하기 때문에 HTML 태그 보다는 XML 엘리먼트와 속성으로 나타내는 것이 더욱 쉽다.

시작하기

XML 데이터를 파싱하기 위해서는 XML 파서가 있어야 한다. 물론 여러분 정도라면 각자의 파서를 작성할 수 있겠지만 완벽한 기능의 표준 파서들이 무료로 나와있다. Java 2 Platform, version 1.3 Enterprise Edition (J2EE)도 유용할 것이다. 파서는 개발자의 시각에서 볼 때 속도나 신뢰성에서 차이가 나지만 프로그래밍 모델과 인터페이스는 동일하다. 게다가 무료이다.

자바 개발자라면 javax.xml 패키지에 주의를 기울여야 한다. 이 패키지에는 XML 데이터를 파싱하는데 필요한 모든 코드가 있다. XML 문서를 다른 형식으로 변형하는 패키지와 함께 파서 구현 패키지들이 있다.






DOM vs SAX 파서

두 가지 유형의 XML 문서 파서가 있다. 이들은 XML 문서에 액세스하는 방식부터 다르다:

  • Document Object Model (DOM). XML 문서로의 랜덤 액세스(random access)에 사용된다. DOM의 장점은 메모리 안에 문서의 전체 모델을 갖고 있다는 점이다. 이는 모든 XML 엘리먼트에 어떤 순서로든지 액세스가 가능하다는 것을 의미한다. 하지만 큰 문서의 경우 둔해 질 수 있다. 메모리에서 실행시키지 않으면 시스템이 한계에 다다를 때 퍼포먼스가 느려진다.
  • Simple API for XML (SAX). 순차적 액세스(sequential access)에 사용된다. SAX의 장점은 문서의 한 부분이 메모리에서 사용될 수 있기 때문에 보다 큰 문서를 핸들할 수 있다는 점이다. SAX의 단점은 엘리먼트를 순서대로 처리해야 하며 한번에 볼 수 있는 문서 부분도 작다. SAX를 이용하여 문서를 파싱할 때 XML 부분을 저장할 수 있다.

온라인 정보 사이트(날씨 데이터 또는 주식 현황)에 액세스하는 XML 문서는 작고 집중되어 있는 경향이 있다. 일반적으로 특정 사이트나 주식 데이터를 검색하고 정보를 처리하고 다음 쿼리 또는 문서가 고려된다. 이러한 유형의 액세스의 경우 DOM은 선호되는 파싱 방식이다. 반면 SAX 파싱은 이 분야가 아니다.






XML 문서 얻기

파서가 있으므로 웹에서 XML 문서에 액세스 할 수 있다. Listing 1은 인터넷에서 날씨 데이터를 가져오는 예제이다:

Listing 1. XML 날씨 데이터 예제

<forexml site="Austin">
<observation
    city="Austin, Texas"
    temp.F="75"
    rel_hum.percent="31"
    wind_speed.knt="8"
    skies="partly cloudy"
/>
<almanac
    sunrise="7:08 AM"
    sunset="6:21 PM"
/>
<forecast
    type="nearterm"
    source="NWS"
    day="THIS AFTERNOON"
    weather="SU"
    high_temp="77"
    text="HIGHS 75 TO 80. WEST 15 TO 20 MPH."
/>
</forexml>

Unisys Corporation은 National Oceanic and Atmospheric Administration와 수백개의 날씨 관측 사이트와 협력하여 www.weather.unisys.com/forexml.cgi에 XML 포맷으로 기상 관측을 내보내고 있다. URL (예를 들어, www.weather.unisys.com/forexml.cgi?Austin) 다음에 요청 필드에 도시 이름 같은 관측 지역의 이름을 입력하라. 물음표는 요청 필드를 URL에 추가하는데 필요한 경계기호 이다. 읽을 수 있는 관측 결과가 XML 포맷으로 리턴된다. (Listing 1). J2EE에 제공된 XML 파서를 사용해보자.

개념상으로 XML 문서를 DOM으로 볼 수 있다. forexml 노드는 문서의 노드 트리에서 뿌리 노드 (root node)로서 보여진다. 뿌리 노드는 observation, almanac, forecast 같은 자식 노드를 갖고 있다. 이들 노드 각각 observation 이나 0 또는 그 이상의 엘리먼트를 갖고 있다. 예를들어 observation 엘리먼트는 75 값을 가진 temp.F 속성을 갖고 있다. 그림 1은 문서 노드의 계층을 나타낸다:

그림1. 문서 노드 계층(맑은 날!)
Hierarchy of document nodes (A pleasant day!)

주어진 XML 문서에서 관심있는 엘리먼트와 속성을 어떻게 필터링 할까? 우선 파싱하고자 하는 인자를 모아야 한다. Listing 2는 명령행에서 프로그램 인자를 모으고 그들을 processDocument라고 하는 메인 프로세싱 메소드로 전달하는 표준 main 메소드를 보여주고 있다. Java applet과 HTML 매개변수로 비슷한 작동을 수행할 수 있다. Listing 2에서 코드는 표준이고 XML 프로그래밍이 없다. 다음에 온다.

Listing 2. 날씨 애플리케이션 메인 메소드

// Given a list of arguments, parse a city
// name and a list of attributes to filter.
// Alternatively, accept "all" as an indication
// to get all attributes

public static void main( String [] args ) {
   if ( args.length == 0) {
     System.out.println
       ( "Usage: java Weather city"
           +" [all|attributes]" );
     System.out.println
       ( "Example:"
           +" java Weather Austin temp.F" );
     System.exit( 0 );
   }
   // Gather arguments
   String city = args[ 0 ];
   String [] attrNames = null;
   if ( args.length == 1) {
     attrNames = new String [] { "all" };
   } else {
     // args.length > 1
     attrNames =
       new String [ args.length - 1 ]; 
     for ( int i = 1; i < args.length; i++)
       attrNames[ i - 1 ] = args[ i ];
   } // if
	
   // Process document
   processDocument( city, observationTagName,
     attrNames );
} // main

Listing 3은 XML 문서를 얻어 이를 파싱하는데 쓰이는 전형적인 구조이다:

Listing 3. DocumentBuilder 요청하기

// Given a city string, an element name, and
// a list of attributes, print the values of
// the attributes found in the XML document.
public static void processDocument(
   String city,
   String elementName, String [] attrNames ) {
   DocumentBuilderFactory dbf =
      DocumentBuilderFactory.newInstance ( ) ;
      
   try {
         DocumentBuilder db =
            dbf.newDocumentBuilder ( ) ;
            
         if ( city != null ) {
             String urlString =
                 weatherSite + city;
             Document document = getDocument
                ( db, urlString );
             if ( document != null ) {
                Node [] matchNodes =
                   getAttributes( document,
                      elementName, attrNames );
                 if (null != matchNodes ) {
                   if ( matchNodes.length > 6 )
                       printNodes( "City=" + city,
                         matchNodes, true );
                   else  
                       printNodes( "City=" + city,
                         matchNodes, false );
                 } else 
                     System.out.println (  
                        "Element \"" +
                        elementName +
                   "\" not found in document." );
         } else
             System.out.println 
                ( "No XML created from URL="
                   + urlString );
   } // if         
  } catch (  
      ParserConfigurationException e ) { 
      e.printStackTrace ( ) ; 
  }
} // processDocument

먼저 DocumentBuilderFactory의 인스턴스를 얻는다. 일단 팩토리 객체를 얻으면 새로운 Document Builder 메소드를 사용하여 DocumentBuilder를 얻는다. 이것은 XML 인풋 스트림을 파싱할 수 있는 객체이다. 리턴되는 실제 DocumentBuilderFactory 객체는 다음 설정에 의존한다:

  • javax.xml.parsers.DocumentBuilder Factory system property
  • JAVA_HOME/lib/jaxp.properties
  • META-INF/services/javax.xml.parsers.DocumentBuilderFactory 서비스(jar file)
  • platform default

J2EE를 설치할 때 디폴트 설정을 사용한다면 이 예제는 올바르게 작동한다 특별한 파서 기능을 이용하고자 할 때에는 다른 파서를 지정한다. 여기서 얻을 수 있는 교훈은 많은 자바 XML 프로세서를 가지고 작업하라는 것이다.

Listing 3 의 코드 나머지 부분은 속성과 일치하는 XML 문서를 찾아 프린트한다. 이것은 고급 메소드 이다. URL에서 문서를 얻고 필터링하고 속성을 프린트하는 것에 대한 설명은 다음 섹션에 있다.

Listing 4는 웹 에서 XML 문서를 얻고 Listing 3에서 getDocument 메소드를 검색하는 것을 보여주고 있다:

Listing 4. 요청된 URL에서 XML 문서 파싱하기

// Using the given document builder object,
// construct and return an XML DOM
// from the given URL.

public static Document getDocument
  ( DocumentBuilder db, String urlString ) {
   try {
     URL url = new URL( urlString );
     
     try {
       URLConnection URLconnection =
          url.openConnection ( ) ;
       HttpURLConnection httpConnection =
          (HttpURLConnection)
         URLconnection;
         
       int responseCode =
        httpConnection.getResponseCode ( ) ;
       if ( responseCode ==
        HttpURLConnection.HTTP_OK) {
           InputStream in =
            httpConnection.getInputStream ( ) ;
            
           try {
             Document doc = db.parse( in );
             return doc;
           } catch(
            org.xml.sax.SAXException e ) {
                e.printStackTrace ( ) ;
           }
        } else {
            System.out.println
               ( "HTTP connection response !=
               HTTP_OK" );
               
        } 
     } catch ( IOException e ) { 
          e.printStackTrace ( ) ;
     } // Catch
  } catch ( MalformedURLException e ) {  
      e.printStackTrace ( ) ;
  } // Catch
  return null;
} // getDocument

우선 URLConnection 은 URL 스트링에 열려있다. 날씨 사이트가 HTTP 요청을 통해서 작동하는 것을 알고 있기 때문에 단순한 URLConnectionHttpURLConnection에 캐스팅할 수 있다. 그런 다음, 서버에서 온 응답 코드를 테스트한다. 요청에 에러가 없다는 것을 서버가 표시하면 커넥션 스트림을 열고 응답을 XML 스트림으로 취급한다. DocumentBuilder 파스 메소드는 파싱하고 데이터 스트림을 javax.xml. 문서로 돌린다. 이 과정 중 어떤 것이라도 실패하면 메소드는 XML 문서 객체를 만들 수 없다는 것을 나타내는 null을 리턴한다.






원하는 엘리먼트를 필터링하기

여러 엘리먼트 태그들이 root 태그인 forexml 다음에 나왔다는 것을 기억하라:

  • observation. 날씨 관측 지역 및 장소, 온도, 습도, 풍속 등의 데이터 포함.
  • almanac. 관측 장소의 일출과 일몰 등의 데이터 포함.
  • forecast. 앞으로의 날씨 예상 포함.

Listing 5는 observation 태그를 사용하고 다른 태그들은 무시된다:

Listing 5. XML 엘리먼트와 속성 맞추기

// Given an XML document,
// return the values of all attributes
// for the given element.

public static Node [] getAttributes
   ( Document document,
    String elementName, String [] attrNames ) {
    
    // Get elements with the given tag name
    // (matches on * too)
    NodeList nodes = document.getElementsByTagName
       ( elementName );
    if ( nodes.getLength() < 1) {
      return null;
    }
    
    Node firstElement = nodes.item( 0 );
    NamedNodeMap nnm =
       firstElement.getAttributes ( ) ;
   
    if (nnm != null) {
      // Test the value of each attribute
      Node [] matchNodes = new Node
         [ attrNames.length ];
        
       for (int i = 0; i < attrNames.length; i++){
          boolean all =
            attrNames[ i ].equalsIgnoreCase("all");
           if (all) {
             // named node map
             int nnmLength = nnm.getLength();
             matchNodes = new Node[ nnmLength ];
             
             for ( int j = 0; j < nnmLength; j++){
                matchNodes[ j ] = nnm.item( j );
             }
             return matchNodes;
           } else {
               matchNodes[ i ] = nnm.getNamedItem
                 ( attrNames[ i ] );
               if ( matchNodes[ i ] == null ) {
                 matchNodes[ i ] =
                     document.createAttribute
                     ( attrNames[ i ] );
                  ((Attr)matchNodes[ i ]).setValue
                    ( unknownAttribute );
               }
           } // if
      } // for
      
      return matchNodes;
   } // if
   
   return null;
} // printDocumentAttrs

Document 클래스가 getElementsByTagName 메소드를 가지고 있는 것에 주목하라. observation 엘리먼트 이름을 사용하여 메소드는 문서의 다른 엘리먼트에서 요청된 태그를 필터링하고 NodeList 객체를 리턴한다.

코드는 첫 번째 엘리먼트를 선택하고 getAttributes을 사용하여 그 엘리먼트용 XML 속성 리스트를 얻는다. 속성은 NamedNodeMap 객체에 리턴된다. 이러한 각각의 노드들은 요청된 속성 이름이 맞는지 또는 와일드 카드가 모두와 맞는지를 확인하기 위해 테스트된다. 이 예제는 노드 객체들의 어레이를 구현하고 이것을 caller에게 리턴한다. 엘리먼트나 속성을 찾지 못하면 메소드는 null을 리턴한다.

자바 프로그래밍으로 온라인 XML 데이터를 조작하는 주요 단계는 다음으로 요약될 수 있다:

  1. DocumentBuilderFactory를 이용하여 XML 파서 요청하기
  2. DocumentBuilder를 이용하여 XML 파서 및 구현하기
  3. 요청된 엘리먼트와 속성 찾기

발견한 데이터를 어떻게 이용할 것인가는 이제 여러분에게 달려있다. 다음 섹션에서는 XML 데이터를 핸들링하는 방법을 설명하겠다.






XML 데이터의 프린팅

Listing 6은 노드들을 통해 반복하고 속성 데이터를 프린트하는 방법이다:

Listing 6. XML 속성 데이터를 프린트하는 메소드 예제

// Given a set of nodes,
// print the values of the nodes.
// The nodes may be given a title.
// The nodes may be printed on one line
// (grouped) or many.

public static void printNodes
  ( String title, Node [] nodes,
       boolean grouped ) {
       
       // Report the name value of each node
       System.out.print( title );
       
       if (grouped){
          System.out.println ( ) ;
       }
       // Walk through the nodes.
       for ( int i = 0; i < nodes.length; i++ ) {
           Node node = nodes[ i ];
           System.out.print
              ( grouped ? " " : ", " );
           System.out.print
              ( node.getNodeName() + "=" +
              node.getNodeValue() );
              
            if ( grouped ) {
               System.out.println ( ) ;
            }  
    } // for
    
    if (!grouped) {
        System.out.println ( ) ;
    }  
} // printAttributeValues

Listing 5 에서는 캡쳐하고자하는 XML 엘리먼트와 속성 데이터를 맞춰 노드 어레이를 만든다. 이러한 특정한 프린트 루틴은 한 라인 또는 여러 라인에 걸쳐 모든 속성들을 프린트할 수 있다.

이제 여행의 끝에 와 있다. Listing 7은 파싱하고 선택한 XML 속성 데이터 아웃풋 예제이다:

Listing 7. 자바 날씨 프로그램 실행에 따른 아웃풋 예제

City=Austin
   city=Austin, Texas
   latitude=30.30
   longitude=-97.70
   time=3 PM CDT ...
   temp.F=84
   temp.C=28
   rel_hum.percent=58
   wind.string=S at 11 knt
   skies=clear    

이 경우 데이터를 System.out 으로 프린트했지만 각자의 애플리케이션에서는 데이터를 데이터베이스에 저장할 수 있고 트랜드 분석이나 그래프 그리기도 가능하다. 이러한 날씨 관측은 매 시간 업데이트 되어 주기적인 점검이 가능하다.

이 프로그램을 사용하여 모든 관측 속성들을 찾거나 온도 또는 상대 습도, 위도와 경도 같은 서브셋도 요청할 수 있다!






결론

자바 프로그래밍을 이용하여 온라인 XML 데이터를 검색하는 방법을 설명했다. 가장 중요한 단계는 관심있는 내용이 수록되어있는 사이트를 찾는 것이다. 일단 사이트를 발견하면 데이터 추출 작업은 모든 XML 문서의 경우 같다. 우선 문서를 요청하고 그런 다음 파싱한다. 마지막으로 원하는 엘리먼트와 속성을 필터링한다. 표준 XML 파서를 이용하면 직접 작성하는 것 보다 강력한 툴을 가질 수 있다.



원문 출처 : http://www.ibm.com/developerworks/kr/library/j-xmljava/
2007/06/07 12:42 2007/06/07 12:42
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

XML문서를 네트워크를 통해 전달하고자 할 경우

XML문자열을 stream으로 그냥 쓰는것 보단

  1. private static void serialize(OutputStream os, Document doc) throws IOException {
  2.     OutputFormat format = new OutputFormat(doc);
  3.     XMLSerializer serial = new XMLSerializer(os, format);
  4.     format.setIndenting(true);
  5.     serial.serialize(doc);
  6. }

와 같이 세련되게~
2007/06/07 12:35 2007/06/07 12:35
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

구글 에드센스( Google AdSense ) 서버 이상동작

제 블로그 글 읽고 있는 데 13시 40분쯤 갑자기 에드센스쪽이 비어나오더군요.
처음에는 계정블럭인줄 알고 깜짝 놀랐습니다.
에드센스의 가이드 라인을 어긴게 없는데 말이죠...
다른 블로거들 가 봐도 똑같은 증상이길래 구글 에드센스 서버쪽 문제인걸 알고 안도의 한숨이..(응?)
무슨일로 서버가 맛이갔을까요?

에드센스 이상

에드센스 이상으로 망가져 보이는 서비의 Photo Gallery


 - 추가사항 : 13시 55분 정상적으로 동작하기 시작 했습니다.
2007/06/06 13:48 2007/06/06 13:48
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

An Overview of the NetBeans 5.5 Integrated Development Environment (IDE)

netbeans.org 에 넷빈즈 5.5.1 릴리즈와함께 넷빈즈IDE의 메뉴구성을
둘러볼 수 있는 플래시를 함께 공개 했습니다.

2007/06/05 22:12 2007/06/05 22:12
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

레아 디존 (Leah Dizon) 사진 많은 곳 발견~

앞에 DB연동이 필요없는 나만의 공짜 온라인 갤러리를 가져보자! 란 포스팅을 작성와중에
 iFoto 로 만들어진 사진 갤러리를 찾아보다 발견한 곳.

http://photonet.freeweb7.com/?dir=Cutie_Sexy_Girl/011
http://photonet.freeweb7.com/?dir=Cutie_Sexy_Girl/012
http://photonet.freeweb7.com/?dir=Cutie_Sexy_Girl/013

에 레아디존 사진이 가득~ Lucky

레아 디존 (Leah Dizon)
레아 디존 (Leah Dizon)
2007/06/05 22:11 2007/06/05 22:11
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다