프로젝트 소개

OwnChat은 통신을 제어하려는 사용자를 위한 자체 호스팅 데스크톱 채팅 애플리케이션입니다. 클라이언트-서버-클라이언트 아키텍처를 따르며, 여러 데스크톱 클라이언트가 중앙 서버에 연결되어 실시간으로 메시지를 중계합니다. 애플리케이션은 Java Swing(사용자 인터페이스), Java Sockets(네트워킹), Oracle Database(영구 저장)로 구축되었습니다. 주요 기능은 다음과 같습니다: - **계정 생성 및 로그인**: 사용자 자격 증명은 `USER_DETAILS` 테이블에 저장되며 로그인 중에 검증됩니다. - **연락처 관리**: 사용자는 연락처를 추가하고, 연락처 목록을 보며, 채팅을 시작하기 전에 연락처가 온라인인지 확인할 수 있습니다. - **실시간 메시징**: 각 로그인 클라이언트는 서버에 소켓을 등록합니다. 수신자가 채팅 창을 열고 있으면 메시지가 실시간으로 중계됩니다. 모든 메시지는 `CHAT_HISTORY`에 기록됩니다. - **채팅 기록**: 연락처와의 채팅을 다시 열면 이전 메시지가 발신자별 색상으로 구분되고 날짜/시간 헤더와 함께 재생됩니다. - **테마**: 사용자는 Metal, Dark, Light 모양 중에서 선택할 수 있습니다. 선택한 테마는 `SETTINGS` 테이블에 사용자별로 저장되며 로그인 시 자동으로 적용됩니다. - **온라인/오프라인 상태 추적**: 서버는 사용자가 연락처 목록을 열거나 닫거나 로그인/로그아웃할 때마다 `LOG_STATUS`를 업데이트하며, 창 닫기 시 자동 로그아웃 후크를 포함합니다. - **구성 가능한 서버 IP**: 클라이언트는 간단한 설정 화면을 통해 모든 서버 호스트를 지정할 수 있습니다. - **정보 화면**: 개발자 및 브랜딩 정보를 표시합니다. 프로젝트는 클라이언트 애플리케이션, 서버, 데이터베이스 스키마의 세 가지 주요 부분으로 구성됩니다. 클라이언트는 다양한 화면(환영, 로그인, 계정 생성, 설정, 연락처, 채팅 창 등)을 위한 여러 Java 클래스로 구성됩니다. 서버는 다중 스레드로, 각 클라이언트 연결을 별도의 스레드에서 처리하며, 메시지 중계를 위해 `ConcurrentHashMap`을 사용하여 연결된 클라이언트를 추적합니다. 데이터베이스 스키마에는 사용자, 설정, 로그인 상태, 연락처, 채팅 기록을 위한 테이블이 포함되며, 새 사용자에 대한 기본 설정 및 초기 로그아웃 상태를 자동으로 시드하는 트리거가 있습니다. 설정은 제공된 SQL 스크립트를 실행하여 Oracle 데이터베이스를 구축한 다음, 서버 실행 파일(OwnChatS-Portable.zip)을 실행하고 데이터베이스 자격 증명을 입력하고, 마지막으로 클라이언트 실행 파일(OwnChat-Portable.zip)을 실행하고 서버 IP를 설정하고 계정을 만들어 채팅하는 것을 포함합니다. 로드맵에는 Servlets, JSP, J2EE, Spring Boot 및 HTML/CSS/Bootstrap 프론트엔드를 사용한 향후 웹 기반 버전이 언급되어 있습니다.