삶을 위한 소프트웨어

전 세계 사람들의 삶의 질을 높일 수 있는 소프트웨어

Architecture for Software 94

Java Server Faces(JSF), Facelets and Web 2.0 for SVG

JSF(JavaServer Faces)의 경우 Rederer 를 바꿀 수 있습니다. Rederer를 바꿀 수 있다는 의미는 하나의 컨텐츠를 다양한 형태로 바꿀 수 있다는 것을 의미합니다. 즉 하나의 HTML 문서를 MS Word로 바꾸거나 PDF로 바꿀 수 있다는 거죠. 최근 SVG에 대한 관심이 높아지면서 JSF + SVG에 대한 글이 있어서 공유차원에서 올립니다. 이미 Adobe Flex와 연동이 되고 있습니다. 나중에 한번 다루겠습니다. 개인적으로는 Flex나 SVG와 같은 벡터 그래픽을 Rich UI로 사용하는 것에 관심이 많습니다. 앞으로 점 더 연구해볼 가치가 있을 것 같습니다. :-) 출처: https://www.dimis.fim.uni-passau.de/~doeller/research_pr..

[Hibernate Annotation] 엔티티 빈의 연관 관계 및 관계 매핑: 1대 1 관계

최근 Hibernate 3.x를 이용하여 개발을 하고 있습니다. 예전에 Hibernate 2.x를 사용하였을때과 가장 큰 차이점이 Hibernate Annotations(http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/)이 도입되었다는 점입니다. 아~ 정말 편리해졌습니다. hbm.xml을 손수 고칠때와는 완전히 다르더군요 ;-) Hibernate 3.x에서 Annotation이 대폭 강화되면서 이제 정말 Hibernate를 편리하게 사용해볼만 할것 같다는 생각이 듭니다. 사실 Hibernate를 많이 다루지 않았기 때문에 깊숙히 알고 있지는 않습니다. 이번 기회에 Hibernate를 깊이 익혀볼 생각입니다. 우선 Hiberna..

JavaServer Faces, Ajax, Flash: 차세대 사용자 인터페이스

Oracle의 기술백서중에서 "JavaServer Faces, Ajax, Flash: 차세대 사용자 인터페이스"라는 좋은 글이 있어서 공유차원에서 올립니다. 몇년전부터 JSF를 간혹 사용하여 오다가 최근 제가 맡은 프로젝트에서 본격적으로 활용하고 있습니다. 앞으로 JSF에 대한 좋은 글들을 올리겠습니다. 그럼 우선 Oracle의 문서부터 한번 살펴보시죠 :-)

JSF에서 request.getContextPath()를 사용할때

JSF(JavaServer Faces)로 개발을 하다보면 JSP(JavaServer Pages)에서 가장 많이 사용하였던 request.getContextPath()를 EL(Expression Language)로 어떻게 표기해야 할지 막막할때가 있습니다. 특히 JSF의 경우 EL을 바탕으로 UI 관련 개발을 하기 때문에 EL에 익숙하지 않으신 분들의 경우 더더욱 그렇습니다. 가장 많이 사용되는 EL 중에 다음과 같은 표기식이 있습니다. #{facesContext.externalContext.requestContextPath} 즉 HttpServletRequest.getContextPath()와 같은 의미입니다. 이 외에도 facesContext의 externalContext에는 SessionMap이나 R..

Top Coder에 도전하세요!

평소 소프트웨어(Software) 개발에 관심이 많거나, 특히 알고리듬(Algorithm)이나 소프트웨어 디자인(Software Design)에 관심이 많다면 Top Coder(http://www.topcoder.com)라는 사이트에서 자신의 능력을 다른 사람들과 함께 겨루어 보는 것도 참 좋은 일이라고 생각합니다. 전 세계에서 소프트웨어에 관심이 많은 사람들이 모여서 자신의 능력을 겨루고 있는데 재미있는 점은 우리나라의 순위입니다. 현재 우리나라의 순위는 8위인데 세계최고의 소프트웨어 강국인 미국은 7위로서 별 차이가 없으며, 세계 2위의 소프트웨어 강국인 인도의 경우 14위로 우리보다 많이 떨어집니다. 인도의 경우 1133명이나 참여하고 있지만, 우리나라의 경우 149명정도밖에 참여하지 않았는데도 좋..

[Java의 이해] 핫스팟VM의 메소드 인라이닝

Java의 메소드 인라인(Method Inline)에 관한 좋은 글이 있어서 공유하고자 올립니다. 기회가 있을때 마다 Java의 이해라는 글을 올리고자 합니다. 이 글은 The Java HotSpot Performance Engine: Method Inlining Example 을 바탕으로 작성하였습니다. Java에서는 성능 향상을 위하여 Java HotSpot Engine(VM)이 다음과 같은 경우 메소드 인라이닝(Method Inlining)을 합니다. 이를 통해서 메소드를 호출할때 실제 메소드를 호출하지 않고 바로 결과값을 돌려주어, JVM(Java Virtual Machine)의 성능을 향상시킵니다. class A { final int foo() { return 3; } } A라는 클래스(Clas..

Google의 SaaS 기반 서비스의 평가 기준

SaaS 기반의 어플리케이션이 많은 각광을 받을 것 같습니다. 이에 따라 SaaS기반의 어플리케이션이 제공하는 서비스를 평가하는 기준이 필요한 시점입니다. 여러 가지 좋은 평가 기준들이 존재하지만 Google의 평가기준이 여러모로 좋은 관점을 제공하고 있는 것 같습니다. 아직 국내에서는 Google Apps를 많이 사용하지 않고 있지만, 알게 모르게 많은 분들이 큰 관심을 보이고 계십니다. 특히 소규모 기업이나 조직(비영리 조직인 동아리나 클럽 등)에서 Gmail을 자신들의 도메인과 연동시켜 사용하고 있습니다. 이에 관한 자세한 내용은 다음에 한번 다루겠습니다. 이처럼 SaaS 기반의 서비스들을 사용하려고 할 때 여러 가지 고민해야 할 점들이 있습니다. 이러한 점들을 모아 Google에서 "SaaS를 통..

Algorithm 이란

Algorithm은 반드시 확신할 수 있어야 하며, Algorithm의 작동 방식을 배우는 가장 좋은 방법은 실제로 수행하여 보는 것이다. Algorithm의 현대적인 의미는 조리법, 공정, 방법, 기법, 절차, 루틴 등과 상당히 비슷하다. 다만 Algorithm은 5가지 주요한 특징을 가진다. 1. 유한성(finiteness) Algorithm은 여러 단계들을 수행한 후 유한한 횟수 후 반드시 종료되어야 한다. 이러한 유한성이 만족되어야 Algorithm으로 인정받을 수 있다. 2. 명확성(definiteness) Algorithm의 각 단계는 반드시 명확하게 정의되어야 한다. 수행할 행동은 모든 경우에 대하여 모호함 없이 엄격하게 명시해야 한다. Algorithm은 컴퓨터도 따라할 수 있을 정도로 명..

The 3n+1 Problem

시간날때마다 Programming Challenges를 보고 있습니다. 그중에 한 문제를 올립니다. 문제는 http://acm.uva.es/p/v1/100.html를 보시면 정확하게 설명되어있습니다. 짧은 설명은 다음과 같습니다. 어떤 수열을 만들어내는 알고리즘이 있는데 n이 짝수이면 2로 나누고, n이 홀수이면 n * 3 + 1을 한다. n=1이 될때까지 같은 작업을 계속 반복한다. 아직 명확하게 증명되지 않았지만 모든 정수 n에 대하여 이 알고리즘을 적용시키면 결국에는 n=1이 된다고 추측된다. 이 가설은 적어도 1,000,000까지의 정수에 대해서는 참이다. n이라는 값이 입력되었을 때 1이 나올때까지 만들어진 수의 개수(1 포함)를 n의 사이클 길이(cycle-length)라고 한다. i와 j라는..

Pointer 의 선언

Pointer의 선언은 다음과 같은 방식을 통하여 이루어 진다. int *a; *a는 정수 타입이라는 결과를 나타낸다. * 연산자가 '간접지정 연산자'라는 것을 알고 있다면 a가 정수를 가리키는 포인터라는 것도 알 수 있을 것이다. 간접지정 연산자는 포인터 값에서만 유효하다. 포인터는 결과를 가리키고, 간접지정 연산자는 결과를 얻는 포인터를 '따라'간다. C언어의 형식이 자유롭기 때문에 다음과 같이 타입 바로 뒤에 *를 사용할 수 있다. int* a; 이런 형식의 선언은 위에서 보았던 선언과 동일한 의미이면서도 a가 int 타입이라는 것을 더욱 더 분명하게 나타내준다. 그러나 이런 스타일의 선언은 좋지 않다. 다음 예를 보면 그 이유를 더욱 분명하게 알 수 있다. int* b, c, d; 보통 이러한 선..