2012년 11월 18일 일요일

Java 개발자에게 Spring Framework 의 의미...

Java 진영에서 Spring Framework 의 존재는 거의 모든 기반 기술은 다 해줄테니, 비즈니스 로직에만 집중하라... 입니다만... 

문제는 Spring Framework을 실제 이용하는 사람은 여러가지 기능에 대한 원리에 대한 이해나 필요성에 대해서는 그리 신경 쓰지 않는다는 것입니다.

이런 현실때문에 만약 Spring Framework을 쓰지 않는 곳에서는 프로젝트가 제대로 진행될 수 없거나, 품질이 제대로 나올 수 없을 것 같더군요...
 
이렇게 된게 국가가 공공 표준 프레임웍으로 Spring을 지정해서 그렇게 된게 가장 큰 거 같습니다.


표준화 자체의 효율과 효과에 대해서는 이론의 여지가 없지만, 새로운 발전을 위한 혁신에는 걸림돌이 될 것 같습니다. - Spring 으로 표준화도 혁신이었지만 - 앞으로 또 이런 노력이 계속 필요하지만, 이제는 거의 하지 않는 것 같습니다. ㅎㅎ

이런 면에서 .NET은 .NET Framework 과 NHibernate (myBatis) + DI (Castle.Windsor, NInject 등) + Entrprise Library + 몇가지 Utils 를 가지고 작업하니, 표준으로 내세울 것이 없어, 선택의 폭이 넓고, 공부해야 할 것도 더 많아서, 초기 개발자에게는 더 도움이 되지 않을까 하는 역설적인 상황이 온 거 같습니다.

물론, 개개인의 개발자의 학습에 대한 의욕 및 역량에 따라 다르지만, 객관적인 상황은 그렇다는 얘기입니다...

Java 진영에서는 Ruby, Groovy, Closure, Scala 등 다른 언어들이 있어, 자신의 역량을 높힐 신세계가 훨씬 많습니다만, Java에만 머물겠다면 Spring 외에는 공부할 게 없다는 유혹 또한 있습니다...





Spring Framework만으로 충분하다고 생각하시는 개발자분들은 Spring Framework을 사용하는 것을 넘어 Framework 내부 구조나 원리를 공부하시기를 조심스레 추천합니다.





Spring Framework이 표준화까지 되었다는 것은, 거의 모든 Best Practices 가 녹아 있으므로, 원리를 이해하는 것이 향후 다른 언어를 사용하거나, 제품을 고품질화할 때 도움이 될 것입니다. 


(단순히 Spring 책 한 두권 읽고, 적용하는 수준이 아니라, 기능을 가장 잘 사용할 방안뿐 아니라 왜 그런지 등을 이해하시는 게 필요합니다.)

2012년 11월 12일 월요일

Java에서도 logging 은 slf4j 로 가는군요.

닷넷에서도 log4net 이 처음에는 많이 사용되다가, 속도, appender 문제로 NLog 가 더 많이 쓰이게 되었는데,  Java에서도  log4j 를 직접 사용하던가 common-logging 을 사용하던 방식에서 slf4j 로 facade 해서 사용하는 방식으로 바뀌었군요.

물론 로그 쓰는 함수의 편리성 때문이겠죠?
근데 실제 로깅하는 라이브러리는 설정에 따라 log4j 를 쓸 수도 있고, logback 을 쓸 수도 있겠죠...

기존 log4j 라이브러리를 logback으로 변경했습니다. 뭐 기본적으로 slf4j  를 완벽지원하고, 속도가 빠르다고 하네요.

대부분의 의견이 logback 사용하는 것이 정신 건강에 좋다고 추천을 하는군요.

http://stackoverflow.com/questions/178215/log4j-vs-logback

아직 log4j 를 사용하시는 분들은 logback 으로 변경해 보시기 바랍니다.


2012년 11월 10일 토요일

요즘 공부하고 있는 Scala 라는 언어 소개 자료

요즘 JVM 에서 도는 java, groovy, closure, scala 등을 공부하고 있습니다.

java 야 기본 중에 기본이라, 말하면 잔소리고,

groovy는 동적 언어로서 간단한 프로토 타입이나 테스트 코드 작성에 유용하고, Solution에서 동적 script 가 사용될 때, groovy 를 표준으로 삼게 되면, 많은 잇점이 있습니다. 같은 JVM에서 돌고, 동적인   Script를 class 로 빌드해서 재 사용이 가능하여, 속도면에서도 상당한 장점을 가지게 됩니다. 또한 기존 java 라이브러리를 활용하게 되면, 더욱 강력한 기능을 제공할 수 있습니다.

groovy의 단점이라면, 동적언어로서 숙명적으로 실행 속도가 문제가 됩니다...
java 와 비교해서 같거나 더 뛰어난 성능을 가지면서, 여러가지 발전적인 기능을 가진 언어는 없을까 고민 중에 회사 동료들이 Scala에 대한 정보를 알려줘서 알게 되었습니다.

Scala는 OOP + 함수형 언어 특성 모두를 가지는 다방면의 기능을 가진 언어입니다.
만약 새로운 서비스를 만들게 된다면, Java 보다는 Scala 를 주요 언어로 선정하고 싶을 정도입니다.

다음은 제가 본 Scala 관련 소개 자료 중 유용한 자료라 생각됩니다.
한번 보시고, 괜찮다고 생각되신다면 공부해 보시길...



2012년 11월 3일 토요일

Hibernate Performance Tuning

Hibernate 의 성능을 높히기 위한 방안을 소개한 PPT 자료입니다.




ORM의 가장 큰 특징인 Association의 lazy 특성과 대량의 컬렉션에 대한 처리가 상당히 중요합니다.
상황에 따라서, 알맞는 전략이 필요합니다.

NHibernate 도 거의 같으므로, 참고하시기 바랍니다.

2012년 11월 1일 목요일

PostgreSQL 9 의 Primary Key에 Cluster 특성 지정하기

SQL Server 를 많이 써서 그런지, 당연히 Primary Key로 지정된 놈이 기본적으로 Clustered Index 로 설정되는 줄 알았는데 PostgreSQL은 아니네요^^

그냥 Non-Clustered Index 형태이면서 제약 조건에 나타나내요

다음과 같이 특정 테이블의 Primary 키에 CLUSTER 속성을 주면 간단히 해결이 됩니다.

ALTER TABLE customers CLUSTER ON customers_pkey; 

오늘 하루 종일 PostgreSQL 기본 문법 사항과 성능 관련 사항을 훑어보고 있는데, 상당히 잘 만들어졌다고 봐 집니다. 
다양한 기능을 가지고, 상황에 맞는 기능을 제대로 제공하는군요...

인덱스만 하더라도 BTREE, HASH, GIN (Generalized Inverted Index), GiST (Generalized Search Tree) 를 제공하는군요.

특이한 것은 부분 인덱스라고, 특정 조건에 해당하는 레코드들만 인덱스를 정의하는 기능도 있네요.

CREATE INDEX idx_accounts_interesting ON accounts WHERE interesting is true;

또한  SQL Server 의 경우 WHERE 절에 Upper(), 나 Lower() 등의 함수를 쓰게 되면, 인덱스를 타지 않는데, 이런 상황을 극복할 수 있도록, 이런 함수를 이용한 인덱스도 있습니다.

CREATE INDEX idx_lower_name ON users (lower(name));
SELECT * FROM users WHERE lower(name) = 'x';


좀 더 공부해서, 아예 PostgreSQL 의 Replication과 HA 구성도 함 해봐야 겠습니다.