'전체 글'에 해당되는 글 464건

  1. 2007.11.21 Web App Framework 전쟁이야기(4)
  2. 2007.11.20 Web App Framework 전쟁이야기(3)
  3. 2007.11.19 10년 후의 개발자? 6
  4. 2007.11.18 나만의 사람보는 법 3

지난 번까지  WAF에서 제공하는 주요한 모델들에 대해 살펴보았습니다. 이번에는 간략히 WAF에서 제공하는 주요 컴포넌트(서비스)들을 살펴보고 이들을 기준으로 WAF 분류해 보겠습니다. 이들 기본 컴포넌트들은 Wiki에서 여러 개발자들이 올린 것들입니다.

- MVC 모델 지원(지난 번에 자세히 보았죠^-^)
- Ajax  연동(말이 필요없을 것 같습니다.^-^)

- 국제화와 지역화
  다국어 처리와 다양한 리소스 번들 처리는 번거롭지만 반드시 발생하는 작업입니다. 이러한 작업의 편의를 위해 많은 WAF이 국제와와 지역화 서비스를 기본적으로 제공하고 있습니다. 가령,  국내 개발자들이 많이 사용하는  struts 를 보면 리소스를 초기부터 분리하여 다국어 처리 등을 손쉽게 해줍니다. 미리미리 리소스를 정리해 두지 않으면 나중에 무지하게 고생을 합니다.

- O-R 매핑
관계형 DBMS를 객체로 매팅시켜 주는 서비스입니다. 국내에서는  SQL을 XML 로 매핑시켜 사용하는 방식인 iBatis 를 많이 사용합니다만 , 외국에서는 Hibernate 를 많이 사용하는 데 XML로 테이블을 클래스를 매핑시키는 방법을 사용합니다. 이외에도 JPA(Java Persistence API)를 사용하는 개발자도 많다고 합니다. JPA에서는 Java Persistence Query Language (JPQL)를 자바 언어로 만들어서 직접 관계형 DBMS를 다룰 수 있게 해 줍니다. 국내에서는 거의 이용하지 않는 것 같습니다.

- 테스팅 프레임웍
Junit같은 테스팅 프레임웍을 함께 사용하여 단위 테스트를 수행합니다. 가급적 이클립스 등  생산성 높은 IDE와 함께 테스트과 프로파일링을 하는 게 좋습니다.

- 보안 프레임웍
많은 개발자들이 보안을 기본적으로 제공해야 할 주요한 기능으로 보는 것 같지는 않습니다. 또한 아쉽게도 보안을 강력하게 제공하는 WAF도 아직 존재치 않습니다. 가능한 방법으로 J2SE의 일부 패키지이자 Java2 Security에서 제공하는 JAAS(Java Authentication and Authorization Service)-java.security.auth*와 JSSE,JCA를 사용해서 사용하는 방법이 있습니다.  JAAS를 이용하면 접근권한과 로그인 제어 등을 손쉽게 할 수 있고  JSSE는 SSL을 통한 네트웍 보안, JCA는 암호화 기능을  이용할 수 있습니다. 물론 관련 정보는 DBMS를 통해 처리됩니다. 처음  개발하시는 분들에게 도움이 될 것 같습니다.

- 템플릿
템플릿은 기본적으로 View 부분의 손쉽게 개발해줍니다. 대표적인 것이 바로  JSP 입니다. 이외에도 Velocity,FreeMarker,WebMacro 등이 템플릿 전용 프레임웍입니다. 이들 전용 프레임웍외에 많은 WAF에는 내부에 템플릿 지원을 지원하고 있습니다. 가령, Struts는 템플릿으로 자카르타 Tiles 프레임웍을 함께 제공하고 있습니다.

- 폼 밸리데이션
사용자가 제출한 입력 데이타의 무결성을 점검하는 것은 아주 중요하지만 번거로운 일입니다. 이 작업을 손쉽게 해주는 컴포넌트가 바로 폼 밸리데이터입니다. 일반적으로 기본적인 밸리데이터를 제공하고 사용자가 직접 밸리데이터를 작성하여 사용할 수 있도록 합니다. 대표적으로 Struts에서는 Jakarta Common의 Validator를 기본으로 제공합니다.

- 캐싱
많은 개발자들이 성능 개선이나 보안 등의 이유로 캐싱 기능을 원하는 것 같습니다. 개인적으로는 특별한 이유가 아니면 필요하다고는 생각치 않습니다. 그러나 만약 필요하다면 JCS(Java Caching System) 컴포넌트를 함께 이용하는 것도 방법입니다. 기본적으로 파일 캐싱과 오브젝트 캐싱을 제공합니다. 그런데 제 경험상 버그가 좀 있었던 것 같은데.. 오픈소스라 지금은 좀 개선됐을 수도 있을 것 같습니다.


다음은 위키에서 많은 개발자들이 위의 분류에 위해  분류한 WAF에서 자바 언어만을 정리한 표입니다. 아래 표에서 테라코타는 인도의 회사인데 캐싱을 통해 성능 개선을 하는 기술이 아주 좋은 회사입니다. 2006년 자바월드에서 만난 경험이 있습니다^-^.

사용자 삽입 이미지

힘이 들어서 한번 끈고 가야할 것 같습니다. 이번 달은 무지 하게 바쁜 달이 될 것 같습니다. 벌어지는 사업 지원만 해도 참 많네요. 거기다 사람같이 않은 사람이 다시 저를 괴롭히기 시작해서 참 힘드네요..


Posted by 박재현
,

지난 번에 이어서 WAF 의 전쟁 이야기를 계속해 봅니다.  WAF의 분류를 위해서는 크게 2가지 관점에서 이해가 필요합니다. 하나는  WAF에서 사용하는 주요한 모델(패턴)들에 대한 이해이고 다른 하나는 공통으로 제공하는 컴포넌트(서비스)에 대한 이해입니다.  모델은 일반적으로 프로그램에서 인터페이스와 상속 등의 관계를 통해 해당 문제를 해결하기 위한 방법을 강제하게 해 줍니다. 또한 컴포넌트는 웹 개발에 필요한 각종 라이브러를 제공합니다.

그럼 먼저 현재 WAF에서 사용하는 주요한 모델들에 대해 좀 정리해 보겠습니다.

1. WAF에서 사용하는 주요한 모델들

1.1 MVC(Model-View-Controller) 모델 
일반적으로 MVC 모델은 사용자 인터페이스와 액션을 받아 들이는 View와 해당 응용의 데이타 모델과 이에 대한 조작을 담당하는 Model, 그리고  View를 통해 전달된 사용자의 액션을 처리하고 실제 모든 비지니스 로직을 담고 있는 controller로 구성됩니다.

사용자 삽입 이미지

흔히 MVC를 모델1, 모델2라고 구분합니다. 이는 JSP,ASP 처럼 View를 담당하는 페이지에, Controller부분을 포함할 것인가 아닌가에 따라 구분됩니다. 가령, 모델1은 하나의 JSP 페이지에 View와 Controller가 포함된 것이고 모델2는 JSP에는 View만 두고  Controler는 분리하는 것 입니다. 당연히 모델2가 모델1에 비해 의존성이 떨어지기 때문에 유지보수와 확장이 용이하며 재사용성 등 많은 장점들을 갖고 있습니다. 현재 대부분의  WAF는 모델2 MVC 패턴을 사용하고 있습니다.

모델1,모델2외에  Push& Pull model을 이해해야 합니다. 이 모델에 따라 WAF의 개발 방법이 많이 달라지기 때문입니다. 먼저 Push model은 초기 WAF에서 주로 채택했던 방법으로 사용자의 요청에 의해 처리된 결과를 View에 밀어 넣는(push)하는 방법입니다. 이에 반해 Pull model은  View에서 다수의 controller로 부터 필요에 따라 처리 결과를 땡겨(pull) 오는 것 입니다. Pull model은 View에서 마치 필요한 컴포넌트를 호출하여 처리하는 방식이 가능하기 때문에 이를 컴포넌트 MVC 라고도 부릅니다. 최근에 발표된 많은 WAF는 pull model을 사용합니다. 이 말은 이제 대세가 과거 데스크탑에서 비쥬얼 베이직이나 자바 스윙 컴포넌트를 사용하여 응용 프로그램을 개발하는 것과 동일한 방식과 철학으로 웹 응용 개발이 가능하다는 것을 말합니다. 나중에 보겠지만 실제  JSF (Java Server Face) 표준은 이러한 것을 규정한 개발 표준입니다.

-PageController VS  FrontController 모델

수많은 클라이언트의 요청을 효과적인 처리는 WAF 에 있어 가장 첫번째 중요한 과제입니다. 이러한 상황에서 취할 수 있는 2가지 모델이 있습니다. 하나는  PageController로서 모든 클라이언트 요청을 PageController가 받은 후 처리하는 것 입니다. 초기 대부분의 웹 응용 프로그램을  PageController 방식으로 개발했습니다. 이 방법의 문제는 클라이언트의 요청이 많을 경우 부하 걸린다는 것이고 하나의 페이지마자 하나씩의 PageController를 만들어야 한다는 것 입니다.

사용자 삽입 이미지

PageController의 중앙부하집중 문제점을 해결한 방식이 바로 FrontController입니다.  FrontController에서 controller는 핸들러와 복수개의 커맨드로 구현됩니다. 이렇게 함으로써 부하 집중 문제를 풀 수 있습니다.

사용자 삽입 이미지

실제 현재 모든  WAF 에서 이 모델을 사용하고 있습니다. Structs에서는 ActionServlet, WebWork에서는 ServletDispatcher , Spring MVC 에서는 DispatcherServlet, Tapestry 에서는 ApplicationServlet, JSF 에서는 FacesServlet이 바로 FrontController  패턴으로 클라이어트의 요청을 처리합니다.

생각보다 길어 지네요.. 아무래도 2,3 편은 족히 더 써야 할 것 같습니다. 다음 편에는 WAF 에서 제공하는 주요 서비스들에 대해 살펴보겠습니다.

Posted by 박재현
,

10년 후의 개발자?

Log/LifeLog 2007. 11. 19. 18:47

여러분이 개발자라면 10년 후의 여러분의 모습은 어떨지요? 사실 저도 10년 전에는 무지하게 고민되던 문제이고 사실 지금도 고민하기는 마찬가지 입니다. 이 문제에 대해 MS에서 최고 기술 임원으로 계시는 김명호 박사님이 좋은 말씀이 있어 소개합니다.

개인적으로 저는 "이 길이 아니다 싶으면 차라리 다른 일을 하라"라 말이 가슴에 와 닫네요.. 비록 한국 이란 사회에서 가치 인정은 못받지만 제대로 된 엔지니어가 되기 위해 노력하는 많은 엔지니어의 성공을 바랍니다. 

20일 건국대학교 새천년대강당에서 열릴 MS DevDays 2007 Korea에서 발표할 자료입니다. 시간되면 한번 가보고 싶네요..





Posted by 박재현
,

사용자 삽입 이미지
지금껏 살면서 어처구니 없었던 일을 다시 한번 마음속에 새기고 다시는 같은 실수를 저지르지 말자는 취지에서 ....






초등학교때(행복지수:4),
아이들이 무척 시끄럽게 떠들고 있었을 때 , 담임 선생님께서 별란간 "공부하기 싫은 사람 집에 가라!"라 말하셨다. 나는 정말 공부하기 싫어서 집에 왔다. 집에서 어머니께서 왜 이렇게 일찍 왔냐는 말씀에 "공부하기 싫은 사람 가라고 해서 왔다"고 말씀드렸더니 벌쩍 뛰시면서 다시 날 데리고 학교에 가셨다......학교에서 혼은 나지 않았지만 선생님도 믿을 수 없다...^-^


중학교때(행복지수:2) ,
학비를 늦게내는 친구를 공개적으로 망신시키는 담임선생님을 무지하게 싫어했다. 그런데 옆반의 기술 선생님께서 그 날 부부싸움이 있으셨는지 기술 시간에 떠든 다고 한 친구를 불러내서 어처구니 없이 무지하게 폭력을 가했다. 아! 지금처럼 핸드폰이라도 있으면 찍어서 유튜브에 올릴텐데... 더 어처구니 없는 것은 갑자기 친구 맞는 거 보고 웃었다고 다른 친구를 불러내서 또 패고.. 뒤를 이어 또 패고.. 4명이나 시간내내 ...
다음 날 , 우리 담임 선생님께서 기술 선생님반에 가서 무지하게 복수를 했다고 한다. 전교에 소문이 완전히 낳다. 통쾌하다기 보다 어처구니 없었다. 학교 제도가 너무 싫다.

고등학교때(행복지수:1),
유독 담임선생님께서 나를 이뻐했다. 나중에 아버님께 선생님 막내 동생을 좋은 데로 좀 빼달라고 부탁을 했다. 당시 나의 아버님은 잘나가시는 군인이셨다. 당연히 아버님은 신경안쓰셨고 선생님이 막내 동생은 전방으로 배속되었고....간혹 보충학습때 도망가도 별 말씀없었는데 그 후로 나를 엄청나게 응징했다....선생님들로 매년 자격 시험을 봐야 한다.

대학교때(행복지수:4) ,
의형제 처럼 친하게 지내던 형과 헤어진 후 다음날 아침 신문기사에서 그 형이 거문도에서 시체로 발견되었다 한다. 당시 거문도까지 동행했던 사람은 도연주라는 안기부 직원인데..안기부와 정부는 모른다고 빼쩬다.. 정말 빼를 쩨고 싶지만 힘이 없다. 그래서 악착같이 투표하고 돌던지고 불번지고 노래하고 전국을 뛰어 다녔다.. 그래도 사회는 여전히 부패하다. 지금도...

대학원때(행복지수:5) ,
아무런 생각없이 정말 열심히 공부만 한거 같다... 제일로 행복한 시절.

직장에서 ,
사수가 항상 열심히 일을 시키고 본인은 열심히 놀았다. 덕분에 대학원때 내공을 더욱 굳건히... 그런데 시간이 다고 사수가 변하지 않는다. 주말에는 가족과 쉬고 싶은데..사수는 주말에는 교회에 가서 신앙생활 열심히 하고 유치부 선생님이라 한다.. 그래서 나는 교회를 나가지 않았다.. 그냥 내 마음의 주님만을 모시기로... 결국 부서를 옮겼다.. 병특이라 회사를 옮길 수 없었으니까...회사에서 사람이 싫어지면 그만두던 옮겨야 한다는 것을 확실히 배웠다. 옮겨서 아주 행복하게 생활했으니까....(행복지수:2)

창업후 회사를 운영하면서 ,
처음 회사를 창업하여 운영하면서 간혹 힘이 들때 좋은 이야기를 나눌 수 있는 모임에 나갔다. 그 모임에서 만난 분들이 회사를 합병하자 해서 그냥 했다. 합병 후 회사는 무척 성장을 했는데 , 직원 월급주고 스톡옵션 주고 대우를 개선해야 한다는 의견에 회사는 사회것이기 때문에 아무것도 줄 수 없고 죽을 때 사회에 환원하겠다는 말에 아무 미련없이 회사를 그만 두고 다시 창업을 했다. - 사람을 판단할 때는 정말 주변의 말도 듣고 잘판단해야 한다.(행복복지수:3)

다시 창업을 한 후 열심히 회사를 운영했다. 매출도 늘고 직원도 늘고 고객도 늘고 투자도 많이 받았다. 그런데 회사 영업이 너무 구태적이다. 술먹이고 돈찔러 주고...회사를 변하게 하려고 했는데...나중에 영업상무가 그만두고 .. 그 사람은 나가서 잘아는 후배 회사에 취직해서 우리 회사의 고객을 다 뺏어 가고 회사의 욕을 한다. 그러더니 사업부 이사가 그만두고 나가더니 창업을 했다. 그 후에 직원 몇몇이 또 회사를 그만두었다. 나중에 보다 그 회사에 모여 있었고 내가 개발한 것도 동일한 제품을 개발했다고 팔고.....-정말 사람을 잘 판단해야 한다. 그리고 항상 잘해준다고 좋은 것도 아니다. 계속 칭찬만 하다  한번 지적하면 삐지는데 계속 지적하다 한번 칭찬하면 반대이다. 난 칭찬은 고래도 춤추게 한다라는 것에 찬성한다. 그런데 그것도 사람과 문화에 따라 다르다고 생각한다.(행복지수 : 2)

그러다 다시 합병을 했다. 창업 초기 부터 항상 어려운 일이 있을 때면 챙겨주던 형이었는데 와서 나는 개발만 하고 본인은 영업만 할 테니 합쳐서 성공하자고 제안했다. 워낙 오랬동안 잘 챙겨주던 형이라  믿었는데 합병 후 보니 완전히 다르다. 강자에게 약하고 약자에게 강하고 , 천성이 나쁜 사람이라는 것을 알았다. - 나는 사람은 근본적으로 착하다고 생각했다. 그러나 정말 나쁜 사람이 있다는 것을 알았다. 항상 사람을 평가해야 할 때 관상도 보고, 살아온 환경도 보고 , 주변의 의견도 다양하게 듣고 판단해야 한다. 누군가 주변에서 사람을 자신의 성공과 편의를 위한 생활용품으로 보는 사람들이 있다. 이런 사람이 누군지 잘 판단하면 모두가 행복하게 살 수 있다. 대통령을 뽑을 때고, 직원을 뽑을 때도, 회사에 취직할 때도,...(행복지수 : -4)

그냥 심심해서 써 봤습니다. 다른 오해는 말아 주세요..


Posted by 박재현
,