안경잡이개발자

728x90
반응형

  이번 시간에도 지난 시간에 이어서 자바 FX(Java FX)를 이용한 서버 및 클라이언트 채팅 프로그램을 개발하도록 합시다. 이번 시간이 마지막 시간입니다. 클라이언트 프로그램의 GUI를 작업하도록 할 것입니다. 서버로 메시지를 전송하고, 서버로부터 메시지를 받는 전반적인 과정이 모두 그래픽 환경에서 출력될 것입니다. 클라이언트 프로그램 또한 프로그램 자체가 작고 디자인 구성요소가 별로 없다는 점에서 자바 소스코드로 간단하게 작성할 수 있을 것입니다.


  바로 클라이언트 프로그램을 실질적으로 작동시키는 start() 함수를 작업해보도록 하겠습니다.

 


  소스코드가 조금 긴 감이 있는데요. 클라이언트의 경우에는 UI 요소가 많기 때문에 어쩔 수 없습니다. 보시면 접속을 할 때 clientStart() 메소드를 실행해서 서버에 연결한 이후에 메시지를 전송하게 되면 서버로 send() 메소드를 이용해 통신하게 되는 것을 알 수 있습니다. 실행 결과는 다음과 같습니다.



  실제로 상용화를 위해서는 갖가지 예외 처리를 더욱 자세하게 해주어야 합니다. 일단 전반적인 작동이 원활히 이루어지는 것을 확인했으므로 프로젝트를 완료하겠습니다.

728x90
반응형

728x90
반응형

  이번 시간은 자바 FX(Java FX)를 이용한 서버 및 클라이언트 채팅 프로그램 개발하기의 네 번째 시간입니다. 바로 클라이언트 기능 모듈을 개발하는 것입니다. 일단 클라이언트 프로그램이라고 할 수 있는 Chat Client 프로젝트를 생성해주도록 합시다. 기본적으로 GUI 멀티 채팅 시스템에서 채팅 클라이언트(Chat Client) 프로그램은 서버로 접속하여 서버와 통신하는 구조를 가집니다. 바로 한 번 이클립스에서 JavaFX 프로젝트를 새롭게 생성하여 이름을 Chat Client라고 설정해줍시다. 서버 프로그램을 만들었을 때와 비슷하죠.



  바로 프로젝트를 생성해주겠습니다. JavaFX로요.



  위와 같이 이름을 Chat Client라고 설정해줍시다.



  이제 위와 같이 Main.java 클래스를 살펴보도록 합시다. 다음과 같이 틀을 잡아주세요.



  이제 바로 세부 메소드들을 작업해주도록 하겠습니다. 클라이언트 프로그램에서는 쓰레드 풀을 사용할 필요가 없기 때문에 기본적으로 Thread 클래스를 이용해서 쓰레드 모듈을 처리합니다.



  먼저 위와 같이 startClient() 메소드를 작업합니다. 클라이언트 프로그램을 동작하게 해주는 메소드입니다.



  이후에 서버로부터 메시지를 받거나 보내는 receive() 함수와 send() 함수를 작업해줍니다. 단순하게 InputStream과 OutputStream을 이용해서 서버와 통신하는 모듈이 작성된 것을 알 수 있습니다.



  이제 위와 같이 stopClient()를 작업해주시면 끝입니다.

728x90
반응형

728x90
반응형

  이번 시간에도 지난 시간에 이어서 자바 FX(Java FX)를 이용한 서버 및 클라이언트 채팅 프로그램을 개발하도록 합시다. 지난 시간에는 서버 프로그램의 서버 기능 모듈을 작업하는 시간을 가졌습니다. 이번 시간에는 실제로 GUI 환경에서 해당 서버가 작동하고 있는지의 여부를 출력하도록 해보겠습니다. 자바 FX도 다른 GUI 환경의 프로그램 도구와 흡사하게 작동합니다. 일반적으로 자바 FX는 FXML이라는 별도의 디자인 관련 소스코드를 사용하는데 특별한 GUI가 필요한 건 아니므로 소스코드 상으로 작업해보겠습니다.


  바로 실제로 서버 GUI를 작동시키는 start() 프로그램을 작업해보도록 할게요.



  위와 같이 작업하면 됩니다. 실행 결과는 다음과 같습니다.




728x90
반응형

728x90
반응형

  이번 시간은 자바 FX(Java FX)를 이용한 서버 및 클라이언트 채팅 프로그램 개발하기의 두 번째 시간입니다. 바로 서버 기능 모듈을 개발하는 것입니다. 일단 서버 프로그램이라고 할 수 있는 Chat Server 프로젝트를 생성해주도록 합시다. 기본적으로 GUI 멀티 채팅 시스템에서는 채팅 서버(Chat Server) 프로그램은 클라이언트(Client) 간의 중계자 역할을 수행합니다. 나아가 쓰레드 풀(Thread Pool)을 이용하기 위해서 Executer Service 라이브러리를 사용합니다.


  바로 이클립스에서 하나의 프로젝트를 생성해주도록 합시다.



  위와 같이 프로젝트 부분에서 마우스 우클릭 -> New -> Other에 들어갑니다.



  바로 위와 같이 JavaFX 프로젝트를 하나 생성해줍시다.



  프로젝트의 이름은 Chat Server라고 지어줄게요.

  


  처음에 프로젝트를 생성하면 바로 위와 같이 application 패키지가 존재하고 그 안에 Main 클래스가 존재할 겁니다.



  가장 먼저 위와 같이 application 패키지 내에 하나의 Client 라는 이름의 클래스를 생성해주겠습니다.



  이제 위와 같이 Main 클래스의 틀을 잡아보도록 합시다. 기본적으로 우리 프로젝트에서는 하나의 서버 프로그램은 오직 하나의 서버만 작동시킬 수 있도록 했습니다. 구현을 하고자 한다면 지난 시간에 보여드렸던 다이어그램처럼 하나의 서버 프로그램에서 여러 개의 서버 쓰레드를 작동시킬 수는 있지만 일반적으로는 하나의 서버 프로그램은 하나의 서버 모듈을 구동시킨다는 점에서 이렇게 개발하고자 합니다.


  간단히 부가설명을 하자면 ExecutorService는 여러 개의 쓰레드를 효율적으로 관리하기 위한 대표적인 라이브러리입니다. Thread Pool로 쓰레드를 처리하게 되면 기본적인 쓰레드 숫자의 제한을 두기 때문에 갑작스런 Client 폭증에도 쓰레드의 수에는 제한이 있어 서버의 성능 저하를 방지할 수 있습니다. 한정된 자원을 '안정적으로' 관리하기 위한 대비책이죠.


  바로 한 번 Client 클래스를 작성해보도록 합시다.


 먼저 바로 위와 같이 receive() 함수를 작성할 수 있습니다. 반복적으로 해당 클라이언트로부터 메시지를 전달 받는 메소드입니다. 소름 돋는 부분은 메시지를 전달 받자마자 곧바로 모든 클라이언트에게 그대로 전달해준다는 것입니다.



  이후에 send() 함수입니다. 특정한 클라이언트에게 특정 시기에 메시지를 전달하는 메소드입니다. 이제 특정한 클라이언트가 접속하게 되면 바로 위의 receive() 메소드와 send() 메소드를 이용해 메시지를 전달 받고 전달 할 수 있습니다.




  이제 위와 같이 serverStart() 함수를 작성합시다.



  마지막으로 stopServer() 메소드입니다. 이 메소드는 서버 작동 종료 이후에 전체 자원을 할당 해제해주는 메소드입니다. 사실 이 메소드의 작성 여부가 서버 프로그램의 품질에 큰 영향을 미친다고 할 수 있습니다. 자원 해제는 굉장히 중요합니다.

728x90
반응형

728x90
반응형

  이번에 진행해 볼 미니 프로젝트는 자바 FX(Java FX)를 이용한 서버 및 클라이언트 채팅 프로그램 개발하기입니다. 자바 FX로 개발 된 프로그램으로는 무엇이 있을까요? 바로 대표적인 것이 이클립스(Eclipse) 개발환경입니다. 우리가 흔히 자바 프로그래밍을 연습하기 위해 사용하는 개발 도구인 이클립스 또한 사실은 자바로 개발되었다는 거죠. 알 바 아니라고요? 바로 시작해보도록 하겠습니다.


  기본적으로 서버와 클라이언트를 포함하는 프로그램이 있다면, 응당 서버와 클라이언트는 서로 다른 컴퓨터 환경에서 작동을 한다고 보시면 됩니다. 실제로 프로그램을 구현한 이후에는 서버 프로그램은 실제 서버(Server)에서 작동시키고, 클라이언트는 해당 서버에 접속을 하는 식으로 개발을 해야 하는 겁니다.


  또한 하나의 서버 프로그램은 여러 개의 서버를 구동시킬 수 있습니다. 하나의 서버 단위마다 쓰레드를 이용해서 작동시킬 수 있습니다. 이 때는 연결을 받아야 하는 것이므로 특정한 포트 번호를 설정시켜줘야 할 것입니다. 이후에 특정한 서버로 클라이언트가 접속하면 어떻게 처리할 수 있을까요? 바로 다음과 같이 해당 서버 쓰레드에서 단위 쓰레드를 클라이언트의 갯수만큼 만들어주어 클라이언트가 접속할 때마다 쓰레드를 실행하여 작동시킬 수 있습니다.



  다만 여기에서 단순하게 쓰레드만 돌리면 상당히 프로그램이 위험한 상태에 처할 수 있습니다. 그래서 일반적으로 쓰레드 풀(Thread Pool) 기법을 사용하여 쓰레드를 관리할 수 있습니다. 다음 시간부터 제대로 개발을 해 볼 건데요. 전체적인 구성은 바로 위와 같습니다. 우리는 서버 프로그램과 클라이언트 프로그램을 모두 개발할 것입니다. 실제로 만약에 이 프로그램을 배포한다면 개발자의 컴퓨터에서는 서버 프로그램을 돌릴 수 있고 다른 컴퓨터에서는 클라이언트 프로그램을 돌리면 됩니다.


  필요한 개발 도구는 다음과 같습니다.


  ▶ 이클립스 개발 환경: http://www.eclipse.org/



  ▶ JavaFX Scene Builder: http://www.oracle.com/technetwork/java/javafxscenebuilder-1x-archive-2199384.html



  ▶ 이클립스 JavaFX 플러그 인


728x90
반응형