블로그 내 검색

2012. 2. 1.

개발자와 framework

프레임워크...

"소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것"

어느때부턴가 뭔가를 개발하려면 습관적으로 어떤 프레임워크부터 쓸까 하는 생각부터 들게 되었습니다.  개발을 위한 설계서나 제안서에는 "이 제품에는 프레임워크 A와 B를 썼습니다" 라는 것이 들어가고, 개발자들 사이에서는 프레임워크가 패션 잡화가 유행하듯 스쳐 지나가며 빠르게 발전하고 있기도 하구요.

생각해보니 저 조차도 프레임워크와 함께 프로그래밍을 해왔더군요. 첫 프로그래밍 입문할 때 사용했던 Struts1부터 시작해서, PHP를 한창 쓸 때 잠깐 만져본 CodeIgniter에, 웹 크롤러를 만들 때 사용했던 Mybatis, 최근 공부하고 있는 Spring Framework 까지...

프레임워크를 사용하면 효율성이 증가하고 개발이 편해진다는 것은 개발 초보도 알고 있습니다. 하지만 너무 막연하게 그렇게 생각하는 것은 아닌지 스스로 생각해볼 필요가 있다고 생각됩니다.


프레임워크 각자의 철학


  • 개발 속도 향상
  • 개발 스킬에 크게 영향받지 않는 결과 코드 품질
  • 유지보수 용이
  • 테스트 용이
...

위에 나열한 것들 많은 이유가 있겠지요.

저는 프레임워크를 사용하는 이유는 어플리케이션에 일관된 철학을 부여하는 것이 제일 큰 이유라고 봅니다. 

프레임워크는 프로그래머가 코딩한 결과물을 자신만의 철학으로 "이용하여" 서로 연계하여 구동시킵니다. 요새 Java 프레임워크를 평정한 Spring Framework는 IoC와 DI라는 개념하에 모든 개발자의 코드를 관리해주며 심지어는 자신의 구성에도 IoC와 DI의 철학으로 만들어져 있지요.

반면 Ruby on Rails 같은 프레임워크는 모든 코드를 관례에 맞춰 구성요소들이 강하게 결합되어 있으며 그 규칙에 맞춰 코딩하면 굉장한 시너지를 내는 "설정보단 관례" 라는 철학이 있죠.

프레임워크 각자의 철학을 무시한 채 프레임워크의 사용성인 면에만 충실하여 사용한다면 프레임워크의 장점은 거의 사라집니다. 물론 프레임워크의 사용 이점도 거의 사라집니다.


프레임워크와 개발자 IoC

프로그래머들이 회사나 기타 이유로 인해 프레임워크의 "사용법" 만을 익힌 채, 프로젝트를 수행하게 되고 프레임워크의 철학따윈 모른 채 기계적으로 코딩하면서 결국 자신의 스킬이 프레임워크에 귀속된, 창의적인 개발자라기 보다 수동적이고 뭔가에 귀속된 부속품같이 되어버리는 경우는 정말 최악이라 볼 수 있습니다.

그리고 이런 경우가 꽤 많다는 점이 사실입니다;

제가 많은 사람을 만나는 것도 아니고 Spring Framework 를 완전히 이해한 것도 아니지만 (이해라는 것을 논하는 것도 우스울 지경인 수준입니다), 지금 한창 유행하는 Spring Framework 를 이해하고 쓰는 개발자를 전 아직 만나보지 못했습니다. 대부분 단순히 사용법만을 인지하고 그것에 맞춰 코딩할 뿐이죠.

A > B > C > D 로 이어지는 단순 코딩만 할줄 아는 사람은 ㄱ > ㄴ > ㄷ > ㄹ 같은 개발에는 어려움을 느낄 수 밖에 없습니다. 새로운 프레임워크나 새로운 환경에 가게 되면 그런 기술은 바로 쓸모없어집니다.

프레임워크를 활용해야지 프레임워크가 개발자를 활용하면 힘들어집니다.


평준화 감옥

프레임워크를 사용하게 되면 어느정도는 개발자의 창의성을 제한될 수 밖에 없습니다.
물론 지나친 창의성은 다수 팀 개발 시 독이 되지만, 적절한 프로그래밍적 위트나 창의성은 결과물의 품질을 한층 뛰어나게 만듭니다.

그러나 프레임워크는 말 그대로 개발의 프레임워크가 때때로 개발자를 옥죄는 감옥이 되어 개발 방식이 획일화되고 프로그래머의 사고력은 단순해 진다고 생각합니다.
물론 뛰어난 개발자는 그 안에서 효율성을 찾겠지만...그건 예외로 하구요.

코드 수준을 일정수준으로 보장하지만 프레임워크의 특성상 거꾸로 생각하면 일정 수준으로 끌어 올리기는 어렵다는 뜻도 됩니다...프레임워크에 너무 의존된 개발의 종착지는 그냥 단순한 글자를 타이핑하는 손가락 노가다꾼일지도 모릅니다.

프레임워크를 사용하지만 절대 그것의 철학을 사용해야지 기능만을 사용하는 것은 피해야 합니다. 그런 기능적 용도는 프로그램 라이브러리의 API 활용으로 족합니다.


선무당

프레임워크를 사용하면 좋다는 장점들의 그림자를 주목해야 합니다.

프레임워크를 물론 잘 쓰면 좋습니다.
그러나 잘못쓰면 그 장점은 온데 간데없고 프레임워크를 쓰기만 한 그냥저냥 코드가 됩니다. 오히려 코드를 해석하기는 더욱 힘들고 유지보수는 물론이고 결과 품질도 매우 나쁘며, 테스트는 말할 것도 없죠.

관련 블로그 링크 하나 겁니다.

분노가 느껴집니다.


프레임워크의 사용은

위에 악담을 늘어놓긴 했지만 사실 현재 프레임워크 없이 뭔가를 개발한다는 것은 분명 굉장한 삽질입니다.
프레임워크의 사용은

  • 프레임워크에 사용되어지는 개발자가 아닌 프레임워크를 사용하는 개발자.
  • 프레임워크의 철학을 잘 이해하고 그것을 코드에 적용하는 개발.
  • 프레임워크를 기술이 아닌 도구로서 접근.
  • 프레임워크에 대해 충분한 학습.

이런 생각의 바탕에 둬야 하지 않을까요?

댓글 없음:

댓글 쓰기