자바의 네트워크 프로그래밍에 대한 전반적인 개요를 파악할수 있는 시간을 마련하였다. 자바에서 전체 단원을 통틀어서 핵중의 핵이라고 할수 있는 단원이 바로 네트워크 프로그래밍이다. 그만큼 이제는 네트워크를 통하지 않고는 뭔가를 이룰수 없는 시대에 살고 있으니까 말이다. 그렇다면 프로그래밍에서 네트워크란 무엇인가? 한마디로 얘기하자면 서로 다른 컴퓨터를 통신망을 통해 연결한 것으로 대표적인 것으로는 인터넷 통신망을 들수 있겠다. 네트워크를 얘기할때 빼놓지않고 얘기하는 것이 서버(Server)와 클라이언트(Client) 개념일 것이다.
한쪽은 서버(Server)로 한쪽은 클라이언트(Client)로 지칭하는데 정보를 제공하는 컴퓨터나 응용프로그램은 서버라고 하고 정보가 필요해서 요청하는 컴퓨터나 응용프로그램은 클라이언트가 되는 것이다. 즉, 여러분이 클라이언트라고 생각하면 된다. 정보가 필요해서 인터넷을 떠돌아 다니는 쪽은 보통 여러분들이 아니겠는가? 바로 이런 서버와 클라이언트가 서로 정보를 주고 받을수 있게끔 다시 말해서 통신할수 있도록 만들어주는 선로나 연결망이 필요한데 이를 네트워크라 한다.
당연하지만 이런 네트워크를 기반으로 통신이 이루어지게 하기 위해선 최소한 두대 이상의 컴퓨터가 필요할 것이다. 더 쉽게 설명하자면 여러분이 인터넷을 쓸때 그냥 컴퓨터가 있다고 바로 인터넷을 쓸수 있는 것이 아니다. 여러분이 인터넷 회사에 응분의 대가(?)를 지불하고 그쪽 서버 컴퓨터에서 여러분이 접속할수 있는 선로를 개통해줘야 인터넷을 이용할수 있는 것이다. 여러분이 인터넷에서 어디를 가든 반대쪽 관련 서버에서 응답을 해줘야 쓸수 있는 것이고 컴퓨터가 서로 올바른 메세지를 주고 받기 위해서 규칙을 정해놓았는데 이런 규칙으로 만든 통신 규약을 프로토콜(Protocol)이라고 한다.
인터넷에서는 이를 IP(Internet Protocol)라는 이름의 프로토콜을 사용한다. 이제는 워낙 익숙한 용어가 되어버린지라 뭔지는 몰라도 막연히 자신의 고유한 인터넷 주소라는 것쯤은 알고 있는이가 많을 것이다. IP는 4바이트로 이루어져 있는데 .으로 번호를 네개 공간으로 나누어 192.168.1.100 이런식으로 쓰며 IP 주소라고 불린다. 여러분의 컴퓨터가 있는 집주소를 말한다고 생각하면 될것이다. 이런 IP 주소로 인해서 여러분의 컴퓨터가 다른 여러 컴퓨터들과 섞여서 몰래 통신을 하고 있어도 알게 모르게 여기저기 기록과 흔적이 남는 것이다. 따라서 안보인다고 함부로 나쁜짓(?) 하다가 잡히는게 바로 이런 이유 때문이다.ㅎㅎ
네트워크에 관련된 그림은 그려졌으리라 보고 이제 조금더 깊이 들어가보겠다. 중간중간에 용어가 생소하더라도 끝까지 읽어내려가기 바란다. 가면 갈수록 더 쉽게 설명해서 종국에 가서는 뿌듯한 성취감(?)을 맛보게끔 만들 것이다.ㅎㅎ 클라이언트쪽 프로그램에서 서버쪽 프로그램으로 정보를 요청하면 이를 수락하고 관련 정보를 제공하는등의 네트워크 서비스가 이루어지는데 이는 인터넷 소프트웨어 스택(Internet Software Stack)의 일부분인 트랜스포트 레이어(Transport Layer)를 통해 이루어진다.
우리는 이를 TCP/IP(Transport Control Protocol/Internet Protocol)라고 부른다. Internet Software Stack의 일부분이니 엄밀히 표현하면 TCP/IP stack이 되겠다. 이런 네트워크 서비스를 가능케 해주는 트랜스포트 레이어는 두가지 프로토콜로 나뉜다. 하나는 TCP(Transport Control Protocol)고 다른 하나는 UDP(User Datagram Protocol)다. 이를 프로그래밍상에서는 소킷(socket)이라고 부르는데 순우리말(?)로 소켓이다.ㅎㅎ 이 정도 왔으면 네트워크 프로그래밍에 대해서 좀 아는 이들이라면 감을 잡았을 것이다. 왜 네트워크 얘기만 하면 소켓 소켓하는지 말이다.^^
TCP는 연결지향 프로토콜(Connection-Oriented Protocol)로 두 컴퓨터간의 데이터 흐름의 신뢰성을 보장한다. 즉 클라이언트와 연결이 되었다면 통신은 물론이고 데이터 교환시 손실없이 주고받을수 있다는 것을 보장하는 것이다. TCP는 파일이나 데이터를 네트워크에서 여러개의 작은 조각으로 나누어서 보내거나 반대로 이를 재조립하는 기능을 한다. 네트워크에서 이렇게 파일이나 데이터를 여러개로 쪼개는 것을 패킷(packet)이라 한다. 관련 서비스 프로그램의 예로는 ftp나 telnet을 들수 있겠다.
UDP는 데이터의 독립적인 패킷을 보내는 프로토콜인데 한 컴퓨터에서 다른 컴퓨터로 데이터를 주고받을때 TCP와는 다르게 연결성도 없고 신뢰성도 없는 한마디로 데이터 교환시 손실여부를 보장할수 없는 패킷을 말하는데 이를 데이터그램(datagrams)이라 부른다. 관련 서비스 프로그램의 예로는 Clock server나 Ping을 들수 있는데 그냥 폼잡고 쓰는 것이니 괜히 이런거 외우지 말아라.ㅎㅎ 자바는 TCP(Socket 클래스)와 UDP(DatagramSocket 클래스)를 모두 지원한다. 요런걸 신경써야쥐~
TCP와 UDP 프로토콜 모두 컴퓨터의 특정 프로세스를 통해 전송되는 데이터는 포트(Port)를 이용한다. 포트는 16비트 정수로 표현되며 값은 0에서 65535까지 지정가능하다. 대표적으로 알려져있는 포트 넘버는 1024까지 예약되어 사용되고 있으며 구체적인 예로 ftp는 포트넘버로 21/tcp을 telnet은 포트넘버로 23/tcp을 그리고 http는 포트넘버 80/tcp,udp으로 사용된다. 따라서 우리가 포트넘버를 설정할 일이 있을때는 이미 예약되어 사용되고 있는 1024까지의 포트넘버는 충돌방지를 위해 사용하지 말고 1025부터 그 이상의 포트넘버를 사용하는 것이 신상(?)에 좋을 것이다.^^
그림을 참조하면서 패킷이 어떻게 전달되는지 살펴보자. 우리가 말로는 ftp에 연결한다 하지만 클라이언트에서 서버로 ftp를 사용하겠다고 요청할때는 포트 21로 연결을 시도한다. http를 사용하려고 하면 포트넘버 80번으로 연결한다. 즉 서버에서는 포트넘버로 클라이언트가 ftp를 사용할건지 http를 사용할건지 알수 있는 것이다. 클라이언트에서 포트넘버 21로 연결요청을 하면 ftp 서버와 연결시켜주고 80으로 요청하면 http 서버로 연결하는 식이다.
자 이렇게 설명해도 이해가 되지 않았다면 지금 위에 있는 그림 한장이 여러분의 갈증을 풀어주리라 믿는다.^^ 백문이 불여일견인지라 설명만 줄창 하는것보다는 한번 보는게 나을것이라는 생각에 올렸는데 이제 막힌 속이 뻥뻥 뚫리고 있길 바란다. 사실 조금전에 이와같은 계층구조를 도표로 언급하였지만 아마 그때는 그냥 무심코 지나친 이가 태반이었을 것이다. 그런 이들은 후에 본 단원을 한번 더 읽어보기 바란다.^^
방금 우리가 배운 포트와 응용 프로그램들을 연결시켜주는게 아까 말했던 소켓(socket)이다. 너무 자세히 해서 혼란스럽다면 조금 위로 올라가서 소켓 관련 부분을 다시 읽어보기 바란다. 이제는 머리 회전이 팍팍 될것이다.^^ 왜 이렇게 같은 얘기를 이리치고 저리치고 했느냐면 바로 우리가 자바에서 공부할 부분이 바로 Socket 클래스이기 때문이다. 자바에서는 통신 네트워크 프로그램을 Socket 클래스로 제작가능하다. 쉽게 말해서 서버와 클라이언트를 이어 서로 정보를 주고 받을수 있는 통신 프로그램을 우리가 Socket을 이용해 만들수 있다는 것이다.
프로그래밍 관점에서 소켓을 간단히 설명하자면 클라이언트의 소켓(Socket)과 서버의 소켓(Socket)이 있는데 중간에 이를 연결시켜주는 서버소켓(ServerSocket)이 있다. 서버소켓이 하는 일은 클라이언트가 접속하기를 기다리고 접속을 시도하면 서버의 소켓을 만들어서 클라이언트의 소켓과 연결해주고 다시 계속해서 다른 클라이언트가 접속하기를 기다리고 접속 시도를 하면 위와같이 연결해주는 일을 반복한다. 아래 그림에서 특히 화살표들을 유심히 쳐다보고 있으면 알기 싫어도 알게 될것이다.^^
아직까지 이해가 안된 이들을 위해 간략하게 덧붙이자면 소켓끼리 놀도록 만들면 연결된다는 것이다. 아래 그림을 보면 이해가 더 빠를지도 모르겠다.
자바에서 이렇게 Socket 클래스를 이용해서 프로그래밍하는 것을 거창한 말(?)로 TCP 프로그래밍이라고 하는데 네트워크에 관련해서 집중적으로 알아야되는 자바 패키지가 있다. 무엇일까나? ㅎㅎ 바로~ 바로~~ java.net 패키지이다. 이름에서 뭔가 풍기지 않는가? net? 그렇다 바로 네트워크 냄새를 솔솔 풍기는 것처럼 관련 클래스들도 네트워크에 관한 클래스들로 꽉꽉 차 있다. 그럼 한번 살펴보자.^^
위의 java.net 패키지는 네트워크 프로그래밍에서 여러분이 앞으로 만들 클라이언트 프로그램과 서버 프로그램들을 보다 심플하고 빠르게 발전시킬수 있는 최적의 솔루션을 제공할 것이다. 위의 그림만 봐도 관련 패키지 이해는 더할나위없이 충분할터이지만 필자가 워낙 자상(?)한지라 여러분을 위해 더 간결하게 해당 패키지에 대해서 정리하며 오늘은 여기서 마칠터이니 다음 시간까지 java.net 패키지는 이해가 되던 안되던 라이브러리에서 한번쯤은 꼭 훓어보고 오는 정성을 보여주기 바란다.^^
java.net 패키지 구성
Interfaces
* ContentHandlerFactory
* FileNameMap
* SocketImplFactory
* URLStreamHandlerFactory
Classes
* ContentHandler
* DatagramPacket
* DatagramSocket
* DatagramSocketImpl
* HttpURLConnection
* InetAddress
* MulticastSocket
* ServerSocket
* Socket
* SocketImpl
* URL
* URLConnection
* URLEncoder
* URLStreamHandler
Exceptions
* BindException
* ConnectException
* MalformedURLException
* NoRouteToHostException
* ProtocolException
* SocketException
* UnknownHostException
* UnknownServiceException
자바를 처음 시작한다는 가정하에 사소한 것부터 하나하나 짚고 넘어가며 따라하기 쉽도록
예제를 중심으로 모든 설명이 사용자의 관점에서 자세하게 기술되어 있는것이 특징입니다.
"강이"의 자바 강좌는 본 블로그(alecture.blogspot.com)와 제휴를 통해
독점적으로 공급될 예정이며 내용의 수정은 공급자의 제한으로 불가하고
사이트 출처를 밝히는데 한해 어디서나 자유롭게 쓸수있도록 합의하였음을 알립니다.
2011년 5월 29일 일요일
2011년 5월 23일 월요일
자바 애플릿(Java Applet)
자바는 몰라도 애플릿을 아는 사람은 상당수 있을 것이다. 그만큼 웹브라우저상에서 널리 쓰이고 있어서인데 자바로 개발된 애플릿은 우리가 쓰는 일반 브라우저를 통해서 실행할수 있는 프로그램으로 웹페이지 양식인 HTML 문서내에 포함되어 사용되며 비교적 구성이 간단한 기능의 소규모 프로그램을 수행하는 언어를 말한다. 그래서 이름도 application을 뜻하는 App과 어원상 매우 작다는 뜻의 접미사 -let이 만나 app+let=applet으로 불리운다. 하지만 일각에서는 매킨토시로 유명했던 Apple사에서 쓰인 AppleScript의 영향을 받아서 Applet이라고 쓴다는 얘기도 있다.
자바 애플릿은 이용자가 서버에 별도의 요청을 하지 않아도 수행할수 있는데 단순한 애니메이션이나 시계나 달력같은 간단한 계산을 이용한 작업들을 웹상에서 실현할수 있어 응용 프로그램으로 상당히 폭넓게 쓰이고 있다. 애플릿을 만들기 위해서는 두가지 파일이 필요한데 자바 애플릿의 .class 파일과 웹상에서 해당소스를 구현할 .html 파일이 필요하다. 하지만 .class 파일을 만들기 위해서는 컴파일을 해야하니 원소스인 .java 파일이 필요하므로 결국 애플릿을 만들려면 총 세개의 파일을 만들어야된다고 볼수 있다.
자바 애플릿을 실행하려면 자바런타임(JRE: Java Runtime Environment) 프로그램을 다운받아서 설치하여야 되는데 자바 프로그램을 만들고 있는 우리로서는 JDK 소프트웨어에 이미 포함되어 있으므로 Java Plug-In에 의해서 자동으로 요청하여 다운받을수 있으니 신경쓰지 않아도 된다. 자바 프로그램을 개발이 아닌 그냥 이용하는 목적으로 프로그램이 필요하다면 Java SE Runtime Environment 6 Update 25 버젼만 설치하면 웹브라우저에서 애플릿을 사용하는데 큰 무리가 없을 것이다.
오래전에는 마이크로소프트사의 익스플로러 브라우저에 인스톨 패키지로 자바 프로그램을 구동시키는 자바가상머신(JVM)이 기본적으로 포함되어 있어서 신경쓸 필요가 없었으나 자바개발회사인 썬마이크로 시스템즈에서 소송을 제기한 이후부터는 더이상 허가없이 마음대로 탑재할수 없게 되어서 플랫폼에 개별적으로 따로 설치해야 사용할수 있게 되었다. 위에 링크 걸어놓았다시피 오라클 사이트에서 무료로 프로그램을 제공하고 있으니 쓰는데 특별한 어려움은 없을 것이다.
자 이제 자바 애플릿이 어떤 것인지 이 정도 설명했으면 개요는 충분하리라 본다.ㅎㅎ 실전으로 들어가서 애플릿을 어떻게 사용하는지 배워보기로 하자. 애플릿은 웹상에서 구현되는데 여러분이 보고 있는 웹페이지들은 웹브라우저라는 프로그램으로 html 파일을 로딩한다. 따라서 html 파일 내용에 해당 애플릿 파일이름을 지정해주고 실행하면 관련 애플릿이 작동될 것이다. html 파일 내부를 들여다보면 아래와 같은 형태를 지닌다.
<html>
<head>
</head>
<body bgcolor="000000">
<center>
<applet
code = "Test56.class"
width = "500"
height = "300"
>
</applet>
</center>
</body>
</html>
다른건 몰라도 자바를 배웠으니 Test56.class 라는 문구는 들어올 것이다. 웹페이지에서 Test56.class 자바파일을 구동하라는 것이다. 시작을 알리는 <...>과 끝을 알리는 </...>는 홈페이지를 만들어본 이들이라면 아주 친근할 것인데 html 태그(tag) 보통 홈페이지 태그라고 부르며 html 페이지에서 사용하는 일종의 명령어이다. 여러분이 쓰고있는 대부분의 자바에디터에서는 굳이 관련 태그를 위처럼 손수 작성할 필요없이 html applet 파일 만들기 버튼만 눌려도 자동으로 기본적인 코드들이 나와 쉽게 쓸수 있을 것이다. 이런 홈페이지 태그들은 말그대로 해석하면 어려울 것이 없을 것이다.
우리가 집중해야되는 부분은 중간에 <applet 으로 시작해서 code 에 관련 자바파일을 써주고 웹상에서 어느정도 크기로 관련 애플릿을 실행할지 정해주면 되는데 예제에서는 가로 500 이랑 세로 300 사이즈로 해당 애플릿을 웹페이지에서 작동시킬수 있도록 만들어주었다. 우리가 알아야될 문구는 <applet...>으로 시작해서 </applet>으로 끝난다. 따옴표는 어떤때에 써야되는지 숙지하기 바란다. html 파일이름은 아무거나 해도 되겠지만 분류를 위해서 해당 자바파일의 이름을 따서 예제처럼 Test56.html 로 만들어서 웹브라우저로 실행시키면 된다. 즉 웹브라우저 없는 컴퓨터는 없을테니 그냥 더블클릭하면 될것이다.^^ 그런데 웹브라우저의 특성인 임시파일 저장기능으로 인해 애플릿 수정후에 다시 작동해도 반영이 잘 되지 않을때가 있다. 그러므로 자바 애플릿을 만드는 중에는 자바 자체의 애플릿 실행프로그램(appletviewer.exe)으로 소스를 확인하면서 수정보완해 가는것이 훨씬 편리하다. 이 프로그램은 자발개발툴(JDK)에 포함되어 있으니 따로 설치할 필요는 없다. 실행방법은 아래와 같다.
javac Test56.java
appletviewer Test56.html
그럼 본격적으로 프로그래머의 본분으로 돌아가서 자바 애플릿 프로그램을 만들어 보기로 하자. 일반 자바 프로그램보다는 단순해서 그런지 그 구조에도 약간의 차이가 있다. 일단 메인메소드가 없다. 따라서 자바소스를 보고 이게 애플릿인지 아닌지 바로 판단이 될것이다. 또한 애플릿을 사용하기 위해서는 말그대로 Applet 클래스를 상속받아서 써야하고 해당클래스는 public으로 그리고 상속받은 메소드들도 오버라이드 해주어야 하므로 접근지정자를 public으로 만들어서 쓴다. 상속에 대해서 이미 공부하였으니 코드를 보면 바로 이해가 될것이나 아직 자바의 상속에 대해서 가물가물한 이들은 저번 강좌를 다시 한번 들춰보려할지도 모르겠지만 조금이라도 기억이 난다면 그리 복잡한 애플릿 프로그램을 만드는 것이 아니니 그냥 따라와도 괜찮을 것이다.ㅎㅎ
자바애플릿을 쓰려면 관련 패키지를 import 해야되는데
import java.applet.*;
import java.awt.*;
java.applet 패키지와 java.awt 패키지가 주로 쓰인다.
애플릿의 생명주기(Life Cycle of an Applet)
자기자신을 초기화시키고, public void init( ) {...}
실행을 시작하고, public void start( ) {...}
실행을 중지하고, public void stop( ) {...}
흔적없이 깨끗이 정리한다. public void destroy( ) {...}
Applet 클래스에서 상속받은 메소드를 오버라이드해서 사용
public void init( ) //웹페이지를 처음 로딩해서 초기화할때 호출되는 메소드
public void start( ) //웹페이지를 처음 방문이나 재방문시 호출되는 메소드
public void stop( ) //다른 웹페이지로 이동할때 호출되는 메소드
public void destroy( ) //웹페이지를 닫을때 호출되는 메소드
자바 애플릿 작동원리
init( ) ==> start( ) ==> paint( )
start( ) <==> stop( )
stop( ) ==> destroy( )
부연설명을 하자면 init( ) 메소드는 일반 자바 프로그램에서 메인메소드처럼 처음 시작하는 곳으로 시스템에서 애플릿을 맨 처음으로 로딩할때 쓰이며 start( ) 메소드 이전에 처리되므로 초기화 명령들은 이곳에 넣고 사용하면 된다. start( ) 메소드는 애플릿을 실행할때 쓰이니 다른 페이지를 갔다가 다시 올때도 작동하며 실행후에 자동으로 paint( ) 메소드를 부른다. paint( ) 메소드는 java.awt 패키지에 있으며 웹페이지에서 문자열을 출력할때 필요하므로 약방에 감초처럼 쓰이니 꼭 기억해두기 바란다. stop( ) 메소드는 start의 반대로 실행중지할때 쓰이니 다른 페이지로 갈때 자동으로 작동된다. destroy( ) 메소드는 말그대로 소멸시키는 것이라 웹페이지를 닫을때 작동되며 그 이전에 자동으로 stop( ) 메소드를 실행한후 destroy( ) 메소드를 처리한다. 따라서 시스템이나 메모리에 반환이나 돌려주어야하는 값이 있을시 destroy( ) 메소드를 이용하면 될것이다. 그리고 Applet 클래스에서 상속받은 메소드들은 추상메소드가 아니므로 필요할시 쓰면되고 아니면 안써도 그만이다. 꼭 구현해야될 이유는 없으나 기본적으로 만들어 놓으면 나중에 써먹기는 좋을 것이다.^^ 이제 예제를 보면서 자바 애플릿의 원리를 깨우치는 시간을 가져보겠다.
Test56.html 파일안에 있어야할 내용
<html>
일단 실행은 위의 예제 Test56.java를 컴파일한후에 얻는 Test56.class과 위의 Test56.html 파일을 같은 곳에 넣고 Test56.html 파일을 더블클릭한후 웹브라우저로 실행시켜서 보기 바란다. 이번 예제는 원리이해를 시키기위해 만들어졌으므로 웹페이지를 왔다갔다 해보면서 어떻게 작동해야되는지 보아야하니 애플릿뷰어가 아닌 웹브라우저를 사용하기 바란다.
예제풀이에 들어가겠다. Test56.html 을 웹브라우저로 오픈하면 맨 처음 init( ) 메소드가 작동되면서 변수 a에 0이라는 값을 넣고 변수 s에 "강이의 자바강좌"라는 문자열을 넣고 setBackground( ) 메소드를 실행한다. 이 메소드는 바탕화면의 색깔을 바꾸어주는 메소드로 Component라는 클래스안에 있다. Applet 클래스는 이미 Component 클래스를 상속받아 이루어진 클래스이므로 따로 정의해서 쓸 필요가 없다. 이어서 start( ) 메소드가 작동되고 바탕색이 CYAN으로 되어있으니 웹페이지의 바탕색깔을 CYAN으로 바꾸고 끝낼줄 알았는데 아니나 다를까 이게 끝이 아니다.* start( ) 메소드가 아까 paint( ) 메소드를 자동으로 호출한다고 하였는데 실행해 보았으면 알겠지만 바탕색깔이 노란색이므로 paint( ) 메소드에서 case 1을 실행하였음을 알수 있다. 예제를 공부하다 보면 자바 애플릿의 작동원리가 저절로 깨우쳐질 것이다.ㅎㅎ
자바 애플릿은 아주 간략하게 단원을 정리하고 넘어가려 했는데 예상밖으로 글이 길어졌다. 예제를 이용해 웹페이지를 띄우고 다른 페이지에 갔다가 다시 돌아와 보기도 하고 새로고침도 눌러보는등 해당 애플릿 소스를 다각도로 응용하면서 심층학습은 본인이 직접하길 바란다. 그럼 이만 글을 마치겠다.^^
자바 애플릿은 이용자가 서버에 별도의 요청을 하지 않아도 수행할수 있는데 단순한 애니메이션이나 시계나 달력같은 간단한 계산을 이용한 작업들을 웹상에서 실현할수 있어 응용 프로그램으로 상당히 폭넓게 쓰이고 있다. 애플릿을 만들기 위해서는 두가지 파일이 필요한데 자바 애플릿의 .class 파일과 웹상에서 해당소스를 구현할 .html 파일이 필요하다. 하지만 .class 파일을 만들기 위해서는 컴파일을 해야하니 원소스인 .java 파일이 필요하므로 결국 애플릿을 만들려면 총 세개의 파일을 만들어야된다고 볼수 있다.
자바 애플릿을 실행하려면 자바런타임(JRE: Java Runtime Environment) 프로그램을 다운받아서 설치하여야 되는데 자바 프로그램을 만들고 있는 우리로서는 JDK 소프트웨어에 이미 포함되어 있으므로 Java Plug-In에 의해서 자동으로 요청하여 다운받을수 있으니 신경쓰지 않아도 된다. 자바 프로그램을 개발이 아닌 그냥 이용하는 목적으로 프로그램이 필요하다면 Java SE Runtime Environment 6 Update 25 버젼만 설치하면 웹브라우저에서 애플릿을 사용하는데 큰 무리가 없을 것이다.
오래전에는 마이크로소프트사의 익스플로러 브라우저에 인스톨 패키지로 자바 프로그램을 구동시키는 자바가상머신(JVM)이 기본적으로 포함되어 있어서 신경쓸 필요가 없었으나 자바개발회사인 썬마이크로 시스템즈에서 소송을 제기한 이후부터는 더이상 허가없이 마음대로 탑재할수 없게 되어서 플랫폼에 개별적으로 따로 설치해야 사용할수 있게 되었다. 위에 링크 걸어놓았다시피 오라클 사이트에서 무료로 프로그램을 제공하고 있으니 쓰는데 특별한 어려움은 없을 것이다.
자 이제 자바 애플릿이 어떤 것인지 이 정도 설명했으면 개요는 충분하리라 본다.ㅎㅎ 실전으로 들어가서 애플릿을 어떻게 사용하는지 배워보기로 하자. 애플릿은 웹상에서 구현되는데 여러분이 보고 있는 웹페이지들은 웹브라우저라는 프로그램으로 html 파일을 로딩한다. 따라서 html 파일 내용에 해당 애플릿 파일이름을 지정해주고 실행하면 관련 애플릿이 작동될 것이다. html 파일 내부를 들여다보면 아래와 같은 형태를 지닌다.
<html>
<head>
</head>
<body bgcolor="000000">
<center>
<applet
code = "Test56.class"
width = "500"
height = "300"
>
</applet>
</center>
</body>
</html>
다른건 몰라도 자바를 배웠으니 Test56.class 라는 문구는 들어올 것이다. 웹페이지에서 Test56.class 자바파일을 구동하라는 것이다. 시작을 알리는 <...>과 끝을 알리는 </...>는 홈페이지를 만들어본 이들이라면 아주 친근할 것인데 html 태그(tag) 보통 홈페이지 태그라고 부르며 html 페이지에서 사용하는 일종의 명령어이다. 여러분이 쓰고있는 대부분의 자바에디터에서는 굳이 관련 태그를 위처럼 손수 작성할 필요없이 html applet 파일 만들기 버튼만 눌려도 자동으로 기본적인 코드들이 나와 쉽게 쓸수 있을 것이다. 이런 홈페이지 태그들은 말그대로 해석하면 어려울 것이 없을 것이다.
우리가 집중해야되는 부분은 중간에 <applet 으로 시작해서 code 에 관련 자바파일을 써주고 웹상에서 어느정도 크기로 관련 애플릿을 실행할지 정해주면 되는데 예제에서는 가로 500 이랑 세로 300 사이즈로 해당 애플릿을 웹페이지에서 작동시킬수 있도록 만들어주었다. 우리가 알아야될 문구는 <applet...>으로 시작해서 </applet>으로 끝난다. 따옴표는 어떤때에 써야되는지 숙지하기 바란다. html 파일이름은 아무거나 해도 되겠지만 분류를 위해서 해당 자바파일의 이름을 따서 예제처럼 Test56.html 로 만들어서 웹브라우저로 실행시키면 된다. 즉 웹브라우저 없는 컴퓨터는 없을테니 그냥 더블클릭하면 될것이다.^^ 그런데 웹브라우저의 특성인 임시파일 저장기능으로 인해 애플릿 수정후에 다시 작동해도 반영이 잘 되지 않을때가 있다. 그러므로 자바 애플릿을 만드는 중에는 자바 자체의 애플릿 실행프로그램(appletviewer.exe)으로 소스를 확인하면서 수정보완해 가는것이 훨씬 편리하다. 이 프로그램은 자발개발툴(JDK)에 포함되어 있으니 따로 설치할 필요는 없다. 실행방법은 아래와 같다.
javac Test56.java
appletviewer Test56.html
그럼 본격적으로 프로그래머의 본분으로 돌아가서 자바 애플릿 프로그램을 만들어 보기로 하자. 일반 자바 프로그램보다는 단순해서 그런지 그 구조에도 약간의 차이가 있다. 일단 메인메소드가 없다. 따라서 자바소스를 보고 이게 애플릿인지 아닌지 바로 판단이 될것이다. 또한 애플릿을 사용하기 위해서는 말그대로 Applet 클래스를 상속받아서 써야하고 해당클래스는 public으로 그리고 상속받은 메소드들도 오버라이드 해주어야 하므로 접근지정자를 public으로 만들어서 쓴다. 상속에 대해서 이미 공부하였으니 코드를 보면 바로 이해가 될것이나 아직 자바의 상속에 대해서 가물가물한 이들은 저번 강좌를 다시 한번 들춰보려할지도 모르겠지만 조금이라도 기억이 난다면 그리 복잡한 애플릿 프로그램을 만드는 것이 아니니 그냥 따라와도 괜찮을 것이다.ㅎㅎ
자바애플릿을 쓰려면 관련 패키지를 import 해야되는데
import java.applet.*;
import java.awt.*;
java.applet 패키지와 java.awt 패키지가 주로 쓰인다.
애플릿의 생명주기(Life Cycle of an Applet)
자기자신을 초기화시키고, public void init( ) {...}
실행을 시작하고, public void start( ) {...}
실행을 중지하고, public void stop( ) {...}
흔적없이 깨끗이 정리한다. public void destroy( ) {...}
Applet 클래스에서 상속받은 메소드를 오버라이드해서 사용
public void init( ) //웹페이지를 처음 로딩해서 초기화할때 호출되는 메소드
public void start( ) //웹페이지를 처음 방문이나 재방문시 호출되는 메소드
public void stop( ) //다른 웹페이지로 이동할때 호출되는 메소드
public void destroy( ) //웹페이지를 닫을때 호출되는 메소드
자바 애플릿 작동원리
init( ) ==> start( ) ==> paint( )
start( ) <==> stop( )
stop( ) ==> destroy( )
부연설명을 하자면 init( ) 메소드는 일반 자바 프로그램에서 메인메소드처럼 처음 시작하는 곳으로 시스템에서 애플릿을 맨 처음으로 로딩할때 쓰이며 start( ) 메소드 이전에 처리되므로 초기화 명령들은 이곳에 넣고 사용하면 된다. start( ) 메소드는 애플릿을 실행할때 쓰이니 다른 페이지를 갔다가 다시 올때도 작동하며 실행후에 자동으로 paint( ) 메소드를 부른다. paint( ) 메소드는 java.awt 패키지에 있으며 웹페이지에서 문자열을 출력할때 필요하므로 약방에 감초처럼 쓰이니 꼭 기억해두기 바란다. stop( ) 메소드는 start의 반대로 실행중지할때 쓰이니 다른 페이지로 갈때 자동으로 작동된다. destroy( ) 메소드는 말그대로 소멸시키는 것이라 웹페이지를 닫을때 작동되며 그 이전에 자동으로 stop( ) 메소드를 실행한후 destroy( ) 메소드를 처리한다. 따라서 시스템이나 메모리에 반환이나 돌려주어야하는 값이 있을시 destroy( ) 메소드를 이용하면 될것이다. 그리고 Applet 클래스에서 상속받은 메소드들은 추상메소드가 아니므로 필요할시 쓰면되고 아니면 안써도 그만이다. 꼭 구현해야될 이유는 없으나 기본적으로 만들어 놓으면 나중에 써먹기는 좋을 것이다.^^ 이제 예제를 보면서 자바 애플릿의 원리를 깨우치는 시간을 가져보겠다.
Test56.html 파일안에 있어야할 내용
<html>
<head>
</head>
<body bgcolor="000000">
<center>
<applet
code = "Test56.class"
width = "500"
height = "300"
>
</applet>
</center>
</body>
</html>
일단 실행은 위의 예제 Test56.java를 컴파일한후에 얻는 Test56.class과 위의 Test56.html 파일을 같은 곳에 넣고 Test56.html 파일을 더블클릭한후 웹브라우저로 실행시켜서 보기 바란다. 이번 예제는 원리이해를 시키기위해 만들어졌으므로 웹페이지를 왔다갔다 해보면서 어떻게 작동해야되는지 보아야하니 애플릿뷰어가 아닌 웹브라우저를 사용하기 바란다.
예제풀이에 들어가겠다. Test56.html 을 웹브라우저로 오픈하면 맨 처음 init( ) 메소드가 작동되면서 변수 a에 0이라는 값을 넣고 변수 s에 "강이의 자바강좌"라는 문자열을 넣고 setBackground( ) 메소드를 실행한다. 이 메소드는 바탕화면의 색깔을 바꾸어주는 메소드로 Component라는 클래스안에 있다. Applet 클래스는 이미 Component 클래스를 상속받아 이루어진 클래스이므로 따로 정의해서 쓸 필요가 없다. 이어서 start( ) 메소드가 작동되고 바탕색이 CYAN으로 되어있으니 웹페이지의 바탕색깔을 CYAN으로 바꾸고 끝낼줄 알았는데 아니나 다를까 이게 끝이 아니다.* start( ) 메소드가 아까 paint( ) 메소드를 자동으로 호출한다고 하였는데 실행해 보았으면 알겠지만 바탕색깔이 노란색이므로 paint( ) 메소드에서 case 1을 실행하였음을 알수 있다. 예제를 공부하다 보면 자바 애플릿의 작동원리가 저절로 깨우쳐질 것이다.ㅎㅎ
자바 애플릿은 아주 간략하게 단원을 정리하고 넘어가려 했는데 예상밖으로 글이 길어졌다. 예제를 이용해 웹페이지를 띄우고 다른 페이지에 갔다가 다시 돌아와 보기도 하고 새로고침도 눌러보는등 해당 애플릿 소스를 다각도로 응용하면서 심층학습은 본인이 직접하길 바란다. 그럼 이만 글을 마치겠다.^^
피드 구독하기:
글 (Atom)