asdfsdaaf

인터넷에 기여한 자바
   인터넷의 도움으로 자바는 프로그래밍의 최전선에 자리잡게 되었습니다. 그리고 역으로 자바 덕분에 인터넷도 지대한 영향을 받았죠. 자세하게 설명하면 자바가 일반적인 웹 프로그래밍을 간단하게 해주었고, 온라인 세상에 있는 컨텐츠를 바꾸는 방법을 applet이라 불리는 것을 통해 네트워크 프로그램의 새로운 종류에 혁신을 제공했습니다. 또한, 자바는 인터넷의 문제인 이식성(혹은 휴대성)과 보안에 영향을 주었습니다. 이에 대해 자세히 살펴보도록 하죠.
Java Applets
   Applet(이하: 애플릿)은 자바에 적합한 브라우저에 전송 및 자동 실행되도록 설계된 특별한 자바 프로그램입니다. 
자세히 설명하면 애플릿은 사용자와 상호작용 없이 애플릿 그 자체를 다운로드(download)할 수 있죠. 예를 들어 사용자가 애플릿이 포함된 링크(Link)를 클릭하게 되면 애플릿은 자동적으로 다운로드 되고 브라우저에서 자동 실행되게 됩니다.
애플릿은 또한, 작은 프로그램들을 위해 만들어졌습니다. 이 프로그램들은 보통 서버에서 받은 데이터를 표시하고 사용자 입력을 제어하거나 대출금 계산 같은 간단한 기능을 제공하게 되죠. 이러한 간단한 기능들은 서버에서 실행되기 보다 자체 기기 내에서 실행되어야 했습니다. 그래서 궁극적으로 애플릿은 서버에서 클라이언트(Client)로 특정 기능들을 이동시킬 수 있도록 도와주는 것이죠.
   애플릿의 등장으로 인터넷 프로그래밍은 변화하게 되었습니다.
 그 이유는 사이버 공간에서 오브젝트(Obejct: 물체)들을 자유롭게 이동시킬 수 있는 공간을 확장 시켜주었기 때문입니다. 일반적으로 2가지의 방법으로 서버와 클라이언트 간에 오브젝트를 이동시킬 수 있는데 하나는 passive information(수동적 정보, 받은 정적 데이터), 다른 하나는 dynamic(동적), active(활동적) program 입니다. 예를 들어 독자가 이메일을 읽었을 경우 독자는 실제로 패시브 데이터(passive data)를 읽은 것과 동일합니다. 만약에 어떤 프로그램을 다운로드 했다면 그 프로그램이 실행되기 전까지는 패시브 데이터를 받은 것과 동일합니다. 반대로, 애플릿이 동적으로 작동하면 자체적으로 프로그램을 실행할 수 있습니다. 예를 들어 서버에 의해 게시되어 클라이언트 컴퓨터에서 활동하는 프로그램들(active agent program)이죠. 
   Dynamic과 같은 가치 있는 네트워크 가능한 프로그램들은 또한, 심각한 문제를 가지고 있는 데 그 문제는 바로 이식성과 보안 문제입니다. 어떤 프로그램을 다운로드하고 자동적으로 실행된다면 이는 클라이언트 프로그램에 심각한 유해성을 야기할 수 있습니다. 여러분들이 알다시피 자바는 이러한 문제를 아주 훌륭하고 효과적인 방법으로 문제를 해결하였습니다. 그렇다면 이러한 문제 해결방법에 대해 자세히 알아보죠.
보안(Security)
   독자들도 알다시피 우리는 “일반적인” 프로그램을 위험을 감수하면서 다운로드 합니다. 그 이유는 다운로드한 파일 중에 트로이목마와 같은 바이러스가 포함되어 있을 수 있기 때문이죠. 
이 문제의 핵심은 악의가 있는 코드가 시스템 리소스를 허가 없이 액세스 할 경우 심각한 피해를 초래하기 때문입니다. 예를 들어 바이러스 프로그램이 당신의 컴퓨터에 있는 신용카드 번호, 은행 계좌, 비밀번호와 같은 개인정보를 수집해버리는 것이죠. 그래서 자바의 애플릿은 클라이언트 컴퓨터에서 안전한 다운로드와 실행을 하도록 도와줘야 합니다. 
즉, 애플릿이 실행되는 즉시 악의적인 공격을 막아낼 수 있어야 합니다.
   자바는 자바가 실행되는 환경에서 애플릿을 구속시켜 이러한 문제를 방지하고 있습니다. 
그리고 프로그램이 실행되는 컴퓨터 내에서 허가되지 않은 부분에 접근하는 것 또한 막고 있습니다. (이후 내용에서 이 부분에 대해 자세히 다룰 것입니다). 아무런 해가 없이 애플릿을 다운로드 할 수 있는 것은 자바의 다양한 혁신적 측면 중 하나로 더 이상 보안에 대해 고려하지 않아도 되는 능력입니다.
이식성
   이식성은 인터넷 측면에서 가장 중요합니다. 그 이유는 다양한 종류의 컴퓨터가 있고 다양한 운영체제와 연결해야 하기 때문이죠. 만약 자바프로그램이 인터넷을 통해 어느 컴퓨터와 연결해 가상 환경에서 실행되어야 할 필요가 있습니다. 애플릿을 예로 들면 동일한 애플릿(버전이 달라도)은 반드시 다운로드 가능해야 하고 다양한 CPU 환경에서 실행될 수 있어야 합니다. 다양한 환경을 지원하기 위해 다양한 애플릿 버전을 가지는 것은 실용적인 생각이 아닙니다. ‘같은’ 코드를 사용한다면 반드시 모든 컴퓨터에서 동작해야 합니다. 이는 이식 가능하고 실행할 수 있는 코드의 생성해야 할 필요성을 역설하는 것입니다. 다음 내용에서 보안에 도움이 되고 이식 가능하도록 만들 수 있는 메커니즘에 대해서 알아보도록 하죠.
자바의 마법 : ByteCode
   앞서 살펴본 보안과 이식성 문제를 해결하기 위해 자바의 해결방법은 자바 컴파일러에 의해 만들어진 산출물을 실행할 수 없도록 만드는 것입니다. 
즉, 이를 바이트 코드(ByteCode)라고 합니다. 바이트코드는 자바 런타임 시스템에서만 실행될 수 있도록 설계된 코드를 말합니다. 이때 자바 런타임 시스템(Java run-time system)은 일명 Java Virtual Machine(JVM)이라 불립니다. 근본적으로 JVM은 바이트코드를 위한 인터프리터로 설계되었습니다. 이는 조금 놀라운 사실인데 그 이유는 많은 모던 프로그래밍 언어들은 성능 제약 때문에 컴파일한 코드를 즉시 실행할 수 있도록 설계했기 때문입니다. 
그러나, 자바 프로그램은 사실 JVM의 도움을 통해 웹 기반 프로그램을 포함한 이런 근본적인 성능 문제를 해결하였습니다. 여기에 그 이유가 나와있습니다. 
  바이트 코드로 작성된 자바 프로그램을 해석해 다양한 환경에서 좀 더 쉽게 구동할 수 있도록 설계하였습니다. 
그 이유는 오직 JVM만이 각 플랫폼에서 구동이 가능할 필요가 있었기 때문이죠. 어떤 시스템에 런타임 패키지가 존재한다면 임의의 자바 프로그램을 실행 할 수 있도록 한것이죠. 여기서 기억할 것은 각기 다른 플랫폼에 존재하는 JVM은 반드시 같은 자바 바이트 코드를 해석할 줄 알아야 합니다. 만약 자바프로그램이 네이티브 코드(Native Code)로 컴파일 되었다면 동일한 프로그램을 인터넷에 연결된 각기 다른 CPU를 지원하기 위해 다른 버전의 프로그램으로 바꾸어줘야 할 것입니다. 물론, 이는 실행할 수 있는 해결책이 아닙니다. 
따라서, 바이트코드를 실행하는 JVM은 진정한 휴대용 프로그램을 만들 수 있는 가장 쉬운 방법인 것입니다.

레퍼런스 - 

Oracle - java a beginner's guide

http://tworab.tistory.com/61

공유하기

facebook twitter kakaoTalk kakaostory naver band