무야호 - Java 1:N 음성 대화 애플리케이션

김시현 Si Hyeon, Kim·2022년 7월 17일
0

Portfolio

목록 보기
2/8
post-custom-banner

1:N 실시간 음성대화 프로그램 및 채팅 프로그램

- 필수 요소

  1. JAVA로 구현하여야 함.
  2. 음성 실시간 통신이 되어야됨
  3. 로그인/로그아웃 구현
  4. 실시간 채팅 구현
  5. 1 : N으로 통신 가능하여야 함.

- 담당 업무 & 팀 구성

  1. 서버사이드 전체
  2. DB 설계
  3. Java Swing을 이용한 프론트 연결

- 무야호에 사용된 기술 스택

  • Java
  • tcp/ip Socket 통신
  • Swing
  • MongoDB
  • JMF 라이브러리

- 초기 디자인 레이아웃

  • 수정과 수정을 거듭해서 로그인 페이지 + 실시간 대화 페이지 두가지로 구성

- 유스케이스


- UML

  • 서버
  1. 서버는 클라이언트가 접속할 때 마다 Thread를 상속받는 ServerThread를 계속 만들어서 클라이언트와 1:1로 통신하게 됨.
  • 클라이언트
  1. Sender와 Receiver로 구현하여 실시간 음성 및 채팅을 주고받음
  2. Swing을 사용하기 때문에 JFrame을 상속받고 있는 클래스들이 존재하고 사용자가 보게 되는 화면을 생성함.
  3. 마찬가지로 서버와 계속 연결을 유지하기 위해서 Thread를 생성하게 됨.

- 순차 다이어그램

<정상 흐름만 표시>



- DB 구현

  • MongoDB라는 NoSql을 사용하였음.
  • 회원정보만 담고 있으면 되기 때문에 쉽게 사용할 수 있어야 함.

최종 결과물

  • 로그인 화면

  • 회원가입 화면

  • 음성채팅 화면

  • 닉네임 변경 화면

어려웠던 점 & 해결과정

어려웠던 점해결과정
Socket 통신실시간 채팅을 구현하기 위해서 tcp/ip Socket을 이용하여 서버와 연결하여야 했는데, 눈으로 직접 보면서 할 수 있는 것이 아니어서 굉장히 공부를 많이 했음. 또한 IP를 이용하여 직접적으로 연결하다보니 PC에서는 보안 수준 때문에 방화벽 설정도 같이 해주어야 했음. 마지막으로 테스트를 진행하는 것이 Local 환경에서만 가능하였음. 다른 네트워크를 사용하는 사람과 연결하기 위해서는 공인 IP 주소도 알아야 했고, 포트 포워딩까지 완벽하게 해주어야 Java 프로그램에 연결이 가능하였음. 기술 블로그에서 비슷한 프로젝트를 진행한 예시를 많이 참고하였음. IP를 이용한 통신에 대해서 윤곽을 많이 잡을 수 있었음
Java Multi-Thread자바 프로그래밍을 하는 이유로는 멀티 쓰레드를 사용할 수 있기 때문이라고 공부하였음. 실제로 멀티 쓰레드를 이용하여 서버와 계속 연결을 유지하는 형태로 개발을 진행하였음. 문제는 다중 스레드에서 자원을 공유하게 되면 에러가 발생하게 됨. 예를 들면 같은 자원에 여러 스레드에서 동시에 접근하게 되면 제대로 일을 할 수가 없음. java에서는 이러한 것을 해결하기 위해서 synchronized 메소드를 이용해서 동기적으로 처리할 수 있었음. 추후하는 프로젝트에서 동기 작업 방식을 이해하고 있는 것은 많이 도움이 되었던 것 같음.
JMF너무 오래전 라이브러리다 보니까 참고할 수 있는 문헌이 없었음. Git에서 JMF를 사용한 코드를 찾아서 참고를 할 수 있었음. 채팅 같은 경우 tcp/ip 소켓 통신을 이용하여 데이터를 주고받을 수 있었지만, JMF는 기본적으로 rtp를 이용한 통신을 하고 있었음. RTP의 경우 실시간 미디어 통신에 적합한 통신 프로토콜이라고 함. 원래는 누가 말을 하고 있는지 표시를 하여야 하는데, RTP 패킷을 컨트롤하지 못하여 그것까지 구현하지는 못하였음. 라이브러리의 메소드를 이용하면 자동으로 RTP 패킷을 생성하여 일정 용량이 되면 계속 전송해주기 때문에 결과적으로 음성통신은 구현 완료 하였음.
Java 프로그래밍클래스가 많아지고, 모듈화를 잘 해보려 하였으나 제대로 하지는 못하였음. 서로 다른 클래스간에 공통 변수를 공유하고 있는 경우도 있음. 시간이 너무 촉박했고, JMF 라이브러리에 대한 사용법을 익히는데 시간이 너무 소비되어 아쉬웠음. 나중에 다른 java 웹 앱 개발을 하게 된다면 잘 할 수 있을 것 같음.

Git 보러가기

소스코드 보러가기

profile
최악의 환경에서 최선을 다하자!!
post-custom-banner

0개의 댓글