2013/06/28

자바의 기능 확장이 아닌 자바 개발자의 역량을 높여줄 도구 - Programming in Groovy

21세기에 접어들면서 사람들은 컴퓨터를 이용해 다양한 정보를 저장하고 처리하게 되었는데, 이처럼 다양한 정보를 저장하고 처리하는 시스템은 컴퓨터 발전의 역사에 있어 함께 한 수 많은 언어로 작성되어 왔다.

사람들은 컴퓨터가 발전하는 것과 함께 시간이 흐르면서 다양한 정보를 함께 처리하길 원했고 이런 요구사항은 다양한 프로그래밍 언어와 데이터베이스를 출현시키기에 매우 충분한 토양이 되었다.

오늘날 가장 인기있는 언어 중 하나인 자바 언어는 Sun Micro Systems에서 재직하던 제임스 고슬링이 가전기기에 들어갈 프로그램을 만들려고 개발했던 OAK 언어로부터 시작했다. 

자바 언어는 1995년 발표 당시만 해도 웹 브라우저에서 동작하는 애플릿을 만드는데 주로 사용되었는데 2000년을 지나오면서 많은 오픈소스 프로젝트와 거기에서 떨어져 나온 수 많은 라이브러리가 자바로 작성되면서 필요한 프로그램을 자바로 만드는 것은 그리 어려운 일이 아니게 되었다.

그런데 최근에 자바 언어가 가진 불편함과 시시각각 변하는 사용자의 요구사항에 따른 확장성과 기민함에 대응하기 위해 자바 언어를 기초로 하는 새로운 언어가 설계, 개발되어 보급되고 있다.  이같은 자바 언어를 기초로 하는 프로그래밍 언어로 그루비(groovy)와 스칼라(scala)가 있다. 이 두 언어는 자바 언어를 기초로 하며 JVM(Java Virtual Machine)에서 동작한다.

그루비는 스크립트 언어와 객체지향 언어의 장점을 충분히 가지고 있지만 스칼라 언어는 객체지향 언어와 함수형 프로그래밍 언어의 요소의 장점을 두루 가지고 있다.

인사이트가 펴낸 프로그래밍 그루비(저자 박제권)는 기존의 자바 개발자가 큰 어려움 없이 적응할 수 있도록 자바 프로그래밍 방식으로 그루비를 먼저 설명하고 어느정도 익숙해지면 그루비의 세계로 독자를 인도한다.


그루비로 가는 길

새로운 프로그래밍 언어를 배우는데 있어 어려움으로 지적되는 것은 새로운 프로그래밍 언어의 학습 곡선이다. 독자가 첫 프로그래밍 언어로 그루비를 배운다면 그루비의 학습 곡선이  완만한 상승선을 그린다는 것을 알 수 있을 것이다.

그런데 이미 프로그래밍 언어로 자바 또는 C# 등을 알고 있다면 그루비 언어를 배우는데 있어서 기존에 학습했던 지식을 머리속에서 화이트로 속속 지우고 새로운 지식을 채워넣어야 쉽고 빨리 배울 수 있지만 많은 사람들은 자신이 이해하고 있는 지식을 기반으로 새로운 지식을 이해하려고 하기 때문에 오히려 학습 곡선이 고속 상승하게 되기도 한다.

1장에서는 저자는 그루비에 대해서 간략하게 설명하고 그루비가 어떤 유형의 프로그래머에게 어울리는지 그루비를 컴파일하고 보다 편리하게 작성할 수 있는 방법 등을 알아본다.



그루비가 가진 무한한 힘을 쓰기 위한 첫번째 여행의 코스로 1장을 따라가보자


그루비의 문법

그루비는 자바에서 사용되는 문법을 거의 그대로 가져왔지만 몇 가지 확장적인 기능과 함께 자료형에 있어 매우 놀라운 변화를 수용했는데 모든 자료형이 객체형 이라는 것이다.

모든 자료형을 객체형태로 다룬다는 것은 프로그램이 다루는 데이터의 조작방법이 일관됨을 보장한다.

그루비는 JVM 언어에서 동작하고 실제 만들어지는 컴파일 파일도 .class 이므로 자바에서 동작하는 대부분의 API는 그루비로 변환과정을 거치지 않아도 쓸 수 있다. 이것은 그루비가 가진 가장 큰 혜택이자 힘이다.

그루비는 자료형에 있어 GString, List, Map 객체를 내장 자료형으로 정의해서 프로그래밍 작업의 효율성을 증대시켜준다.

한편 클로저(Closure)라는 개념의 코드 조각은 그루비를 사용하면서 가장 많이 만나게 될 그루비의 주요 구성 요소이다. 이 개념을 완전히 이해하지 못하더라도 사용하다보면 이해하게 될것이다.

그루비는 프로그래밍의 효율성을 높이기 위해 ?. 과 같은 문법을 통해 NULL 값을 가진 객체에 대해 매우 유연하게 동작하는 프로그램을 만들 수 있다.

그리고 자바빈과 동일한 역할을 자동으로 지원하는 그루비빈, 메타 프로그래밍 등 제2장부터 제7장까지 그루비로 프로그래밍하기 위한 기초를 독자에게 친절히 안내할 것이다.


그루비 라이브러리

우리가 프로그램을 만들때엔 우리가 가진 많은 생각을 프로그래밍 언어가 가진 표현 방법과 어떤 일을 수행하기 위한 다양한 보조 라이브러리를 사용한다.

그루비에서도 이는 크게 다르지 않다. 그루비에서는 빌더, GDK(Groovy Developement Kit) 를 통해 트리 형태의 코드에는 빌더를 적용하고 GDK를 통해선 입출력, 스레드와 템플릿 등을 쉽게 이용할 수 있다.

그루비의 동작 환경이 JVM 이기 때문에 JDK를 그대로 가져다 사용할수도 있지만 그루비나 파이썬 등의 스크립트형 언어에는 ~즘 이라고 하는 유형이 있다. 이를 그루비에서는 그루비답게라고 말하기도 하는데 JDK를 그대로 가져다 사용하면 그루비 프로그램이 그루비 답지 않게 된다.

제 10장에서는 그루비로 데이터베이스 프로그래밍을 하는 방법과 GroovyScriptEngine, GroovyClassLoader, GroovyShell를 이용해 프로그램 사용자가 입력한 그루비 코드를 안전하게 실행하고 불러들이는 등의 통합 방법을 소개한다.

그루비는 스프링과 자바에서 스크립트 언어를 다루기 위한 표준적인 방법으로 JSR-223 표준의 소개를 11장 6절에서 다룬다.

우리는 웹의 세계에서 데이터 교환 포맷이나 저장 포맷으로 비교적 널리 사용되고 있는 XML 을 그루비에서 조금 더 쉽게 다룰 수 있다. 12장 XML 다루기를 통해 그루비에서 XML을 쉽고 편리하게 조작할 수 있다.


매일매일 그루비

그루비와 함께할 준비가 되었다면 13장에서는 그루비에서 혼동하지 말아야 할 8가지를 꼭 기억하고 그루비를 어떤 자동화 작업에 사용할 수 있을지 알게 될 것이다.

많은 프로그래머들은 작성한 프로그램에 대해 단위테스트를 너무나 쉽게 간과하곤 한다. 최근엔 이러한 흐름의 추세로 TDD가 제안되고 있기도 하지만 아직 우리의 개발문화는 개발을 보조하는 형식의 테스트가 이뤄지고 있다.

그루비는 자체 테스트 도구보다 JUnit과 JMeter 등을 이용해 프로그램을 테스트할 수 있어서 테스트 그 자체에는 큰 무리가 없다.

우리가 만든 프로그램의 테스트를 위해선 이러한 작업을 자동화할 필요가 있다. 저자는 앤트와 메이븐을 통한 자동화 방법을 소개함으로서 그루비가 기존의 자바 도구와도 매우 유연하게 잘 동작한다는 것을 설명한다.

MS 윈도우에는 윈도우 응용 애플리케이션 개발자가 더 빠르게 응용 프로그램을 만들기 위해 여러 프로그램 제조사들이 ActiveX라고 하는 MS 표준 기술을 이용한 컴포넌트가 다양하게 존재한다.

지금까지 PHP, C, C++, 파이썬 등은 윈도우 기반에서 프로그램을 만들고 동작시킬 수는 있었지만 윈도우에 설치되어 있는 ActiveX 컴포넌트 등을 이용하기엔 쉽지 않았다. 그루비에서는 스크립톰이라고 하는 라이브러리를 이용해 ActiveX 컴포넌트를 쉽게 사용할 수 있는데 저자는 15장을 통해 스크립톰을 가지고 할 수 있는 다양한 일을 소개한다.

그루비는 그루블릿(자바의 서블릿)과 그레일스를 통해서 웹 응용 프로그램을 쉽게 만들 수 있다. 그레일즈는 루비 언어의 루비온레일즈에서 영향을 받은 그루비 전용의 웹 프레임워크이며 현재는 스프링소스사를 통해 관리되고 있다.

웹에 관심이 많은 필자는 그레일즈가 프로그래머가 그루비로 할 수 있는 일의 폭을 넓혀주고 생각의 사고를 활짝 열어주었다고 생각한다.


그루비로 당신은 무엇을 할 것인가?

자바 프로그램의 통합 빌드 도구인 Ant(앤트)의 개발자는 Ant 개발 당시 파이썬과 같은 스크립트 언어의 존재를 알았다면 Ant 내에서 같은 일을 하기 위해 복잡한 방법을 채택하지 않았을 것이라고 말했다.

물론 그 이후 그루비의 출현으로 그루비 내부에서는 물론이고 Ant 설정 파일 내에서도 그루비 프로그램 코드를 적어놓고 실행할 수 있도록 변경되기는 했다.

하지만 여전히 그루비는 자신이 할 수 있는 일이 많다고 입을 뾰로통 내밀면서 말한다. 독자는 그루비로 무엇을 하고 싶은가?

그루비를 보고 가슴이 콩닥콩닥 한다면 당신은 그루비의 존재로 인해 마음의 위안을 얻을 수 있을 것이다!

댓글 없음: