실전 Cloud App 분석 세미나 발표 자료 공유합니다. (2010년 겨울 인하대학교 하이테크에서 진행한 세미나)


저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

지난 12월 2일 있었던 실전 Cloud App 분석 세미나 발표 자료 올립니다. :-)

 세미나에 참석해주셨던 인하대학교 재학생 여러분들께 감사드립니다. 기말고사에서 좋은 성적 거두시고 즐거운 겨울방학 되세요. 감사합니다. :-D

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

안녕하세요. Visual C# MVP / 인하대학교 정보통신공학부 06학번 / Microsoft Student Club .NETers 4기 회원 남정현입니다. 2010년 10월 6일 저녁 6시부터 7시까지 진행했던 Microsoft 신기술 소개 세미나 중 두 번째 세션의 발표 자료를 공유합니다. 질문과 답변을 메일 주소와 트위터 등을 통하여 언제든지 받고 있으니 궁금하신 점은 언제든 연락주십시오. 감사합니다. :-)

 

 

저작자 표시 비영리 동일 조건 변경 허락
이 장소를 Daum지도에서 확인해보세요.
인천광역시 남구 용현1.4동 | 인하대학교
도움말 Daum 지도
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Windows Live Labs에서 개발중이던 여러 기술들은 이미 세간의 입소문에 자주 회자되곤 했었습니다. 그런데 최근에 이들 기술들이 Bing Map에 보기좋게 통합되어 TED 2010에서 멋지게 선보이게 되어 이 동영상을 가져와보았습니다. 이 글의 출처는 http://neters.inha.ac.kr/Article/7573 입니다.

 

편리한 시청을 위하여, 한국어 자막도 제공됩니다. View Subtitles를 클릭하시면 사용 가능한 언어가 나열되며, 한국어 자막 (Korean)도 포함되어있습니다. :-)

 

ps. bing.com의 한국어 사이트는 Daum에서 제공하는 검색 서비스로 대치되어있는 상태입니다. 아래의 서비스를 체험하시려면 언어 설정을 영어로 변경하셔야 합니다. 문맥 상 기계 번역이 가능한 부분에 한하여, 영어 버전의 사이트에서도 한국어로 표시되는 문자열이 있습니다.

 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

축하해 주세요 ^^

일상 2010/03/31 19:11

안녕하세요. ^^

 

좋은 소식을 나누고 싶어서 블로그에 사적인 글을 하나 올리게 되었습니다.

 

어제 오후 2시부터 5시까지, 매년 마이크로소프트에서 세계적인 규모로 개최하는 IT 경진 대회인 이매진컵 (http://www.imaginecup.com) 의 소프트웨어 설계 부문의 국가 대표 선발전이 있었습니다. 제가 참가했던 인하대학교의 WeRain 팀이 오늘 1등을 거두게 되어, 폴란드에서 열리는 2010년 이매진 컵 대회에 출전을 하게 되었습니다.

 

앞으로 더 많은 노력과 활동을 더하여 국가 대표로서 선전하고, 대한민국이 IT 강국임을 보이고 돌아오도록 하겠습니다. 인하대학교 닷넷 동아리 네터스 회원 여러분들, 그리고 데브피아 C# 포럼 회원 여러분들의 응원과 성원에도 많은 감사를 드립니다.

 

다시한번 진심으로 감사드립니다.

 

ps. 대회 동영상이 조만간 공개될 예정이며, http://twitter.com/ms_future 에 문자 중계로 올라왔던 내용도 있습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

 

2010년 3월 26일 금요일 저녁에 있었던 Cloud Application 경진대회 때 출품했던 BuzzContact 응용프로그램의 발표 자료 및 소스 코드를 공유합니다. Web Role과 Worker Role을 활용하는 예시를 포함하고 있습니다.

 

 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

지난번 겨울에 있었던 매쉬업 경진대회에 이어서 Daum Open API 관련 행사에는 두 번째로 참가하게 되었습니다. Open API를 이용한 웹 개발과 ASP.NET에서의 연동에 개인적으로 관심을 많이 두고 있었지만, Open API의 또 다른 활용 가능성을 살펴보고 싶었습니다. 무엇보다도 평소에 만나기 힘들었던 분들과 함께할 수 있었던 것은 참 좋았습니다. 특히, 길버라이트님을 뵐 수 있어서 무척 반가웠습니다. :-)

지난 겨울에 문방사우를 만들면서 남겨놓은 CLIFX OpenAPI Library를 업데이트한 것을 바탕으로 Inplace 프로젝트를 약 9시간 정도에 걸쳐서 완성했습니다. 부족한 부분도 있었지만 Open API를 통해서 만들어보고 싶었던, 간단하지만, 실용적인 웹 서비스를 데모로 보일 수 있었습니다.

사용자 삽입 이미지
 
사용자 삽입 이미지

검색 결과

로고는 같이 프로젝트에 참여했던 기혁 선배의 작품입니다. -_-v

국내 대부분의 Open API 서비스가 검색 결과를 RSS 컨테이너 기반으로 제공하고 있었기 때문에 일관성있게 프로바이더들을 묶고 검색 결과를 표시할 수 있었습니다.

검색 결과 제일 하단에는 Internet Explorer를 위한 즐겨찾기 일괄 내보내기와 HTML 내보내기 기능을 실행할 수 있는 버튼을 두었습니다.

사용자 삽입 이미지

IE 즐겨찾기 내려받기 결과

사용자 삽입 이미지

HTML 내보내기 결과

 

여러모로 재미있었던 시간이었습니다. 차기 행사때는 더 재미있는 일들이 많을것 같습니다. 벌써부터 기대되네요. :-)


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Scene #1

시상식 후 네터스 사람들과 함께 기념 촬영 한 컷!

2008 Imagine Cup France 소프트웨어 설계 부문 한국 대표 선발전을 오늘 다녀왔습니다. 정말 수준높은 작품들이 많았고 다들 열심히 준비를 하신것 같아서 보는 내내 즐거웠습니다. 저 개인적으로는 TWWA 팀의 응원 겸 지지를 위하여 네터스 사람들과 함께 다녀왔습니다.

Scene #2

(왼쪽부터) 김성진, 이동훈, 곽재경, 유신상

참으로 대단하신 분들이 많았습니다. 비용과 재화의 문제라는 넘기 힘든 벽이 있기는 하였으나 소프트웨어만으로는 해결하기 어려운 문제들에 대한 참신한 시도들이 많았고, 관점의 전환을 통하여 단순한 모니터링이 아닌 정책 입안과 사업 수립에 영향을 줄 수 있는 객관적인 평가 자료를 제시하는데 도움을 주는 전략적인 소프트웨어들까지 있었기 때문입니다.

Scene #3

아쉽지만 그래도 멋졌어요!

아쉽게도, 우리 동아리 사람들이 함께하는 TWWA팀이 2위에 랭크되었지만 옆에서 준비하는 모습을 쭉 지켜봐왔던 저로서는 그래도, 너무나 자랑스러웠습니다. 여러 사람들이 보시는 블로그이긴 하지만 개인적으로 전 이렇게 말하고 싶습니다. "TWWA팀, 정말 최고예요!"

Scene #4

다같이 기념촬영!


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

파이썬은 기본적으로 문자열, 리스트, 튜플, 사전을 언어 차원에서 지원할 수 있는 스크립트 언어입니다. 오늘 알아볼 유형은 문자열과 리스트입니다. 나중에는 큐와 스택의 경우 리스트 안에 이를 Emulation (흉내내기)할 수 있는 함수를 호출하는 것으로 작업이 가능함을 확인하고 좀 더 자세히 다루어보기로 하겠습니다.

참고로 파이썬은 STL이나 .NET에서처럼 Stack과 Queue라는 것이 명확하게 존재하는 것이 아니므로 주의할 점이 있겠지요. 즉, 리스트를 사용하고 있지만 리스트가 아닌 스택이나 큐로서의 역할을 하고 있음을 명확히 알려줄만한 어떤 힌트가 포함되어야 한다는 뜻입니다. 쉬운 예로 변수 이름의 정의부터 달리한다거나 주석을 달거나 하는 등의 일이 있을 것입니다.

다시 본론으로 돌아가서, 파이썬이 기본적으로 제공하는 네 가지 유형의 데이터 구조를 분석해 보도록 하겠습니다.

* 문자열 (String)

파이썬의 문자열은 우리가 아는 문자열과 90% 같습니다. 나머지 10%가 무엇일까요? 파이썬에서의 문자열은 우리가 C/C++/Java/C#에서처럼 문자열의 특정 인덱스에 있는 글자를 치환하는 것을 지원하지 않습니다. C 계열 언어를 사용하다가 제일 어렵게 느껴지게 되는 부분이 바로 이 부분일 것입니다. 또한,  파이썬 코드에서의 문자열 표기는 작은 따옴표가 문자 하나를 나타내고, 큰 따옴표가 문자열을 나타내는 것이 아닙니다. 양쪽 표기 방식 모두 문자열을 의미합니다.

* 리스트 (List)

앞에서 예를 들었던 문자열과는 달리 리스트는 원소 단위의 편집이 가능하며 서두에서 설명하였던 그대로 큐와 스택을 에뮬레이션할 수 있는 관련 함수도 제공한다고 하였습니다.

리스트를 만들기 위해서는 다음과 같이 작성할 수 있습니다.

name = [ 'young-hee', 'cheol-soo', 'joo-yeon', 'min-ji' ]
loves = [ 'young-hee', [ 'min-su', 'cheol-soo' ], 'dong-soo', [ 'min-ji', 'jinee' ] ]

loves 리스트가 독특해 보입니다. 즉, 리스트 안에 리스트를 중첩해서 삽입하는 것이 가능함을 보여주고 있습니다.

리스트는 앞서 설명한 문자열과는 달리 훨씬 유연합니다. 원소의 개별 편집을 지원하기도 합니다. 특정 원소를 지우기 위해서는 다음과 같이 명령을 내리면 됩니다.

del name[0]
del loves[0]
del loves[0][1]

리스트에 제공되는 몇 가지 함수를 알아보도록 하지요. 우선 리스트를 사용하면서 가장 많이 사용할 정렬 함수를 살펴보면 간단합니다.

name.sort()
loves.sort()

결과를 확인해보려면 간단히 변수 이름만 입력해봐도 알 수 있습니다. 그런데 loves의 경우 중첩된 리스트에 있는 것이 앞으로 오고 개별 원소만 정렬된 상태로 되어있습니다. 무엇을 의미하는 것일까요? 중첩 리스트에서의 정렬은 재귀적이지 않음을 보여주는 것입니다.

중첩 리스트를 이용하여 간단히 행렬도 표현해볼 수 있을 것입니다. 예를 들면 [[1, 2, 3], [1, 1, 1], [3, 2, 1]] 과 같다고할 수 있겠지요.

** 돌발 퀴즈: 문자열과 리스트는 서로 형식 변환이 가능한 관계입니다. 문자열을 리스트로 바꾼 것과 리스트를 문자열로 바꾼 것의 차이점을 확인해 보시고 댓글로 그 차이점을 남겨주시기 바래요. ^^

돌발 퀴즈를 위한 힌트를 하나 드리겠습니다. 리스트와 문자열 사이의 형변환은 아래와 같이 하면 됩니다.

a = list('my lover')
b = str(a)

다음 Chapter에서는 리스트에서 제공하는 큐와 스택 에뮬레이션 기능을 살펴보기로 합니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Python은 기존의 주류 언어들과 마찬가지로 함수와 객체를 지원합니다. Iron Python의 경우에도 당연히 이것이 가능합니다. 하지만 혼동하기 쉬운 점이 있는데, IronPython은 원래 "전역 (Global)"의 개념이 존재하지 않는 .NET 프레임워크의 특성을 간단히 무시하고 원래 Python의 특징을 흉내냅니다. 나중에 다룰 IronPython을 .NET Application에 Integration하는 단계에서 이것의 진짜 내막을 정확히 볼 수 있게 됩니다.

이러한 특징은 Visual Basic .NET의 모듈과 비슷한 원리인데, Visual Basic .NET의 모듈도 엄격히 따지면 보통의 클래스이지만 모듈의 이름을 애써 지정할 필요 없이 마치 전역 멤버처럼 사용하는 것이 가능한 이유가 Visual Basic 6.0의 특성을 흉내낸 것이기 때문입니다. 결론적으로 MSIL 코드에서는 전체 이름을 모두 기입해줍니다.

오늘 Chapter에서는 함수를 간단히 정의하고 사용하는 방법에 대해서 살펴보기로 합니다. 그리고 후반부에서는 C# 3.0에서도 도입이 거론되고 있는 람다에 대해서도 파이썬을 통해 보기로 합니다. 파이썬의 경우 람다는 실제로 사용하는 정규 문법입니다.

IronPython 콘솔을 켜고 다음과 같이 입력하도록 합니다.

def add(a, b):
  return a+b

구조는 너무나도 간결합니다. a와 b라는 것은 짐작이 가능합니다. 바로 함수의 매개 변수가 되는것이지요. 하지만 C#이나 VB.NET과는 달리 상당히 생략된 것이 많음을 알 수 있습니다. 하지만 이상하게 생각할 필요는 없습니다. 왜냐면, 우리는 목적에 맞는 프로그램을 온전히 구현하기 위한 것이 목표가 아니라 스크립트 언어의 특성에 맞는 프로그램을 표현 (Illustration)하기 위함이므로 이정도면 충분한 것입니다.

일단 a와 b라는 각각의 매개 변수에 대한 형식은 따로 지정하지 않았습니다. 즉 a와 b는 어떤 형식이든 대입이 가능함을 뜻합니다. 그리고 add라는 함수에 반환 형식을 지정하지 않았습니다. return 문 또는 뒤에 나올 yield 문 그 자체의 용법과 그것들이 다루는 데이터 형식에 따라서 함수의 반환 형식이 자동으로 결정될 수 있고 정확히 알 수 없는 경우에는 일반화된 형식으로 자동으로 결정하여 줄 것입니다.

위의 add 함수를 호출하는 방법 역시 간단합니다.

print add(1, 3)
print add("hello ", "world ")

첫 번째의 경우 숫자 4를 반환할 것입니다. 두 번째의 경우에도 Concatenation 처리가 된 문자열이 반환될 것입니다. 두 가지 동작 모두 유효한 것입니다.

이번에는 재귀호출을 사용하는 예를 다루어보도록 하겠습니다. 팩토리얼을 구하는 함수를 프로그래밍해보면 좋겠지요. ^^

def factorial(n):
  if n <= 1: return 1
  return n * factorial(n-1)

기본 알고리즘에 대해서는 따로 설명하지 않겠습니다. 당연한 이야기이지만 재귀 호출이 가능함을 보이고 있습니다.

이번에는 yield 키워드에 대하여 살펴보도록 하겠습니다.

def one_to_three():
  yield 1
  yield 2
  yield 3

yield 키워드는 C# 2.0의 것과 완전히 같은 용법을 제공합니다. 다만 return 키워드를 더 쓰지 않고 yield 문 하나만을 사용합니다.

그리고 함수를 프로그래밍하면서 필요한 것이 하나 더 있는데, 바로 함수의 문서화 작업입니다. 간단하지만 습관으로 두시는게 좋겠지요. Iron Python은 따로 문서화 문자열을 두지 않으면 자동으로 함수의 시그니처 (함수의 반환 형식과 매개 변수 목록, 함수의 이름과 같은 정보)를 생성하여 문서화에 반영하지만 이것을 직접 변경할 수도 있습니다.

def one_to_three_v2():
  "이곳에 설명문을 달아놓으면 됩니다."
  yield 1
  yield 2
  yield 3

첫 줄에 지정한 문자열이 바로 문서화 문자열이 됩니다. 이것을 확인해 보기 위하여 두 가지 방법을 쓸 수 있는데 하나는 __doc__ 프로퍼티를 직접 조회하는 것이고 또 하나는 help() 내장 함수를 이용하는 것입니다.

help(one_to_three_v2)
print one_to_three_v2.__doc__

help 내장 함수의 경우 좀 더 정리된 모습을 보여줍니다. 두 번째 방식도 가능한 것이므로 참고하시기 바랍니다.

오늘의 마지막 순서로 람다에 대하여 살펴보기로 합니다. 람다는 앞서 간단한 설명을 통해 언급하였듯이 C# 3.0에서 도입하고자 하는 람다와 유사한 것입니다. 람다는 한 줄에 표현이 가능한 수식을 함수로 만들어줍니다. 다음의 예를 살펴보도록 하지요.

(lambda x, y: x ** y)(10, 3)

위와 같이 구문을 입력하면 10의 3승 값인 1000이 반환됩니다. 간단히 분석해보도록 하지요. x와 y는 함수에서처럼 매개 변수를 뜻합니다. 그리고 : 기호 다음에 나오는 것이 수식이 됩니다. 람다는 값을 반환하는 작업 등은 전혀 하지 않습니다. 하지만, "평가"가 가능한 식 그 자체가 반환값이 됩니다.

일반적으로 모든 수식은 반환값이 자동으로 산출되는 "평가"가 가능한 형태입니다. 그리고 반환값이 있는 모든 종류의 함수들을 포함하여 읽기가 가능한 프로퍼티, 상수, 변수 등도 "평가"가 가능한 형태입니다. 이 두 가지를 모두 활용하더라도 반환값을 만들어낼 수 있는 것도 가능합니다. 더 나아가, 람다 자체는 어떤 값을 분명히 반환한다는 일종의 규약을 가지고 있기 때문에 람다 안에 람다를 집어넣는 중첩도 가능합니다.

람다는 저장해두었다가 필요할 때 재사용할 수 있습니다. 위의 식을 임의의 함수 o로 받아봅니다.

o = lambda x, y: x ** y
o(10, 3)

방금전과 마찬가지의 결과가 나타나게 됩니다. 이번엔 좀 더 나아가 람다 안에 람다를 집어넣는 중첩의 한 예를 보겠습니다.

(lambda x, y: (lambda z: z + 1)(x) ** y)(9, 3)

실용적으로 보이지는 않지만 가능한 예임을 들기 위하여 다소 복잡한 코드를 써보았습니다. 차례대로 따라가보면 쉽습니다. 안쪽의 람다부터 살펴보도록 하지요.

안쪽의 람다는 z라는 매개 변수를 받고 z에 1을 더하는 계산을 합니다. 함수 정의에 이어서 곧바로 호출을 하는데 여기에 들어갈 값은 바깥쪽의 람다의 x라는 매개 변수입니다. 즉, x에 1을 더한 값을 반환합니다. 그리고 이렇게 나타난 값에 y승 연산을 시키도록 합니다. 이것이 바깥 람다가 됩니다. 곧 이어, 바깥 람다 정의에 이어 호출에 들어가는데 인수로 9와 3이 주어집니다. 결과적으로 9는 1을 더하여 10이 되고 10의 3승을 계산합니다. 즉, 1000이 반환되겠지요.

오늘 강좌도 상당히 길었습니다만 도움이 되실거라 믿습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)