'PHP&ASP.NET'에 해당되는 글 1건

  1. 2007/12/04 PHP와 ASP.NET의 비교 (7)

PHP와 ASP.NET의 비교

PHP 2007/12/04 15:43
Sean Hull Opinion

PHP와 ASP.NET의 비교
저자 – Sean Hull

가장 인기 있는 두 가지 웹 애플리케이션 개발 환경의 장점과 단점에 대한 한 개발자의 의견.

웹 개발에 관한 한, 요즘의 개발자에게는 매우 다양한 대안이 존재합니다. 최근 사용되는 대부분의 개발 환경에서는 전처리(preprocessing), 즉 특수한 태그를 이용하여 HTML 페이지에 코드를 임베드함으로써 전처리기(preprocessor)에 코드의 존재를 알리고 처리하게 하는 방법이 활용됩니다. 이 코드는 CGI와 매우 유사한 형태로 서버 상에서 실행되어 컨텐트를 반환한 후, 미리 생성된 HTML 페이지의 일부분을 브라우저로 전달합니다. 오픈 소스 스크립팅 언어인 PHP와 마이크로소프트 ASP.NET 프레임워크 기반의 언어 모두 이러한 범주에 포함되며, JSP(JavaServer Page)와 Perl/Mason 역시 마찬가지 방법으로 동작합니다
.
본 문서에서는 오라클이 오라클 환경을위한 통합 언어로 선택한 언어인 PHP와 ASP.NET에 초점을 맞추어 보겠습니다. 두 가지 언어의 장점과 단점을 개괄적으로 살펴보고, 개발 프로젝트의 의사결정 과정에서 참고할 만한 중요한 특성을 논의하기로 합니다. 고려해야 할 요소는 매우 다양하고, 프로젝트 환경에 따라 다른 테크놀로지가 필요할 수 있습니다. 따라서 가격, 속도, 효율성, 보안, 크로스-플랫폼 지원, 오픈 소스 활용도 등의 관점에서 개별적으로 비교하는 수 밖에 없습니다.

ASP.NET이란 무엇인가?

ASP의 새로운 진화를 의미하는 ASP.NET은 이전 버전의 ASP에 대해 완전한 하위호환성을 제공하지 않습니다. 실제로, 이전의 ASP 테크놀로지는 (웹 애플리케이션 구현을 위한 완전한 형태의 프레임워크인) ASP.NET보다는 PHP와 더 많은 유사성을 갖습니다. ASP.NET 모델은 프로그래밍 언어를 자유롭게 선택할 수 있는 유연한 환경을 제공한다는 매우 중요한 장점을 갖습니다. ASP.NET은 VBScript, JScript, Perlscript, Python과 같은 스크립트 언어뿐 아니라 VB, C#, C, Cobol, Smalltalk, Lisp와 같은 컴파일 언어를 함께 지원합니다. 새로운 프레임워크는 CLR(Common Language Runtime)을 사용하며, 언어 소스를 먼저 Microsoft Intermediate Language 코드로 컴파일한 후 CLR이 이를 실행하는 형태로 동작합니다.

ASP.NET 프레임워크는 진정한 의미의 객체지향형 프로그래밍(OOP)과 상속, 폴리모피즘, 인캡슐레이션을 지원합니다. .NET 클래스 라이브러리는 다양한 태스크(XML과의 연동, 이미지 조작 등)를 기반으로 하는 상속 가능한 클래스로 조직화됩니다.

프로그래밍 언어와 방법론을 제외했을 때 가장 중요한 이슈는 바로 데이터베이스 액세스입니다. ASP.NET으로 프로그래밍하는 경우, 데이터베이스와의 통합은 ODBC를 통해 수행됩니다. ODBC는 타겟 데이터베이스에 접근하기 위해 일관성 있는 함수 호출을 사용합니다.

장점과 단점

ASP.NET의 장점은 명쾌한 설계와 구현 방식에 근간을 두고 있습니다. 언어 유연성, 정교한 오브젝트 지향형 기능을 지원하는 ASP.NET은 객체지향형 프로그래머의 꿈과도 같습니다. 이러한 점에서 볼 때 ASP.NET은 프로그래머의 기존 스킬과 완벽한 호환성을 제공한다고 평가할 수 있습니다.

ASP.NET의 또 다른 장점으로 개발 환경을 꼽을 수 있습니다. 예를 들어, 개발자는 WebMatrix, Visual Studio .Net, 또는 Delphi, C++ Builder와 같은 Borland 툴을 사용할 수 있습니다. Visual Studio는 브레이크포인트의 설정, 코드 섹션의 트레이스, 콜 스택의 리뷰 등 매우 뛰어난 디버깅 환경을 지원합니다. 그 밖에도 ASP.NET을 위한 다양한 써드 파티 IDE 솔루션이 조만간 출현하게 될 것이 분명해 보입니다.

하지만 유연성과 안정성 면에서의 이점은 효율성 면에서는 단점으로 변합니다. ASP.NET은 긴 코드 경로를 가지며, 따라서 메모리 사용량과 실행 시간의 측면에서 많은 리소스를 사용합니다. 매 초당 수 천, 수 만 명의 사용자를 동시에 지원해야 하는 웹 기반 애플리케이션에서는 이러한 문제가 심각한 결과를 초래할 수 있습니다. 메모리 사용량의 문제 또한 웹 서버에 심각한 부담을 가져올 가능성이 높습니다.

PHP란 무엇인가?

PHP는 전처리형 HTML 페이지 모델을 기반으로 하는 스크립팅 언어입니다. 웹 서버의 PHP 전처리기(preprocessor)가 아래와 같은 PHP 언어 태그를 발견하는 경우, PHP 엔진이 호출되어 해당 코드를 실행하게 됩니다:

<?php
some code here
?>
PHP는 명령적 프로그래밍 언어(imperative programming language)의 경험을 보유한 프로그래머라면 쉽게 친숙해질 수 있는 언어입니다. PHP는 Perl, C, Java와 문법적으로 매우 유사합니다. 엄격하게 말한다면, Java는 명령적 프로그래밍 언어로 볼 수 있지만 오브젝트 지향형 컨스트럭트 및 개념을 함께 사용하고 있기도 합니다. PHP 역시 이러한 구조를 필요에 따라 차용하고 있지만 순수한 OOP 언어로 볼 수는 없습니다.

위의 ASP.NET에 대한 설명에서, 필자는 ODBC 드라이버와 데이터베이스 추상화에 대한 개념을 언급한 바 있습니다. PHP의 경우에도 ODBC를 사용하여 데이터베이스에 연결할 수 있으며, 따라서 다양한 데이터베이스의 지원이 가능합니다. 또 이와 별도로 MySQL, Oracle, Postgres를 위한 네이티브 드라이버가 함께 제공되고 있습니다. 오라클 환경의 경우, OCI8 라이브러리를 이용하면 LOB, BLOB, CLOB, BFILE과 같은 다양한 고급 기능을 활용하는 것이 가능합니다.
여기서 이런 의문이 생길지도 모르겠습니다. “왜 PHP에서는 데이터베이스 종속적인 라이브러리가 강조되는 것일까요?” 데이터베이스 추상화(database abstraction) 개념을 이용하면 다양한 데이터베이스 간의 호환성을 구현하거나, 개발 환경에서 운영 환경으로 전환하는 과정에서 다른 데이터베이스에 쉽게 포팅이 가능합니다. 실제로 데이터베이스 추상화의 개념은 매우 중요하고 의미 있는 것입니다.

하지만 Tom Kyte가 그의 최신 저서 <Effective Oracle by Design (Oracle Press)>에서 지적했듯이, 이미 특정 데이터베이스 테크놀로지에 투자를 집중한 환경이라면 데이터베이스 종속성이 실질적인 목표가 되는 것이 맞습니다. ODBC, Perl DBI 라이브러리 등을 이용하여 오라클에 제너릭(generic)한 접근를 시도하는 경우, 특정 데이터베이스에서만 지원되는 기능을 사용할 수 없습니다. 또 쿼리의 최적화 방법 또한 데이터베이스 제품별로 달라질 수 있습니다.

PHP의 발전에 많은 기여를 한 소프트웨어 업체인 Zend Technologies는, Zend Studio라는 이름의 상용 개발 환경을 통해 디버거, 프로파일러를 포함하는 다양한 기능을 제공하고 있습니다. 또 무료로 제공되는 Zend Optimizer와 Zend Encoder를 함께 사용하면 PHP 코드를 컴파일하고 성능을 개선하는 것이 가능합니다. 그 밖에도 Zend Performance Suite와 같은 상용 제품을 이용하여 사전 컴파일된 PHP 페이지를 캐시에 저장하는 방법으로 극적인 성능 향상을 꾀할 수 있습니다.

장점 및 약점

현재 베타 버전 4까지 출시된 PHP 5에는 몇 가지 약점이 존재하고 있습니다. 그 중 하나로 예외(exception) 처리 기능의 부재, 즉 프로그램의 정상적인 흐름을 중단하고 에러 핸들링 코드로 점프하기 위한 이벤트 기반 에러 핸들링 인스턴스가 존재하지 않는다는 점을 지적할 수 있습니다. Java의 경우 에러 핸들링을 위한 예외 처리 기능을 제공하며, C++는 try-catch-throw 형식의 예외 처리 기능을 제공합니다. 물론 PHP 코드에서 에러를 관리하는 것은 얼마든지 가능합니다. 하지만 표준화된 구조가 제공되지 않으므로 에러 핸들링을 구현하는 방식은 전적으로 프로그래머의 재량에 따를 수 밖에 없고, 이는 일관성의 저하라는 문제를 초래하게 됩니다.

또 다른 문제로 PHP의 함수 이름이 대소문자를 구분하지 않는다는 점을 들 수 있습니다. 이를 매우 심각한 문제로 보기 어렵지만, 일부 프로그래머들은 이 약점에 대해 불만을 표시하고 있습니다.

필자는 PHP의 오브젝트 모델을 그다지 신뢰하지 않습니다. 하지만 PHP는 애초부터 객체지향형으로 설계된 언어가 아닙니다. PHP의 오브젝트 모델은 차후에 덧붙여 진 것이며, PHP 3와의 하위 호환성을 보장하기 위해 두 가지 모델을 동시에 취하는 형태로 발전되었습니다. 실제로 이러한 문제 중 상당 부분이 PHP 5로 오면서 해결되고 있으니, 최신 정보에 좀 더 관심을 기울여 보시기 바랍니다.

PHP가 일부 영역에서 취약한 것은 사실이지만, PHP의 장점이 발휘되는 영역에서는 단연 돋보이기도 합니다. 먼저 비용이 저렴하며 라이센싱 이슈로 고민할 필요가 없습니다. PHP는 오픈 소스 언어이며, 전체 개발자 커뮤니티가 합심하여 개발 및 버그 해결 작업을 추진하고 있습니다. 또 마음에 들지 않는 기능이 있다면 얼마든지 수정이 가능합니다. PHP는 Apache와 기본적으로 연동하며, 별도의 모듈로 또는 Apache 바이너리 내부에 직접 컴파일할 수 있습니다.

PHP와 Apache는 Windows, Linux, Solaris와 기타 다양한 UNIX 플랫폼을 지원하므로 어떤 서버 환경에서도 적용이 가능합니다. 또 오랜 기간 검증되어 온 Apache를 웹 서버로 이용함으로써 보안 문제를 최소화할 수 있습니다. 마지막으로 PHP는 짧은 코드 경로를 가지므로, PHP 페이지를 파싱, 실행하기 위한 서버-사이드 코드가 최소화되고 보다 효율적인 메모리 사용 및 보다 빠른 실행이 가능합니다.

PHP 5의 새로운 기능

PHP 5의 4 번째 베타 버전이 2003년 12월 말에 발표되면서, 이전에 존재하던 많은 버그가 해결되었습니다. 여전히 베타 버전이긴 하지만, PHP 5에 포함된 새로운 기능과 개선 사항은 주목할만한 가치가 충분합니다.

PHP 5은 예외 처리 기능, 그리고 진정한 의미의 OOP 구현을 위한 오브젝트 기능의 측면에서 중요한 개선을 이루었습니다. 예외 처리는 PHP 4에서 가장 취약한 부분으로 지목되어 왔으며, PHP 5는 예외 처리 기능을 추가함으로써 한층 성숙된 언어로 발전될 수 있었습니다. 예외 처리(exception handling)란 언어의 에러 처리를 위한 표준화된 방법을 의미합니다. try-catch-throw 방식의 에러 처리 루틴을 이용하여 PHP 코드를 훨씬 안정적이고 깔끔하게 개선할 수 있습니다.

<?php

class blue {

  function openFile ($inFile) {
    if (file_exists ($inFile)) {
      # code to open the file here
    } else {
      throw new Exception
	("Cannot open file: $inFile");
    }
  }
}

$blueObj = new blue ();

try {
  $blueObj->openFile ('/home/shull/file.txt');

} catch (Exception $myException) {
  echo $myException->getMessage ();

  # rest of exception handling code here
}

# rest of blue methods here

?>
새로운 오브젝트 모델은 PHP로 작성된 프로그램에 매우 긍정적인 영향력을 행사하게 될 것입니다. PHP 4 환경에서는 오브젝트가 함수 또느 메소드에 전달될 때 (PHP에 명시적으로 지정하지 않는 이상) “pass-by-value” 방식이 사용되었습니다. 이 방식이 사용되는 경우 오브젝트와 모든 메모리 데이터 구조가 한꺼번에 복사되어야 하며, 이로 인해 메모리를 과도하게 사용하고 액세스가 느려지는 문제가 있었습니다. 하지만 PHP 5에서는 오브젝트가 항상 “pass-by-reference” 방식으로 전달됩니다.

컨스트럭터(constructor), 디스트럭터(destructor)와 같은 PHP 5의 새로운 객체지향형 기능 또한 주목할 가치가 충분합니다. C++, Java의 경우와 마찬가지로, 컨스트럭터와 디스트럭터는 오브젝트를 생성하고, 메모리를 할당하기 위한 표준적인 방법을 제공합니다. 컨스트럭터 메소드는 초기 셋업을 위해, 디스트럭터 메소드는 클린업 작업을 위해 사용됩니다.

PHP 5에서는 클래스의 메소드와 변수에 대한 보다 정교한 제어가 가능해졌습니다. PHP4의 경우 모든 변수는 퍼블릭(public)으로 선언되며, 언제든 클래스 외부의 클래스로부터 또는 파생된 클래스(derived class)로부터 변수에 접근하는 것이 가능합니다. PHP 5에서는 퍼블릭 변수 또한 여전히 사용할 수 있지만 변수를 프라이빗(private)으로 선언하고 클래스 내부에서만 사용하도록 할 수도 있습니다. 세 번째 옵션으로 “protected”로 선언이 가능합니다. 이 경우 메소드와 변수는 클래스 내부에서 또는 서브클래스로 처리된 경우에 접근이 가능합니다.

PHP 5에는 타입 힌트(type hint), 타입 체크(type check) 기능이 추가되었습니다. 루틴 내에서 전달된 오브젝트가 올바른 타입인지 PHP에서 확인하고, 문제가 있는 경우 “type-mismatch” 에러를 발생시킬 수 있습니다.

그 밖에도 정적 메소드/변수(static method/variable), 추상화 클래스(abstract class) 등의 기능이 추가되었습니다. 자세한 정보는 제품 문서에서 확인하시기 바랍니다.

보안 기능의 비교

ASP.NET은 공식적으로 IIS 환경을 요구하고 있습니다. 안타깝게도, IIS는 그동안 보안이 취약한 플랫폼으로 악명이 높았기 때문에 운영자들의 기피 대상이 되어 왔습니다. 마이크로소프트의 대응이 부적절한 때문이었을 수도 있고, 해커들이 IIS에 공격을 집중한 때문일 수도 있지만 그 이유는 중요하지 않습니다. IIS 시스템은 오랜 침입의 역사를 안고 있습니다. PHP는 IIS 이외에도 Apache 환경을 지원합니다. Apache는 빠른 성능의 오픈 소스 웹 서버일 뿐 아니라 보안 측면에서도 뛰어난 기록을 갖고 있습니다. Apache는 다양한 플랫폼을 지원합니다.

ASP.NET으로 웹 환경을 개발하면서 Apache 웹 서버를 사용하고자 하는 경우에도 몇 가지 대안은 존재합니다. 먼저, Apache에서 로컬 또는 원격 IIS 서버로 요청을 릴레이하도록 설정할 수 있습니다. 이 경우 Apache는 정적인 컨텐트만을 처리하며 aspx 컨텐트는 IIS 서버에서 처리되지만 인터넷 상으로는 노출되지 않습니다.

하지만 Apache에서 ASP.NET을 사용하는 경우, 마이크로소프트가 지원하는 몇 가지 옵션을 사용할 수 없게 됩니다. 마지막 대안으로 오픈 소스 모듈의 구현을 위한 Ximian의 Project Mono가 있습니다. 자세한 정보는 www.go-mono.com을 확인하십시오.

데이터베이스 코딩의 예

PHP 또는 ASP.NET을 이용하여 처음으로 하게 되는 것이 바로 데이터베이스의 연결입니다. ASP.NET은 다양한 언어를 지원하는 만큼 연결 방법도 조금 더 복잡합니다. 물론 아래 코드 샘플은 HTML 페이지에 임베드되고, 클래스를 인스턴스화(instantiate)하는 과정을 거쳐야 합니다. 아래 샘플을 비교하면서 두 환경의 코딩 스타일을 비교해 보시기 바랍니다.

PHP 5를 이용한 오라클 연결

PHP 5에서 오라클로 연결하기 위한 오라클 “connect/disconnect” 루틴을 이용하는 PHP 5 클래스의 예가 아래와 같습니다 (ODBC 드라이버, 제너릭 데이터베이스 인터페이스 또한 사용이 가능합니다.)

class oracle_object {
  protected $theDB;
  protected $user;
  protected $pass;
  protected $db;

  function __construct($u, $p, $d) {
    $this->user = $u;
    $this->pass = $p;
    $this->db = $d;
  }

  function db_open () {
    $theDB  =  @OCILogon($this->user,  $this->pass,  $this->db);
    db_check_errors($php_errormsg);
  }

  function db_close() {
    @OCILogoff($theDB);
    db_check_errors($php_errormsg);
  }

  function __destruct () {
    print ("so long...");
  }

}

ASP.NET을 이용한 오라클 연결

VB.NET(Visual Basic은 마이크로소프트의 디폴트 .NET 프로그래밍 언어입니다)에서 오라클 데이터베이스에 연결하는 코드의 MSDN 샘플입니다:

Imports System
Imports System.Data
Imports System.Data.OracleClient
Imports Microsoft.VisualBasic

Class Sample

  Public Shared Sub Main()

    Dim oraConn As OracleConnection = New OracleConnection("Data Source=MyOracleServer;Integrated Security=yes;")

    Dim oraCMD As OracleCommand = New OracleCommand("SELECT CUSTOMER_ID, NAME FROM DEMO.CUSTOMER", oraConn)

    oraConn.Open()

    Dim myReader As OracleDataReader = oraCMD.ExecuteReader()

    Do While (myReader.Read())
      Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", myReader.GetInt32(0), myReader.GetString(1))
    Loop

    myReader.Close()
    oraConn.Close()
  End Sub
End Class

선택

PHP로 가기로 미리 결정하지 않으신 분들을 위해 조언한다면, 필자는 PHP가 약점에 비해 장점이 너무 뛰어난 언어라고 결론 짓겠습니다 (표 1의 비교 결과 참고). PHP는 가격, 속도, 효율성, 보안, 크로스-플랫폼 지원, 오픈 소스 등의 측면에서 분명히 뛰어납니다. 유일한 단점으로 순수한 OOP 환경을 완벽하개 지원하지 못한다는 점을 꼽을 수 있겠지만 이것은 그리 중요한 문제가 아닙니다. 물론 언어의 구조적 측면이 여러 가지 면에서 도움이 될 수 있지만, 훌륭한 코딩은 관행, 실행, 좋은 습관, 그리고 원칙에 의해 결정되는 것입니다.

표 1
  PHP 4 PHP 5 ASP.NET
소프트웨어 가격 무료 무료 무료
플랫폼 가격 무료 무료 $$
속도 뛰어남 뛰어남 weak
효율성 뛰어남 뛰어남 weak
보안 뛰어남 뛰어남 strong
플랫폼 뛰어남 뛰어남 weak (IIS only)
이기종 플랫폼 지원 지원 지원 win32 (IIS only)
소스 제공 여부 아니오
예외 처리 아니오
OOP 약함 뛰어남 뛰어남

비용. 여기서는 초기 투자 비용의 가격표만을 고려하지 않고(물론 PHP의 경우에는 무료입니다), 구축, 유지보수, 디버깅에 수반되는 비용을 함께 고려해 보기로 하겠습니다. PHP의 경우 Zend 최적화 엔진에 대한 투자가 필요합니다. ASP의 경우 초기부터 투자가 필요할 뿐 아니라 (그래픽 조작을 위한 라이브러리와 같은) 애드온 테크놀로지를 추가할 때마다 별도의 비용을 지출해야 합니다. 또 장기적으로 보았을 때 PHP는 업그레이드를 강요하거나 더 높은 라이센싱 비용을 요구하지 않습니다. 복잡한 라이센싱 문제를 경험해 본 기업이라면 단순히 라이센싱 요건의 준수 여부를 검증하는 데에도 많은 시간과 비용이 든다는 사실을 잘 알고 있을 것입니다. 또 버그를 해결하는 시간에도 차이가 있습니다. 이렇게 환산된 시간은 전체 개발 비용에도 영향을 미치게 됩니다.

속도와 효율성. 앞에서 설명한 것처럼, ASP.NET은 다양한 프로그래밍 언어를 지원하는 프레임워크입니다. 또 매우 뛰어난 객체지향형 모델을 제공하는 것으로 평가받고 있습니다. 이러한 평가는 사실이지만, 이러한 장점은 속도라는 측면에서 볼 때는 단점이 될 수 있습니다. PHP와 비교했을 때, ASP 페이지는 동일한 기능을 구현하기 위해 더 많은 코드를 실행해야 합니다. PHP는 좀 더 지저분하지만 빠른 해결책을 제공하며, 결과를 확실하게 내어 주는 장점이 있습니다. 또 2.0, 3.0 버전에서 안정성이 대폭적으로 개선되었고 고성능이 요구되는 환경을 위해 최적화된 코어 환경을 제공하고 있습니다.

속도만이 고려 사항이 되는 것은 아닙니다. 메모리 사용량 역시 매우 중요한 이슈입니다.

보안. ASP.NET은 IIS 상에서 실행됩니다. IIS는 보안 측면에서 많은 취약점을 안고 있습니다. 마이크로소프트가 엄청난 마케팅 비용을 지출하였지만, 아직도 많은 IT 전문가들은 자신의 네트워크에 IIS 웹 서버를 설치하는 것을 꺼려하고 있습니다. 반면 PHP는 속도, 안정성, 보안 측면에서 오랜 기간 검증되어 온 Apache와의 연동을 지원합니다. 자세한 정보는 www.securityfocus.com을 확인하시기 바랍니다.

크로스-플랫폼 지원. ASP.NET은 IIS 상에서 실행되며, 최근부터 Apache에 대한 지원 노력이 진행 중입니다. PHP는 처음부터 Apache를 지원해 왔으며, 따라서 검증되고 안정적인 다양한 서버 플랫폼의 활용이 가능합니다.

오픈 소스. 오픈 소스는 이상주의자들을 위한 추상적 개념이 아닙니다. 라이센싱 비용을 몇 푼 줄이려 하는 기업만을 위한 대안도 아닙니다. 소프트웨어의 버그를 해결하는 문제에 있어, 오픈 소스는 실로 훌륭한 효과를 제공합니다.

PHP와 ASP.NET은 모두 대규모 사용자 기반을 확보하고 있으며, 이로 인해 버그 문제가 심각한 사안으로 대두되는 경우가 많습니다. ASP.NET에서는 문제의 확인, 해결, 테스트, 새로운 패치 또는 버전 발표에 이르기까지 관료적인 절차를 거쳐야 합니다. PHP는 매우 신속하게 문제가 해결되고 발표됩니다. 오픈 소스 개발 과정을 지켜 보아온 이들은 새로운 버전과 패치가 (상용 소프트웨어가 몇 주, 몇 달이 걸리는 것에 비해) 몇 일만에 발표되는 것을 자주 목격해 왔습니다. 몇 일이라는 시간도 기다릴 수 없다면, 직접 문제를 해결하는 것 또한 가능합니다.

다음 단계
Sean의 후속 아티클,
PHP vs. ASP.NET Redux
히치하이커를 위한 PHP 가이드 (한글) (시리즈)
오픈 소스 개발자 센터에서 PHP에 대한 자세한 정보를 확인하시기 바랍니다.


Sean Hull은 뉴욕시에 위치한 iHeavy Inc.의 수석 컨설턴트입니다. 그는 오픈 소스 테크놀로지와 (오라클을 비롯한) 상용 테크노로지의 통합을 전문으로 하고 있으며, 뉴욕시에 주재한 많은 기업에 서비스를 제공하고 있습니다.

본 문서에서 제시된 의견은 전적으로 개인적인 것이며, 오라클 또는 다른 기업의 이해 관계를 반영하고 있지 않습니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 백성용 헬로우보이