💡My project/네이트톡 : Java 소켓 통신 프로젝트

개인 프로젝트(1) -<소켓 통신을 이용한 채팅 프로그램 만들기(4)>

Song hyun 2024. 5. 31. 14:51
728x90
반응형

개인 프로젝트(1) -<소켓 통신을 이용한 채팅 프로그램 만들기(4)>

1. 현황과 구현해야 할 기능 정리

2. 프로젝트 정리

3. 돌아보기

4. 깃허브 및 영상 자료


1. 현황과 구현해야 할 기능 정리

-현황: 서버소켓-소켓 연결, 방 생성 및 퇴장, 채팅 기능 구현

-구현하고 싶었던 기능(목표): 이모티콘 및 사진 파일 전송, 서버 관리자 기능 추가, 채팅 로그 저장 기능 추가

 

자바 소켓 통신 프로그램 만들기의 마지막 날이다. 부족한 부분들이 많았지만 마지막까지 최선을 다하고 싶었다.

 

전날 두 시간 내내 붙잡고 있던 이모티콘 전송, 사진 파일 전송, 서버 관리자 기능 추가(방 삭제, 멤버 강퇴, 채팅 로그 읽기 등등), 채팅 로그 저장 등을 구현하고 싶었지만... 시간적인 한계 때문에 모두 구현하지 못했다. 

프로젝트가 끝난 뒤라도 코드를 더 추가하여, 기능을 보강하고 싶었기 때문에 보이는 부분만으로라도 틀을 잡아두었다.

 

 그리고 어제, 서버Frame-tabbedPane의 화면이 제대로 보이지 않는 오류가 있었는데, 다시 천천히 읽어보니 내가 다른 panel을 연결해두어서 그랬던 것이었다. 수정하니, 내가 구상한 것처럼 화면이 제대로 나왔다. 기본적인 오류를 정리하고 나니, 마감기한이 다 되어 프로젝트를 마무리하게 되었다.


2. 프로젝트 정리

(1) 구현 기능 및 인터페이스 

 

구현된 기능은 아래와 같다. 내가 초등학생 시절 사용하던 추억의 채팅 프로그램, '네이트온'을 다시 구현해보고 싶어, 실제 네이트온의 기능들을 참고하며 작성했다. 운세 기능이나 이모티콘 기능도 그 일부이다. 

서버 클라이언트
서버 소켓-소켓 연결 소켓 생성-입장
클라이언트 입-퇴장/채팅 로그 확인 채팅방 생성-입장
- 채팅 송수신
- 운세 기능

 

(2) 사용한 코드 및 명령어들

-소켓 통신: 서버 소켓 및 포트, IO 스트림

-GUI: Java Swing(JTextField, JButton, JTabbedPane)

-이미지: 카카오톡 춘식이 이모티콘, 네이트온 아이콘, Pixabay 무료 이미지 등

 


3. 돌아보기

(1) 소감 : 배운 것도, 아쉬움도 많은 첫 개인 프로젝트

-프로젝트 전까지 자바 SWING/소켓-서버 소켓/소켓 통신의 개념이 많이 어려웠다. 프로토콜 같은 경우는 그 개념이 뚜렷하지 않아 내심 고민이 많았다. 이번 프로젝트를 통해 자바 SWING/소켓 통신의 개념에 대해 다시 되짚어볼 수 있어 좋았다. 특히 프로토콜을 사용해 프로그램을 구현할 수 있어 기뻤다. 하지만 아직도 많이 어려운 개념이라 공부가 더 필요할 것 같다.

 

-사실 처음 1, 2일 동안에는 예제 코드들을 읽어도 그 개념과 흐름이 잘 이해가 되지 않아서 정말 답답했다. 내가 생각하던 코드의 흐름은 있었지만, 그 과정들이 흐리뭉실하고 자세하지 않았어서 구현에도 어려움이 많았다. 처음에는 다른 사람들이 쓴 코드를 무작정 따라 쓰다가, 이건 아니다! 싶은 생각이 들어, 대략적으로라도 '내가 구상한 프로그램의 작동 흐름'를 공책에 적어두고, 직접 코드를 작성하다 모르는 부분이 있으면 타인의 코드를 참고하는 방향으로 진행했다. 잘 이해가 가지 않거나/어렵거나/왜 이렇게 썼는지 잘 모르겠는 코드가 나오면 체크해두고 다시 읽어봤다.

 

 확실히 이렇게 하니, 코드를 따라 적더라도 왜 이런 코드를 적었는지 이해가 되어 좋았던 것 같다. 코드의 흐름을 따라가는 방식으로 오류를 점검하니, 오류 수정도 조금 더 수월했던 것 같다..

 

 

(2) 잘했던 점: 끝까지 포기하지 않기, 코드의 흐름 생각하기, 로깅과 디버깅

-나는 어려운 부분이 나오면 쉽게 포기하는 편이다. 대학생 시절부터 이 부분을 지적받았기 때문에, 이번 프로젝트를 하며 그 부분을 조금이라도 발전시키는 것이 내 또 다른 목표였다. 그래서 이해가 가지 않는 코드도 몇 번을 받아적고, 다이어그램을 그려가며 공부했다. 마지막 날에는 거의 8시간 동안 이 코드만 붙잡고 있었던 것 같다. 그랬더니 처음에는 처음 본 외국어처럼 이해가 안 가던 코드도 이해가 되기 시작했는데, 그게 무척 기뻤던 것 같다. 

 

-저번 프로젝트에서는 흐름을 생각하기 보다는 '당장 구현해야 하는 기능'에 중점을 두고, 부분적인 코드에 많이 집중했었다. (첫 프로젝트라 더 정신이 없었던 것 같다....) 이번에는 코드 작성 중간중간/오류가 발생했을 때, 디버깅/로깅을 더욱 적극적으로 썼던 것 같다. 이게 코드의 이해나 오류 수정에도 도움이 많이 되었던 것 같다고 느꼈다.

 

 

(3) 아쉬웠던 점: 코드 리뷰 더 많이 읽기, 기능이 적더라도 튼튼한 프로그램 만들기

-다른 분들의 발표를 들으며 느낀 건데, 내가 작성한 코드에는 사용하는 구문이나 명령어/컴포넌트에 대한 깊은 이해가 많이 부족하다고 느꼈다. 그리고 생각보다도 프로토콜/IO 스트림을 사용하는 데에도 많은 방법이 있었는데, 조금 더 폭넓게 생각하지 못했던 것 같아서, 그게 많이 아쉬웠다. 다른 사람의 코드를 보는 게 중요하다는 말이 이런 뜻이구나 싶었다. 

 

-많은 기능을 만들고 싶은 욕심에, 기존의 기능들을 더욱 튼튼하게 만들지 못했던 것 같다. 선생님께서도 강조하신 부분이 '적은 기능을 구현하더라도 튼튼하고, 오류가 적은 프로그램을 만드는 것'이었다. 다음에는 적은 기능을 만들더라도, 오류나 예외를 많이 줄이는 것을 목표로, 프로그램을 만들고 싶다.

 


4. 깃허브 및 영상 자료

구현한 코드, 작동 영상은 아래 링크에서 찾아볼 수 있다.

(1) 깃허브 주소: https://github.com/Greenery367/makeChat

 

GitHub - Greenery367/makeChat

Contribute to Greenery367/makeChat development by creating an account on GitHub.

github.com

 

(2) 유튜브 주소: https://www.youtube.com/watch?v=GEcb4PC9ueg

 

(3) 영상 (티스토리)

 

 

728x90
반응형