네트워크란?
TCP - 정보 손실 없어야 한다.. 받았는지 확인해야 한다. - Message 느낌
UDP - 정보 손실 있을 경우도 감수, 속도 빠르게 – Video(버퍼링) 느낌
OSI 7 Layer - 문자 ‘A’를 전송하는 상황으로 알아보기
- A에 해당하는 65를 그대로 전달하는 것이 아니다. 2진수로 전달~!
- 근데. 이 이진수를 어떻게 보낼 건데?
1 계층 - 물리 계층(Physicla Layer)
- 전선을 연결 – 전기신호로 전달 / 물리 계층에서 이루어짐
- 전기신호로 보내는 것
2 계층 - 데이터 링크 계층 (Data Link Layer)
- 데이터를 전송할 때 전송할데이터(1010)만 보내는 것이 아니라.
- 시작/끝 표시해서 보낸다 – 2계층 데이터 전송계층에서 한다.
3 계층 - 네트워크 계층 (Network Layer)
- 시작과 끝이 추가된 데이터를 그냥 보내면 원하는 곳으로 가냐? NO!
- 방법은?
- 여기에 목적지 컴퓨터의 ip 주소 추가해준다! -
4 계층 - 전송 계층 (Transport Layer)
- ip로 찾아가고 포트번호와 관련된 작업을 하는 것이 전송계층 – 4계층
- 네이버 홈페이지를 볼 수 있는 이유는?
- 네이버 ip주소를 알고 있고, 홈페이지를 보여주는 process의 포트 번호로 접속을 하게 되는 것이다.
- 근데 난 ip주소가 아니라 naver.com으로 접속했는데?
- DNS – ip주소에 매핑해주는 서비스
- naver.com 자체가 ip주소가 되는 것! 자동으로 port번호는 따라온다(HTTP : 보통 80번)
Network Programming
- Transport Layer에서 제공하는 port를 담당하는 api를 가지고 프로그래밍하는 것~
- 이 api는 OS가 제공~!
진도 나가자.
서버와 클라이언트!
- 이 부분은 필수 Check!
- 요청을 처리하는 하는 곳이 서버 / 요청을 하는 곳이 클라이언트
- 뭔가를 제공? - 서버
- 뭔가를 요청? - 클라이언트
- 클라이언트이면서 서버가 될 수 있다.
메소드 이런 게 있구나 Check
진도 나가보자
네트워크 예제 사용해보자
- 강사님이 만들어 놓으신 프로젝트 2개 사용해볼 예정 ( 1번. chatPrj 와 2번. chatPrjGroup )
- 일단 사용해보고 코드 설명해주면서 배울 예정
1번 프로젝트 실행 순서
컴파일 → 서버 소켓은 이클립스에서 실행 → 클라이언트 소켓은 cmd에서 실행 → 서버와 1:1 통신되는지 테스트
2번 프로젝스 실행 순서
컴파일되어있는 bin폴더 하위 클래스 파일 이용 → 서버 소켓은 이클립스에 실행 → 클라이언트 소켓은 cmd에서 실행 → 서버와 클라이언트 1:多 통신되는지 테스트
1번 chatPrj 실습하기
- 여러 개의 클라이언트와 서버의 1:1 통신 하는 프로그램
- 여러개 클라이언트 동시에 관리 가능한지 테스트
1.압축 폴더 import 하기
2. 원래 우리가 했던 컴파일 방식 - cd 명령어로 찾아 찾아가서 컴파일했었다.
cmd 명령어
- / 최상위 디렉터리
- ./ 현재 디렉터리
- ../ 상위 디렉터리
3. 이번엔 다른 방식으로 컴파일해보자
- 어떤 클래스 파일 다른 파일은 import 하고 있으면 그 정보도 알아야 한다.
- sourcepath도 필요
컴파일 할건데 – 어떤 소스를 참조해서 하겠다 == sourcepath
1번파일 -어떤 소스냐면 ./ (현재 디렉토리) 하위에 sever폴더에 *.java로 끝나는 애들
2번파일 -어떤 소스냐면 ./ (현재 디렉토리) 하위에 client폴더에 *.java로 끝나는 애들
이 결과물을 –d output =====> output 디렉토리에 넣을 것이다.
이 방식은 오늘만 이렇게 실행하고 안할 예정~
4. 컴파일 완료된 서버의 SeverSocket 실행
- ServerSocket은 이클립스에 실행
- server 패키지 하위에 있는 Main.class는 이클립스에서 실행 -
- SeverSocket 열어 주었다.
5. 컴파일 완료된 클라이언트 일반 소켓 실행
- 클라이언트 Socket은 cmd 창에서 여러 개 실행시켜줄 예정
5-1. 클라이언트 Socket - cmd창에서 실행
- 파일 탐색기 경로 가서 cmd 입력 -> 이 경로의 cmd창 열림
- 같은 방식으로 cmd창 3개 열기
5-2 cmd창에서 컴파일 해주자
5-3 컴파일 끝났으니 실행해보자
- client 하위에 있는 Main.java을 실행시켜주자
- - cd output 해주면 output폴더로 이동
6. 서버에 연결해서 1:1 채팅해보기
7. 새로운 cmd창에서 client 추가 실행 - 연결 잘 되는지 Test
여기까진 chatPrj실행해본 것!
> 여러 개의 클라이언트와 서버의 1:1 통신 - 여러개 가능하게 해 본 것
2. chatPrfGroup 실행해보기
- 서버에 요청받으면 그걸 연결된 모든 애들한테 보낸다.
- 단톡방 개념
- 컴파일 귀찮으니 컴파일되어있는 애 사용해보자..
- bin 폴더 하위에 있는 애로 사용해보자.
1. 이클립스에서 서버 실행
2. cmd창에서 bin 디렉토리로 이동-> dir확인 -> 실행
- cd bin
- dir
- java client.Main
3. 나머지 cmd창에서도 실행-> 접속
4. 단톡이 잘 이루어지는지 확인
cmd창으로 실습 끝!
이렇게 실행하는 일은 앞으로 없을 듯
코드로 알아보기는 다음 시간에 이어서...
review
정처기 준비할 때 보았던 내용이 나와서 반가웠다 ㅎㅎ
하나하나 자세히 설명하기엔 시간의 제약이 있어서
기초적인 내용만 훑고 지나갔다.
자격증 공부하며 자세히 공부했던
OSI 7 Layer, 네트워크 프로그래밍, TCP/IP 부분이라
부담은 없었다.ㅎㅎ
실습하는 부분에서는 cmd창으로 컴파일을 직접 해서 실행해 본 적이 없고
ServerSocket과 Socket을 처음 접해보아서 낯설었다.
작동되는 방식이나 소통하는 방식을 이번 시간에 배웠고
다음 시간에는 코드를 보며 어떻게 짜는지를 배워보기로!
이론 부분 배우면서 든 생각
내가 아는 부분이라 중요 부분만 훑고 지나가네 생각했는데
이처럼
강의 시간에 배우는 코드 부분도 내가 몰라 서지
알고 있는 상태로 배웠다면 기본만 하는구나라고 생각이 들지..
강의 시간에 하는 코드들을 안다고 안심? 하지 말고
더 엄청난 큰 게 숨어있다 항상 생각하고 찾아보고
공부해야겠다고 느낀다.
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 5월' 카테고리의 다른 글
22. 05. 10 - 2차 시험, Api, 네트워크 소켓 복습 (0) | 2022.05.13 |
---|---|
22. 05. 09 - 네트워크 프로그래밍( SeverSocket, Socket ) // feat. Queue, List (0) | 2022.05.12 |
22. 05. 04 - Thread, 생성하기-사용하기 (0) | 2022.05.12 |
22. 05. 03 - escape문자, printf, 고민상담, 사진2장(현재와 미래의 나) (0) | 2022.05.11 |
22. 05. 02 - 입출력(IO), 스트림(Stream), try with resource (0) | 2022.05.11 |