programming paradigm is a fundamental style of computer programming. There are four main paradigms:object-orientedimperativefunctional and logic programming.[1] Their foundations are distinct models of computationTuring machine for object-oriented and imperative programming, lambda calculus for functional programming, and first order logic for logic programming.

Contents

  [hide

[edit]Overview

programming model is an abstraction of a computer system. For example, the "von Neumann model" is a model used in traditional sequential computers. For parallel computing, there are many possible models typically reflecting different ways processors can be interconnected. The most common are based on shared memory, distributed memory with message passing, or a hybrid of the two.

programming language can support multiple paradigms. For example, programs written in C++ or Object Pascal can be purely procedural, or purely object-oriented, or contain elements of both paradigms. Software designers and programmers decide how to use those paradigm elements.

In object-oriented programming, programmers can think of a program as a collection of interacting objects, while in functional programming a program can be thought of as a sequence of stateless function evaluations. When programming computers or systems with many processors, process-oriented programming allows programmers to think about applications as sets of concurrent processes acting upon logically shared data structures.

Just as different groups in software engineering advocate different methodologies, different programming languages advocate different programming paradigms. Some languages are designed to support one particular paradigm (Smalltalk supports object-oriented programming, Haskell supports functional programming), while other programming languages support multiple paradigms (such as Object Pascal, C++, JavaC#ScalaVisual BasicCommon LispSchemePerlPythonRubyOz and F#).

Many programming paradigms are as well known for what techniques they forbid as for what they enable. For instance, pure functional programming disallows the use of side-effects, while structured programmingdisallows the use of the goto statement. Partly for this reason, new paradigms are often regarded as doctrinaire or overly rigid by those accustomed to earlier styles.[2] Avoiding certain techniques can make it easier to prove theorems about a program's correctness—or simply to understand its behavior.

[edit]Multi-paradigm programming language

multi-paradigm programming language is a programming language that supports more than one programming paradigm[citation needed]. As Leda designer Timothy Budd puts it: "The idea of a multiparadigm language is to provide a framework in which programmers can work in a variety of styles, freely intermixing constructs from different paradigms." The design goal of such languages is to allow programmers to use the best tool for a job, admitting that no one paradigm solves all problems in the easiest or most efficient way.

One example is C#, which includes imperative and object-oriented paradigms as well as some support forfunctional programming through type inferenceanonymous functions and Language Integrated Query. Some other ones are F# and Scala, which provides similar functionality to C# but also includes full support forfunctional programming (including curryingpattern matchingalgebraic data typeslazy evaluationtail recursionimmutability, etc.). Perhaps the most extreme example is Oz, which has subsets that are logic (Oz descends from logic programming), a functional, an object-oriented, a dataflow concurrent, and other language paradigms. Oz was designed over a ten-year period to combine in a harmonious way concepts that are traditionally associated with different programming paradigms. Lisp, while often taught as a functional language, is known for its malleability and thus its ability to engulf many paradigms A programming paradigm provides for the programmer the means and structure for the execution of a program.

[edit]History

The lowest level programming paradigms are machine code, which directly represents the instructions (the contents of program memory) as a sequence of numbers, and assembly language where the machine instructions are represented by mnemonics and memory addresses can be given symbolic labels. These are sometimes called first- and second- generation languages. In the 1960s assembly languages were developed to support library COPY and quite sophisticated conditional macro generation and pre-processing capabilities, CALL to (subroutines), external variables and common sections (globals), enabling significant code re-use and isolation from hardware specifics via use of logical operators such as READ/WRITE/GET/PUT. Assembly was, and still is, used for time critical systems and frequently in embedded systems as it gives the most direct control of what the machine actually does.

The next advance was the development of procedural languages. These third-generation languages (the first described as high-level languages) use vocabulary related to the problem being solved. For example,

  • C - developed c. 1970 at Bell Labs
  • COBOL (Common Business Oriented Language) - uses terms like filemove and copy.
  • FORTRAN (FORmula TRANslation) - using mathematical language terminology, it was developed mainly for scientific and engineering problems.
  • ALGOL (ALGOrithmic Language) - focused on being an appropriate language to define algorithms, while using mathematical language terminology and targeting scientific and engineering problems just like FORTRAN.
  • PL/I (Programming Language One) - a hybrid commercial/scientific general purpose language supporting pointers.
  • BASIC (Beginners All purpose Symbolic Instruction Code) - was developed to enable more people to write programs.

All these languages follow the procedural paradigm. That is, they describe, step by step, exactly the procedure that should, according to the particular programmer at least, be followed to solve a specific problem. The efficacy and efficiency of any such solution are both therefore entirely subjective and highly dependent on that programmer's experience, inventiveness and ability.

Later, object-oriented languages (like SimulaSmalltalkC++Eiffel and Java) were created. In these languages, data, and methods of manipulating the data, are kept as a single unit called an object. The only way that a user can access the data is via the object's 'methods' (subroutines). Because of this, the internal workings of an object may be changed without affecting any code that uses the object. There is still some controversy by notable programmers such as Alexander StepanovRichard Stallman[3] and others, concerning the efficacy of the OOP paradigm versus the procedural paradigm. The necessity of every object to have associative methods leads some skeptics to associate OOP with software bloatPolymorphism was developed as one attempt to resolve this dilemma.

Since object-oriented programming is considered a paradigm, not a language, it is possible to create even an object-oriented assembler language.High Level Assembly (HLA) is an example of this that fully supports advanced data types and object-oriented assembly language programming - despite its early origins. Thus, differing programming paradigms can be thought of as more like 'motivational memes' of their advocates - rather than necessarily representing progress from one level to the next. Precise comparisons of the efficacy of competing paradigms are frequently made more difficult because of new and differing terminology applied to similar (but not identical) entities and processes together with numerous implementation distinctions across languages.

Within imperative programming, which is based on procedural languages, an alternative to the computer-centered hierarchy of structured programming is literate programming, which structures programs instead as a human-centered web, as in a hypertext essay – documentation is integral to the program, and the program is structured following the logic of prose exposition, rather than compiler convenience.

Independent of the imperative branch, declarative programming paradigms were developed. In these languages the computer is told what the problem is, not how to solve the problem - the program is structured as a collection of properties to find in the expected result, not as a procedure to follow. Given a database or a set of rules, the computer tries to find a solution matching all the desired properties. The archetypical example of a declarative language is the fourth generation language SQL, as well as the family of functional languages and logic programming.

Functional programming is a subset of declarative programming. Programs written using this paradigm use functions, blocks of code intended to behave like mathematical functions. Functional languages discourage changes in the value of variables through assignment, making a great deal of use ofrecursion instead.

The logic programming paradigm views computation as automated reasoning over a corpus of knowledge. Facts about the problem domain are expressed as logic formulae, and programs are executed by applying inference rules over them until an answer to the problem is found, or the collection of formulae is proved inconsistent.

[edit]See also

[edit]References

  1. ^ Nørmark, Kurt. Overview of the four main programming paradigms. Aalborg University, 9 May 2011. Retrieved 22 September 2012.
  2. ^ Frank Rubin published a criticism of Dijkstra's letter in the March 1987 CACM where it appeared under the title 'GOTO Considered Harmful' Considered Harmful.Frank Rubin (March 1987). "'GOTO Considered Harmful' Considered Harmful" (PDF). Communications of the ACM 30 (3): 195–196. doi:10.1145/214748.315722.
  3. ^ "Mode inheritance, cloning, hooks & OOP (Google Groups Discussion)".


출처 - http://en.wikipedia.org/wiki/Programming_paradigm




'Design Pattern > Common' 카테고리의 다른 글

디자인 패턴 - 종류  (0) 2013.07.26
디자인 패턴(책)  (0) 2013.04.16
DSL(domain-specific language)  (0) 2013.01.01
Core J2EE Patterns  (0) 2012.11.30
Rich Domain Model  (0) 2012.11.05
Posted by linuxism
,


도메인 특정 언어 (도메인 특정 언어, 영어 : domain-specific language , DSL)은 특정 작업을 위해 설계 된 컴퓨터 언어 를 의미한다. 도메인 특정 언어 또는 단순히 도메인 언어 라고도하지만 학술적으로는 도메인 특정 언어로 불리는 경우가 많다. C 언어 나 Java 와 같은 범용 프로그래밍 언어 와 UML 같은 범용 모델링 언어 와 대조되는 용어이다.

DSL은 한 가지 작업을 잘 수행하는 데 집중 한 것이다.

목차

  [ 숨기기 ] 

이용 패턴 편집 ]

DSL을 사용하는 패턴은 다음과 같은 경우가있다 :

  1. 혼자 DSL을 사용하는 경우. 또한 (명령 줄이나 Makefile 에서) 사용자 조작의 직접적인 결과로 호출되는 경우.
  2. 프로그래밍 언어를 이용하여 구현 된 DSL은 컴파일 또는로드시 범용 프로그래밍 언어에 확장 / 변환된다.
  3. C 언어 나 Perl 등의 범용 프로그래밍 언어로 작성된 프로그램 (실행시) 호출, 특정 기능을 수행하고, 그 결과를 기본 프로그래밍 언어에 반환 처리를 계속라는 형태로 사용되는 DSL도 .
  4. 사용자 응용 프로그램에 DSL을 포함하는 경우 해당 응용 프로그램 사용자가 쓴 DSL 코드를 실행하거나 응용 프로그램 자체가 DSL 코드를 동적으로 생성하고 실행한다.

도메인 특정 언어의 정의 편집 ]

DSL은 특정 영역 (도메인)의 문제를 해결하기 위해 만들어진, 그 이외의 영역의 문제를 푸는 것은 상정하고 있지 않다. 한편, 범용 프로그래밍 언어는 다양한 영역의 문제를 해결하도록 설계되어있다.

도메인은 비즈니스 영역에도 대응할 수있다. 예를 들어, 다음과 같은 DSL이있다.

DSL은 언어로 (혹은 문법과 구문으로) 매우 제한된 목적으로 설계 / 구현된다. DSL은 시각화 된 언어 (도메인 특정 다이어그램이라고도 불린다)의 경우도 있고 ( GEMS 와 GME ) 프로그램 인 추상화의 경우도 있고 ( EMF ) 텍스트 인 언어의 경우도있다. 예를 들면, grep 이라는 명령 줄에서 사용되는 유틸리티는 텍스트의 패턴 매칭을위한 정규 표현식 이 가능하다. sed 유틸리티뿐만 아니라 정규 표현식을 사용하여 텍스트와 패턴 매칭시켜 문자열 바꾸기도한다. 이러한 간이 언어는 쉘 스크립트 에서 사용되어보다 복잡한 작업을 수행하는 일부를 구성한다.

DSL은 파일 시스템에 대한 액세스 기능과 프로세스 간 제어 등의 기능을 갖춘 프로그래밍 언어라면 당연히 가지고 있어야 기능이 부족한 경우가 많다. 많은 DSL은 바이트 코드 와 실행 코드라고 한 것에 컴파일되는 것이 아니라 다른 다양한 매체 용으로 변환되는 경우가 많다.

API 를 공개하고있다 DSL은 다른 프로그래밍 언어에서 호출 라이브러리 처럼 사용할 수있다.

기능을 갖춘 프로그래밍 도구가되기 확장되는 DSL도, 그래서 경계가 더 모호이다.

모델 기반 설계 는 OCL , ATL 등의 각종 DSL이 사용된다. 그러나 UML 은 DSL 대신 범용 모델링 언어 에 분류되는 것이 일반적이다.

요구 사양 편집 ]

설계 목표 편집 ]

DSL은 범용 프로그래밍 언어에 비해 다음과 같은 중요한 설계 목표이다 :

  • DSL은 포괄적 일 필요는 없다.
  • DSL은 그 영역 (도메인)을 더 표현하기 쉽게해야한다.

예 편집 ]

yacc
컴파일러 용 구문 분석
SQL
데이터베이스 언어
Csound
음성 파일 만들기
GraphViz
유향 그래프 그리기
위키 마크 업
웹 페이지 만들기

소프트웨어 공학에의 응용 편집 ]

도메인 특정 언어는 생산성과 품질을 향상시키는 것으로, 소프트웨어 공학 분야에서 주목 받고왔다. DSL이 효율적으로 소프트웨어 공학 도구의 토대가 될 가능성을 내포하고있다. 이러한 도구는 일부 시스템의 개발에 쓰이고있다.

SCR (Software Cost Reduction) 툴킷은 그 일례이다 [1] . 이 도구 키트는 요구 사양 을 작성하기위한 편집기 변수의 종속성을 표시하는 브라우저 사양의 조정 논리 식 으로 결함을 검사하는기구 사양과 응용 프로그램을 비교 검증하는 모델 검사 및 자동 정리 인증 기구, 사양에서 자동으로 불변 식 (invariants)을 구축하는 계획 등이 포함된다.

장점 편집 ]

  • DSL은 문제 영역에 적합한 추상 수준 관용구에서 솔루션을 표현한다. 따라서 그 지역의 전문가가 DSL로 작성된 프로그램을 이해하고 확인할 수, 수정할 수 있으며 또한 개발할 수있다.
  • 코드 자체가 문서의 역할을한다.
  • DSL은 품질 / 생산성 / 신뢰성 / 유지 보수 / 이식 / 재사용 성을 높인다.
  • DSL은 그 영역의 수준에서 확인 가능하다. 언어 구성 요소가 안전하다 한 그것을 사용하여 작성된 프로그램은 안전 간주.

문제점 편집 ]

  • DSL 자체를 설계 / 구현 / 관리 비용
  • 올바른 적용을 찾을
  • 도메인 관련 부분과 범용 프로그래밍 언어의 구문과의 밸런스 조정의 어려움
  • 하드 코드 된 소프트웨어에 비해 성능으로 불리한 가능성이있다

참고 문헌 편집 ]

관련 항목 편집 ]

외부 링크 편집 ]




domain-specific language (DSL) is a type of programming language or specification language in software development and domain engineering dedicated to a particular problem domain, a particular problem representation technique, and/or a particular solution technique.

The concept isn't new. Special-purpose programming languages and all kinds of modeling/specification languages have always existed in the computer age. But the term has become more popular due to the rise ofdomain-specific modeling.

Examples of domain-specific languages include HTMLLogo for children, Verilog and VHDL hardware description languages, Mata for matrix programming, Mathematica and Maxima for symbolic mathematics,spreadsheet formulas and macros, SQL for relational database queries, YACC grammars for creating parsers,regular expressions for specifying lexers, the Generic Eclipse Modeling System for creating diagramming languages, Csound for sound and music synthesis, and the input languages of GraphViz and GrGen, software packages used for graph layout and graph rewriting.

The opposite is:

Creating a domain-specific language (with software to support it) can be worthwhile if the language allows a particular type of problem or solution to be expressed more clearly than an existing language would allow and the type of problem in question reappears sufficiently often. Language-Oriented Programming considers the creation of special-purpose languages for expressing problems a standard part of the problem solving process.

Contents

  [hide

[edit]Overview

A domain-specific language is created specifically to solve problems in a particular domain and is not intended to be able to solve problems outside it (although that may be technically possible). In contrast, general-purpose languages are created to solve problems in many domains. The domain can also be a business area. Some examples of business areas include:

  • domain-specific language for life insurance policies developed internally in large insurance enterprise
  • domain-specific language for combat simulation
  • domain-specific language for salary calculation
  • domain-specific language for billing

A domain-specific language is somewhere between a tiny programming language and a scripting language, and is often used in a way analogous to a programming library. The boundaries between these concepts are quite blurry, much like the boundary between scripting languages and general-purpose languages.

[edit]In design and implementation

Domain-specific languages are languages (or often, declared syntaxes or grammars) with very specific goals in design and implementation. A domain-specific language can be one of a visual diagramming language, such as those created by the Generic Eclipse Modeling System, programmatic abstractions, such as the Eclipse Modeling Framework, or textual languages. For instance, the command line utility grep has a regular expression syntax which matches patterns in lines of text. The sed utility defines a syntax for matching and replacing regular expressions. Often, these tiny languages can be used together inside a shell to perform more complex programming tasks.

The line between domain-specific languages and scripting languages is somewhat blurred, but domain-specific languages often lack low-level functions for filesystem access, interprocess control, and other functions that characterize full-featured programming languages, scripting or otherwise. Many domain-specific languages do not compile to byte-code or executable code, but to various kinds of media objects: GraphViz exports to PostScript,GIFJPEG, etc., where Csound compiles to audio files, and a ray-tracing domain-specific language like POV compiles to graphics files. A computer language like SQL presents an interesting case: it can be deemed a domain-specific language because it is specific to a specific domain (in SQL's case, accessing and managing relational databases), and is often called from another application, but SQL has more keywords and functions than many scripting languages, and is often thought of as a language in its own right, perhaps because of the prevalence of database manipulation in programming and the amount of mastery required to be an expert in the language.

Further blurring this line, many domain-specific languages have exposed APIs, and can be accessed from other programming languages without breaking the flow of execution or calling a separate process, and can thus operate as programming libraries.

[edit]Programming tools

Some domain-specific languages expand over time to include full-featured programming tools, which further complicates the question of whether a language is domain-specific or not. A good example is the functional language XSLT, specifically designed for transforming one XML graph into another, which has been extended since its inception to allow (particularly in its 2.0 version) for various forms of filesystem interaction, string and date manipulation, and data typing.

In model-driven engineering many examples of domain-specific languages may be found like OCL, a language for decorating models with assertions orQVT, a domain specific transformation language. However languages like UML are typically general purpose modeling languages.

To summarize, an analogy might be useful: a Very Little Language is like a knife, which can be used in thousands of different ways, from cutting food to cutting down trees. A domain-specific language is like an electric drill: it is a powerful tool with a wide variety of uses, but a specific context, namely, putting holes in things. A General Purpose Language is a complete workbench, with a variety of tools intended for performing a variety of tasks. Domain-specific languages should be used by programmers who, looking at their current workbench, realize they need a better drill, and find that a particular domain-specific language provides exactly that.

[edit]Domain-specific language topics

[edit]Usage patterns

There are several usage patterns for domain-specific languages:[1][2]

  • processing with standalone tools, invoked via direct user operation, often on the command line or from a Makefile (e.g., the GraphViz tool set)
  • domain-specific languages which are implemented using programming language macro systems, and which are converted or expanded into a host general purpose language at compile-time or read-time
  • embedded (or internaldomain-specific languages, implemented as libraries which exploit the syntax of their host general purpose language or a subset thereof, while adding domain-specific language elements (data types, routines, methods, macros etc.).
  • domain-specific languages which are called (at runtime) from programs written in general purpose languages like C or Perl, to perform a specific function, often returning the results of operation to the "host" programming language for further processing; generally, an interpreter or virtual machinefor the domain-specific language is embedded into the host application
  • domain-specific languages which are embedded into user applications (e.g., macro languages within spreadsheets) and which are (1) used to execute code that is written by users of the application, (2) dynamically generated by the application, or (3) both.

Many domain-specific languages can be used in more than one way.[citation needed]

[edit]Design goals

Adopting a domain-specific language approach to software engineering involves both risks and opportunities. The well-designed domain-specific language manages to find the proper balance between these.

Domain-specific languages have important design goals that contrast with those of general-purpose languages:

  • domain-specific languages are less comprehensive.
  • domain-specific languages are much more expressive in their domain.
  • domain-specific languages should exhibit minimum redundancy according to the following subjective definition.

Redundancy of a program is defined as the average number of textual insertions, deletions, or replacements necessary to correctly implement a single stand-alone change in requirements. For a language, this is averaged over programs in the problem domain. This measure is useful because, the smaller it is, the less likely that bugs can be introduced by incompletely implementing changes.

[edit]Idioms

In programming, idioms are methods imposed by programmers to handle common development tasks, e.g.:

  • Ensure data is saved before the window is closed.
  • Before conducting expensive tests, perform cheap tests that can rule out need for expensive tests.
  • Edit code whenever command-line parameters change because they affect program behavior.

General purpose programming languages rarely support such idioms, but domain-specific languages can describe them, e.g.:

  • A script can automatically save data.
  • A smart test harness can learn what good tests are.
  • A domain-specific language can parameterize command line input.

[edit]Examples

[edit]Unix shell scripts

Unix shell scripts give a good example of a domain-specific language for data organization. They can manipulate data in files or user input in many different ways. Domain abstractions and notations include streams (such as stdin and stdout) and operations on streams (such as redirection and pipe). These abstractions combine to make a robust language to talk about the flow and organization of data.

The language consists of a simple interface (a script) for running and controlling processes that perform small tasks. These tasks represent the idioms of organizing data into a desired format such as tables, graphs, charts, etc.

These tasks consist of simple control-flow and string manipulation mechanisms that cover a lot of common usages like searching and replacing string in files, or counting occurrences of strings (frequency counting).

Even though Unix scripting languages are Turing complete, they differ from general purpose languages.

In practice, scripting languages are used to weave together small Unix tools such as AWK (e.g., gawk), lssort or wc.

[edit]ColdFusion Markup Language

ColdFusion's associated scripting language is another example of a domain-specific language for data-driven websites. This scripting language is used to weave together languages and services such as Java, .NET, C++, SMS, email, email servers, http, ftp, exchange, directory services, and file systems for use in websites.

The ColdFusion Markup Language includes a set of tags that can be used in ColdFusion pages to interact with data sources, manipulate data, and display output. CFML tag syntax is similar to HTML element syntax.

[edit]Erlang OTP

The Erlang Open Telecom Platform was originally designed for use inside Ericsson as a domain specific language. The language itself offers a platform of libraries to create finite state machines, generic servers and event managers that quickly allow an engineer to deploy applications, or support libraries, that have been shown in industry benchmarks to outperform other languages intended for a mixed set of domains, such as C and C++. The language is now officially open source and can be downloaded from their website.

[edit]FilterMeister

FilterMeister is a programming environment, with a programming language that is based on C, for the specific purpose of creating Photoshop-compatible image processing filter plug-ins; FilterMeister runs as a Photoshop plug-in itself and it can load and execute scripts or compile and export them as independent plug-ins. Although the FilterMeister language reproduces a significant portion of the C language and function library, it contains only those features which can be used within the context of Photoshop plug-ins and adds a number of specific features only useful in this specific domain.

[edit]MediaWiki templates

The Template feature of MediaWiki is an embedded domain-specific language whose fundamental purpose is to support the creation of page templatesand the transclusion (inclusion by reference) of MediaWiki pages into other MediaWiki pages.

A detailed description of that domain-specific language can be found at the corresponding article at the Wikimedia Foundation's Meta-Wiki.

[edit]Software engineering uses

There has been much interest in domain-specific languages to improve the productivity and quality of software engineering. Domain-specific language could possibly provide a robust set of tools for efficient software engineering. Such tools are beginning to make their way into development of critical software systems.

The Software Cost Reduction Toolkit [2] is an example of this. The toolkit is a suite of utilities including a specification editor to create a requirements specification, a dependency graph browser to display variable dependencies, a consistency checker to catch missing cases in well-formed formulas in the specification, a model checker and a theorem prover to check program properties against the specification, and an invariant generator that automatically constructs invariants based on the requirements.

A newer development is Language-oriented programming, an integrated software engineering methodology based mainly on creating, optimizing, and using domain-specific languages.

[edit]Metacompilers

Complementing language-oriented programming, as well as all other forms of domain-specific languages, are the class of compiler writing tools calledmetacompilers. A metacompiler is not only useful for generating parsers and code generators for domain specific languages, but a metacompiler is also itself a domain-specific language for the domain of compiler writing. The feature that sets a metacompiler apart from a standard compiler-compiler is that a metacompiler is written in its own language and translates itself—the grammar productions defining itself written in its own specialized language—into the executable form of itself. Defining itself and translating itself constitute the meta-step that sets a metacompiler apart from other compiler-compilers.

Besides parsing domain-specific languages, metacompilers are useful for generating a wide range of software engineering and analysis tools. The meta-compiler methodology of self-regeneration for the purpose of bootstrapping generic tool building tools are often found in program transformation systems.

Metacompilers that played a significant role in both computer science and the computer industry include Meta-II[3] and its descendent TreeMeta.[4]

[edit]Unreal Engine and other games

Unreal and Unreal Tournament unveiled a language called UnrealScript. This allowed for rapid development of modifications compared to the competitorQuake (using the Id Tech engine). The Id Tech engine uses standard C[citation needed] code meaning C had to be learned and properly applied, while UnrealScript was optimized for ease of use and efficiency. Similarly, the development of more recent games introduced their own specific languages, one more common example is Lua for scripting.

[edit]Rules Engines for Policy Automation

Various Business Rules Engines have been developed for automating policy and business rules used in both government and private industry. ILOG,Oracle Policy AutomationDTRulesDrools and others provide support for DSLs aimed to support various problem domains. DTRules goes so far as to define an interface for the use of multiple DSLs within a Rule Set.

The purpose of Business Rules Engines is to define a representation of business logic in as human readable fashion as possible. This allows bothsubject matter experts and developers to work with and understand the same representation of the business logic. Most Rules Engines provide both an approach to simplifying the control structures for business logic (for example, using Declarative Rules or Decision Tables) coupled with alternatives to programming syntax in favor of DSLs.

[edit]Statistical modelling languages

For statistical modelling, especially using Bayesian methods, there have been made domain-specific languages like Bugs and Jags. These languages provide a syntax for describing a Bayesian model, and generate a method for solving it using simulation.

[edit]Advantages and disadvantages

Some of the advantages:[1][2]

  • Domain-specific languages allow solutions to be expressed in the idiom and at the level of abstraction of the problem domain. The idea is domain experts themselves may understand, validate, modify, and often even develop domain-specific language programs. However, this is seldom the case.[5]
  • Self-documenting code.[citation needed]
  • Domain-specific languages enhance quality, productivity, reliability, maintainabilityportability and reusability.[citation needed]
  • Domain-specific languages allow validation at the domain level. As long as the language constructs are safe any sentence written with them can be considered safe.[citation needed]

Some of the disadvantages:

  • Cost of learning a new language vs. its limited applicability
  • Cost of designing, implementing, and maintaining a domain-specific language as well as the tools required to develop with it (IDE)
  • Finding, setting, and maintaining proper scope.
  • Difficulty of balancing trade-offs between domain-specificity and general-purpose programming language constructs.
  • Potential loss of processor efficiency compared with hand-coded software.
  • Proliferation of similar non-standard domain specific languages, i.e. a DSL used within insurance company A versus a DSL used within insurance company B.[6]
  • Non-technical domain experts can find it hard to write or modify DSL programs by themselves.[5]
  • Increased difficulty of integrating the DSL with other components of the IT system (as compared to integrating with a general-purpose language).
  • Low supply of experts in a particular DSL tends to raise labor costs.
  • Harder to find code examples.

[edit]See also

[edit]References

  1. a b Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ACM Computing Surveys, 37(4):316–344, 2005.[1] doi:10.1145/1118890.1118892
  2. a b Diomidis Spinellis. Notable design patterns for domain specific languagesJournal of Systems and Software, 56(1):91–99, February 2001.doi:10.1016/S0164-1212(00)00089-3
  3. ^ Shorre, D.V., META II a syntax-oriented compiler writing language, Proceedings of the 1964 19th ACM National Conference, pp. 41.301-41.3011, 1964
  4. ^ C. Stephen Carr, David A. Luther, Sherian Erdmann, 'The TREE-META Compiler-Compiler System: A Meta Compiler System for the Univac 1108 and General Electric 645', University of Utah Technical Report RADC-TR-69-83.
  5. a b Freudenthal, M. "Domain Specific Languages in a Customs Information System".
  6. ^ Miotto, Eric. "On the integration of domain-specific and scientific bodies of knowledge in Model Driven Engineering".

[edit]Further reading

[edit]External links

Articles



출처 - http://en.wikipedia.org/wiki/Domain-specific_language





'Design Pattern > Common' 카테고리의 다른 글

디자인 패턴(책)  (0) 2013.04.16
Programming paradigms  (0) 2013.01.01
Core J2EE Patterns  (0) 2012.11.30
Rich Domain Model  (0) 2012.11.05
java - 디자인 패턴 - 팩토리 패턴  (0) 2012.08.02
Posted by linuxism
,

hsqldb

DB/HSQLDB 2013. 1. 1. 11:46


1번째

 

 

데이터 베이스의 경우 Oracle , MS-SQL , MY-SQL , PostgreSQL 등등 많은 데이터 베이스가 존재 합니다.

사실 DB는 용도나 종류에 따라 여러가지 종류가 존재한다. 제대로 정리하면 시간좀 걸릴만큼...

그러나 실무에서는 회사에 따라, 용도에 따라, 기능에 따라 사용할 DB를 선택한다.

사실 우리가 흔히 말하는 DB라는것은 정확히 DBMS(DataBase Management System)으로 

데이터 베이스 관리 시스템으로 

Java의 MVC의 model에 해당하는 데이터 자체의 관리 시스템을 지칭합니다.

이 중에서 HSQL이라는 DBMS를 사용하는 법에 대해서 적을것입니다.

참고로 태클은 대 환영입니다.

HSQLDB라는것은 in-memory and disk-based 로 작동하며, Embedded and server modes 가 가능합니다. 
(위키디피아의 설명입니다)

It is best known for its small size, ability to execute completely in memory, and its speed. It can also run on free Java runtimes such as Kaffe.


즉, 작은 사이즈의 시스템에서 좋다고 되어있군요.

음... 제 입장에서는 데이터를 저장해야 하는 어플리케이션의 경우 XML로 저장하기엔 좀 양이 많고

일반 디스크 베이스 DB를 사용하기엔 좀 큰, 어정쩡한 사이즈의 데이터 관리에 매우 좋다고 생각합니다.

그러면 이 방식이 왜 좋으냐. 우선 기본적으로 CPU가 제일 빠르죠? 그담에는 캐시가 빠르고... 등등으로 계산하면

속도는 CPU>캐시>메인메모리>하드디스크>플로피디스크 가 성립하는데, HSQL의 경우

메인메모리에 상주하는 시스템으로 구성되어 있습니다.  이는 이론상 기존 DB보다 1000배는 빠르다고 하는데 과연.....

즉. 임베디드 시스템이나, 저용량 데이터에 유용하게 쓰이면 좋겠죠.

게다가 메모리 가격도 대폭 다운됐고, 64비트 OS등장으로 인한 메모리 사용량 제한도 없어졌고, 게다가 빠르기 까지!!

뭐. 단점도 나름 존재합니다만 장점이 더 좋아 보입니다.

그리고 HSQL에는 MODE라는게 존재하는데 각 상황에 따라 MODE를 달리 쓰는것을 말합니다

예를들면 memory mode와, stand-alone모드가 있는데 각각의 상황에 따라 다르게 쓰는것을 말합니다

자세한것은 

In-memory mode 
All database tables and indexes are kept in memory and never saved to disk. Before you ask why anyone would want a database that is lost at application termination, think about having a local cache for database data that you can query, sort, group, and update using standard SQL statements. 
Stand-alone mode 
The application creates a database connection using JDBC, and the HSQLDB engine runs inside the application, accessing the database files directly. There can be no concurrent users (the application has exclusive access to the database files), but there are no additional threads nor TCP connection overhead. Stand-alone is the preferred mode for many embedded applications. 
Server mode 
This is the standard client/server database configuration similar to other relational databases, allowing concurrent connections using TCP sockets. Most developers will want this mode as it allows any JDBC client to connect and query/update tables while the main application is still running. 
Web server mode 
HSQLDB can act as a Web server, accepting SQL queries though HTTP, or can run as a servlet inside any standard Web container, passing though firewalls or installed on a Web hosting service without involving the provider support team (and expensive database hosting options). As HTTP is stateless, there are no transactions in this mode. 


이것을 보고 참고하십시오 ...해석하기 귀찮습니다 -_-

대충 정리를 하자면

HSQL은 메모리와 파일 베이스 시스템으로 대형 파일 시스템에는 맞지 않으나 중,소용량, 

임베디드 시스템에 쓰기 좋고, 시대가 흐름에 따라 메모리 베이스 DB를 쓰기 좋아지는 

환경이 되었으며, XML만이 대세가 아니라는걸 말해보고 싶었기 때문에(?) 사용하는법을 알아보는 겁니다.


.... 모르는것보단 많이 아는게 나름 쓸모있고 좋잖아요? 


그래서 쓰는거죠 뭐 -_-a

대충 이놈이 뭔 놈인지 왜 쓰는지는 설명이 된 거(?) 같으니 다음에는 기본적인 세팅~~~방법들 ... 다~~필요없습니다!

.....(어제 예전 개콘 보다가 식신 김도마를 봐버려서. -_-)

세팅법에 대해 알아보겠습니다.
 
 


2번째
 
HSQL을 위한 세팅

첫번째로 HSQL을 다운받습니다. 

 여기서 다운이라는건 프로그램을 따로 다운 받는것이 아닙니다. Jar파일을 받아 Import하면 게임 셋.

 사이트는 http://sourceforge.net/project/showfiles.php?group_id=23316 이고

 여기서 다운 받으시면 됩니다. hsqldb.jar라고 있을터인데 이를 import 합니다. 

다음 file을 만들어 이를 세팅해야합니다. HSQL은 미리 말했지만 파일베이스,메모리베이스 DBMS입니다.

이는 인스톨 하지 않는 대신 어딘가의 기본 구조를 설정 해야한다는 말입니다.

저의 경우 프로젝트 폴더안의 /conf 폴더를 만들고 여기다가 설정을 했습니다.

만들어지는 파일의 경우 xxx.properties, xxx.scripts, xxx.log 등인데 사용자가 설정해야 하는 부분은

scripts파일이며 나머지는 HSQL이 관리하는 것이기 때문에 건드리지 않습니다.

그러면 scripts의 설정을 해야겠죠.


제 샘플 script의 경우 SampleMDB.scripts입니다.

내용을 보면

CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE MEMORY TABLE SAMPLE_TABLE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,STR_COL VARCHAR(256),NUM_COL INTEGER)
ALTER TABLE SAMPLE_TABLE ALTER COLUMN ID RESTART WITH 26
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 20
SET SCHEMA PUBLIC
INSERT INTO SAMPLE_TABLE VALUES(1,'GM',400)
INSERT INTO SAMPLE_TABLE VALUES(3,'Test',300)
INSERT INTO SAMPLE_TABLE VALUES(24,'Test',300)
INSERT INTO SAMPLE_TABLE VALUES(25,'GM',400)

이렇게 구성되어있습니다.

뭔가 복잡해 보이지만.

우선 insert를 제거하면

CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE MEMORY TABLE SAMPLE_TABLE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,STR_COL VARCHAR(256),NUM_COL INTEGER)
ALTER TABLE SAMPLE_TABLE ALTER COLUMN ID RESTART WITH 26
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 20
SET SCHEMA PUBLIC


이렇게 남습니다.

이 부분을 살펴보면 어디선가 많이 본 부분일 겁니다. 즉, 일반적인 DBMS의 소스부분이죠.

그렇다 함은 이 script를 기반으로 어플리케이션이 작동할때 이 정보를 바탕으로 테이블을 제작하고,

종료되면 다시 여기에 정보가 기록된다는 말 이겠죠. 바꿔말한다면 이 정보를 미리 사용자가 설정하여 쓸수도 있다는

말입니다.

어플리케이션의 쿼리 명령으로도 설정 가능합니다.

예를들면

 han.updateDB("CREATE TABLE sample_table ( id INTEGER IDENTITY, str_col VARCHAR(256), num_col INTEGER)");

 이런식으로 scripts를 건들지 않고 어플리케이션 상에서 설정 할수도 있다는 말입니다.

 자 기본적인 HSQL세팅은 끝났습니다. 간단하죠?

 다음에는 이를 사용한 실제 사용에 대해 알아보겠습니다




3번째
 
이번에는 세팅에 따른 각종 옵션에 대한 설명을 해보겠습니다.

HSQL에는 많은 모드가 존재하는데 크게 서버클라 모드와 stand alone 모드가 존재합니다.

이것에 대해 알기 위해 HSQL 메뉴얼의 일부분을 번역, 편집 해 봤는데 스크롤이 기므로 

아래를 클릭하여 보시길 바랍니다.

HSQLDB can be run in a number of different ways.

HSQLDB는 여러방법으로 가동 할수 있다.

In general these are divided into Server Modes and In-Process Mode (also called Standalone Mode).

크게 Server Mode와 Process Mode(흔히말해 Standalone Mode) 가 있는데 ,

A different sub-program from the jar is used to run HSQLDB in each mode.

이는 각각의 Mode별로 다르다.

Each HSQLDB database consists of between 2 to 5 files, all named the same but with different extensions,

각각의 HSQLDB DB는 2~5개의 파일로 구성되어 있고, 같은 디렉토리에 존재 하며, 모든것의 이름은 같지만 확장명은 다르다

located in the same directory. For example, the database named "test" consists of the following files

예를들면 test라는 database라는 이름의 DB는 아래와 같은 파일을 생성한다.

test.properties

test.script

test.log

test.data

test.backup

 

The properties files contains general settings about the database.

프로퍼티 파일은 DB의 일반적인 설정부분이다.

The script file contains the definition of tables and other database objects, plus the data for non-cached tables.

스크립트 파일은 테이블과 DB object에 대한 정의 들에 대한 정보를 가지고있다.

The log file contains recent changes to the database.

로그파일은 최근 DB가 바뀐것에 대한 정보를 가진다( Memory상에서 바뀌고 저장하기전까지 로그에 저장되어있다가 script로 옮겨진다)

The data file contains the data for cached tables and the backup file is a zipped backup of the last known consistent state of the data file.

요건 잘 모르겠다.

All these files are essential and should never be deleted.

이 파일들은 핵심적인파일이고 절대 지우면 안됀다.

If the database has no cached tables, the test.data and test.backup files will not be present.

만일 DB가 cached tables가 아니라면 .data,.backup 파일은 생성되지 않을것이다.

In addition to those files, HSQLDB database may link to any formatted text files, such as CSV lists, anywhere on the disk

게다가 이 파일들은 HSQLDB database는 CSV lists 처럼 어떤 text 포맷의 파일이라도 링크가 된다.


While the "test" database is operational, a test.log file is used to write the changes made to data.

test DB가 작동중일때, test.log 파일은 변경된 데이터들이 쓰이는데 사용된다.

This file is removed at a normal SHUTDOWN.

이 파일은 SHUTDOWN 일때 제거된다.

Otherwise (with abnormal shutdown) this file is used at the next startup to redo the changes.

한편 이 파일은 SHUTDOWN이후 다음 실행시 변경된다.

A test.lck file is also used to record the fact that the database is open.

test.lck 파일은 역시 DB가 open시에 기록하는데 사용된다.

This is deleted at a normal SHUTDOWN. In some circumstances, a test.data.old is created and deleted afterwards.

이것은 SHUTDOWN일때 삭제된다. 어떤 상황일때, test.data.old가 생성되고 이후것은 사라진다.

 

 

Server Modes

Server modes provide the maximum accessibility.

서버모드는 최대한의 접근을 제공한다.

The database engine runs in a JVM and listens for connections from programs on the same computer or other computers on the network.

DB엔진은 JVM내에서나 과 같은 컴퓨터나 다른 네트워크의 컴퓨터의 프로그램에서 connection을 위해 listens 중일때 작동한다.

Several different programs can connect to the server and retrieve or update information.

여러 다른 프로그램에서 서버로 연결할수 있거나 복구, update할수 있다.

Applications programs (clients) connect to the server using the HSQLDB JDBC driver.

client 가 server로 연결하기 위해 HSQLDB JDBC 드라이버를 사용한다.

In most server modes, the server can serve up to 10 databases that are specified at the time of running the server.

많은 server mode에서  서버는 running server time을 10으로 둔다.

Server modes can use preset properties or command line arguments as detailed in the Advanced Topics chapter.

server mode는 프로퍼티를 미리 세팅할수 있다.

There are three server modes, based on the protocol used for communications between the client and server.

3가지 서버모드가 있는데 이는 client-server 통신 을 위한 프로토콜을 기본으로 하고있다.


Hsqldb Server


This is the preferred way of running a database server and the fastest one.

이것은 가장 빠른 DB server를 준비하는 방법이다.

A proprietary communications protocol is used for this mode.

독점적인(?) 통신 프로토콜이 사용된다.


    java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 xdb

Hsqldb Web Server

This mode is used when access to the computer hosting the database server is restricted to the HTTP protocol.

이 모드는 http 프로토콜로 제한된 DB 서버 컴퓨터 호스팅에 접속하기 위한 모드이다.

The only reason for using the Web Server mode is restrictions imposed by firewalls on the client or server machines

클라이언트나 서버머신의 방화벽으로 인한 제한된 웹서버 모드를 사용하기 위한 목적이다.


    org.hsqldb.WebServer

Hsqldb Servlet

This uses the same protocol as the Web Server.

웹서버 프로토콜과 같은것을 사용한다.

The Servlet mode can serve only a single database.

서블릿모드는 하나의 DB만 제공한다.

Please note that you do not normally use this mode if you are using the database engine in an application server.

중요한건 이 모드는 어플리케이션 서버에서는 사용하면 작동하지 않는다는 것이다.(서블릿 모드다)


Example 1.1. Java code to connect to the local Server above

    try {
        Class.forName("org.hsqldb.jdbcDriver" );
    } catch (Exception e) {
        System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
        e.printStackTrace();
        return;
    }

    Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", "");

In some circumstances, you may have to use the following line to get the driver.

어떤상황에서는 저런식으로 드라이버를 가져온다.

    Class.forName("org.hsqldb.jdbcDriver").newInstance();


In-Process (Standalone) Mode

This mode runs the database engine as part of your application program in the same Java Virtual Machine.

이 모드는 어플리케이션과 같은 JVM을 사용하는 DB에서 사용하는것이다.

For most applications this mode can be faster, as the data is not converted and sent over the network.

대부분의 어플리케이션은 이 모드가 더 빠르나 네트워크로 전송할수있게 변환할수가 없는 문제가 있다.

The recommended way of using the in-process mode in an application is to use an HSQLDB Server instance for the database while developing the application and then switch to In-Process mode for deployment.
이 방법은 개발중인 어플리케이션이나, 긴급하게 쓸때 사용하는것을 추천한다(-_-)


    Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "sa", "");

    Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "sa", "");

Memory-Only Databases


It is possible to run HSQLDB in a way that the database is not persistent and exists entirely in random access memory.

이 모드는 DB가 변하지 않거나 램에 계속 존재할때 사용한다.


디스크에 정보를 저장하지 않으므로 내부 application data에 사용할때나 쓰자. 애플릿 같은데서 (-_-)

    Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");

 





4번째
 
자 그럼 샘플을 하나 맹글어 보도록 하죠. 여기서는 stand-alone 방식을 사용한 DB를 호출합니다.

우선 jar 파일을 import 합니다.




 

이후 설정을 해주면 되겠죠.


 

우선 드라이버를 로드합니다 여기에서는 프로퍼티를 통한 로드를 하였기때문에 보이진 않습니다만 정식 루트는

Class.forName("org.hsqldb.jdbcDriver");로  해주시면 되겠습니다.

다음은 connection을 가져옵니다.

 


경로는 프로젝트 하단의 /conf 폴더에 sampleMDB라는 DB명을 사용한다고 설정합니다.

그런데 이중에 경로 설정이 좀 특이하죠? 이는 리눅스랑 윈도우가 각각 / \ 를 사용하기 때문에 어디든지

돌아갈수 있게 하기 위해 위와 같이 설정을 합니다.

그리고 이젠 DB에서 쿼리문을 통한 데이터를 불러와보도록 하죠.


 

쿼리문을 실행하는 메서드를 호출하는 부분입니다. 메서드로 가볼까요.

 


 

위와 같이 메서드에 쿼리문을 받아 실행하는 부분입니다.

그럼 위와같이 했을때 결과와 시작을 볼까요?


초기의 SampleMDB.scripts 파일입니다. 유저가 설정하는 부분으로 이것은 툴을 사용해 만들어도 무방합니다.

 

이후 실행을 합니다.

 

 



보시다시피 쿼리로 Insert된 부분이 삽입 되어 있습니다.

이것으로 DB에 올바른 처리가 됨을 확인할수 있습니다.

 




5번째
 
여기서는 사용한 샘플소스의 위치나 주의점에 대해 말씀드리겠습니다

샘플소스는 여기

http://hsqldb.org/doc/guide/apb.html

이며 이것을 사용한 것은 가장 기본적인 것이기 때문에

( 제꺼는 자카르타 log4j + Pool + DBUtil 을 섞어 커스터마이징을 해서 이리저리 설명하기엔 약간의 문제가 있는터라

기본적인 것을 사용했습니다)

이를 활용하면 얼마든지 활용이 가능하기 때문입니다.







주의할 점은 모든 수행이후 SHUTDOWN 쿼리를 날려주라는 것입니다.

그렇지 않을경우 아무리 쿼리를 날려도 메모리상에서만 처리가 되며 프로그램 종료후 무엇을 하던

저장이 되지않는다는 것입니다.


외국 블로그에서 찾은건데 여기도 주의사항으로 꼭 SHUTDOWN을 하라는 말이 있군요

http://eranga.blogspot.com/2006/11/persisting-hsql-data.html

stmt.execute("SHUTDOWN");// Very important








그리고 stand-alone(다른것은 잘 모르겠음) 의 경우 1 connect 밖에 허용하지 않으므로

2개가 동시에 접근을 못한다는 문제가 있습니다. 이를 주의하시길
 
 

hsqldb 설치

http://www.hsqldb.org/web/hsqlDocsFrame.html의 문서를 기준으로 설치할 수도 있지만 우리의 목적은 hsqldb를 이용한 테스트이므로 다른 자바 개발자 사이트에서 제시한 보다 간단하고 빠른 방법으로 설치와 실행을 해보는 게 좋겠다.

hsqldb 다운로드

공식 사이트 http://www.hsqldb.org/를 가보면 최근 버전은 1.8.0.10(2008-12-28)이다.
http://sourceforge.net/projects/hsqldb로 가서 "files" 링크를 클릭하여 최신 버전을 다운로드 받는다.
설치하는 과정은 아주 간단하다. 다운로드 받은 zip 파일을 풀고 lib 디렉토리 안에 있는 hsqldb.jar 파일을 실행에 사용할 수 있는 적당한 디렉토리(클래스 패스)에 위치시키면 된다.



hsqldb 사용하기


hsqldb 실행

Server 모드와 In-process 모드, 2가지의 실행 모드가 있다. 여기서는 Server 모드의 실행 모드만 다루도록 한다.

  • Server 모드: 독립된 서버 프로세스로 실행. 로컬 또는 원격지 호스트에서 hsqldb에 접근할 수 있다.
  • In-process 모드: hsqldb를 사용하는 어플리케이션과 동일한 프로세스에서 hsqldb를 실행하는 모드. 자체 DB를 필요로 하는 어플리케이션이나 캐시와 같은 임시 데이터를 처리하는 데 이용

Server 모드는 Server, WebServer, Servlet의 3가지 방식이 있는데, 이 글에서는 Server 방식만 다루겠다.

실행 방법은 hsqldb.jar 파일을 클래스 패스에 추가하여 org.hsqldb.Server 클래스를 실행시키면 된다.

% java -classpath hsqldb/lib/hsqldb.jar org.hsqldb.Server



데이터베이스 생성과 사용

hsqldb는 데이터베이스 생성과 사용이 하나의 명령어로 실행된다. '-database.[n]' 옵션으로 Server를 실행하면 지정한 데이테베이스가 없으면 새로 만들고, 있으면 기존 데이터베이스를 사용한다.

% java -classpath hsqldb/lib/hsqldb.jar org.hsqldb.Server -database.0 file:data/test -dbname.0 asiavant

'-database.0 file:data/test' 옵션
데이터베이스가 사용할 경로와 파일명 형식(test.*)을 명시
'-dbname.0 asiavant' 옵션
데이터베이스의 alias를 지정. alias는 어플리케이션에서 jdbc를 통해 hsqldb에 접근할 때 사용. 위 예에서 jdbc connection url은 'jdbc:hsqldb:hsql://localhost/asiavant'

Server를 실행한 디렉토리를 보면 'data'라는 디렉토리에 'test'로 시작하는 파일들이(test.log, test.properties) 생성되어 있는 것을 확인할 수 있다.
각 옵션 뒤에 붙는 '.0'은 데이터베이스의 인덱스를 의미. hsqldb는 0~9 사이의 인덱스 값을 허용하므로 전체 10개의 데이터베이스를 동시에 띄울 수 있다.

server.properties 파일을 이용한 서버 실행

hsqldb는 Server를 실행할 때 지정한 디렉토리에 server.properites 파일이 있는지 검사하여 있으면 Server 설정 정보를 읽어서 Server를 실행시킨다.

server.database.0=file:data/testserver.dbname.0=asiavantserver.database.1=file:/Users/Hugo/data/tempserver.dbname.1=sampleserver.trace=true


이렇게 해두면 Server를 실행할 때마다 동일한 옵션을 반복해서 입력할 필요가 없어진다.

Database Manager

hsqldb는 데이터베이스에 query를 하거나 데이터베이스 오브젝트를 볼 수 있게 해주는 GUI 툴을 제공한다.

% java - classpath lib/hsqldb.jar org.hsqldb.util.DatabaseManager

URL 필드에 hsqldb url 정보를 입력한다. 여기서는 jdbc:hsqldb:hsql://localhost/asiavant

데이터베이스 연결에 성공하면 아래와 같이 SQL을 실행할 수 있는 윈도우가 뜬다. query를 입력한 후 'Execute' 버튼을 눌러서 query를 실행한다.

hsqldb 서버 종료하기

hsqldb를 정상적으로 종료하려면 DataManager에서 'shutdown' query를 실행한다. 또는 hsqldb Server를 실행시킨 터미널에서 '[Ctrl] + [C]'를 눌러서 종료할 수도 있으나 이 경우엔 비정상적으로 종료될 수도 있다.


출처 - http://devx.tistory.com/entry/HSQL-hyper-SQL-%EC%82%AC%EC%9A%A9%EB%B2%95



Posted by linuxism
,