programming clojure 책을 읽으면서 드는 엉뚱한 생각

2013-09-04 09:29

지난 수업 시간에 functional programming을 가르치기 위해 학습하면서 나름 functional programming이 재미있다는 생각을 하고 본격적으로 공부해볼 생각이다. 그런 마음으로 인사이트에서 출간한 "프로그래밍 클로저"를 읽고 있다. 이제 2장까지 밖에 읽지 못했지만 이 책을 읽으면서 이런 엉뚱한 생각을 해봤다. 가능할지의 여부는 아직 모르겠다. 이후에 클로저를 활용한 프로그래밍에 자신이 있으면 한번 시도해 봐야겠다.

엉뚱한 생각은 다음과 같다.

자바 기반으로 웹 애플리케이션을 개발할 때 다음과 같은 구조로 개발하는 경우가 대부분이다.

Controller + Service + Repository(Dao)에 핵심 비지니스 로직을 담고 있는 도메인(domain) 영역이 있을 것이다. 물론 객체 지향적으로 개발한다고 가정했을 때의 이야기이다. domain(흔히 model 클래스라고도 이야기한다.) 클래스의 경우 DTO(data transfer object)의 역할을 담당하는 경우도 일반적이다.

위 구조를 클로저를 활용한다면 다음과 같이 구현할 수 있지 않을까?

Controller + Service + Repository(Dao)와 같은 Layered Architecture 구조는 동일하다. 달라지는 부분은 핵심 비지니스 로직을 담당하는 도메인 영역이다. 비지니스 로직은 자바로 구현하는 것이 아니라 클로저로 구현하면 어떨까? 그리고 기존에 도메인 클래스가 중복된 개념으로 가지고 있었던 DTO는 별도의 자바 클래스로 분리하고... 즉, DTO는 setter와 getter, ORM을 사용하는 경우 테이블과의 매핑을 담당하는 역할을 하고 핵심 비지니스 로직은 모두 클로저로 구현할 수 있지 않을까?

이 같은 구조로 가자고 하면 복잡도 증가한다면서 반대할 사람들 많을 듯하다. 일단 가능할지의 여부도 아직 모르겠고, 클로저 책 하루 보고 자바 클래스와의 연동이 쉽다고 하니 이런 구조면 좋지 않을까라는 생각을 해봤다. 최근에 학생들을 보면서 객체가 상태를 유지하고, 상태를 변경해 가면서 문제를 풀어가는 것이 생각보다 어렵겠다는 생각을 했다. 그런 관점에서 functional programming을 활용한다면 객체 지향 언어보다는 좀 더 쉽게 접근할 수 있지 않을까라는 생각을 한다. 어차피 복잡하고 중요한 부분은 도메인 영역에 대부분 존재하고 나머지 요소들은 부가적인 기능을 지원하는 구조이기 때문에 복잡도가 증가하는 경우 괜찮지 않을까? 두 가지 이상의 언어를 학습해야 하는 부담만 증가하는 건가? 걸어서 출근하면서 생각해본 엉뚱한 생각이었다.

5개의 의견 from FB

3개의 의견 from SLiPP

2013-10-15 00:18

클로저를 몰라서 물어보는 건데요. 자바에서 클로저 함수를 호출할 수 있나요? 거꾸로는 되겠지만 자바에서 클로저를 호출할 수 있는지 의문이네요. 저라면 왠지 Web tier를 먼저 클로저로 전환할 것 같습니다. 결과 기대하겠습니다. ^^

2013-10-15 00:22

@fupfin 이 글은 clojure에 대한 깊이 지식이 없을 때 쓴 글이고요. clojure를 알아가면 갈 수록 위 구조는 쉽지 않을 듯 합니다. scala라면 몰라도요. 말씀하신데로 web tier를 먼저 바꾸는 것이 가능할 듯 합니다.

아직 clojure에 대해서 제대로 된 감을 잡고 있지 못하다보니 어떤 형태로 개발할 수 있을지 저도 감이 잘 잡히지 않네요. clojure로 가는 것이 제대로 가는 것인지에 대한 의문도 들고요. 일단 재미삼아 공부해 보려고 하는데 성공할 수 있을지는 모르겠음다. ㅋㅋ

의견 추가하기

연관태그

← 목록으로