<<복습>>
<프로그램 운영방법>
1. 상속
2. Runnable 인터페이스
- 생성 Thread t = new Thread();
- 기동 t.start();
class MyThread extends Thread {
void run(){ ... }
}
<TCP/IP 프로토콜(규약 - 약속된 규칙)>
1. IP(Internet Protocol)
- 장치간의 메세지 전송
- 누구에게 보내는 것인지? (대상 식별)
- 대상식별 번호 부여 (4byte 정수로 넘버링 -> ip주소라고 부름)
- 최대 40억개의 넘버링이 가능하다.
- 식별당 0~255개까지 넣을 수 있다.
- 국제기구 IP관리 : Net id(국제기구에서 관리, network 식별) + host id(네트워크에서 관리)
2. ip : ip 주소로 장치간에 전송/수송 처리
- port 번호 : 같은 기기에서 네트워크를 식별하기 위한 번호, 2byte 정수, 0~64k
- 값이 분실, 오류(값 변경), 중복될 수 있다
- TCP 프로토콜 : 신뢰성을 확보할 수 있다.
- UDP 프로토콜 : 신뢰성은 없지만, 심플하기 때문에 속도가 빠름. (VOD, AOD 등에서 사용)
<<오늘 배울 내용 - 네트웍 프로그래밍>>
1. 컴퓨터의 ip 주소 확인하는 방법 :
- window: ipconfig
- linux, mac : ifconfig
- 도메인, 네임서버
- 대표적인 서버는 이름을 사용한다.
- 포트 : 네트워크를 통해 데이터를 주고받을 때 사용되는 가상의 출구
* 0 ~ 65535 범위의 정수 번호로 식별됨
2. 네트워크 통신 프로그램
- 통신 프로그램의 작성 방법
* 한 프로그램은 연결을 요청하고 다른 프로그램은 그 요청을 받아서 연결을 맺습니다.
* 그 연결을 통하여 주고 받습니다.
- 용어 설명
* 클라이언트 : 연결 요청
* 서버 : 연결 받음
3. InetAddress로 IP주소 얻기
- java.net.InetAddress
- IP주소 표현한 클래스
- 로컬 컴퓨터의 IP주소
- 도메인 이름을 DNS에서 검색한 후 IP 주소를 가져옴
- Localhost? : 현재 프로그램이 실행되는 컴퓨터
이클립스에서 IP 주소를 불러올 때, 초기화는 불가능함. (new InetAddress(); -> X)
4. TCP(Transmission ControlProtocol)
- 특징
* 연결 지향적 프로토콜 -> 시간소요
** 가상의 경로(통신채널)을 통해서만 메세지가 전송 = 연결
* 통신 선로 고정 -> 전송 속도 느려질 수 있음
* 데이터를 정확하고 안정적으로 전달 (신뢰성을 확보)
5. UDP(User Develper Program..?)
- 전송경로가 설정이 안되어있어서 그때그때마다 바뀔 수 있음.
- 심플하고, 바로바로 전송하기 때문에 속도가 빠름.
- 대신, 에러체크는 안함.
6. 소켓에 대해서
- 소켓(socket) : 프로그램 내에서 보았을 때의 데이터 통신 출입구
* java.net API
* 서버 소켓, 클라이언트 소켓 두 종류
** ServerSocket, Socket
- ServerSocket (접속을 기다리는 쪽)
* 서버 프로그램에서만 사용되는 소켓
* 연결 요청을 기다리다가, 연결 요청이 오면 연결을 맺고 또 다른 소켓을 생성
- Socket (접속 요구, Client 소켓이라고도 함)
* 클라이언트 프로그램과 서버 프로그램에서 모두 사용되는 소켓
* 실제 데이터 전송에 사용되는 것은 이 소켓임
* 서버 프로그램에서는 서버 소켓에 의해 생성됨
* 클라이언트 프로그램에서는 직접 생성해야 함
7. ServerSocket 생성과 연결 수락
- ServerSocket 생성과 포트 바인딩
* 생성자에 바인딩 포트 대입하고 객체 생성
- 연결 수락
* accept() 메소드는 클라이언트가 연결 요청 전까지 블로킹 대기
* 연결된 클라이언트 IP 주소 얻기
8. 소켓을 이용한 통신
- 소켓을 이용한 클라이언트 프로그램과 서버 프로그램의 통신 과정
- 서버 소켓을 생성하고 사용하는 방법
* ServerSocket 객체를 생성합니다.
ServerSocket serverSocker = new ServerSocket(9000);
* ServerSockt 객체에 대해 accept 메소드를 호출합니다.
Socket socket = serverSocket.accept(); // 서버 소켓으로 연결 요청이 들어오면 연결을 맺고, 클라이언트
* 서버 소켓을 모두 사용하고 난 후에는 닫아야 합니다.
socket.close();
- 기본 골격
* try-with-resource()를 사용하는 경우 서버 소켓을 자동으로 close()
try(ServerSocket server = new ServerSocket(포트번호){
Socket socket = server.accept(); //접속 대기
}
9. 소켓을 이용한 통신 : 클라이언트/서버 프로그램
- 클라이언트 소켓을 생성하고 사용하는 방법
* Socket 객체를 생성합니다.
- 서버주소와 서버포트번호를 잘 줬음에도 실행이 안되는 경우 : 서버프로그램이 아직 실행 안된 경우, 선로가 끊긴 경우
* 데이터 송수신에 사용할 입력 스트림 객체와 출력 스트림 객체를 얻습니다.
* write 메소드와 read 메소드를 호출하여 데이터 송신 또는 수신합니다.
==> int data에 리턴되는 값 : read한 크기
- 클라이언트 소켓을 닫습니다.
- 기본 골격
==> 여기서 중요한 것 : w.flush();
10. Echo 클라이언트/서버 프로그램 작성
- 지금부터 작성할 예제가 하는 일
* Echo Client/Echo Server
11. Echo서버 프로그램의 개선
- 앞의 echo 서버는 1번만 서비스함
- 반복문을 이용해서 계속 서비스하기(정상 종료 불가)
- 앞의 echo 서버는 동시성 지원하지 않음
* 동시 접속자가 잇을 경우 1개만 서비스되고 나머지는 대기
* 스레드를 통해 동시선 지원 : 스레드가 클라이언트와 통신
- 스레드를 이용한 통신 골격
12. Http 프로토콜
- 주요 특징
* 문자 기반(ASCII 문자) 프로토콜
* 디폴트로 80 포트 사용
* 클라이언트가 서버로 요청을 보내면 서버는 요청 내용을 클라이언트로 응답 후 접속 해제 -> 서버측에서 접속에 대한 상태 유지 하지 않음 : stateless
- 이후 접속 시에 누구인지, 이전에 어떤 작업을 했는지에 대한 상태 정보 없음.
13. HTTP Request
- 요청 라인(Request Line)
* HTTP 메서드 방식 및 요청 URL과 프로토콜 정보
- 요청 헤더(Request Header)
* 웹 브라우저 정보, 언어, 인코딩 방식, 요청 서버 정보 등 추가 정보
- 요청 본체(Request Body)
* 요청에 필요한 내용
14. HTTP Response
- 상태 라인 : 응답 상태 코드 및 프로토콜 정보
- 응답 헤더 : 응답 처리 날짜, 인코딩 방식, 요청 서버 정보 등과 같은 추가 정보
- 응답 본체 : 응답에 필요한 내용. 일반적으로 HTML 문서
15. HTTP 분석
- 패키지명 : http
- HTTP 프로토콜 클래스
* HttpHeader
* HttpRequest
* HttpResponse
- HTTP 클라이언트/서버 프로그램
* HttpClient
* HttpServer
- GET, POST 확인용 웹 페이지
* login.html
<<JSP>>
<URL>
1. Uniform Resource Locator (자원을 지칭하는 유일한 표기법)
프로토콜://호스트번호:포트번호/경로/파일명
- 프로토콜 : http:
- 호스트번호 : www.naver.com
네이버
네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요
www.naver.com
- 포트번호 : 80
- 경로/파일명 : /index.html
- 브라우저 주소창에 가면 볼 수 있는 것.
- Locator : 위치정보를 나타냄.
2. Client와 Server 구조
3. HTTP Request
- 요청라인
- 요청헤더
- 요청본체
4. HTTP Response
- 상태라인
- 응답헤더
- 응답본체
5. 웹 어플리케이션이란?
- 인터넷을 기반으로
- Java : JSP/Servlet
- Python : Django
- Node : Express
6. JSP/Servlet
- 파일에 대한 요청 => index.html => ㅇㅇㅇㅇ (파일명이 달라진다고 해서 요청방법이 달라지진 않는다.) (정적파일, static파일)
- 요청할때마다 내용이 달라지는 페이지 (ex - ~~~ /travel/10, ~~~ /travel/page=2) (동적 파일, dynamic 파일)
* JSP, Servlet... 등
7. 웹 컨테이너(Web Container)
- JSP와 Servlet 컴포넌트를 관리하는 역할
- 웹 컴포넌트는 시작점이 없음
- 이벤트(웹 브라우저의 요청) 방식으로 동작
- 클라이언트의 요청에 따라 웹 컴포넌트를 생성하고 제거하는 메커니즘을 제공
-
8. 웹 컴포넌트
9. 개발 환경 설정
10. 서블릿의 이해
- JSP/Servlet(작은)
==> Application의 Command의 역할을 함, Map으로 관리함.
<HelloServlet 작성하기>
1. URL 매핑 문자열 입력
- 반드시 /로 시작
- 웹 접속 URL
http://서버IP번호:포트번호:포트번호/컨텍스트명/URL매핑명
http://localhost/ServletTest/Hello
- JSP와 Servlet의 장단점
==> 그래서 html 작성할 때는 JSP, java 작성할때는 Servlet을 씀.
<서블릿 개요>
1. 서블릿
- 웹 컨테이너에 의해 관리
- 다양한 클라이언트 요청에 의해 컨텐츠로 응답 가능한 자바 기반의 웹 컴포넌트
'멀티캠퍼스 > Spring' 카테고리의 다른 글
230831(목) (0) | 2023.09.01 |
---|---|
20230830 (수) (0) | 2023.08.30 |
230828 (월) (0) | 2023.08.29 |
20230817 (목) (0) | 2023.08.17 |
20230816 (수) (0) | 2023.08.16 |