ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머] 도메인 특화 언어 (DSL)
    97가지 시리즈/프로그래머 2018.10.26 12:43

    #프로그래머가_알아야_할_97가지 vol.23

    도메인 특화 언어 by. Michael Hunger


    체스 기사, 유치원 선생님, 보험 설계사 등, 각 분야의 전문가들은 일상생활에서 쓰이지 않는 전혀 다른 어휘를 사용하기도 한다. 이른바 도메인 특화 언어(DSL: Domain Specific Language)가 존재하기 때문이다. 분야(도메인)별로 고유의 사상을 표현하는 특수한 어휘가 있고, DSL에 따라 그 어휘를 사용하는 것이다.


    DSL은 특정 분야의 고유 어휘나 어법을 사용하여 그 분야의 사상을 표현할 수 있도록 만들어진 프로그래밍 언어이다. 이 언어를 사용한 코드해당 분야 전문가들에게 쉽게 읽히고 이해될 것이다. 거기다 전문가가 직접 코드까지 작성할 수 있다면 훨씬 더 이상적일 것이다.


    DSL중에서도 역사가 깊은 것은 소프트웨어 개발자나 과학자를 대상으로 한 DSL이다. UNIX 환경 설정 파일로 사용되는 '미니 언어'나 LISP의 매크로로 작성된 언어 등은 그중에서도 가장 오래된 예라고 할 수 있다.


    DSL은 크게 내부 DSL과 외부 DSL로 분류할 수 있다.


    내부DSL

    내부 DSL은 범용 프로그래밍 언어의 문법을 참고하여 외관상 구문을 자연언어에 가깝게 바꾼 언어이다. 내부 DSL 작성에는 문법적 설탕(syntactic sugar)이 적용된 자유도 높은 포맷을 가진 언어(Ruby, Scala 등)가 그렇지 않은 언어(Java 등)보다도 적합하다. 내부 DSL는 보통 호스트 언어(기초가 된 언어)의 API, 라이브러리, 비즈니스 코드들을 보이지 않게 래핑 시킨다. 래퍼를 제공하여 기술적 지식이 없어도 그 기능을 간단히 이용할 수 있도록 하는 것이다. 또 코드를 파일에 쓰면 그 파일을 사용해서 바로 실행시킬 수 있도록 하는 것도 일반적이다. DSL은 작성법이나 분야에 따라 언어의 용도가 다양하게 달라진다. 용도로 예를 들면 데이터 구조 구축, 의존 관계 정의, 프로세스와 작업 실행, 다른 시스템과 통신, 사용자 입력 검증 등을 들 수 있다. 내부 DSL의 구문은 호스트 언어 구문과 같은 제약을 받는다. 호스트 언어로 작성법을 생각해서 DSL을 만드는 데 도움이 되는 패턴은 여러 가지 존재한다. 예를 들면 익스프레션 빌더, 메소드 체인, 어노테이션 등이다. 호스트 언어가 재컴파일이 필요로 하지 않은 언어이면 내부 DSI는 아주 쉽게 작성할 수 있고, 대상 비즈니스 분야의 전문가들도 사용하기 더 쉬워진다.


    외부DSL

    외부DSL은 범용 프로그래밍 언어와는 전혀 다른 구문을 가진 DSL이다. 화려한 외부DSL도 있지만, 문자기반의 외부DSL이 일반적이다. 문자기반 외부 DSS 코드는 렉서, 파서, 모델 트랜스포머, 제네레이터와 같은 포스트 프로세싱을 위한 툴들을 조합해서 처리된다. 보통 외부DSL은 읽어들 일 때에 내부 모델로 변환되어 후속처리에 사용된다. EBNF같은 문법을 정의 해두면 좋다. 문법은 에디터, 비주얼라이저, 파서 제네레이터등의 툴들이 다루는 파트를 생성하기 위한 기점이 된다. 단순한 DSL이라면 예를 들어 정규표현을 이용한 '수제' 파서로도 충분히 대응할 수 있다. 단, 수제 파서는 이것저것 욕심부리기 시작하면 아주 어려워지고 사용하기 어렵게 되어버리므로 openArchitectureWare, ANTLR, SableCC, AndroMDA 등 원래 문법 정의 또는 DSL을 위해서 만들어진 기존의 툴을 찾는 편이 합리적이다. XML의 '방언'을 만들고 그것을 외부 DSL로 하는 방법도 자주 사용되지만, 특히 기술지식이 없는 사람에게 코드가 읽기 어려워지기 쉽다는 단점이 있다.


    DSL를 만들 때는 사용자가 누구인지 항상 생각해야 한다. DSL 사용자가 개발자인지, 관리자인지, 기업의 고객인지, 아니면 엔드 유저인지. 언어의 기술 레벨이나 사용 가능한 툴, 예를 들어 인텔리센스, 실시간 에러체크, 가시화 툴등의 코드 표현을 사용자에 맞춰 바꿔준다. 그렇게 하면 DSL이 상세한 기술적인 내용을 몰라도 기술자의 도움을 받지 않고 사용자가 직접 자기 손으로 시스템을 자신이 하고자 하는 데로 맞추어 수정할 수 있게 된다. 처음에는 DSL의 기본적인 틀만 제공하면, 나머지는 각자가 자력으로 작업을 진행하기 때문에 개발 작업의 속도 개선으로도 연결된다. 언어는 사용되면서 서서히 진화해 갈 것이고 기존의 표현이나 문법을 사용하기 위한 수단도 늘어나게 될 것이다.



    저자: Michael Hunger

    구동독에서 살던 어린 시절부터 소프트웨어 개발에 흥미가 있었다. 물론 지금도 직접 새로운 프로그래밍 언어를 배우며, 더 좋은 코드를 쓰기 위해 강한 의욕을 보인다. 소프트웨어를 개발하는 사람 본연의 모습, 다른 프로그래머의 기술향상을 위해서도 노력을 기울이고 있다. 프리 컨설턴트 '소프트웨어 개발 개선 전도사'로서 코칭을 하며 직접 프로젝트팀에 참가해 개발 작업을 하는 등 다양한 활동도 하고 있다.

    일하지 않는 시간 대부분은 3명의 아이를 위해 사용한다. 또한, 문자기반 MUD(MorgenGrauen)에 빠져있기도 하다. 시간이 있을 때는 가능한 한 책을 읽도록 노력하고 있지만, ”die-buchbar”라는 커피숍을 경영하고 있어서 생각만큼 시간을 갖지 못하고 있다. 커피숍에는 공방도 같이 있어서 뭔가 만들거나(레고도 있다) 물건에 인쇄할 수 있게 되어있다.

    일과 관련해서는 소프트웨어 개발, 새로운 프로그래밍 언어 습득에 더해 IT 팟캐스트를 즐기고 있다. (Software Engineering Radio) 게다가 qi4j(소프트웨어 설계의 새로운 사상인 DCI「Data-Context-Interaction」)에도 야심을 보인다. 자극적인 프로젝트에 참여하거나 DSL(jequel, quill, xmldsk)을 만들기도 한다. 리팩토링 작업이나 기사를 쓰거나, 서적의 서평을 하기도 한다. 최근에는 컨퍼런스에서 발표자로서도 나서기 시작했다.


    [프로그래머] 도메인 특화 언어 (DSL)


    [출처] プログラマが知るべき97のこと (O'Reilly Japan)

    이 글은 [CC-by-3.0-US]에 의해 라이센스 되었습니다.




    댓글 0

Designed by Tistory.