▪ 호스트 노드 중에서 애플리케이션을 실행할 수 있는 컴퓨팅 시스템을 갖춘 장치(PC, 노트북, 스마트폰 등
서버와 클라이언트
▪ 서버(Server) • 네트워크에서 데이터나 서비스를 제공하는 컴퓨터 • 제공하는 서비스에 따라서 웹 서버, 파일 서버, DB 서버등으로 구분할 수 있음
▪ 클라이언트(Client) • 서버의 서비스를 이용하는 컴퓨터
IPV4
▪ IP version 4 ▪ 32비트 숫자로 구성된 주소 체계 ▪ 8비트 숫자(10진수로 표기, 0-255) 4개와 마침표(.)로 주소를 구성함 • 0.0.0.0 ~ 255.255.255.255 사이 조합이 가능함 ▪ IP 주소를 이용하여 모든 호스트를 구분하므로 모든 호스트는 고유의 IP 주소를 가져야 함 ▪ 현재 IPv4는 포화 상태로 이를 해결하기 위한 IPv6가 존재함
IPV6
▪ IP version 6 ▪ IPv4의 주소 고갈 문제를 해결하기 위해 나타남 ▪ 128비트 숫자로 구성된 주소 체계 ▪ 16비트 숫자 8개(16진수로 표기)와 콜론(:)으로 주소를 구성함 • 예시) FE80:6E78:E1D2:C35D:FECD:BA98:7652:EABF
▪ DNS • Domain Name System • 도메인을 IP 주소로 바꿔서 호스트를 찾아갈 수 있게 하는 시스템
포트
▪ 논리적인 통신 연결 번호 ▪ 특정 프로세스나 서비스에 연결하기 위한 연결 번호 ▪ 컴퓨터에서 서로 다른 종류의 트래픽을 구분하기 위한 연결 번호 ▪ 포트번호는 임의로 사용할 수는 있지만 예약된 번호를 사용하게 되면통신에 문제가 될 수 있음 ▪ 0-65,535 사이 번호를 가짐
▪ 포트 번호 사용 영역
1. 0-1,023 • 잘 알려진 포트 (well known port) • 예약된 영역 • root 권한(관리자 권한)으로 bind 할 수 있음
2. 1,024-49,151 • 등록된 포트 (registered port) • 일반 유저 권한으로 bind 할 수 있음
3. 49,152-65,535 • 동적 포트 (dynamic port) • 서버-클라이언트 통신 시 자동으로 bind 되는 영역
▪ HTTP • Hyper Text Transfer Protocol • 하이퍼텍스트 전송 프로토콜 • 웹 문서인 HTML 문서를 전송하는 프로토콜 • 암호화되지 않는 평문으로 데이터를 전송함
▪ HTTPS • HTTP Secure • 보안 처리된 HTTP • SSL(Secure Sockets Layer)을 이용해서 보안 처리함 • SSL 인증서 발급에는 소정이 비용이 소요됨 • 암호화된 데이터를 전송하기 때문에 보안이 우수함
▪ URI • Uniform Resource Identifier • 통합 자원 식별자 • 어떤 자원을 식별할 수 있는 고유의 문자열을 의미함
▪ URL • Uniform Resource Locator • 통합 자원 위치 정보 • 어떤 자원이 어디 있는지를 표시한 문자열로 URI의 일종임
OSI 7계층
TCP/IP 4계층
자바 네트워크 API
1.Java.net 패키지
▪ 네트워크 애플리케이션 구현을 위한 클래스를 제공하는 패키지 ▪ 네트워크 리소스에 보다 쉽게 접근하기 위한 High Level 추상화 클래스를 제공함 • InetAddress 클래스 • URI 클래스 • URL 클래스 • URLConnection 클래스 • HttpURLConnection 클래스
InetAddress 클래스
▪ IP 주소와 호스트 이름을 관리하는 클래스 ▪ public 생성자를 지원하지 않고 객체 생성을 위한 static 메소드를 지원함 ▪ 자바 프로그램을 작성할 때 IP 주소가 필요한 경우에는 InetAddress 클래스를 활용함
▪ InetAddress 클래스 주요 메소드 byte[] getAddress() : InetAddress객체의 실제 IP 주소를 byte[] 배열로 반환 String getHostAddress() : IP 주소를 문자열로 반환 String getHostName() : IP 주소에 대응하는 호스트(도메인) 이름을 문자열로 반환 String toString() : "호스트/IP 주소" 형식의 문자열을 반환
URLConnection openConnection() throws IOException : URL이 참조하는 원격 개체에 대한 연결을 나타내는 URLConnection 객체를 반환
final InputStream openStream() throws IOException : URL에 대한 연결을 열고 해당 연결을 읽기 위한 InputStream 객체를 반환
URL 클래스 활용
package network.pkg02_URL;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class MainClass {
public static void main(String[] args) {
//URL클래스 : URL 처리를 위한 클래스
//접속 주소(가상)
String spec = "https://www.example.com:9090/board/view.html?no=1&week=mon#footnote";
String a = "protocol://host:port/path?query#reference";
try {
URL url = new URL(spec);
System.out.println("getProtocol : "+url.getProtocol());
System.out.println("getDefaultPort : "+url.getDefaultPort());//기본포트번호
System.out.println("getHost : "+url.getHost());
System.out.println("getPort : "+url.getPort());
System.out.println("getPath : "+url.getPath());
System.out.println("getQuery : "+url.getQuery());
System.out.println("getFile :"+url.getFile());//path+query
System.out.println("getRef : "+url.getRef());
//MalformedURLException : 주소 잘못 입력시 오류
} catch (MalformedURLException e) {
e.printStackTrace(); //오류문출력
System.out.println("잘못된 주소에요");
}
}
}
getProtocol : https
getDefaultPort : 443
getHost : www.example.com
getPort : 9090
getPath : /board/view.html
getQuery : no=1&week=mon
getFile :/board/view.html?no=1&week=mon
getRef : footnote
3.URLConnection 클래스
▪ 응용 프로그램과 URL 간의 통신 링크를 나타내는 모든 클래스들의 슈퍼 클래스 ▪ URL에서 참조하는 리소스를 읽고 쓸 수 있는 클래스 ▪ URL 객체로부터 URLConnection을 얻을 수 있음
void addRequestProperty(String key, String value)
요청 속성을 key-value 형식으로 등록
Map<String, List<String>> getRequestProperties()
모든 요청 속성을 Map<String, List<String>> 형식으로 반환
String getRequestProperty(String key)
요청 속성 중 key 값을 가진 value 반환
abstractvoid connect()
URL이 참조하는 리소스에 대한 통신 링크 열기
InputStream getInputStream()
open connection으로부터 InputStream 객체 얻기
OutputStream getOutputStream()
open connection으로부터 OutputStream 객체 얻기
void setDoOutput(Boolean dooutput)
dooutput이 true이면 애플리케이션이 URL 연결에 데이터를 쓸 수 있음
HttpURLConnection 클래스
▪ HTTP 관련 기능을 지원하는 URLConnection 클래스의 서브 클래스 ▪ 각종 응답 코드(Response Code)를 필드 값으로 가지고 있어 응답 여부에 따른 코드 작성이 가능함
응답코드
의미
필드
200
정상 응답
HttpURLConnection.HTTP_OK
404
페이지 없음
HttpURLConnection.HTTP_NOT_FOUND
500
내부 서버 오류
HttpURLConnection.HTTP_INTERNAL_ERROR
▪ HttpURLConnection 클래스를 활용해 연결된 URL로부터 접속정보를 확인하거나 수정할 수 있음
▪ 접속 정보로부터 InputStream을 얻어낸 뒤 데이터를 읽어들일 수 있음
▪ 접속 정보로부터 Reader를 얻어낼 수는 없으므로 텍스트 정보를 읽어야 하는 경우에는 InputStream을 얻어낸 뒤 이를 InputStreamReader로 변환해서 사용해야 함
메소드
역할
abstract void disconnect()
연결 닫기. 곧 서버에 대한 다른 요청이 없음을 의미함 다른 요청을 만들기 위해서 disconnect() 메소드를 호출하면 안 됨
InputStream getErrorStram()
connection이 실패하였으나 서버가 데이터를 보냈다면 해당 데이터를 읽을 수 있는 오류 스트림 반환
String getRequestMethod()
요청 메소드 반환
int getResponseCode()
응답 코드 반환
void setRequestMethod(String method)
요청 메소드 설정 (GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE 중 선택)
▪ HttpURLConnection 클래스를 이용한 접속 정보 확인하기
package network.pkg03_HttpURL;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class MainClass {
public static void main(String[] args) {
try {
URL url = new URL("https://www.google.com/");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
//URLConnection--> HttpURLConnection
System.out.println(con.getResponseCode());//응답코드반환
System.out.println(con.getRequestMethod());//요청메서드반환
System.out.println(con.getRequestProperty("User-Agent"));//해당key를가진 속성반환
con.disconnect();//연결닫기
} catch(IOException e) {
//파일을 열거나 읽거나 쓸 때, 네트워크와의 통신 시,
//입출력 작업을 수행하는 도중에 오류가 발생하는 경우 등에 발생
e.printStackTrace();
}
}
}
200
GET
Java/17.0.9
url.openConnection(); 시 URLConnection 로반환됨
그의 자식인 HttpURLConnection 를 사용해야 하므로
다운캐스팅!!!!
URL 인코딩과 디코딩
URL Encoding 웹 상에서 문자열을 안전하게 전송할 수 있는 형식으로 바꾸는 것을 의미함 •"application/x www form urlencoded" 형식을 따름 권장하는 인코딩 방식은 UTF 8 방식임
URL Decoding URL Encoding 된 문자를 다시 원래의 문자로 되돌리는 것을 의미함
URL Encoder 클래스
URL Encoding 을 위한 자바 유틸리티 클래스
인코딩 방식 •"A Z", "a z", "0 9" 그대로 사용 • 특수문자 ".", "--", "*", 그대로 사용
• 공백 " 은 "+" 기호로 변환다른 모든 문자는 바이트로 변환한 뒤 3 자리 문자열 "%xy" 방식으로 변환 (xy 는 변환된 바이트의 16 진수 표현법