안경잡이개발자

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