Coding 공부/Java

[Java_project] 네트워크 유저 정보 전송 및 채팅#1

CBJH 2024. 3. 15.
728x90
반응형
프로젝트 순서
Board#1 User, UserSVC, BoardMain, BoardVO >> 링크: https://cbjh-4.tistory.com/48
Board#2 //HashMap 컬렉션, UserSVC 기능추가 >> 링크: https://cbjh-4.tistory.com/49
입출력 스트림과 파일 입출력 
서버 일대일 채팅 >> 링크: https://cbjh-4.tistory.com/59

 

개선된 내용
User클래스>> Serializable
BoardClient클래스>> BoardMain클래스에서 클라이언트에 실행할 내용만 가져옴
UserFileInputStream클래스>>파일에서 값을 읽어오거나 수정
UserFileOutputStream클래스>>파일에 값을 저장
Server클래스>>클라이언트와 컴퓨터 내에서 네트워크 일대일 연결, User객체 받아와 텍스트 파일로 저장
Client클래스>>서버에 연결, User객체를 BoardClient클래스로 수정, 검색, 등록해 서버로 전송

1. User 클래스(스트림으로 소켓 전송 및 파일 입출력을 할 오브젝트) 추가내용

  • ObjectStream으로 객체를 전송하기 위해선 객체 직렬화 과정을 거처야 한다. 그러기 위해 Serializable 인터페이스를 상속받는다. 
  • serialVersionUID로 객체 직렬화 과정에서 수신자와 발신자 사이의 객체가 같은 것인지 확인하는 역할을 한다. 말 그대로 클래스 버전의 번호이다.(User 클래스를 수정할 경우 시인성을 위해 Version을 바꿔줘야 함)

 

2. BoardClient 클래스

  • BoardMain 클래스에서 반복문을 제거해 한번만 실행되게한다.
  • UserSVC 객체와 UserFileInputStream 객체로 기능을 수행한다.

 

 

3. UserFileInputStream 클래스

  • 파일에 저장한 HashMap정보를 읽어와 user객체들을 저장한 userMap 객체에 접근한다.
  • 유저 정보를 출력하거나 유저를 검색하는 기능을 가진 메서드가 있다.

 

4. UserFileOutputStream 클래스

  • user정보들을 가지고 있는 userMap을 인자로 받아 clientInfo.txt 텍스트파일에 저장한다.

 

 

5. Server 클래스

 

6. Client 클래스

 

7. 프로젝트 github

  • 클래스의 숫자가 많아 모두 올리기 힘들어 깃허브 주소를 남깁니다. 
  • https://github.com/cbjh-4/UserNetworkProject_JAVA
  • Board 패키지 생성 후 깃허브에 있는 .java 파일을 모두 다운받아 넣어주세요.
  • Server 클래스에서 Run 버튼을 누른 후, Client 클래스에서 Run 버튼을 눌러서 네트워크를 연결해주세요.
  • 콘솔창에 나오는 메뉴를 보고 채팅 또는 board 기능을 사용하세요.

 

 

 

8. 코딩하면서 새로 배운 개념

  8.1 serialVersionUID

  1. 호환성 유지: 클래스 정의가 변경되더라도, serialVersionUID가 같으면 이전 버전의 직렬화된 객체를 현재 버전의 클래스로 역직렬화할 수 있습니다. 이는 객체의 호환성을 유지하며 오류를 방지합니다.
  2. 버전 관리: serialVersionUID를 사용함으로써 개발자는 클래스의 어떤 버전이 직렬화되었는지 명확하게 구분할 수 있습니다. 클래스의 중요한 변경이 발생했을 때 serialVersionUID를 변경하여, 역직렬화 과정에서 오류를 방지할 수 있습니다.
  3. 역직렬화 시의 안정성: 만약 serialVersionUID가 클래스와 직렬화된 객체 간에 일치하지 않는 경우, 역직렬화 과정에서 InvalidClassException이 발생합니다. 이는 데이터 손상이나 보안 문제를 예방하는 데 도움이 됩니다.

따라서, serialVersionUID를 명시적으로 선언하는 것은 클래스의 직렬화와 역직렬화가 안정적으로 이루어지게 하며, 데이터의 호환성과 안정성을 보장하는 데 중요한 역할을 합니다.

 
 
 

댓글