태그 : java

Spring Framework 비난에 대해

블로그들을 돌아다니다 spring framework에 대해 "비난"하는 포스팅을 봤다.  "뭐 하나 고치려면 파일 뒤지는데 한 세월"이라면서 사이비가 아니냐는 말을 하고 있다.

그 포스팅을 보니 예전에 같이 일했다가 지금은 SI 쪽에서 일하고 있는 팀원이 한 말이 생각났다. 그 친구는 2004년 우리 팀에 spring framework를 도입했을 때 주도적으로 작업했던 친구다. 1.0 버전부터 최근까지 사용했던 친구라 spring framework에 대해선 아주 잘 안다 할 수 있다.  요즘은 spring framework가 꽤나 많이 알려지지 않았나 생각해서 SI 쪽에선 어떤가 물었더니 의외의 대답을 했다.

"JSP 하나로 처리할 수 있는 걸 복잡하게 여러 파일로 나눠놨다며 안쓰려고 해요. 그것 때문에 욕까지 들어먹은 적도 있는데요"

그 포스트의 말대로 "슬슬 사이비이고, 버려야 할 것이라는 움직임"이 SI 쪽에 있긴 한 거 같다.  하지만 정말로 그런 움직임이 있다면 그건 정말 슬픈 일이다.

spring framework는 참 잘 만든 프레임워크다.  나는 JSP + Bean 스타일이나 자작 Front Controller 스타일로 개발하다가 한계에 부딪친 상태에서 뭐가 뭔지 모를만큼 복잡했던 EJB는 쓰기 꺼려지던 때 spring framework를 발견했다.  그 이름처럼 산뜻한 느낌을 주는 framework였고 그때부터 지금까지 사용하면서 항상 즐거움과 신뢰를 느끼고 있다.

그런데 왜 이와 같은 말이 나오는 걸까? SI라면 나는 나쁜 기억 밖에 없다. 몇번 SI 업체에 개발 외주를 준 적이 있었고 다 별로였다. 최근 경우는 가관이었다. 구축 후 그 시스템을 우리 팀이 맡아서 유지 보수할 예정이었기 때문에 개발에 spring framework를 사용할 것을 요구했다. 그런데 그 결과물이라는 걸 검수하며 우리 팀원들은 욕을 무더기로 해댔다.

그것은 spring framework에 대한 최소한의 이해도 없는 상태에서 아니 그것보다 소프트웨어 설계에 대한 기본도 무시한 상태에서 작성한 코드였다.  데이타 접근 계층, 서비스 계층, 웹 처리 계층, 뷰 계층의 구분은 시늉만 냈을 뿐이지 아예 무시되고 뒤섞여 있었고  DI로 처리할 부분을 버젓이 singleton factory를 만들어 lookup하고 있었다.  java collection 객체들을 엉터리로 사용하는가 하면 심지어 java naming convention도 지키지 않고 클래스를 정의하고 있었다.  메서드 시그내쳐를 정의하기 귀찮았는지 Map 객체만을 인자로 받는 메서드들이 허다했고 각 메서드 호출 계층마다 인자로 넘어온 Map 객체를 마구 조작해가며 다음 메서드에 인자로 넘기고 있었다.  정말로 뭐 하나 고치려면 파일들을 찾느라 한 세월인 경우였다.

말하자면 이런 거다. "추상화니 모듈화니 재사용성이니 그런 거 몰라. 어쨌든 돌아가면 되는 거 아냐. 어차피 copy & paste인데 복잡하게 뭐하러 여러 파일로 나눠. 그냥 JSP 하나면 족하지"

글쎄, 누구 말마따나 x 한번 푸짐하게 싸놓고 나올 수 있다면 몰라도 끝까지 자신의 결과물을 책임져야 하는 인하우스 개발팀이라면 위와 같은 생각을 가질 수 없다.  설령 copy & paste로 가능하더라도 그 얼마나 재미없는 일인가?

spring framework를 비판하는데 그게 추상화와 모듈화라는 소프트웨어 개발의 기본을 망각한 가운데 나온 거라면 들어야 할 일고의 가치도 없다.  그렇지만 spring framework 자체의 단점 또는 결함을 비판하는 거라면 정말로 한번 들어보고 싶다. 과연 그런 게 나올지 의문이긴 하지만.

by Corund | 2009/01/08 14:14 | 트랙백 | 덧글(2)

Java Concurrency in Practice


Java Concurrency in Practice
를 읽었다.  Concurrent Programming in Java 책을 사다가 아마존에서 추천에 낚여 덜컥 산 책이었는데 알고 보니 매우 좋은 평을 받고 있는 책이었다.  읽어 보니 내용도 아주 좋았고 읽기도 쉬웠다.  그런데 알고 보니 이 책은 2006년에 나온 책이었다. 그간 이것저것 잡다한 것에 관심을 갖고 공부에 게을리했더니만 어느덧 시대의 흐름에 뒤떨어졌구나라는 생각이 들었다.

이 책은 자바에서 병행성(concurrency)에 관해 매우 실제적인 측면에서 설명하고 있다. 자바의 기본 병행성 도구인 스레드(thread)를 다루는 여러 방법을 설명하고 있다.  또 실제 구현을 할 때 큰 도움을 주는 java.util.concurrent 라이브러리도 자세히 설명하고 있다. 데드락을 피하는 법이나 스레드 모니터링, 테스팅에 관해서도 언급하고 있고 성능 문제에 관해서도 잘 설명하고 있다.  아주 많은 것을 배운 책이었다.  스레드를 시작할 줄 알고, synchronized 키워드나 wait, notify 정도만 알고 있고 왜 double check locking이 위험한지, volatile이 무엇인지, InterruptedException은 어떻게 처리해야 하는지, java.util.concurrent 패키지에는 무엇이 들어있는지 모른다면 이 책을 읽으면 된다.

이 책에서 다루고 있는 내용을 생각나는대로 한번 나열해 보면 다음과 같다.
  • 자바 병행성과 관련한 두 가지 문제: 접근 제어와 memory visibility 문제
  • 병행성 관련하여 데이타를 다루는 방법: no share, immutable, thread confinement, guarded mutable object share
  • Publish / Escape
  • 작업(Task)와 스레드(Thread) 관리의 분리: Executor. Future, ThreadPool
  • condition: Latch, Semaphore, Barrier, BlockingQueue 등
  • 스레드의 취소, 중지: interrupt
  • Concurrent Collection 라이브러리
  • Lock Contention
  • Thread dump
  • Atomic variable. CAS(Compare-And-Swap), Nonblocking Algorithm, Optimistic

by Corund | 2008/06/10 11:48 | 트랙백

자바가 lingua franca라.

자바 언어가 일종의 lingua franca로 적합하다고 하는 대목이 있는데, [링크] 처음 C++에서 자바를 봤을 때 그런 느낌이 들긴했다. 그런데 5.0이 되면서부터 조금씩 번잡해진다고 할까?

by Corund | 2008/01/15 11:34 | 트랙백

◀ 이전 페이지다음 페이지 ▶