안경잡이개발자

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
반응형