[JavaFX GUI 채팅 프로그램] #1 서버 기능 모듈 개발하기

박소미·2023년 8월 23일

JavaFX

목록 보기
1/4
post-thumbnail

자바 FX(Java FX)를 이용한 서버 및 클라이언트 채팅 프로그램 개발할 것이다.


Main.java



Client.java


ExecutorService
쓰레드 풀(Thread Pool)을 이용하기 위해서 Executer Service 라이브러리를 사용한다.

  • 여러 개의 쓰레드를 효율적으로 관리하기 위해 사용하는 대표적인 라이브러리이다.

  • 기본적으로 쓰레드 숫자에 제한을 두기 때문에 쓰레드풀로 쓰레드를 처리하게 되면 갑작스럽게 클라이언트 숫자가 폭주해도 쓰레드의 숫자에는 제한이 있어서 성능 저하를 방지한다.

  • 한정된 자원을 이용해 안정적으로 서버를 운영하기 위해 쓰래드 풀 기법을 사용한다.


    쓰레드(Thread)

  • 자바에서 쓰레드(Thread)를 사용하는 경우, 쓰레드 풀(Thread Pool)을 사용하면 효율적으로 쓰레드를 관리할 수 있다.

  • 쓰레드 풀은 미리 생성된 쓰레드를 관리하며, 작업이 들어오면 해당 쓰레드를 할당하여 작업을 처리한다. 이를 통해 쓰레드 생성과 소멸에 따른 오버헤드를 줄일 수 있다


    Socket

  • 프로세스간 통신을 담당한다.

  • Socket 객체 안에 Inputstream과 OutputStream이 있어 이를 통해 통신(입출력)한다.


    ServerSocket

  • 포트와 연결(bind)하여 입력을 기다렸다가 입력이 들어오면 Socket을 생성해 데이터를 주고 받을 수 있게 해주는 객체이다.

  • 하나의 포트에 하나의 ServerSocket만 연결할 수 있으나 프로토콜이 다르면 같은 포트를 공유할 수 있다.


    Vector

  • ArrayList 대신 Vector를 사용한 이유는 멀티쓰레드 환경에서 벡터는 synchronized 처리가 돼있고 리스트는 안 돼있어서 Vector를 사용한다.
    +) synchronized : 다른 쓰레드의 침범을 막기 위해 임계 영역을 설정한다.


    InetSocketAddress

  • 이 클래스는 네트워크 연결을 만들거나 관리할 때 IP 주소와 포트 번호를 나타내기 위해 사용된다.

  • 주로 소켓 프로그래밍에서 자주 사용한다.


    printStackTrace( )

  • 예외 발생 당시의 호출 스택에 있었던 메서드의 정보와 예외 메시지를 출력한다.


    Runnable

  • 쓰레드를 이용해서 실행될 수 있는 클래스를 위해서 정의해 놓은 인터페이스이다.

  • Runnable 인터페이스는 단일 메소드 run( )만을 가지며, 이 메소드는 쓰레드가 실행될 때 호출된다. 따라서 run( ) 메소드에 원하는 작업을 구현하고, 쓰레드가 시작되면 해당 작업이 수행됩니다.


    getRemoteSocketAddress()

  • Socket 클래스에서 제공되며, 소켓을 통해 연결된 원격 호스트의 IP 주소와 포트 번호를 확인하기 위해 사용된다.

  • Socket 클래스는 네트워크 통신을 위한 소켓을 나타내며, 클라이언트와 서버 간의 데이터 교환을 처리하는 데 사용된다.


    Iterator

  • Iterator는 컬렉션을 순회하고 요소에 접근하는 데 사용되는 인터페이스이다.

  • Iterator를 사용하면 컬렉션의 각 요소에 대한 반복 작업을 수행할 수 있다.

  • 일반적으로 Iterator는 hasNext() 메서드로 다음 요소의 존재 여부를 확인하고, next() 메서드로 다음 요소를 반환한다. 또한 remove() 메서드를 사용하여 컬렉션에서 현재 요소를 제거할 수도 있다.


    InputStream/OutputStream

  • InputStream과 OutputStream은 Java에서 데이터를 읽고 쓰는 데 사용되는 추상 클래스이다.

  • 이러한 클래스들은 입출력(I/O) 작업을 위한 기본적인 인터페이스를 제공하며, 다양한 입출력 소스와 대상에 대한 데이터 흐름을 다루기 위해 구체적인 서브클래스들을 사용한다.

0개의 댓글