[커뮤니티 노트] 1월 – XP 주제가, XML Notepad, Power Shell 그리고 Open XML

  • Post author:
  • Post category:칼럼
  • Post comments:0 Comments
  • Post last modified:February 7, 2020

이 글은 월간 마이크로소프트웨어(일명 마소) 2007년 1월호 커뮤니티 노트 칼럼에 기고한 글입니다. 물론 구성이나 내용 상의 차이가 있을 수 있습니다.

웃다 보면 성공한다 (Catch the fun, Achieve Global success). 웃음 경영으로 유명한 진수 테리의 홈페이지 상단에 큼지막하게 쓰인 구호다. 소프트웨어 개발이 어느새 더 이상 즐겁지 않은가? 유머 감각과 멋진 도구를 손에 쥔다면 예전의 느낌을 다시 살릴 수 있을 것이다.

최재훈 | 필자는 서울행 KTX 열차에 올랐다. 월·수 수업이 모두 휴강하는 보기 드문 행운아가 된 덕분에 일찌감치 집으로 떠날 수 있었다. 독자 여러분이 이 글을 읽을 시점엔 추석도 까마득한 옛날 일처럼 느껴질 것이다. 하지만 즐거웠던 추석 연휴를 떠올리면, 오늘의 바쁜 일과도 견뎌낼 수 있지 않을까? (필자는 여러분이 즐거운 휴가를 보냈으리라 낙관한다.)

짝 프로그래밍이다!

과거에 익스트림 프로그래밍은 이단으로 취급 받았다. 개발자 중심의 철학, 고객의 팀 합류, 짧은 주기의 반복, 리팩토링 등의 Best Practices에 대한 강조 등은 전례가 없었다. 단 맥크라켄과 마이클 잭슨(주: Ben, Billie Jean과는 무관한 인물이다.)이 프로토타이핑 개념을 발표한 후에 벌어진 수많은 논쟁을 생각하면, 익스트림 프로그래밍이 괴이한 몬스터쯤으로 취급 받았던 것도 이해할 만 하다. 그러나 세월이 흘러 오늘날에는 익스트림 프로그래밍도 주류가 된 느낌이다. 수많은 컨설턴트와 익스트림 프로그래밍 전도사들의 활동을 보면 알 수 있다. 하지만 이런 성장의 이면에는 부작용도 있다. 익스트림 프로그래밍은 방법론이기에 앞서 하나의 문화인데, 방법만 강조되는 경향이 있는 듯 하다.

10월쯤 애자일 이야기의 김창준씨 블로그에 XP 주제가라는 글이 올라왔다. 일본에서 열린 XP 컨퍼런스에서 발표되었다고 하는데 안타깝게도 일본어 노래라 알아들을 수가 없었다. 그런데 드디어 영문 자막판이 공개되었다. 문자 매체의 한계 때문에 주제곡의 열정을 고스란히 전달할 수는 없지만, [그림 1]으로 그 느낌의 일부라도 전할 수 있길 바란다. 안타깝지만 지면상 가사와 동영상을 필자 블로그에 올려놓았다.

[그림 1] Dear XP
Dear XP song
[동영상 1] Dear XP

커뮤니티 소개

  • 대안언어축제

    컨설턴트, 저자 및 역자 등으로 왕성하게 활동하고 있는 김창준씨 등이 주축이 되어 마련한 모임의 장이다. 평소에 접해보지 못한 다양한 프로그래밍 언어를 체험해볼 수 있는 기회이다. 매우 다양하고 행사가 자유분방하게 진행되는데, 연애 이야기를 나누는 모습도 볼 수 있었다. Bar Camp 같은 해외 개발자 모임이 부러웠다면 2007년에는 여러분도 참여해보시길.

  • 애자일 이야기

    독창적인 글이 많다. 무엇보다도 창의성과 인간중심개발을 주제로 삼은 글이 많아서 많은 개발자들이 찾는 블로그 중 하나이다.

XML Notepad 2007

잠시 숨도 고를 겸, 간단한 XML 에디터를 소개한다. XML 문서는 매우 복잡한 구조를 띄고 있을 때가 많다. 노트패드 같은 일반적인 편집기로 작업하다 보면 실수하기 십상이다. 40분 동안 열심히 편집해서 이제 됐겠거니 생각한다. 그러나 개발 중인 애플리케이션은 XML 스키마 오류를 내뱉으며 죽어버린다. 슬프지 않은가? 그렇다고 매번 덩치 큰 친구 Visual Studio를 부르자니 번거롭다. 이럴 때 개발자의 편한 친구가 되어줄 도구가 XML Notepad 2007이다. 노트패드만큼 가볍고, 기본적인 XML 편집 기능을 충실히 제공한다. [그림 2]에서 XML Notepad의 거의 모든 기능을 볼 수 있다.

[그림 2] XML Notepad 2007
XML Notepad 2007 Screenshot

커뮤니티 소개

Microsoft Download Notifications

마이크로소프트는 자사의 신제품 또는 신기술을 개발자에게 알리고 있다. Download Notifications는 서비스 팩이나 개발도구의 소식을 등록된 사용자에게 이메일로 알려준다. 마이크로소프트하면 비주얼 스튜디오를 떠올리게 되지만, 사실 개발자에게 유용한 도구를 무상으로 제공하고 있기도 하다. 이번에 소개하는 XML Notepad 2007이나 Power Shell 1.0도 Download Notifications를 통해 알게 됐다. 다른 플랫폼에서 개발하더라도 보통 윈도우 데스크톱에서 작업하게 된다. 이런 경우라면 Download Notifications가 큰 도움이 될 것이다.

윈도우 서버 관리자와 개발자를 위한 도구. Power Shell 1.0

윈도우와 리눅스. 몇 년 전까지는 두 진영의 개발자들이 어느 쪽이 우월한지 논쟁하는 것을 심심찮게 볼 수 있었다. 최근에는 어떤 이유에선지 뜸한데, 어쩌면 필자가 소모적인 논쟁에 관심을 기울이지 않기 때문일지도 모르겠다. 필자는 동아리에선 리눅스 서버를 관리했고, 회사에선 Microsoft SQL Server나 .NET Framework 같은 윈도우 플랫폼 중심으로 개발했다. 그래서인지 몰라도 양 진영의 장단점을 무의식적으로 비교해보게 되는데, 다른 것은 몰라도 윈도우의 쉘 환경에는 불만이 많았다.

윈도우 서버의 가장 큰 장점이라면, 잘 통합된 환경을 제공한다는 점이다. 거기에 사용하기 편리한 그래픽 유저 인터페이스가 더해져서 모든 작업이 쉽다. 리눅스에서 명령어 외우고 기억하느라 고생했던 기억과 비교해보면 마음이 참 평온해진다. 둠 3의 3D 던전(?)을 헤매다가 괴물에게 불시에 당하고 나면 기분이 착잡해진다. 하지만 잠시 밖에 나와 높이 뜬 새파란 하늘을 보면 다시 하면 되지라며 용기가 솟는 것과 비슷하다. 그러나 일반적이지 않은 기능을 자동화하려고 하면 골치가 아프다. VB 스크립트를 사용하는 것이 윈도우 서버 관리의 기본처럼 되어버리긴 했지만, 사실 VB 스크립트를 다룰 줄 아는 관리자가 많지는 않다. 필자도 마찬가지라 통합서버(Continuous Integration Server)에 이런저런 기능을 추가할 때, 파이썬을 사용하곤 했다. 그런데 얼마 전 마이크로소프트사가 Power Shell을 발표했다. Power Shell을 소개하는 필자 역시 이제 막 새로운 스크립트 엔진에 대해 공부하고 실험해보는 중이다. 그럼에도 불구하고 이 제품을 Must-Have Tool로 추천하고자 한다.

도대체 Power Shell로 무엇을 할 수 있는 걸까? Jeffery Hicks 씨가 소개한 예제 소스코드를 [리스트 1]에 실었다. [리스트 1]의 소스코드를 WeatherReport.ps1 이라는 텍스트 파일에 저장하자. 이제 Power Shell 명령창에서 WeatherReport.ps1을 실행시킨다. Enter a zip code for your weather query: 라는 질문에 USCA1116라고 대답해주면, 캐나다 Sunnyvale의 날씨를 기계음이 알려준다. 재미있지 않은가? 솔직히 실용적인 예제는 아니지만 Power Shell의 강력함을 잘 보여주는 예제라고 생각한다.

[리스트 1] Yahoo! Weather로부터 기상예보 가져오기

아래의 소스코드를 요리조리 수정해보고 싶다면, Yahoo! Developer Network를 참고하면 된다. 현재 소스코드는 섭씨가 아닌 화씨를 기준으로 삼고 있다.

# WeatherReport.ps1
# This script will get the current weather conditions and forecast for the specified zip code
# from Yahoo weather, and using the SAPI.SPvoice object, speak the information for you.

Function Get-Weather($zip=$(Throw( "You need to specify a zip code!" )),$Unit=$(Throw( "Specify F or C for the temperature scale!" )))
{
    [string]$urlbase="http://xml.weather.yahoo.com/forecastrss"

    #validate temperature scale
    if ( $Unit -eq "c" ) {
        [string]$scale="Celsius"
        $Unit="c"}
        else {
        [string]$scale="Farenheit"
        $Unit="f"}

    [string]$url=$urlbase + "?p="+$zip+"&u="+$Unit

    #create the text to speech object
    $voice=New-Object -com "SAPI.SPVoice"
    Write-Host Connecting to $url

    #Create .NET Webclient object
    $webclient=New-Object "System.Net.WebClient"
    [xml]$data=$webclient.DownloadString($url)

    if ( $data.rss.channel.item.Title -eq "City not found" ) {
        Write-Host "Could not find a location for" $zip}
    else {
        Write-Host $data.rss.channel.item.Title
        #Speak the current conditions
        [void]$voice.speak( "You asked about the weather." )
        [void]$voice.Speak( $data.rss.channel.item.Title )
        [void]$voice.speak( "The current condition is" )
        [void]$voice.speak( $data.rss.channel.item.condition.text+"!" )
        [void]$voice.speak( "The current temperature is" +$data.rss.channel.item.condition.temp+" degrees "+$scale )
        #get forecast
        for ($i=0; $i -le ($data.rss.channel.item.forecast.length)-1;$i++) {
        [void]$voice.speak("The forecast for "+`
        $data.rss.channel.item.forecast[$i].date+`
        "is, "+$data.rss.channel.item.forecast[$i].text+"with a low of"+`
        $data.rss.channel.item.forecast[$i].low+" degrees "+$scale+`
        ", and a high of"+$data.rss.channel.item.forecast[$i].low+" degrees "+$scale)
        }
    }
}

$zip=Read-Host "Enter a zip code for your weather query"
Get-Weather $zip "f"

		

[필자 노트] Power Shell 참고 문헌

  • 기본 문서

    Power Shell과 함께 시작하기, 사용 설명서, 그리고 빠른 참조 문서가 설치된다. 한글로 기술된 거의 유일한 Power Shell 문서이다.

  • Windows PowerShell IN ACTION

    아직 출판되지 않았지만 Early Access Edition으로 미리 접해볼 수 있다. 1장은 무료로 제공하니 구매결정을 천천히 할 수 있다.

  • 기타

    Power Shell 사이트는 기타 문서나 자료를 소개하고 있다. 그 중에서도 개발팀 블로그가 유용한데, 기본 문서부터 숙지하는 것이 좋다. 필자는 프로그래밍 언어를 익힐 때, 책 한 권을 독파한 후에 예제 소스코드를 분석하는 방법을 선호한다. Script Center에서 다양한 사례를 접할 수 있다. 현재는 콘테스트 중이라 제대로 된 자료가 없지만, 독자가 이 글을 읽을 때쯤이면 성과물이 나와 있을 것이다. Script Center에서는 관련 웹 캐스트를 시청할 수도 있다.

ECMA 표준이 된 Open XML

마이크로소프트 오피스에 관심 있는 개발자라면 이 글이 세상에 나올 때쯤이면 이미 알고 있을 것이다. 마이크로소프트가 불공정한 게임을 한다고 말하는 사람들이 지적하는 사항 중 하나가 포맷의 비공개 정책이었다. 특히 MS 워드 파일이 어떻게 구성되어 있는지는 역공학을 사용해야 알 수 있었다. 그러나 .NET Framework 이후로 마이크로소프트는 자사의 포맷을 XML 형태로 공개하기 시작했는데, 이번에 Open XML이 ECMA(유럽 컴퓨터 제조업자 협회)으로부터 업계 표준으로 인정받기에 이르렀다. 구글 스프레드시트와 같은 웹 기반 오피스 도구가 주목 받는 시점이니, 여러분도 Open XML을 사용하여 새로운 제품을 개발할 수 있을 것이다. 관심 있는 개발자에겐 다음 자료가 유용하리라 생각한다.

커뮤니티 소개

마이크로소프트 소프트웨어 연구소 정봉겸 선임연구원의 블로그

필자는 Open XML의 소식을 이곳에서 접하게 됐다. 마이크로소프트의 신기술 소식을 개발자로부터 직접 전해들을 수 있는 블로그는 많다. 그러나 한글로 운영되는 블로그는 거의 없기 때문에 더욱 소중한 곳이다.

끝마치는 말

지난 해엔 ‘프로그래밍 노트’ 칼럼을 맡았다. 새로운 도전이었고 즐거웠지만 아쉬운 점도 있었다. 아무래도 전문적인 내용을 다뤄야 하다 보니 독자와의 대화가 부족해질 수밖에 없었다. ‘커뮤니티 노트’는 여러분의 피드백을 반영하기가 비교적 쉬운 섹션이다. 공유하고 싶은 소식이 있다면 주저 말고 필자에게 알려주었으면 한다. 특히 필자가 마이크로소프트 플랫폼을 중심으로 작업하니, 균형을 맞춰주실 독자라면 대환영이다. 마지막으로 이번 컬럼에 다 싣지 못한 이야기를 블로그에 펼쳐놓았음을 기억해주기 바란다.

Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
follow me
  • 문득, 한국전쟁 때 우리를 도와준 비백인이 적지 않은데 이런 언행을 일삼는 건 배은망덕하지 않나? 의리없고 배은망덕한 인간이 난 싫더라 https://t.co/iQvNMqnauQ
    23 hours ago
  • 첨언하자면 백오피스가 아닌 사람에게 노하우가 있는 상황도 경계해야 한다. 사업 확장이 안 된다
    1 day ago
  • 1. 데이터를 쌓아서 잘 보여주는가 2. 데이터에 기반해서 내가 의사결정을 할 수 있는가. 달리 말해 데이터에 기반해 내 서비스를 개선하는 일련의 피드백 루프를 수행할 수 있는가 길게 이야기했는데 간단히… https://t.co/OhIRZflJqd
    1 day ago
Buy me a coffeeBuy me a coffee
×
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
Latest Posts