• 싱글턴 디자인 패턴과 소켓 통신 구현을 활용한 유동 인구 관리 프로그램

    2021. 2. 10.

    by. 공상개발

     

    Development of a floating population management program
    using
    singleton design pattern
    and
    socket communication implementation

     

    요약

     

    싱글턴 디자인 패턴과 소켓 통신 구현을 활용해 유동 인구 관리 프로그램.

    프로그램의 기능은 인원 정보 추가, 검색, 수정, 삭제, 정보 갱신, 정보 저장으로 나뉜다.

    총 6가지의 기능이 있으며 이 프로그램을 개발한 목적인 프로그램 내에서 직관적으로 인원을 관리할 수 있도록

    기능을 구성하였으나, 필요해 의해 여러 기능을 추가 및 확장할 수 있다.

     


    1. 서론

     

    전염병 확산을 막기 위해 정부는 네이버 QR 코드, 출입 명부 등을 작성해 특정 장소에

    머무른 유동 인구를 관리하고 있다. 이와 같은 상황 속에서 유동 인구 간 접촉을 더욱 방지할 수 있도록,

    PC 형태에서 명부를 작성할 수 있는 프로그램을 제안하고자 한다.

     


    2. 관련 기술

     

    2.1 싱글턴 디자인 패턴

     

    디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도

    실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.

    하나의 프로그램을 여러 명의 인원이 공유하며 사용하는 경우를 가정했을 때,

    싱글턴 패턴이 적합하다고 판단한다. 

    싱글턴 패턴

     

    위 코드는 싱글턴 패턴이 적용된 코드이다.

    기본 생성자를 private를 사용하여 생성을 불가능하게 하고

    getInstance를 통해서만 생성이 가능하다. getInstance는 내부적으로 생성되지 않았다면 생성하고,

    기존에 생성된 값이 존재한다면

    생성된 인스턴스를 리턴하는 형태로 프로그램 전반에 걸쳐 하나의 인스턴스를 유지한다.

     

     

    2.2 소켓 통신

     

    TCP/IP 통신을 위해 소켓(Socket) 활용.

    각 포트를 사용하여 통신을 수행하며, 데이터를 주고받는다.

     

    1. 서버 소켓과 클라이언트 소켓을 생성.

     

    2. 서버 소켓의 역할은 클라이언트 소켓의 역할은 클라이언트 소켓의 연결 요청을 대기하고,

    연결 요청이 들어오면 클라라이언트 소켓을 생성하여 통신이 가능하게 된다.

     

    3. 클라이언트 소켓은 대기 없이 사용 가능하며, 데이터 송수신이 일어나는 곳은 클라리언트 소켓이다.

     

    서버 클라이언트 실행 결과

     

    위 코드를 예로 든다면 port 번호에 6000을 부여하고 출입구 역할로 사용.

    소켓은 port=6000을 사용하여 통신을 수행(데이터를 주고받는다).

     

     

    2.3 Thread

     

    Thread를 이용한 클라이언트 구현, IP와 port를 지정하고, Socket 라이브러리 활용

    Thread code

     

     

     

    2.4 JFrame

    GUI를 통한 프로그램 시각화

    java.awt, javax.swing import 코드

     

     

     


    3. 시스템 설계

     

    3.1 시스템 구조

     

     

    3.2 시스템 흐름

     

    DuplicateException_flowchart

     

     

    EmpClient_flowchart.1,2

     

     

    EmpMgrImpI_flowchart.1

     

     

    EmpMgrImpI_flowchart.2,3

     

     

    EmpServer_flowchart.1,2

     

     

    EmpUI_flowchart.1,2,3,4

     

    EmpUI_flowchart.5

     

     

    IEmpMgr_flowchart.1

     

     

    population_flowchart.1

     

    RecordNotFoundException_flowchart.1

     


    4. 구현 

     

    4.1 구현

     

     

     


    5. 결론

     

    필요에 따라서 여러 기능을 추가할 수 있어 확장성 또한 가지고 있다고 생각한다.

    다만, 배포가 가능할 정도로 완성도를 높이려면 시간이 더 필요하다.

    현재 위 프로그램의 문제점은 클래스 로딩 시점이 아닌 인스턴스가 필요하여 요청할 때, 생성되는 형태로 작성되었다.

    그렇기 때문에 멀티 쓰레드 환경에서 취약하다고 볼 수 있다는 점.

    여러 번 동작을 바꾸어서 구현시키려 해보았지만, 코드가 복잡해져 오류가 발생한다.

    이러한 점이 다소 아쉬움으로 남는다.

     

    댓글