Archive for the 'Dev' Category

추상화 압박

패턴이나 리팩토링과 같은 고급스런 언어추상화(?)개념을 공부하다보면 언어를 크게보는 눈이 생긴다. 그리고 이런 공부들로 인해 덕보는 경우가 생기게된다.  주로 이런식.

“와 이거 하나만 바꾸니까 쫘르륵 다 바뀌었다!”
“이 로직에 if문하나 추가했더니 만사오케이네?!”

 덕만 보면야 다행이겠지만 이런 식으로 덕을 보다보니 과도하게 추상화하려는 습관이 생기는 것 같다. 물론 추상화가 나쁜 것은 절대절대 아니다. 하지만 아래와 같은 경우에 드러나지 않는 문제가 될 수 있다. 

개념적으로는 맞는 것 같은데 실제 추상화 구현을 하기 힘든 모델인데 억지로 구현했다던가, 지레짐작 기능추가를 염두해두고 오버헤드가 큰 작업을 추가한다던가 하는 것 들 말이다. 이런 문제들은 대부분 쉽게 드러나지 않고 일정연기,복잡도증가 정도의 문제밖에 없기에 스스로도 인지를 잘 못하는 것 같다. 파울러 형아도 “리팩토링“책에서 삼진아웃제도를 말하고 있다. 삼진이 되기전의 아웃은 반칙이다.

Copy&Paste, 일괄바꾸기 등이 언어구조상으로 범죄기는 하지만 정삭참작, 생계형범죄라는 것도 있기 마련.

좀 더 영리하게, 좀 더 간결하게(Be Smart, Be Simple)할 필요가 있다.

IronPython for ASP.NET

바로 전 포스트에서  얘기했다시피 IronPython은 .NET으로 구현되어져있기때문에 IIS위에서 쌩쌩 잘 돌아간다. 돌아가게 하기위해서는 이런저런 작업이 필요하겠지만, Setting에 어려움이 있다고 느꼈는지 MS에서는 고맙게도 설치형(아직 CTP지만)으로 제공해주고 있다.  더욱 더 고맙게도 설치후에는 Visual Studio 2005 (혹은 Visual Web Develper 2005 Express)에 기능들이 추가된다.

IronPython for ASP.NET을 다운받으려면 여기를 클릭~

설치파일은 MWSetup.msi. 실행하고 완료하면 ProgramFiles에 Microsoft IronPython for ASP.NET폴더가 생긴다.  폴더로 가보면 “AddPyScriptMap.vbs”파일이 있다. 가볍게 실행~  이 파일은 간단히 말해서 .py를 .aspx(.cs)돌리듯이 돌리게 하는 스크립트다.

자 이제 Visual Studio 2005로 가서 새 웹사이트를 만들면 언어에 IronPython이 생긴 것을 볼 수 있을 것이다.

프로젝트 생성하면 Bin폴더에는 IronMath.dll, IronPython.dll, Microsoft.Web.IronPython.dll가 생기고, 루트에는 Global.py도 있고  App_Script폴더도 있다.  App_Code랑 비슷한 폴더인 듯 싶음.

기본 설정을 바꾸려면 아까의 Microsoft IronPython for ASP.NET폴더 밑의 WebAppTemplate를 바꿔주면 될듯하다. C#일때와 특별히 다른 것은 없으니 겁먹지 말고 아무거나 만들어보자.

<form id=”form1″ runat=”server”>
   <div>

      <asp:Label ID=”lbl1″ runat=”server” Text=”Hello, IronPython” />
      <asp:Button ID=”btn1″ runat=”server” Text=”Click ME!” OnClick=”btn1_Click”/>

   </div>
</form>

굵은 이탤릭부분을 추가한 후 F7키를 눌러 소스코드로 이동.

소스코드에는 익숙한 네임스페이스들(System이나 System.Data등등)은 보이지만 쫌 낯설게 보인다. C#일때와 마찬가지로 Page_Load는 기본적으로 추가되어져 있다.  여기서 주의할 점은 C#에서처럼 “디자인모드”에서 버튼을 더블클릭한다거나 하지 마시길. 이벤트 추가 절대 안됨. 손으로해야함;; 또 주의 점. “.”을 아무리 찍어도 Intellisense(자동완성)은 안먹는다. 자자 그럼 하려던 btn1_Click를 추가.  모두 손노가다.

def btn1_Click():
    lbl1.Text = “Hello, IronPython For ASP.NET”

지겹게 따라붙던 “object sender, EventArgs e”는 안써줘도 된다. F5를 눌러 실행. 매우 잘 될것이다!!

그러면 지겹게 따라붙던 sender나 EventArgs가 필요하다면? 그냥 붙여주면 된다. 둘 다 붙여주면 당연히 잘되고, 둘 중에 sender만 붙여주어도 된다.

def btn1_Click(sender):
    lbl1.Text = “Hello, IronPython For ASP.NET<br/>”+sender.ID

실행하면 역시나 너무너무~~ 잘된다.

여기서 특이할 만한점 하나

def btn1_Click(sender):
    lbl1.Text = “Hello, IronPython For ASP.NET<br/>”+sender

이건 될까?

안타깝게도 안된다. “스트링+객체”의 경우 C#은 객체를 자동으로 ToString해주었는데 IronPython은 ToString()을 명시적으로 불러줘야한다.

그럼 Python의 기본 기능들은 잘되는지 확인

def btn1_Click():
    sum = 0
    r = range(0,10)
    f = add(5)
    for x in r:
       sum += f(x)
    lbl1.Text = sum.ToString()    

def add(n):
    return lambda x: x + n

 내용인즉 “0~9까지 리스트를 만들고, 각 값에 5씩 더한후 리스트의 값들을 모두 더한다”임. 종합하자면 5부터 14까지 덧셈을 구한다는 것.

검산 : (5+14) * 10 / 2 = 95

lambda, range 등등 다 잘된다!!!

마지막으로 하나만 더

def btn1_Click():
    lbl1.Text = dir(lbl1).ToString()

편리한 dir기능.

잘된다!!~~~

IronPython 1

IronPython은 .NET 아키텍쳐 위에 문법으로 Python을 쓸 수 있게 하는 것이다. 문법 뿐이 아니라 .NET에서 사용 가능한 클래스들도 이용할 수 있어서 기존의 WinForm, DataSet 등을 Python문법 위에서 사용 할 수 있다.  내용(소스)을 보면 C#으로 Python을 구현하고 있다. (그렇다면 IronPython을 IIS위에서 돌릴 수 있다는 말)

다운은 여기서 받으면 된다.

몇 가지 사용평

- 빠른 개발(rapid development)을 목표로 만들었다지만 해본 결과 사실상 그렇게까지 빠른 것 같지는 않다. intellisense가 지원되지 않아서 소스 코드량은 좀 많더라도 그냥 C#쓰는게 더 빠를 것 같다.

- 원래 Python에서 잘되던 라이브러리가 잘 안돌아간다. FeedParser 좀 돌려보려는데 당췌 잘 되지를 않는다. 상황을 봐서는 이 외에도 많은 라이브러리들이 잘 안돌아 갈 것 같다.

- 일반 Python보다 Startup시간이 상~~당하게 길다.

설치한지 얼마 되지 않은 현재로서 아직까지 Python보다 눈에띄게 나은 점, C#보다 눈에띄게 나은 점은 찾기 힘듬.

Service지향

남들보다 (정말 조금) 약간 많은 호기심때문일까?

새로운 개발 기술을 접하게 되면 그 기술을 활용하고 싶은 나머지 

지금 프로젝트의 성격, 구조 따위는 전혀 아랑곳하지 않고 억지로

(새로 배운 or 관심이 생긴) 신기술을 접목시키려 하는 짓을 벌이곤 한다.

멀쩡히 몇 년째 잘 돌아가는 구조에 프레임웤이라는 자를 갖다대면서

뜯어 고치려하기도하고, 얼마전에는 패턴 중독자가 되어서 일단 프로젝트가

시작되면 I로 시작하는 인터페이스, Impl로 끝나는 구현,  Factory다수,

각 비지니스들의  DAC(DAO), DTO들부터 만들고 시작하려고도 했었다.

SOA - 서비스 지향 아키텍쳐.

물론 그런 의미는 아니지만 말자체만 놓고 보면 나와 같은 사람에게 필요한 말이다.

개발을 위한 개발이 아닌 서비스를 향한 개발.  조금 더 고객(서비스)지향적인 개발의

마인드로 접근하는 개발방법. (원래 SOA의 뜻은 알고 있으니 태클 금지;;)

조금 더 빠르고, 기능의 추가삭제가 용이한, 에러없는,

그런 개발이야 말로 개발로 녹을 먹는 사람의 제일 멋진 모습이 아닐까?

물론 공부는 열심히 하되!

순수하게 서비스를 목표로하는(돈을 목표로하는) 개발의 경우

고객지향적:개발지향적 = 8:2 의 비율을 유지할 수 있도록 자신을 좀 다듬어야겠다.

나중에는 결혼하고, 애낳고 하다보면 2도 많다고 투덜거릴 날이 있겠지?