2009년 7월 8일 수요일

자바로 웹개발시 사용되는 프레임워크, 라이브러리

만약에 내가 자바로 웹개발을 한다면,
아래 프레임워크, 라이브러리를 사용하려 합니다.

다른 좋은 것들 있으면 알려주세요.~

Web Framework
Struts 2 - http://struts.apache.org/2.x/index.html
Spring Plugin - http://struts.apache.org/2.x/docs/spring-plugin.html

Web Presentation
FreeMarker - http://freemarker.org/
SiteMesh Plugin - http://struts.apache.org/2.x/docs/sitemesh-plugin.html

Javascript
Struts2 jQuery Plugin - http://code.google.com/p/struts2-jquery/
Struts2 jQuery Plugin Showcase - http://www.weinfreund.de/struts2-jquery-showcase/index.action

DB Access
iBatis - http://ibatis.apache.org/
iBator - http://ibatis.apache.org/ibator.html

Log
Log4j - http://logging.apache.org/log4j/

Build, Deploy
Apache Ant - http://ant.apache.org/

Operation
Apache Tomcat - http://tomcat.apache.org/

Misc.
Struts 2 Plugins - http://cwiki.apache.org/S2PLUGINS/home.html

또 필요한게 뭐가 있을까??

2009년 7월 3일 금요일

자바와 루비온레일스의 웹개발 ( Java vs. Ruby on Rails for Web Development )

Java Warehouse Developer Center vs. Rails


엄밀히 따지자면, Java는 언어이고, Ruby on Rails는 웹 개발 프레임워크이기 때문에 두 개가 비교되기에는 부적합 합니다.
여기서 말하는 Java는 Java를 이용한 웹 개발 이라는 의미에서 해석하시면 좋을 듯 합니다.

제가 하고 싶은 질문은,
Java와 Ruby on Rails 중에서 웹 개발을 하기에 어떤 것이 더 적합한 언어, 프레임워크인가? 입니다.

결론부터 말씀드리자면, Java보다 Ruby on Rails에 손을 들어주고 싶습니다.

저는 개인적으로 Java 언어를 오랫동안 사용해 와서,
언어 자체로만 따지자면 Java가 익숙한 언어입니다.
그런데 최근 들어서(사실은 지속적으로 고민했습니다만..) 회사에서 Java를 이용해서 웹 개발을 하다 보면, 참 여러 가지가 비효율적이라는 생각이 듭니다.

Java진영에서 웹 개발에 사용되고 있는 프레임워크로는 webwork, spring, ibatis 를 사용 중이고, 빌드 배포에는 maven을 사용 중이며, 운영환경으로는 apache + tomcat을 사용 중입니다.
Java를 이용한 웹 개발에서는 위에 나열한 것 외로, 여러 가지로 얽힌 프레임워크와 라이브러리가 더 사용되게 됩니다.

일단 위 프레임워크, 라이브러리를 사용하기 위한 XML configuration을 하면서 그 복잡함에 지치게 되죠.
그리고, 코딩을 할 때에는 BO, BOImpl, DAO, DAOImpl에 동일한 패턴의 코드들을 죄다 나열하게 됩니다.
이것이 정석이라고 하는데, 노가다 코드를 작성하면서 이것이 과연 필요한 것인가.. 라는 생각을 지속적으로 하게 됩니다.
그 중에서도 특히 DAO, DAOImpl은 거의 기계적인 패턴의 코드만을 작성하게 되는데도 말이죠.

xwork.xml(webwork url 설정), applicationContext.xml(spring object설정), BO(Business logic Object), DAO(Data Access Object) 4군데에서 동일한 네이밍 규칙을 지키려고 개발자가 신경을 쓰며 수많은 반복되는 패턴의 복사 코드를 생성하게 됩니다.
이 반복적인 작업이 저에게는 너무 큰 비효율로 인식되는 군요.

게다가 코드가 파일마다 몇 백 라인씩 되어가는데, 위에서 언급한 4군데에서 동일한 패턴으로 사용되는 코드들의 네이밍 규칙이 다들 제 각각으로 되게 되면.. 개발하는데 여간 해깔리고 힘든 일이 아닐 수 없습니다.
이 수많은 코드들은 바로 유지보수의 어려움이라는 직격탄으로 개발자들에게 날라오게 된다고 생각합니다.

게다가 Java라는 언어가 기본적으로 compile time을 가지는 언어라서,, Java Object가 수정될 때마다 tomcat을 restart해야 하는 불편함이 있습니다. 개발 생산성에 상당한 치명타를 입히게 되죠.
게다가 xml등의 resource파일이 수정되는 때에는,, 무시무시한 maven빌드 과정을 다시 거쳐야만 합니다.
몇 십 초 되는 과정을 개발 중간중간에 거치려니.. 답답합니다.
몇 초라도 손해를 덜 보기 위해서는 개발장비를 더 좋은 것으로 바꿔야겠군요!


반면 Ruby on Rails 웹 개발 프레임워크의 개발환경은 위에 언급한 대부분의 단점을 보완하고 있습니다. 게다가, 웹 프론트, 프레젠테이션 레이어에서 사용되는 수많은 장점을 더 가지고 있죠.

그렇다고 해서, Ruby on Rails가 Java에 비해서 모든 면에 서 뛰어나다는 것은 아닙니다.
많은 사람이 협업해야 하는 대형 프로젝트에서는 Ruby 보다 Java가 더 적합하다고 생각합니다.
그러나 대규모의 웹 프로젝트가 아니라면,, 제가 지금 하고 있는 규모의 프로젝트 대부분에서 Ruby on Rails가 적합하다고 생각합니다.

끝으로, 제가 꼽는 Ruby on Rails에 비해서 Java의 장점은 아이러니하게도 좀 전에 언급한 Java언어의 단점인 Compile time 이 있다는 데에서 찾을 수 있습니다.
컴파일을 한다는 것으로 compile time에 수많은 오류를 찾아 낼 수 있기 때문입니다.
Ruby on Rails는 compile 과정이 없기 때문에 run time 에 에러를 만나게 됩니다. 이것은 Ruby on Rails의 안 좋은 점이네요.
그리고 Java언어는 Compile 과정이 있는 언어이기 때문에, IDE에서 코딩 시에 auto completion 을 지원해 줍니다. Ruby언어는 동적인 성향이 강한 스크립트 언어이기 때문에 이 부분의 지원이 쉽지 않다는 점이 있습니다.

이 두 가지의 장점을 Ruby on Rails에서 누릴 수 있는 방법이 있거나..
위에서 언급한 Java언어의 웹 개발 환경에서의 수많은 단점을 극복할 수 있는 방법이 있었으면 좋겠습니다.

개인적으로는 노가다 코드로 대부분의 시간을 낭비하는 Java로 하는 웹개발 보다는 생산성 좋은 Ruby on Rails로 개발하고 싶습니다. Ruby on Rails로 개발하다보면 Ruby언어도 점점 익숙해 지겠죠.
그러나 회사에서 저의 생각을 받쳐주지는 않네요.-_-;
그래서 당분간 Java를 계속 하게 됩니다. 안타깝게도,, 이러면서 저의 짧은 Ruby, Ruby on Rails의 지식도 점점 잊혀져 가는 듯 합니다.

끝으로,,
이글은 개발관련 잡담, 개인적인 생각임을 밝힙니다..
제가 개발관련 지식이 부족해서 오판을 하는 것일 수도 있죠.ㅎ

2009년 6월 25일 목요일

내가 회사에서 담당하는 서비스의 장애.

제가 회사에서 담당하는 서비스가 지난 월요일 저녁시간에 장애가 발생했습니다.
비교적 빠른시간에 장애대처를 할 수 있어서, 서비스는 비교적 빠른 시간 내에 정상화 되었습니다.

회사의 업무 프로세스에 따라,
장애 원인을 보고하고, 장애 재발 방지 대책도 제출했습니다.

그런데, 어느 QA팀장님께서,
저에게는 정말 높으신 분들 줄줄이.., 그리고 수많은 개발 그룹분들을 참조로 넣어서 두가지를 물어오셨습니다.
1. 장애의 원인과 재발방지 대책은?
2. 그리고, 수많은 참조자들에게 보내는..  이런 장애가 나지 않게 조심하라는 경고.

그런데, 수많은 참조자 앞에서 마치 제가 장애를 일으킨 듯한 저 이메일과..
저는 이미 프로세스를 통해서 보고한 내용(원인과 재발방지 대책) 을..
굳이 저 많은 참조자들을 넣어서 저에게 되물음을 하는 이유는 무엇일까요?

장애 내용 전파를 저에게 원인과 재발방지 대책을 묻는 것과 별개로
사례로서 따로 사내 전파를 하면 안되는 것이였을까요?

굳이 장애 원인 제공자를 따지자면, (제 주관적인 생각입니다만) 저에게는 약 10%의 책임이 있다고 생각됩니다.

제 입장에서 겪은 일은 별것 아닌 일이지만, 신경이 쓰입니다.
이런 일 자체가 신경이 쓰이는 것이 아니고,
회사에서 저런식으로 일하는 분(배려가 부족한..)이 윗분들에게 인정을 받을 것을 생각하면.. 흠..
제가 이런 조직에 있다는 것 자체가...ㅡㅡ;;







2009년 6월 18일 목요일

지난 약 2일 동안의 리플링 서비스 장애 사과문

지난 일요일 오후부터 수요일 새벽까지 repling.com 서비스의 장애가 있었습니다.
장애의 원인은 호스팅 서버의 하드디스크 물리적 결함이었고,
대부분의 데이터는 복구가 되었습니다.

그런데 아쉽게도 사용자 프로필 이미지 데이터가 손실되었습니다. 죄송합니다.
번거로우시더라도,
http://repling.com 에 접속하셔서, 다시한번 사용자 프로필 이미지를 등록해 주세요.

앞으로 고객님의 소중한 데이터가 유실되지 않도록 더욱 주의하겠습니다.
앞으로도 지속적인 서비스 이용 부탁드립니다.

PS. 언제나 고객님의 소중한 의견을 기다리고 있습니다.
http://www.repling.com/about/feedback

2009년 6월 15일 월요일

repling.com, newscast.kr 서버장애

호스트웨이에서 서버호스팅을 받고 있는데,
일요일 저녁에 서버 장애가 났습니다.
이용자가 거의 없습니다만,
서버 장애로 인해 불편을 겪으셨다면 죄송하다는 말씀을 우선 드립니다.

아직 정확한 원인 파악이 되지는 않았지만, 하드디스크의 물리적인 장애로 판단됩니다.

jaehyun@newscast:~$ top
-bash: /usr/bin/top: Input/output error
jaehyun@newscast:~$ du
-bash: /usr/bin/du: Input/output error

거의 모든 리눅스 명령어에 위와 같은 IO에러가 발생합니다.

우선, 서버를 복구 해야 하는데..
이 시점에서 장기적인 서버 운영에 대한 여러가지 고민을 하게됩니다.

1. 생각보다 서버호스팅이 책임져 주는 것이 없다는 것입니다.
HDD물리적 고장인데도 불구하고,
서버호스팅 업체에서는 HDD교체 후, OS설치비를 요구할 듯 합니다.
저에게는 적은 금액이 아니라서 OS설치를 해야 하는지 고민입니다.

2. 최근 Google App Engine for JAVA에 Java web project 를 deploy해 보았는데,
생각보다 쓸만합니다. 구글이라 믿을 수도 있습니다.
불편한 점은, JDO, JPA와 같이 Java Persistence Layer를 제공하고,
MySQL등의 RDB를 제공하지 않는다는 것 입니다.
JDO, JPA는 좋은 개념이라고 생각은 되는데, 새로 배워야 한다는 부담과,,
아직 RDB모두를 포괄 할 만큼은 성장하지 않았다고 느껴집니다.

3. Google App Engine for JAVA를 사용하기에 또 다른 불편한점 한가지는
Ruby on Rails를 사용할 수 없다는 것입니다.
Java도 익숙해서 큰 문제는 안됩니다만,
기존 개발된 repling, newscast 서비스가 Ruby on Rails로 개발되어 있습니다.

4. 왠지 믿음이가는 스마일서브 http://www.1000dedi.net 에서 풀 가상화 호스팅 서비스를 시작하였습니다.
이 서비스는 올해 초쯤 시작한듯 하더군요.
http://www.1000dedi.net/docs/renew/core_host/core_host02_01.htm
개인적인 의견이지만 지금 이용하고 있는 호스트웨이보다 스마일서브가 믿음이 갑니다.
월 이용료도 더 저렴한 서비스를 이용할 수 이겠군요..
성능이 어느정도나 나올지는 잘 모르겠습니다.
한가지 걸리는 것은 해외 접속 트래픽을 제한을 한다는 것입니다. (왜 제한을 하는 것인지 궁금하네요.)
작은 서비스이긴 합니다만, 해외 접속도 생각하고 있기에, 이 내용이 조금 걸리긴 하네요.

이번 장애로서 백업의 중요성, 이중화의 필요성을 느끼네요.. (운영장비의 이중화는 비용이 문제.)
작게나마 서비스를 운영해 보면서.. 느끼는것이 많네요..

오래간만에 쓰는 글인데,
두서없이 주저리주저리~~

호스팅 관련하여 좋은 대안이 있으시면 추천해주세요.~~

2009년 5월 28일 목요일

리플링(repling.com) 탄생 배경


안녕하세요.
오늘은 리플링 서비스를 준비하게된 동기및 탄생 배경에 대해 말씀드리겠습니다.

리플링 서비스의 목적은,
"웹에 있는 컨텐츠를 친구들과 함께 공유하여 보고, 서로 정보를 교환하며, 공유된 컨텐츠에 댓글을 쓰면서 의견을 교환하자."
입니다.


우선, 리플링 서비스를 기획하면서 벤치마킹대상 서비스로는
구글 리더의 공유피드, friendfeed, twitter, 네이버 오픈캐스트, 마이크로탑탠 서비스 등을 들 수 있습니다.
위 언급한 모든 서비스들은 각각의 특징들을 잘 가지고 있고, 훌륭한 서비스들 임에 틀림 없습니다.



1. 구글 리더의 경우, 불과 한두달 전만 해도 공유한 컨텐츠에 추가적인 댓글을 쓰는 기능이 없었습니다.
최근에 공유글에 대한 댓글을 추가적으로 달수 있게 되었습니다.
그런데, RSS구독항목에 없는 컨텐츠의 경우, 공유를 하지 못한다는 불편함이 있습니다.

2. 프랜드피드와 트위터의 경우, 링크를 글줄임 기능을 이용하여 줄여서 표현하고 있습니다.
링크를 포함하여 글을 쓴 사람 모두를 볼 수 있는 기능이 약하다고 판단하였습니다.
링크를 공유하고 싶다는 목적에 부합되지 않는다는 것을 느끼고,
링크 중심에 지인간의 댓글을 주고 받을 수 있는 기능을 생각하게 되었죠.

3. 네이버 오픈캐스트와 마이크로탑탠의 경우에는,
글 모음을 발행하기 위해서는 일정양의 정보를 모아야 한다거나, 발행을 하는데 번거로움을 느낄 수 있었습니다.
한번의 발행을 하기 위해서는 시간투자를 해야 합니다. 잡지를 발행하듯이 말이죠.
실시간성, 즉시성, 편리함, 쉬움을 필요로 한다고 느꼈습니다.
그래서, 웹서핑을 하다가 관심 있는 글, 발행 하고 싶은 글을 보게 된 경우, 즉시 나의 RSS피드에 발행할 수 있으면 좋겠다는 생각을 하였습니다.

그래서 리플링 서비스가 탄생하게 되었습니다.

아래 그림과 같이 웹서핑을 하다가, 친구와 함께 공유하고 싶은 글을 보았을 때,
간편하게 리플링하기 북마크릿을 활용하여 나의 리플링 공유피드로 발행 할 수 있습니다.



이렇게 발행된 글들은 아래와 같이 나의 리플링 홈에 쌓이게 되며, 친구들과 댓글을 주고 받을 수 있습니다.




조금 더 쉬운 이해를 돕기 위하여
소개 동영상을 준비하였습니다.

























그럼, 아직 부족함이 많지만,
조금씩 개선해 나가는 서비스가 되도록 노력하겠습니다.

4개의 항목만 입력하면 되는 아주 간편한 가입 절차가 준비되어 있습니다.
이용해 보시고, 서비스에 대한 의견을 주시면 좋겠습니다.
감사합니다.

리플링 서비스 바로가기



2009년 5월 3일 일요일

뉴스캐스트 서비스 리뉴얼


연휴기간에 시간이 좀 남아서,
귀찮아서 방치해 두었던 서비스인 뉴스캐스트(NEWSCAST.kr) 서비스를 리뉴얼 하였습니다.

작년 8월쯤에 LGT OZ공모전에 출품하기 위해서 혼자서 대략 1~2주의 여가시간을 활용하여 만든 서비스이구요.
역시나 Ruby on Rails로 개발되어 있습니다.
아래와 같이 간단한 형태로 생겼습니다.

작년 8월부터 newscast.kr 도메인을 사서 서비스를 시작하였는데,
우연히 올해1월부터 네이버에서 서비스하는 뉴스캐스트와 이름이 중복어 사용되었네요.
제가 작게 시작하였지만, 뉴스캐스트라는 이름을 먼저 사용하였습니다.
믿지 못하시는 분은 안계시지만, 증거 산출물로서,
아래 NEWSCAST로고는 dotty님께서 작년 8월쯤에 그려주신 것이랍니다.^^

주제는,
"실시간 급상승 검색어" 에 노출된 단어로 최근 뉴스기사를 추출하여 실시간 업데이트하여 보여주는 서비스 입니다.
약 1일이 지나면 기사는 사라지게 되고, 계속 새로운 기사로 채워지게 됩니다.



아래와 같이 아이팟 터치로 접속하시면 전용화면을 보실 수 있습니다.
물론 LGT 오즈폰으로 접속 하셔도 전용화면을 보실 수 있습니다.


그럼 많은 이용 부탁드리고,
개선사항의견 있으시면 말씀해 주세요.~~