- 1013(20일차)2023년 10월 13일 17시 06분 45초에 업로드 된 글입니다.작성자: 삶은고구마
오전 실습과제(1012) 피드백& 복습
String[]을 ArrayList asList를 이용해 배열에서 리스트로 만든 경우 불변이라 수정이 불가능하다
하지만 해당 리스트를 인자로 사용하면 수정 가능
=>생성자로 리스트를 만드는 것이 아닌 메소드로 리스트를 만들면 불변
List<String> list = Arrays.asList(strArr); //불변
List<String> list = new ArrayList<>(Arrays.asList(strArr));
우리가 아는 java.util.ArrayList가 아닌 java.util.Array
https://hoehen-flug.tistory.com/18
람다 조건
추상메소드가 "하나"인 인터페이스.
@FunctionalInterface
이 어노테이션이 의미하는 것:람다식으로 변환 가능한지 체크 해당 doc에 제시된 형식대로 작성하면 된다.
{}는 생략 불가 inner class
anonymous class
lambda
stream(입출력 stream아님)
list.stream() //스트림 생성 .filter(person-> person.getAge()>=40) //조건문 .forEach(System.out::println); //출력
optional
스레드
두 개 이상의 스레드는 동시가 아닌 스위칭이 되며 처리됨. A하고 B하고 A하고 B..이런식.
처리속도가 빠르기 때문에 동시진행이라 느껴짐.
스레드의 우선순위는 os가 정하는 것이라 내가 정할 수 없음.
단 , 스레드.setPriority로 중요도 값을 줄 수 있는데 큰 기대는 하지 말아야.
공유영역:임계영역으로 지정
여러 스레드가 붙어서 작업하는 경우 적절한 처리를 하지 않으면 한 자원에 여러 스레드가 간섭
동기화 하여 한 스레드씩 접근하도록 한다.
=>1칸 짜리 공용 화장실을 생각하면 될 듯.
한 사람이 들어가 사용중이면 다른사람이 대기
->사용한 사람이 퇴장 후 키 반납
->대기한 사람이 키 받고 입장해서 사용
->반복...
더보기# 네트워크
`net + work 의 합성어 : net(그물) + work(일)`
단일로 쓰여진 매체를 통신이라는 매개체를 통하여 서로 연결되어 있는 환경
자바에서는 java.net 패키지에서 서버/클라이언트 방식의 네트워크 프로그래밍 기술을 제공함
- 서버(Server) : 서비스 제공용 컴퓨터
- 클라이언트(Client) : 서비스 사용 컴퓨터
서버용 프로그램과 클라이언트용 프로그램을 각각 작성해야 함
## 네트워크 모델 개요
1. 서버 기반 모델 (Server-Based Model) : 전용서버가 존재하는 모델. ex) 웹 하드 업체
- 장점
* 안정적인 서비스의 제공이 가능함
* 공유 데이터의 관리와 보안이 용이함
- 단점
* 서버 구축 비용과 관리 비용이 듬
2. P2P 모델 (Peer-To-Peer Model) : 각 클라이언트끼리 연결되는 모델 ex) 토렌트
- 장점
* 서버 구축 및 운용비용을 절감할 수 있음
* 자원의 활용을 극대화 할 수 있음
- 단점
* 자원 관리가 어려움
* 보안이 취약함
### 관련 용어
1. ip 주소 : 컴퓨터에 부여된 네트워크 상에서의 컴퓨터 식별번호
* `.` 으로 구분되며, 4개의 값으로 구성
* 각 값은 0~255 사이의 값으로 표현됨 (32비트 주소체계임) 예> 123.45.6.225
* 관련 클래스 : InetAddress
1. Inet4Address (IP v.4 에 대한 주소처리용) //32bit
* 약 42억개의 주소를 가짐
* A,B,C,D 등급으로 나뉨
2. Inet6Address (IP v.6 에 대한 주소처리용) //128bit
* 3.4 X 10의 38승 개의 주소를 가짐
* URI(Uniform Resource Identifier) : 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다.
* 프로토콜 (HTTP 혹은 FTP) + : + // + 호스트이름 + 주소
* `예: http://ko.wikipedia.org`
* 위의 프로토콜 형태는 URI의 한 종류인 URL 형식의 표현 방법입니다.
* URI의 하위개념으로 URL, URN 이 있다.
1. URL(Uniform Resource Location) : 네트워크 상에서의 제공되는 서비스 위치 또는 웹 문서의 각종 서비스를 제공하는 서버들에 있는 파일의 위치를 표시하는 표준을 말한다.
* 프로토콜://호스트이름/
예> http://www.naver.com
* 프로토콜://ip주소:포트번호/에플리케이션이름/
예> http://127.0.0.1:80/notice/
* 프로토콜://도메인명/파일명.확장자/
예> ftp://www.microsoft.com/driver.zip/
* 프로토콜://도메인명/에플리케이션이름/폴더명/폴더명/클래스명?변수명=값&변수명=값
예> http://localhost:8080/notice/list?userid=admin
(클래스명 뒤의 ?다음의 내용을 QueryString이라고 함
getQuery()에 의해 리턴받을 수 있음)
* 관련 클래스 : java.net.URL
* URN(Uniform Resource Name): 리소스(자원)의 이름
* 예시이미지> https://d.pr/i/umbC84
프로토콜(protocol) : 컴퓨터간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속.
> **통신규약**은 상호간의 접속이나 전달방식, 통신방식, 주고받을 자료의 형식, 오류검출방식, 코드변환방식, 전송속도 등에 대하여 정하는 것을 말한다.
> 일반적으로 기종(機種)이 다른 컴퓨터는 통신규약도 다르기 때문에, 기종이 다른 컴퓨터간에 정보통신을 하려면 표준 프로토콜을 설정하여 각각 이를 채택하여 통신망을 구축해야 한다.
> 대표적인 표준 프로토콜의 예를 든다면 인터넷에서 사용하고 있는 TCP/IP가 이에 해당된다.
- HTTP [ hypertext transfer protocol ] : 인터넷에서, 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다
- FTP [ file transfer protocol ] : 인터넷을 통해 한 컴퓨터에서 다른 컴퓨터로 파일을 전송할 수 있도록 하는 방법과, 그런 프로그램을 모두 일컫는 말이다
- 텔넷 [ telecommunication network ]: 인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때 지원되는 인터넷 표준 프로토콜
### 1. TCP(Transmission Control Protocol)
인터넷 네트워크의 핵심 프로토콜이다.
인터넷에서 전송되는 정보나 파일들이 일정한 크기의 패킷들로 나뉘어 네트워크상 수많은 노드들의 조합으로 생성되는 경로들을 거쳐 분산적으로 전송되고, 수신지에 도착한 패킷들이 원래의 정보나 파일로 재조립되도록 하는 게 바로 TCP/IP의 기능이다
IP 프로토콜 위에서 연결형 서비스를 지원하는 전송계층 프로토콜로, 인터넷 환경에서 기본으로 사용한다.
TCP에서 제공하는 주요 기능은 다음과 같다.
* 연결형 서비스를 제공한다.
* 데이터를 전달할 논리적인 연결을 먼저 구성 (3way-Handshake)
* 세션 연결 설정 => 데이터 전송 => 세션 연결 해제
* 신뢰성 있는 데이터 전송을 보장한다
* 순차적으로 데이터를 전송함
* 확인 응답 및 오류시 재전송
* 전이중(Full Duplex) 방식의 양방향 가상 회선을 제공한다.
### 2. UDP (User Datagram Protocol)
인터넷에서 정보를 주고받을 때, 서로 주고받는 형 식이 아닌 한쪽에서 일방적으로 보내는 방식의 통신 프로토콜이다.
UDP는 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고, 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다.
보내는 쪽에서는 받는 쪽이 데이터를 받았는지 받지 않았는지 확인할 수 없고,
또 확인할 필요도 없도록 만들어진 프로토콜을 말한다.
**TCP, UDP는 각 각 0~65535 번의 Port 번호를 가지며 Port 번호를 가지고 서비스를 구분함**
대표적인 Service Port
- HTTP : TCP 80
- FTP : TCP 21, 20
- TFTP : UDP 69 (빠르게 데이터를 전송하기 위한 FTP)
## Network Model
데이터를 만들때 최상의 효율성과 안정성을 보장하기 위해 만들어 놓은 구조
통신이 일어나는 절차를 각 기능별로 모듈화시켜 만들어 놓은 계층적인 구조
* OSI 7 Layer 와 TCP/IP 모델이 있음

### 1.OSI 7 Layer
- 국제 표준화 기구(ISO)에서 표준화를 위해 개발된 모델
- 현재 참조용으로 사용되고 있음
- 각 계층의 역할에 맞는 개발에 참조
- 문제 발생시 참조
- 학습 목적으로 사용
7개의 계층으로 이루어져 있음
* 7계층(Application) : 사용자 인터페이스 계층으로 사용자의 명령을 받아주는 계층
* 6계층(Presentation) : 상위 계층에서 만들어진 데이터의 형태 표현 계층 (인코딩, 압축, 암호화 등)
* 5계층(Session) : 하위 계층과 상위 계층의 세션 연결 및 동기화를 하기 위한 계층
* 4계층(Transport) : 데이터 전송 방식 결정 계층 (TCP,UDP)
* 3계층(Network) : 종단 간 연결 보장 계층 (출발지와 목적지 주소 부여 계층, IP Address)
* 2계층(Data Link) : Node 간 연결 보장 계층 (인접 장비에 접근하기 위한 정보 부여 계층 , MAC Address)
* 1계층(Physical) : 비트 형태의 신호를 패턴을 부여하여 전기적 신호로 변경하여 전송하는 계층
----
* 1~4 계층을 하위 계층 : 하드웨어 계층
* 데이터 전달 계층으로 주로 네트워크 분야에서 참조
* 5~7 계층을 상위 계층 : 소프트웨어 계층
* 데이터 생성 계층으로 주로 소프트웨어 개발 분야에서 참조
### 2.TCP/IP Model
* 실제 통신에 사용되는 모델 (실제로 먼저 만들어짐)
* 4개의 계층으로 이루어져 있음
4. 4계층(Application) : OSI 7 Layer에서 5~7 계층에 속함
3. 3계층(Transport) : OSI 7 Layer에서 4계층에 속함
2. 2계층(Internet) : OSI 7 Layer에서 3계층에 속함
1. 1계층(Network Interface) : OSI 7 Layer에서 1,2 계층에 속함
* 1~3 계층을 하위 계층 : 하드웨어 계층
- 데이터 전달 계층으로 주로 네트워크 분야에서 참조
* 4 계층을 상위 계층 : 소프트웨어 계층
- 데이터 생성 계층으로 주로 소프트웨어 개발 분야에서 참조네트워크
여러 대의 컴퓨터를 통신 회선으로 연결한 것
internet
web (internet없이 web 존재x , 하나의 서비스) 다른 서비스 ftp,email..
ie (웹 서비스를 이용하는 프로그램 - 브라우저)
chrome (웹 서비스를 이용하는 프로그램 - 브라우저)
서버와 클라이언트는 고정된게 아니라 상대적임( p2p)
서버:요청에 응답
클라이언트:요청
uri
-url : 주소 (바뀔수있음
-urn : 식별번호(바뀌지않음
프로토콜
tcp 신뢰(ex 등기) - 소켓
:데이터를 주고받을때 쌍방 연결됨
연결 전에 3번 확인하고 데이터 처리
중간에 유실된 패킷이 있다면 다시 보내줌/받음
udp 비 신뢰 (ex 일반우편) - 데이터그램
:데이터 주고받기 전 연결 없음
특정아이피:특정포트에 그냥 데이터 전송
받았는지 못받았는지 확인안함.=>대신 빠름
전송 시 Application->Physical로, 수신할 때에는 physical->Application
ipv4주소: 고유 아이피
기본게이트웨이:공유기 아이피
구글링했을때 my ip : 공인 아이피
포트:기본포트 생략가능 443
콘솔 잘리지 않고 모두 출력 기본은 limit라 해제할 것 예제 test3
이미지 url 을 토대로 프로젝트 루트에 이미지 다운로드(outputStream)
이미지는 byte로 전송을 해야 하므로 inputStream을 사용하였다.
더보기/** * https://upload.wikimedia.org/wikipedia/commons/a/a3/June_odd-eyed-cat.jpg * 다운로드해서 cat.jpg저장 */ private void test3() { String path ="https://upload.wikimedia.org/wikipedia/ commons/a/a3/June_odd-eyed-cat.jpg"; String myPath = "cat.jpg"; try { URL url = new URL(path); URLConnection conn = url.openConnection(); //inputStream //여기까진 연결"만" 한거임. try( //여기서부터 입출력 작업을 시작한다. //이미지는 "byte"작업을 진행해야 하므로 //"inputStream"을 사용해야 한다. BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myPath)); ) { byte[] buf = new byte[8192]; int len = 0; while((len=bis.read(buf))!=-1) { //System.out.println(len); bos.write(buf,0,len); } //while문 끝. } } catch (IOException e) //다형성 적용-MalformedURLException { e.printStackTrace(); } }
클라이언트<->서버 간 통신 순서 '공부' 카테고리의 다른 글
1018(23일차) - sql2일 (0) 2023.10.18 1017(22일차) - 오라클,sql기초 (1) 2023.10.17 1012(19일차) 수정중.. (0) 2023.10.12 1011 (18일차) (4) 2023.10.11 1010 (17일차) 예외처리 (2) 2023.10.10 다음글이 없습니다.이전글이 없습니다.댓글