네트워크
- 여러 대의 컴퓨터가 통신회선을 연결되어 있는 것
네트워크의 구성
- 서버 : 서비스를 제공하는 프로그램
- 클라이언트 : 서비스를 제공받는 프로그램
네트워크의 주요 용어
host
- 네트워크에 연결되어 있고, 다른 호스트와 통신할 수 있는 컴퓨터
- ip주소로 식별된다.
ip address
- 네트워크에서 호스트를 식별하기 위해서 부여되는 고유한 주소
- IPv4, IPv6 주소 체계가 있다.
port
- 실행 중인 서버프로그램의 논리적인 연결지점
- 모든 서버프로그램은 특정 포트번호를 가지고 실행된다.
- 포트번호를 이용해서 서비스를 제공하는 서버프로그램을 선택할 수 있게 된다.
- 포트갯수는 0 ~ 65535까지 총 65536개 있다.
포트번호의 범위
- 0 ~ 1023 : 국제인터넷주소관리기구에서 특정 서버용으로 미리 예약한 포트
- 1024 ~ 49151 : 특정 벤더(회사)사가 등록해서 사용할 수 있는 포트
- 49152 ~ 65535 : 개인적인 목적으로 사용할 수 있는 포트 번호
대표적인 포트 번호
- 웹서버의 포트번호 : 80번
- FTP서버의 포트번호 : 21번
- 텔넷의 포트번호 : 23번
- SSH의 포트번호 : 22번
- https의 포트번호 : 443
서버접속시 주소표기법
- 프로토콜://주소:포트번호
- ftp - ftp://192.168.10.65:21
- 웹 - http://www.naver.com:80
protocol
- 네트워크에 연결된 host간의 데이터 교환을 위해서 미리 약속된 통신규약이다.
- 물리적 혹은 논리적 통신을 처리하기 위한 규칙 세트다.
- tcp, ip, http, https, ftp, telnet, smtp, ...
IP(Internet Protocol) : ip주소 체계를 규정하는 프로토콜
IPv4
- 32비트로 구성된다.
- 총 2^32개 만큼의 주소를 가진다.
- 클래스
- 클래스 A 주소 : xxx.???.???.??? - 1.???.???.??? ~ 126.???.???.???
- 클래스 B 주소 : xxx.xxx.???.??? - 128.xxx.???.??? ~ 191.xxx.???.???
- 클래스 C 주소 : xxx.xxx.xxx.??? - 192.xxx.xxx.??? ~ 223.xxx.xxx.???
- 구분
- 공인 ip주소 : 다른 컴퓨터와 통신할 때 사용하는 ip주소
- 사설 ip주소 : 가상ip, 사설망내에서 사용할 수 있는 ip주소
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
- 특수목적 ip주소
- 루프백(loopback) ip, 자기자신을 나타내는 ip주소
- 127.0.0.1
- 루프백(loopback) ip, 자기자신을 나타내는 ip주소
- 서브넷마스크
- ip주소를 내부 ip주소인지 외부 ip주소인지 구분할 때 사용
- ip주소와 서브넷마스크주소를 논리곱연산을 수행해서 같은 주소가 나오면 내부ip 다른 주소가 나오면 외부ip로 판단한다.
- ip대역을 더 작은 단위로 나눌 수 있다.
- 라우터의 브로드캐스팅 부담을 줄일 수 있다.
IPv6
- 128비트로 구성된다.
- ip주소 고갈문제, 인터넷 확장성, 데이터 보안의 강화를 위해서 정의
- ip주소 갯수 : 2^128개 (340,282,366,920,938,463,463,374,607,431,768,211,456개)
- 주소 표기법
- 16비트씩 16진수로 표기
- 2001:0d5f:451d:0010:38da:6b43:191c:1d1d
DNS(Domain Name Server)
- 웹사이트의 도메인이름과 ip주소를 서로 변환하는 역할을 수행하는 서버다.
- 도메인이름에 해당하는 ip주소정보를 조회할 수 있다.
Gateway(게이트웨이)
- 서로 다른 네트워크로 이동하기 위한 통로다.
- 내부네트워크가 아닌 외부네트워크와 통신하는 경우 반드시 게이트웨이를 거쳐야 한다.
TCP/IP
- TCP(Transmission Control Protocol)과 IP(Internet Protocol)를 말한다.
- 인터넷 통신에 가장 기반이 되는 프로토콜
- TCP : 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기위한 표준을 정의하는 프로토콜
- IP : 호스트를 식별하기 위한 ip주소체계를 정의하는 프로토콜
네트워크 프로그래밍 순서
서버 | 클라이언트 |
서버실행 | |
클라이언트의 연결요청 기다리기 | |
서버에 연결요청 | |
클라이언트의 연결요청 수락 | |
클라이언트와 연결된 스트림 획득 | 서버와 연결된 스트림연결 |
클라이어느 요청처리 메세지 수신대기 | |
서버에 요청처리 메세지 보내기 | |
클라이언트가 서버로 보내 요청처리 메세지 읽기 | 서버의 응답메세지 수신대기 |
클라이언트의 요청처리를 위한 업무로직 수행 | |
클라이언트에게 응답메세지 보내기 | |
서버가 보낸 응답메세지 읽기 | |
서버가 보낸 응답메세지를 처리해서 출력하기 |
I/O
- 자바 애플리케이션에서 특정 리소스(자원)에서 데이터를 읽어오거나 데이터를 내보내는 것
- 자바는 스트림을 사용해서 읽기/쓰기 작업을 수행한다.
스트림의 종류
스트림 이름 | 수행 내용 |
InputStream, Reader | 특정 리소스로부터 데이터를 읽어온다. |
OutputStream, Writer | 특정 리소스로 데이터를 내보낸다. ###대표 스트림 |
FileInputStream, FileOutputStream, FileReader, FileWriter | 파일의 내용을 읽고, 쓰기 할때 사용되는 스트림 |
BufferedReader | readLine() 메소드 제공 텍스트를 한 줄씩 읽을 수 있는 스트림 |
PrintWriter, PrintStream | print(), println(), write(bytes, int, int) 메소드 제공 텍스트에 줄바꿈문자를 추가해서 쓰기할 수 있는 스트림 |
DataInputStream, DataOutputStream | readInt(), readLong(), readDouble(), readUTF(), read() writeInt(int), writeLong(long), writeDouble(double), writeUTF(string), write(bytes, int, int) 특정 타입의 데이터를 원하는 순서대로 내보내고, 순서대로 읽어올 수 있다. |
ObjectInputStream, ObjectOutputStream | readObject(), writeObject(object) writeObject(obj)는 객체를 조각내서 스트림으로 내보낸다. readObject() 스트림으로 읽어온 객체 조각으로 원래 객체를 복원한다. 직렬화가능한 객체(java.io.Serializable를 구현한 객체)만 읽고 쓸 수 있다. |
InputStreamReader, OutputStreamWriter | 브릿지스트림 바이트스트림을 문자스트림으로 변환한다. InputStream -- Reader, OutputStream -- Writer로 변환 |
읽고 / 쓰기
읽기
// 획득된 스트림(InputStream, Reader)
FileInputStream inputStream = new FileInputStream("sample.txt");
FileReader reader = new FileReader("sample.txt");
// 획득된 스트림을 BufferedReader로 변환
BufferedReader br = new BufferedReader(new InputStreamReader(is));
BufferedReader br = new BufferedReader(reader);
// 한 줄씩 읽어서 처리
String text = null;
while((text = br.readLine()) != null) {
// text에 내용이 한 줄씩 담겨있다.
// text를 구분문자로 잘라서 사용한다.
}
br.close();
쓰기
// 읽어오는 스트림 획득
BufferedInputStream in = new BufferedInputStream(new FileInputStream("sample.png"));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("sample_backup.png"));
// 읽어서 다른 곳으로 보내기(항상 똑같은 코드)
int value = 0;
while ((value = in.read()) != -1) {
out.write(value);
}
네트워크
- 호스트와 호스트간의 데이터 통신
- 서버와 클라이언트간의 데이터 통신을 말한다.
- 자바에서는 Socket객체끼리 데이터를 교환한다.
- Socket의 주요 메소드 InputStream getInputStream() 연결된 다른 소켓이 보낸 데이터를 읽어오는 스트림을 반환한다. OutputStream getOutputStream() 연결된 다른 소켓으로 데이터를 보내는 스트림을 반환한다. void close() 연결을 해제한다.
자바에서의 네트워킹
- 다른 컴퓨터로 텍스트 데이터 보내기 // 쓰기 스트림 획득 OutputStream out = socket.getOutputStream();
- // 텍스트 보내기 PrintWriter pw = new PrintWriter(out); pw.println("내용.....");
- 다른 컴퓨터로 (파일, 영상, 바이너리 데이터) 보내기 // 쓰기 스트림 획득 OutputStream out = socket.getOutputStream (); // 읽기 스트림 획득. xxxInputStream in = new xxxInputStream(); // 데이터보내기 IOUtils.copy(in, out);
- 다른 컴퓨터가 보낸 텍스트 데이터 읽기 // 읽기 스트림 획득 InputStream in = socket.getInputStream(); 텍스트 읽기 // BufferedReader br = new BufferedReader(new InputStreamReader(in)); String text = in.readLine();
- 다른 컴퓨터가 보낸 (파일, 영상, 바이너리 데이터 읽기) // 읽기 스트림 획득 InputStream in = socket.getInputStream(); 쓰기 스트림 획득 // FileOutputStream fos = new FileOutputStream("파일명"); // 데이터 보내기 IOUtils.copy(in,fos);
I/O 예시
'Java' 카테고리의 다른 글
Java_익명 내부 클래스, 람다식 (0) | 2024.02.26 |
---|---|
Java_스레드와 동기화 (1) | 2023.12.04 |
Java_I/O(입출력) (1) | 2023.11.27 |
Java_객체의 직렬화와 역직렬화 (1) | 2023.11.26 |
Java_예외처리 (0) | 2023.11.22 |