Giter VIP home page Giter VIP logo

graha's Introduction

Graha

0. notice

최근에 Graha 소스코드는 새롭게 작성되었다.

모든 기능을 동일하게 구현하는 것을 목표로 했지만, 전형적인 리팩터링(refactoring) 방식을 따르지 않았기 때문에 약간의 버그가 있을 수 있고, 그런 것들은 발견하는대로 수정해 나갈 계획이다.

다만 Java Interface 들은 package 경로가 수정되었고, Record 객체 등이 변경되었으므로, 이를 반영하는 수정작업이 있어야 한다.

1. about

Graha는 데이타베이스에 기반한 웹 프로그램의 개발 생산성을 높이고 구조화하기 위한 프로그래밍 도구이다.

1.1. 배포하는 곳

1.2. Graha의 목표

설계서를 작성하듯 프로그램을 개발한다.

1.3. Graha의 특징

  • Graha는 sql과 화면 레이아웃에 대한 정보를 xml 정의 파일에 기술하는 방식으로 서버 쪽 프로그램을 완성한다.
  • 서버 쪽 프로그램을 작성하는데 Java 코드는 필요없다.
  • javascript와 css는 프로그래머의 몫이다.

1.4. Graha의 장점

  • Graha의 xml 정의 파일은 프로그램 동작에 대한 정보를 논리적으로 기술함으로써, 결과적으로 xml 파일로 프로그램 명세서를 작성하는 수준에서 프로그램을 완성할 수 있도록 한다.
  • 논리적인 Graha의 xml 정의 파일은 프로그램의 유지보수를 쉽게 해주고, 유연하게 변경 할 수 있도록 해준다.
  • Graha는 데이타베이스의 정보로부터 xml 정의 파일을 자동으로 생성하는 기능을 제공한다.
  • Graha를 사용하는 프로그래머는 copy & paste와 같이 프로그래머를 손목터널증후근으로 인도하는 단순 반복적인 작업으로부터 벗어날 수 있다.
  • 암호화나 부득이하게 Java 코드가 필요하면, Graha가 제공하는 Java Interface를 구현하면 된다.

1.5. 지원하는 데이타베이스

  • org.postgresql.Driver
  • oracle.jdbc.driver.OracleDriver
  • org.mariadb.jdbc.Driver
  • org.sqlite.JDBC
  • org.apache.derby.jdbc.AutoloadedDriver
  • org.hsqldb.jdbc.JDBCDriver
  • org.h2.Driver
  • 다른 데이타베이스도 방법은 있다.

2. 버전에 관하여

현재 Graha 는 버전 관리를 하고 있지 않다.

Graha 및 Graha 로 작성된 응용프로그램들은 각각 최신 버전을 사용하는 것을 권한다.

3. Graha 로 작성된 응용프로그램

graha's People

Watchers

김헌직 avatar

graha's Issues

decodeFileName(URI uri) 메소드의 내부구현은 검토할 필요가 있다.

  1. 현재의 방식
  • java.net.URI 를 toString()
  • "+" 를 "%2B" 로 replace
  • URLDecoder.decode 로 변환
  • 파일이름만 얻기 위해서 마지막 "/" 이후의 문자열만 추출
  1. 새로운 방식
  • java.net.URI 의 getPath() 로 전체 파일 경로를 얻어와서,
  • 파일이름만 얻기 위해서 마지막 "/" 이후의 문자열만 추출

IE 에서 "저장" button 이 클릭되지 않는다.

insert/update 화면에서,
"저장" 버튼이 클릭되지 않는다.

IE에서 태그의 form 속성을 지원하지 않는 것과 관련이 있을 가능성이 높다.

리팩터링(refactoring) 과정에서 실수로 누락되었을 것이다.

funcType="insert" 의 GET 요청에서 대단히 느린 경우가 있다.

  1. 현상

항상 그런 것은 아니지만,
참을 수 없을 정도로 느린 경우가 있다.

  1. 원인

아직은 원인을 정확히 알 수 없다.

대부분 느리지 않기 때문에, 상황을 재현하기 힘들고, 원인을 찾기도 어렵다.

곧바로 F5 로 refresh 하면, 빠르다.

F5 refresh 에서는 cache 된 것을 가져오기 때문에 빠르게 실행되는 것으로 예상할 수 있다.

sql 이 느릴 수도 있지만,
GET 요청에서는 code, prop, processor 만 실행되고, table 은 실행되지 않기 때문에
가능성이 높지는 않다.

=> 만약 sql 이 느린 경우라면, graha 의 버그는 아니다. 이건 응용프로그램에서 sql 을 최적화해서 해결할 문제이다.

첨부파일 처리와 관련이 있을 가능성도 있다.

=> 만약 첨부파일 처리와 관련이 있다면, 과거에 수정한 적이 있는데, 다른 것을 수정하면서 실수한 것이다.

validation 의 버그

param 에서 제약 조건과 관련된 속성이 여러 개인 경우,

서버에서는 각각 검사를 하는데,
클라이언트에서는 그 중에 1개만 검사한다.

pom.xml 에 정의된 대부분의 dependency 는 필요없다.

JDBC 드라이버들은 컴파일에 필요 없는 것들이다.

실행할 때는 그 중의 1개는 필요하겠지만,
모두가 필요한 것은 아니고, 실제로 연결하려고 하는 데이타베이스에 대한 JDBC 드라이버만 있으면 된다.

auth 나 cond 속성에서 사용하는 표현식 개선

현재 auth 나 cond 속성에서 사용하는 표현식은 다음과 같은 형태이어야만 한다.

${param.memo_id} = '5'

왼쪽과 오른쪽을 변경할 수도 없고,
왼쪽과 오른쪽의 형식도 엄격하게 준수해야 하고,
오른쪽은 반드시 (자료형과 무관하게) Single quotation marks 로 묶어야 하고,
숫자형이라도 마찬가지이고, 연산자가 숫자를 비교하는 것이어도 마찬가지이다.

이런 제약을 조금 완화해서 다음과 같은 표현식도 가능하도록 개선할 필요가 있겠다.

${param.article_id} = ${param.top_id}
'5' = ${param.top_id}
'5' = '5'

Single quotation marks 로 묶어야 하는 제약은 일단 유지하기로 한다.

조금 더 복잡한 표현식(예를 들어 and 나 or 등)을 지원할 필요가 있는 것으로 생각되지만,
를 사용해서 같은 효과를 얻을 수 있으므로
복잡한 표현식을 보류하기로 한다.

system.today 로 시작하는 것들은 항상 null 이다.

null 이 아니라 다음과 같은 값이 설정되어야 한다.

  • system.today.yyyy : 연도(4자리)
  • system.today.mm : 월(2자리) : 10보다 작으면 앞에 0을 붙인다.
  • system.today.dd : 일(2자리) : 10보다 작으면 앞에 0을 붙인다.

kr.graha.post.lib.Record 의 legacy 호환성

kr.graha.post.lib.Record 의 가장 큰 변화는
String Key 대신에
사용자 정의 Key(kr.graha.post.lib.Key) 를 사용한 것이고,

legacy 응용프로그램을 이식하기 위해서,
package 명을 변경하는 것 만으로는 안되고,
소스 코드의 많은 변경이 있어야 한다.

새로운 graha 소스코드를 충분히 테스트 한 이후에는
legacy 호환성을 위해
String Key 를 파라미터로 하는 메소드들을 추가해야 한다.

prop 와 code 의 실행순서를 조절한다.

데이타베이스 연결이 필요없는 prop 를 가장 먼저 실행하고,
데이타베이스 연결이 필요없는 code 를 실행하고,

데이타베이스 연결이 필요한 prop 와 code 를 실행하는 순서로 한다.

<link> 요소 처리 개선

<link> 요소는 다음과 같은 곳에서 사용될 수 있다.

<layout> / <top> / <left> : top 은 bottom, left 는 center, right 로 변경 가능
<tab> / <row> / <column>

현재는 <column> 아래에서 사용하면 무조건 <a> 로, <left> 등에서 사용하면 무조건 <button> 내지 <input type="button"> 으로 처리되고 있는데,

<column> 아래에서도 <button> 등으로,
그 반대의 경우도 가능하도록 개선할 필요가 있다.

<left> 등에서는 type 속성으로 처리가 가능할 것으로 보이지만,
<column> 아래의 <link> 는 새로운 속성(appearance)을 추가되어야 할 것으로 생각된다.

kr/graha/assistant/XMLConfigGenerator.java 파일에서 query_to_param 속성과 관련된 부분은 제거한다.

최근에 Graha 소스코드를 다시 작성하면서 query_to_param 속성은 필요가 없어졌다.

Graha XML 정의파일 레퍼런스 에도 반영되지 않은 실험적인 기능이었다.

과거의 Graha 는 XML 문자열을 직접 만드는 방식이었지만, 최근에 다시 작성한 Graha 는 kr/graha/post/xml 이하의 객체를 이용하는 방식으로 변경되었고, kr/graha/post/lib/Record.java 에서 kr/graha/post/xml 이하의 객체를 참조하는 방법으로 변경되었다.

XInclude 위한 개선사항

XInclude 를 사용하려면,
included 된 파일이 xml 문법을 충족해야 하고,
최상위 root 요소(element) 를 가져야 하는 제약이 있다.

included 된 파일이 xml 의
최상위 root 요소(element)
<envelop> 따위로 정의한 후에,

graha 라이브러리에서 graha XML 정의파일을 읽어들일 때,
<envelop> 는 무시하고 처리할 수 있으면,

XInclude 를 조금 더 유연하게 사용할 수 있을 것이다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.