본문 바로가기

프로그래밍(TA, AA)/델파이

[delphi] 델파이 개념 및 n-tier 구성

엠바카데로 델파이(Embarcadero Delphi Delphi)는 마이크로소프트 윈도우 응용프로그램을 위한 통합개발환경(고속 개발 도구)이며 원래는 볼랜드가 개발하였으나 지금은 엠바카데로사에서 소유하여 개발하고 있습니다. 오브젝트 파스칼 프로그래밍 언어로부터 파생된 언어인 델파이를 이용합니다.


델파이 컴파일러의 최신 버전은 2017년에 발표한 델파이 10 도쿄입니다. 엠바카데로 RAD 스튜디오 10 도쿄 (엠바카데로 RAD 스튜디오 10 도쿄)에 포함되어 있습니다.



델파이란?


마이크로소프트 윈도우 응용프로그램을 위한 통합개발환경(고속개발도구)입니다. 오브젝트 파스칼 프로그래밍 언어로부터 파생된 언어입니다.


01. 오브젝트 파스칼(Object)

파스칼에 객체지향 개념을 포함하여 발전시킨 프로그래밍 언어로 델파이 언어로 잘 알려져 있습니다.

  • 파스칼(Pascal)
    1980년대와 90년대 초반에 걸쳐 널리 사용되었으며 교육용 언어였습니다. 발표당시 아주 기본적인 컴퓨터 언어의 요소만을 가지고 있어 시스템을 직접 다루기엔 부족하였고 포인터를 사용한 구조적 프로그래밍을 특징으로 합니다.

  • 구조적 프로그래밍(structured programming)
    절차지향 프로그래밍이라고도 하며 프로그램의 아무위치에서나 프로시저로 호출될 수 있고 다른 프로시저에서도 호출 가능하고 자기자신에서도 호출이 가능합니다. (GOTO 문이나 JUMP 문을 쓰는 것보다 프로그램 흐름을 더 쉽게 따라갈 수 있게 해주는 장점, 모듈화와 구조화가 가능한 장점)


02. 통합개발환경(Integrated Development Environment, IDE)

코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어 입니다.


03. 고속 응용 프로그램 개발(Rapid Application Development, RAD)

소프트웨어 개발 방식의 하나로, 빠르고 쉽게 응용프로그램(윈도우 응용프로그램, 윈도우, iOS, Android 등)을 만들 수 있는 시각적 도구 입니다.


04. 델파이의 장점

델파이는 윈도우 아래에서 모든 부분을 프로그래밍 할 수 있는 강력한 언어로 높은 생산성과 간결한 코드가 대표적인 장점이고, C++과 비슷한 수준의 저순 시스템 프로그래밍도 가능합니다.



역사


델파이는 볼랜드사로 이직한 엔더스 헤즐버그가 개발한 터보 파스칼에서 시작되어 볼랜드 파스칼로 이어졌으며, 1995년에 RAD 개발 환경을 갖춘 델파이로 다시 탄생하였습니다. 이후 1997년에 볼랜드로부터 개발툴 사업 부문이 코드기어로 분사하였고, 이를 엠바카데로에서 인수 후 IDERA가 엠바카데로를 인수하였으나 엠바카데로는 개발툴에 전념하기로 하였고, 현재 버전업을 계속 하고 있습니다. 오브젝트 파스칼 혹은 델파이 언어를 바탕으로 씁니다. 델파이는 윈도우 아래에서 모든 부분을 프로그래밍할 수 있는 강력한 언어로 높은 생산성과 간결한 코드가 대표적인 장점이고, C++과 비슷한 수준의 저수준 시스템 프로그래밍도 가능합니다.



기능


한 가지 중요한 장점은 기반 프레임워크로 뛰어난 객체지향 프레임워크인 비주얼 컴포넌트 라이브러리(VCL)를 사용하고 있다는 점입니다. VCL은 델파이1에서부터 최신 버전인 델파이 XE2에 이르기까지 열다섯개의 버전들을 거치는 동안, 내부의 실제 코딩은 수없이 변했지만 잘 설계된 클래스 구조 덕분에 프로그래밍 인터페이스는 큰 변화없이 계승되어 왔습니다. 이로 인해 상/하위 호환성이 아주 뛰어납니다.


이런 이유로 마이크로소프트 닷넷을 지원하게 된 최신 버전에서도 비주얼 베이직이 VB.NET으로 업그레이드되면서 겪은 대대적인 프로그래밍 방법/스킬의 변화가 없으며, 다른 최신 기술의 적용에도 기존의 프로그래밍 방식/인터페이스를 최대한 재활용함으로써 개발자들이 델파이에 적용된 새로운 기술들을 배우는 과정에서 겪게되는 어려움인 러닝 커브(learning curve)가 대단히 작습니다.


델파이 2007에서 추가된 VCL for WEB은 AJAX를 지원하고 있으며, 또한 델파이 2007에서부터는 공식적으로 윈도 비스타를 지원합니다. 델파이 2009에서부터는 윈도 비스타지원 강화, 유니코드, 제네릭 / 익명의 메소드(클로져)를 지원합니다. 2009 버전에 이르러 기존 방식의 델파이.NET은 단종되고 새로운 방식의 델파이 프리즘이 그 뒤를 잇게 되었습니다.


2009년 8월 25일 발표된 델파이 2010 버전은 윈도우 7 운영체제를 최초로 정식으로 지원하는 개발 도구로서 멀티터치와 제스처를 지원합니다. 또한 코드 포매터, 서브버전 통합, IDE 인사이트 등의 IDE 기능 개선이 많이 추가되었습니다. 


2010년 9월 2일 발표된 델파이 XE 버전은 Azure, AWS 클라우드 시스템 지원과, REST 지원이 추가되었습니다.


2011년 9월 발표된 델파이 XE 2 버전은 OS X, iOS 개발 지원과 DirectX와 OpenGL을 사용하는 새로운 UI 프레임워크인 FireMonkey가 추가되었습니다.


2012년 9월 발표된 Delphi XE3 버전은 일반 타입 및 구조체를 확장할 수 있는 Record Helper가 추가 되었으며 FireMonkey 프레임을 통한 iOS 개발 지원이 중단되었습니다. iOS개발 지원은 Mobile Builder 프로젝트로 이관되어, XE4버전에서 통합됩니다. 윈도 8 개발은 지원되지만 메트로 UI에 최적화되어 있지 않으며, 윈도 8 RT는 지원되지 않습니다.


2013년 4월 발표된 델파이 XE4 버전은 델파이 프리즘의 지원이 중단되었고, iOS개발 지원을 위하여 LLVM기반의 Delphi ARM optimized compiler가 추가되었으며 ARC를 지원합니다.


2013년 9월 발표된 델파이 XE5 버전은 Android(v2.2 / ARM) 개발 지원이 추가되었습니다.



델파이 언어의 특징


델파이는 마이크로소프트 윈도우 기반하에서 모든 부분을 프로그래밍할 수 있는 강력한 언어로 높은 생산성과 간결한 코드가 대표적인 장점이며 C 이외에도 저수준의 시스템 프로그래밍이 가능한 소수의 언어입니다. 델파이의 일부로 취급되는 경향이 강해 개발사가 주도적으로 언어의 변화를 이끄는 특징이 있습니다.


또 현존하는 네이티브 언어(native language) 중 가장 빠른 컴파일 속도도 델파이만의 장점입니다. 대표적인 개발 도구로 볼랜드/코드기어의 델파이, 카릴릭스가 있습니다. 이외에도 프리 파스칼도 고유한 오브젝트 파스칼 외에 델파이를 컴파일할 수 있도록 지원합니다. 델파이는 향후 멀티플랫폼을 비전으로 삼고 윈도우 운영체제 이외에 다른 플랫폼들을 지원하는 방향으로 개발이 진행되고 있습니다. 현재 개발이 가능한 플랫폼으로는 OS X와 iOS, 안드로이드가 있습니다.


이전의 오브젝트 파스칼과의 차이

델파이 컴파일러의 지속적인 언어 확장을 통해 이전의 오브젝트 파스칼(터보 파스칼)의 제한을 서서히 벗어나기 시작하며 델파이에서 사용하는 언어를 오브젝트 파스칼이 아닌 델파이 프로그래밍 언어로 부르게 됩니다.


아래는 이전 오브젝트 파스칼에서 지원하지 않으나 델파이 컴파일러가 지원하는 특징입니다.


  • 멀티 플랫폼(윈도우 32/54비트, OSX, iOS, 안드로이드) 지원
  • 클래스 내의 선언부
  • 클래스 사이의 친구관계 막기
  • 최종 상속자
  • 레코드가 메소드를 포함
  • 인라인 함수
  • 연산자 오버로드
  • for 문의 반복자 사용
  • 제네릭 프로그래밍 지원
  • 유니코드(UTF-16) 지원
  • 익명의 함수 지원
  • Helper를 통한 타입 확장



델파이 N-Tier 프로그램


웹이나 C/S 프로그램에서는 MySQL DBMS에 2-Tier 방식으로 접속을 하는게 일반적인 방법이지만 Mobile 클라이언트 프로그램(스마트폰 앱)을 만들 때는 통신장애가 발생하면 DB연결이 끊어지게 되므로 3-Tier방식으로 프로그램을 개발해야 합니다.


PC 버전의 응용프로그램도 이 방식을 이용하면 네트워크 트래픽으로 인한 속도저하 문제를 해결할 수 있습니다. MySQL DBMS에 2-Tier 방식이 아닌 3-Tier로 데이터스냅(DataSnap) 미들웨어 서버를 만들어서 PC 또는 Mobile Clinet에서 접속할 수 있는 환경을 구성하는 방식 등이 있습니다.


2-tier C/S 프로그램 개발은 FDConnection 연결을 통해서 구현 가능합니다. DataControl을 위한 DBGrid와 DBNavigator 컴포넌트 등을 사용하여 DataSource 속성으로 연결해주면 됩니다.




TIER

일반적으로 TIER란 일련의 비슷한 객체가 나열된 상태에서, 열 또는 계층을 의미합니다. 컴퓨터 프로그래밍에서 프로그램의 일부가 여러 계층에 나뉘어 존재할 수 있으며, 그 계층 또한 네트워크 상의 서로 다른 컴퓨터에 위치할 수 있습니다. 바로 이러한 프로그램을 Multi-tier Programming 이라고 합니다.


Multi-tier Program은 보통 '클라이언트', '애플리케이션 서버', '데이터베이스 서버'의 3-tier 이상으로 활용되어 집니다. 이렇게 만들어지는 다계층 프로그램은 비즈니스 로직의 대부분을 Middle-tier가 되는 애플리케이션 서버 측에 부여함으로써 사용자측 프로그램을 가볍게 만들 수 있으며 서비스 규모에 따라서 여러대의 서버에 애플리케이션의 작업을 분산시켜 로드 밸런싱으로 인한 성능향상 및 서버 장애에 대한 백업 시스템의 구축이 가능합니다.


2-tier

  • 자바애플릿이나 애플리케이션이 JDBC를 이용해서 DBMS의 데이터베이스에 직접 접근
  • 가장 대표적인 클라이언트/서버 구조
  • 프로그래밍이 간단하다는 장점
  • 보안, 로드 밸런싱, 확장성(오브젝트 재사용) 등의 문제점



2-tier 디자인이 적합한 경우

  1. 애플리케이션이 하나의 데이터베이스만을 사용
  2. 데이터베이스 엔진이 하나의 CPU에서 동작
  3. 데이터베이스가 계속 거의 같은 크기로 유지
  4. 사용자 기반이 같은 크기로 유지
  5. 요구가 확정되어 변환 가능성이 거의 혹은 아예 없는 경우
  6. 애플리케이션을 종료한 후에도 최소한의 지속성을 요구



3-tier


3층 구조는 2층 구조의 제한을 극복하기 위해서 탄생한 구조로, 사용자 인터페이스 환경과 데이터베이스 관리서버 환경 사이의 중간층이 추가된 구조입니다. 중간층의 구현은 트랜잭션 처리 모니터, 메시지 서버, 응용 서버 등 여러 가지 방법으로 구축될 수 있습니다. 이러한 중간층은 데이터베이스의 다단계나 응용 프로그램의 실행 또는 사용자 요구 분산을 위한 큐잉을 수행할 수 있습니다. 예를 들어, 중간층이 큐로써 역할을 한다면 클라이언트는 자신의 요청을 중간층에 전달만 하고 중간층이 서버에 접속해서 클라이언트가 남기고 간 요청에 대한 응답을 받아 클라이언트에 돌려줄 것입니다. 이러한 중간층의 역할은 스케줄링을 가능하게 할 뿐만 아니라, 다수 사용자 요구 처리에 대한 우선 순위를 정할 수 있게 해주어 서버의 부하를 줄여줍니다.


  • 자바 애플리케이션이나 애플릿이 DBMS를 직접 접근하는 것이 아니라 중간에 있는 미들웨어(미들티어)를 거쳐 데이터베이스에 접근하는 것
  • 데이터베이스와의 연동 부분을 분리시킴으로써 Presentation layer가 데이터 저장 방법에 신경을 쓰지 않아도 됨.
  • 클라이언트는 단지 미들티어를 참조.
  • 미들티어 서버는 DBMS와 같이 특정한 작업만 수행하는 최종 서버와 통신을 하여 결과를 얻은 후 클라이언트에게 결과를 전달
  • 2-tier 모델보다 안정적이고 유연하며 보안이 강화




tier-1: 사용자 인터페이스를 담당하는 클라이언트

tier-2: HTTP나 코바를 지원하는 응용처리 서버

tier-3: DBMS와 같은 사용자가 최종적으로 원하는 기능을 수행할 서버


3계층 애플리케이션이란 3개의 주요 부분으로 구성되어 있는 응용프로그램으로서, 각각은 네트워크 상의 서로 다른 장소에 분산되어 있습니다. 여기서 3개의 주요 부분이란 다음과 같습니다.

  • 워크스테이션, 또는 외양 인터페이스
  • 비즈니스 로직
  • 데이터베이스와 그것을 관리하기 위한 관련 프로그램


전형적인 3 계층 애플리케이션에서, 프로그램 사용자의 워크스테이션은 GUI를 제공하는 프로그램과 특정 프로그램에 맞는 입력 양식이나 인터랙티브 윈도우 등을 가지고 있습니다. (워크스테이션 사용자를 위한 일부 독특한 데이터는 사용자의 하드디스크에도 함께 보관됩니다)


비즈니스 로직은 근거리통신망 서버 또는 다른 공유된 컴퓨터 상에 위치합니다. 비즈니스 로직은 워크스테이션으로부터의 클라이언트 요청에 대해 마치 서버처럼 행동합니다. 그것은 차례로 어떤 데이터가 필요한지를 결정하고, 메인프레임 컴퓨터 상에 위치하고 있을 세번째 계층의 프로그램에 대해서는 마치 클라이언트처럼 행동합니다.


세번째 계층은 데이터베이스와 그것에 액세스해서 읽거나 쓰는 것을 관리하는 프로그램을 포함합니다. 애플리케이션의 조직은 이것보다 더욱 복잡해질 수 있지만, 3 계층 관점은 대규모 프로그램에서 일부분에 관해 생각하기에 편리한 방법입니다.


3 계층 애플리케이션은 클라이언트/서버 컴퓨팅 모델을 사용합니다. 3 계층에서, 각 부분은 각기 다른 팀의 프로그래머들에 의해 각기 다른 언어를 사용하여 동시에 개발될 수 있습니다. 어떤 한 계층의 프로그램은 다른 계층에 영향을 주지 않고도 변경되거나 위치가 달라질 수 있기 때문에, 3 계층 모델은 새로운 요구나 기회가 생길 때마다 애플리케이션을 지속적으로 진화시켜야하는 기업이나 소프트웨어 패키지 개발자들이 이에 쉽게 대처할 수 있게 해줍니다. 기존의 애플리케이션들은 영구적으로 또는 일시적으로 계속 유지될 수 있으며, 하나의 컴포넌트로서 새로운 계층 내에 캡슐화될 수도 있습니다.


3 계층 애플리케이션 아키텍처는 분산 객체지향 프로그래밍과 사상이 일치합니다.





미들웨어(Middle Ware)

미들웨어는 서로 다른 커뮤니케이션 프로토콜, 시스템 아키텍처, 운영체제, 데이터베이스와 다양한 애플리케이션 서비스를 지원하기 위해서 네트웍을 따라 하드웨어에 독립적으로 연결해 주는 소프트웨어를 의미합니다. 즉 클라이언트/서버를 물리적으로 연결해 주는 것이 아닌 애플리케이션 내에서의 논리적인 연결을 의미합니다.


미들웨어의 목표는 "Any-to-Any Operability"로서 파일 교환 및 공유, 트랜잭션, RPC(Remote Procedure Call)등의 다양한 방법을 사용하여 애플리케이션 모듈간 호환성을 가지고 운영되도록 도와줍니다. 결론적으로 미들웨어는 애플리케이션 프로그램이 어떤 정보시스템 환경에서도 작동할 수 있도록 도와줍니다.


미들웨어 배경 S/W 전략 수립시 미들웨어 제품의 시스템 적용 범위를 이해하는 것은 중요합니다. 적용범위는 어떻게 변화하고 있는가. 미들웨어의 초기 제품은 커뮤니케이션 소프트웨어 입니다. 대표적인 제품으로는 인터솔브의 시큐링크와 Software AG의 Entire Broker등이 있으며 이제품들은 이기종간의 통신을 위한 제품입니다. 과거의 커뮤니케이션 적용에서 현재는 미들웨어의 수행 환경이 애플리케이션 서비스를 포함하기 때문에 적용범위는 훨씬 넓어지고 있습니다. 애플리케이션 서비스는 트랜잭션을 모니터하고, SQL을 최적화, 라우팅, 데이터베이스 리플리케이션 등 다양한 기능을 지원해야 하는데 제품의 추세가 이러한 기능들을 통합하여 지원하고 특정벤더에 의존하기 보다는 벤더들이 서로 기술을 호환하는 개방형 구조로 작년부터 나가고 있습니다.


미들웨어 구성상 분류 S/W 패키지화 전략수립시 꼭 3-Tier 환경에서 애플리케이션을 개발하여야 할것인가? 미들웨어를 정의할때, 2-Tier, 3-Tier에 의한 아키텍처 분류와 적용방법에 따른 분류로 구분할 수 있습니다. 일반적으로 아키텍처상 2-Tier의 클라이언트/서버 환경은 RDB에 적합하고, 3-Tier는 미들웨어 환경에 적합합니다. 아키텍처상 분류보다는 어느 부분에 정용하였느냐의 적용상의 분류가 보다 적합하며 현재 미들웨어 환경은 멀티티어(Multi-Tier)환경이라는 말이 더 적합하며 2Tier 환경에서도 미들웨어를 구성할 수 있습니다.


예를 들면 클라이언트/서버 환경에서 메시지를 커뮤니케이션하는 RPC를 클라이언트와 서버에 동시에 인스톨하여 사용할 수 있고 이 경우 시스템은 2Tier 미들웨어 입니다. 그러나 미들웨어의 일반적인 구성은 클라이언트와 서버 사이에 중간 서버를 두어 트래픽을 처리할 수 있도록 하였는데 중간 서버의 사용용도에 따라 3Tier도 될 수 있고 4Tier도 될 수 있습니다.


미들웨어 시스템에서 멀티티어로 구성할때 고려하여야 할 요소는 Complexity와 Scalability입니다. 중간서버의 잘못된 불필요한 적용은 Delay Time을 줄 수 있지만 이의 정확한 적용은 시스템의 신뢰성과 효율성을 동시에 제공합니다. 미들웨어 시스템은 꼭 3Tier일 필요는 없고 시스템의 용도에 따라 다양하게 결정될 수 있습니다. 미들웨어의 예로 Tuxido, MTS, WebSphere 등이 있습니다.



데이터베이스(Data Base)

논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화 함으로써 검색과 갱신의 효율화를 꾀한 것입니다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있습니다.

데이터베이스가 가지는 몇가지 특성을 살펴봄으로써 그 뜻을 보다 명확히 할 수 있습니다.


  • 똑같은 자료를 중복하여 저장하지 않는 통합된 자료
  • 컴퓨터가 액세스하여 처리할 수 있는 저장장치에 수록된 자료
  • 어떤 조직의 기능을 수행하는 데 없어서는 안되며 존재 목적이 뚜렷하고 유용성 있는 운영자료이기 때문에 임시로 필요해서 모아놓은 데이터나 단순한 입출력 자료가 아니다.
  • 한 조직에서 가지는 데이터베이스는 그 조직 내의 모든 사람들이 소유하고 유지하며 이용하는 공동 자료로서 각 사용자는 같은 데이터라 할지라도 각자의 응용 목적에 따라 다르게 사용할 수 있다.


멀티티어 구성에 있어서 미들티어의 역할 10가지 입니다.


1. 클라이언트의 요청을 처리한다.

2. 시스템의 복잡성을 클라이언트가 모르게 한다.

3. 데이터베이스에 대한 질의를 수행한다.

4. 복잡한 비즈니스 로직을 수행한다.

5. 기존에 이미 구축되어 있는 레거시 시스템과 연동한다.

6. 시스템 레벨의 서비스를 제공한다.

7. 클라이언트와 백오피스 시스템에 대한 리모트 액세스를 제공한다.

8. 세션과 트랜잭션을 관리한다.

9. 보안을 강화한다.

10. 자원을 풀링함으로써 효율적으로 자원을 관리한다.