로그인 화면
회원가입 화면
음성채팅 화면
닉네임 변경 화면
어려웠던 점 | 해결과정 |
---|---|
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 웹 앱 개발을 하게 된다면 잘 할 수 있을 것 같음. |