DAY_020[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 26일
0

국비과정

목록 보기
21/99

 🌞 Day 020 : JAVA 마지막 날 

  • parkingSystem 예제

  • Socket,



 🎃 ParkingSystem 

  • 실행하면 주차정보가 저장되어있는 파일에서 데이터를 가져오고,
    입차 / 출차 / 주차상황 / 종료를 선택할 수 있는 주차 프로그램

  • 입차 : 주차할 차량의 번호를 입력 받고 Car클래스의 객체로 만들어서 ArrayList에 저장하기

  • 출차 : 출차할 차량의 번호를 받아서 검색하고 (주차 목록에 있는 차라면) 리스트에서 제거하고 요금 정산하기

  • 주차상황 : 현재 입차된 차량정보를 가지고 있는 리스트를 보여주기

  • 종료 : 지금 시점까지 저장되어있는 주차 차량 정보를 파일에 저장하기

Date now = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm");

// 입차시간을 Date로 변환 -> 밀리초로 환산
Date enterD = sdf.parse(this.enterDateTime); // String -> Date
Calendar enterTime = Calendar.getInstance();
enterTime.setTime(enterD);  // Date -> Calendar
long e = enterTime.getTimeInMillis();  // Calendar -> MilliSecond

// now변수도 밀리초로 환산
Calendar nowTime = Calendar.getInstance();
nowTime.setTime(now);
long n = nowTime.getTimeInMillis();

// now의 밀리초 - 입차시간의 밀리초
long r1 = (n - e)/1000; // 초단위로 환산

// 그 결과를 시 분 으로 환산
int min = (int)(r1/60.0);    // 분단위로 환산
int hour = (int)(min/60.0);  // 시간 단위로 환산
min = min % 60;
min = min / 10; // 10분 단위로 환산

// 주차비 : 시간당 2000원, 10분당 400원
pay = (hour*2000)+(min*400);
return pay;

시험 출제 범위

  • String ➡️ Date : .parse(string)
    Date Date객체명 = sdf.parse(String);
    sdf는 SimpleDateFormat의 객체

  • Date ➡️ Calender (Date객체의 값을 Calendar에 세팅하기)
    캘린더객체.setTime(데이트객체)

  • 밀리초 얻기
    캘린더객체..getTimeInMillis();



 🎃 NetworkInfo 



 🎃 Server & Client 

  •  Server 
    : 통신망에 연결되어서 자신에게 접속되어지는 클라이언트들에게 정보를 제공하는 컴퓨터

  •  Client 
    : Server로부터 정보를 제공받는 컴퓨터

 🎪 Server 01 : ServerSocket 

  •  ServerSocket 
    : 서버와 클라이언트의 연결을 가능하게 해주는 클래스

  • 서버소켓의 객체 생성
    ServerSocket의 객체사 생성이되면 서버가 클라이언트의 연결요청을 기다리며, 수락할 준비가 완료된다.

  • 클라이언트가 접속요청하는 포트번호, 포트번호는 반드시 7777이 아니어도 되며, 자유롭게 설정해서 포트번호를 알고있는 클라이언트만 접속하게 할 수도 있다.

  • 서버소켓은 준비 완료 이후 클라이언트의 연결요청이 올 때까지 실행을 잠시 멈추고 계속 기다린다.

  • 서버소켓이 연결을 기다리다가 요청을 감지하면 accept()가 실행된다.

  •  Socket 
    : 통신용 소켓, 클라이언트 연결 정보 전달

  • 클라이언트의 연결요청이 오면 클라이언트 소켓과 통신할 새로운 통신용 소켓(s)을 연결정보와 함께 생성하고, 소켓이 요청받은 클라이언트 연결정보를 전달한다.

  • 정보 전달을 위한 OutputStream 객체를 생성하되 이는 연결된 통신소켓에서 얻어낸다.

  • java로 만든 첫 서버!

 🎪 Client 01 

  • 서버에게 요청할 클라이언트 만들기

  • Socket
    : 클라이언트가 연결을 요청할 소프트 웨어

  • serverIp : 클라이언트가 요청할 연결의 목적지 주소

  • 7777 : 서버에서 관리할 연결의 그룹번호

  • 객체가 만들어지는 순간 써놓은 아이피와 포트번호로 연결을 요청

  • 생성한 InputStream 객체를 소켓에서 입력/출력 스트림을 전달받아 입출력 도구로 사용한다.
    🔽
    InputStream의 단순 아스키코드 입출력을 DataInputStream 생성자에 넣어 서버클라이언트 통신에 사용 가능한 스트림을 생성한다.

  • 연결된 서버로부터 전달된 메시지를 저장
    String m = dis.readUTF();
    readUTF() : 서버에서 보낸 데이터를 읽어오는 메서드


 🎪 Server 02 : SS.setSoTimeout(); 


 🎪 Server 03 : 일대일 채팅 

  • 앞선 예제에서는 DataOutputStream에 s(Socket객체)를 사용하여 출력 또는 DataInputStream에 s를 활용하여 입력 하였다.

  • 그러나 이번 예제는 s를 Sender와 Receiver의 생성자에 전달인수로 보내서 현재 연결을 이용한 입력 출력을 양방향 자유롭게 가능하게 제작하였다.

  • 각 클래스(Sender, Receiver)는 Thread를 상속 받아, 동시 실행이 가능하게 한다.


 🎪 Client 03 : 일대일 채팅 


 🎪 MultiChatServer 

  • HashMap clients;
    HashMap객체를 만들어서 접속 중인 클라이언트와 연결들을 관리할 리스트로 사용한다.

  • key : 클라이언트의 이름 (클라이언트 접속과 함께 전달된 이름, 숫자로 구성)

  • value : 클라이언트에 연결된 이름(key값)으로 생성된 dos객체
    dos(DataOutputStream객체, key값의 클라이언트 전용 전송객체)

  • 해쉬맵에 저장된 클라이언트들의 dos 객체를 하나씩 꺼내서 한 사람이 보낸 메시지를 모두에게 전송해준다 ➡️ 멀티 채팅


 🎪 MulitChatClient 



 🎃 정리... 

  • 벌써 교육 시작한지 20일째... java는 마지막 날이었다.
    다른 날들도 양이 많고 빨랐지만 오늘은 너무 한듯..

  • 주차 시스템도 버벅이면서 오전을 다 보냈고 심지어 실행조차 못하고 실행은 점심 때 각자 해보았다.

  • 오후 5시간 만에 서버와 클라이언트를 이해하고 서버소켓을 이용해 서버와 클라이언트를 만들어 본다? 채팅도 구현하고?
    거의 멘붕이었다. 노마드에서 줌클론 강의 들을 때도 (내가 왕초보이긴 하지만) SocketIO만 가지고 2주 넘게 계속 반복해서 듣고 정리하고 머리를 쥐어뜯었는데?

  • 그냥 보고 따라쓰는 것도 못 따라갈 정도 였다. 나는 타자도 느려서 코드 자동완성 설정까지 해서 쓰는데도 말이다.(앞 1~2글자만 써도 메서드가 완성될 정도로 설정해놓음)

  • 와.. 진짜.. 아무리 자바로만 서버구축하지는 않는다지만 좀 너무한듯... 제대로 만들어졌는지 테스트 하기도 힘들었다. 서버를 이클립스에서 돌리면 명령프롬프트에서 클라이언트 돌리고 (그러려면 패키지 지우고 다른이름으로 ANSI로 저장하고 따로 컴파일하고 실행하고 한글자 틀리면 또 수정하고 컴파일하고 실행하고... 미친...) 시간 내에 실행해보지도 못한 파일도 있었음.. 금요일에 또 내부시험이 있는데.. ㅠ_ㅠ 언제 복습하지?

  • 처음에 세웠던 목표 (주말에 자바의신 읽기, 인강 듣기) 1도 못하고 진도 따라가고 블로그에 복습용 글올리기도 힘ㅠ_ㅜ

  • 그래도 한달 되었다고 지원금 나온단다.. 하아.. 세금낸 보람을 느끼면서 힘내서 다시 열심히 공부해야 겠다.




profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글