Java 웹페이지를(HTML, CSS, JavaScript) 동적으로 생성하는 Java program
: network of network 물리적인 infrastructure
: internet 위에서 동작하는 여러가지 응용(e-mail, www(World Wide Web), Torent)
: internet상에 여러개의 computer들이 서로 Data를 주고 받아야 함
: 상대방 컴퓨터를 식별할 수 있는 식별자가 필요함
IP aderess V4. 32bit로 주소를 설정
0~255.0~255.0~255.0~255 = 16. 25. 112. 7
=> 이런 IP aderess를 어디에 할당할까요? NIC(Network Interface Card), 흔히 LAN카드
그래서 한 computer에 IP address를 여러개 할당 받을 수 있음
이런 IP address는 당연히 정해져 있는 체계가 있음
IP address는 할당을 요청하고 , 받는 구조이기때문에 논리적인 주소.
오늘은 16.2.117.34 주소를 사용하고 있는데 내일 바꿀 수 있나요? 가능
이런 논리적인 주소를 대신해서 물리적인 주소를 사용해서 통신을 이용 : MAC address
대표적인 IP address :127.0.0.1 (loopback)
하나의 IPaddress를 이용하여 다수의 가상 IPaddress를 사용 : subnet(192.168.x.x)
: DNS(Domain Name System) and (Domain Name Server)
www.naver.com ->이 도메인 네임에 해당하는 적당한 아이피 ex) 232.17.64.8 -> Mac address -> 전송
: 숫자(0~65535)
: 컴퓨터내에 실행되고 있는 프로세스(프로그램)에 할당된 번호를 지칭함
: 모든 process가 다 가지고 있는 건 아님
: Network통신에서 한 computer의 process가 다른 computer의 process를 식별하기 위한 수단
내 process ---(IP address)를 가지고---> 다른 computer(NIC): excel(300), MS word(500),
하나의 process가 Network으로 연결된 다른 process와 데이터 통신을 하려면?
1. IP address를 알아야 함
2. port
3. protocol : 데이터 통신 규칙(규약)
형식 : protocol://IP:port
= Domain
: 사용자의 선텍에 따라서 관련된 정보족으로 옮겨갈 수 있도록 만들어진 조직화된 정보
: naver로 가기 (흔히 링크라고 표현)
: HTML Element -> <a hreaf="...">~~</a>
: internet 위에서 동작하는 Service
: 우리는 흔히 인터넷이라고 부르기도 함
: 데이터 통신을 위해 정해놓은 통신 규약
: www 상에서 사용되는 protocol = HTTP(HyperText Transfer Protocol)
: 이 protocol의 특징을 잘 알고 있어야함
: 표현이 가능한/ 상태(정보)/ 전송
: 자원을 이름으로 구분해서 자원의 정보를 주고 받는 것을 의미함
car.jpg -> 이미지 데이터를 전송
index.html -> 문자열을 전송
boxOffice.json -> JSON 전송
: (자원의 정보)결과를 전송할 때 일반적으로 JSON
, XML
이용함
이런 형태의 Architencture Style
: 이런 REST는 기존의 web의 HTTP 방식과 거의 유사(HTTP protocol을 REST로 활용할 수 있음)
=> HTTP URI(Uniform Resource Indentifier) : 웹상에서 유일하게 식별할 수 있는 식별자 / URL(Location : 주소, 좌표) 를 통해 자원을 명시
->
HTTP의 method (Get(R), Post(C), Put(U), Delete(D))를 통해서 -> 자원에 대한 CRUD operation을 적용한 후 그 결과를 JSON
, XML
로 받음
REST를 적용하기 위해 별도의 infra가 필요없음,
: web HTTP Protocol을 그대로 이용
: method에 따라 작업이 구분되므로 명확한 코드처리 가능 !
만약, REST기반의 API를 작성한다고 하면, REST API 작성 규칙을 준수해야 함
⑩ SOAP (Simple Object Access Protocol)
: web과 잘 맞지 않음. 일반적인 network program에 활용(보안적인 측면이 강함)
⑪ web browser(web client)
⑫ web Server
11페이지 그림
key=value
형태로 전달 ex) isbn=3Java 8 버전 다운로드
https://www.oracle.com/kr/java/technologies/downloads/#java8-mac
, 환경변수 설정
eclipse - preference- utf-8 설정
web project 생성
static web project
dynamic web project(servlet) - 생성할 때 context root
: web상에서 우리 project에 대한 identifier(식별자) : sample(나중에 변경 가능)
@~~
=> project 완성 !
: web에 deploy해서 Client가 이용할 수 있도록 서비스하고 싶음
① web server가 있어야 함(Apache, NginX)
:Apache Tomcat 사용 (web server + servlet container)
② Tomcat 다운로드
https://tomcat.apache.org/download-90.cgi
맥 tar 다운로드 (9버전 이상)
③ Eclipse와 Tomcat 연동
server - add adn remove
④
⑤⑥⑦
=> static resource를(HTML/CSS/JavaScript/Image/동영상) 요청하고 응답하는 구조
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
소리없는 아우성
</body>
</html>
FirstServlet.java
package com.test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FirstServlet
*/
@WebServlet("/myservlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public FirstServlet() {
// TODO Auto-generated constructor stub
}
@Override
public void init() throws ServletException {
// init()의 목적은 servlet instance를 초기화 하는데 있음
System.out.println("init()가 호출됨");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 클라이언트가 GET 방식으로 이 servlet을 호출하면 이 method가 호출됨
// 결과적으로 보면, doGet() method가 호출됨
// 클라이언트의 호출 URL => http://127.0.0.1:8080/sample/myservlet
// 이 클래스 안에 있는 doGet()이 호출됨
// 클라이언트가 호출했을 때 해야하는 일을 여기에 작성하면 됨
// 프로그램 처리방식대로 작성해보자
// 1. 입력을 받는다.
// : 지금은 없음, 넘어감
// 2. 로직처리한다.
// : 지금 없음. 넘어감
// 3. 출력처리한다.
// : 이건 해야함
// 3-1. 내가 클라이언트게 전달한 데이터가 어떤데이터인지 설정해야함
response.setContentType("text/html; charset=UTF-8"); // html 데이터가 나간다는 의미
// 3-2. 클라이언트에게 데이터를 전달하기 위해 stream(데이터 통로)을 열어요!
PrintWriter out = response.getWriter(); // 통로를 뚫음
// 3-3. 통로가 열렸으니, 이제 통로를 통해 데이터를 전달해요
out.println("<html>");
out.println("<head></head>");
out.println("<body>서블릿 결과.. 소리없는 아우성!</body>");
out.println("</html>");
out.close(); // close시켜서 리소스..
// response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}