java 웹 페이지를 동적으로
생성하는 java program
Internet : network of network, 네트워크로 묶여있는 전세계적인 네트워크의 망. 즉 네트워크란 물리적인 infrastructure이다.
service : 인터넷 위에(infrastructure를 기반으로) 올라가는 여러 응용
(프로그램) 들을 통칭하는 개념이다.
그 중에서도 가장 많이 사용되는 service 로 e-mail, world wide web
, torrent 등등... 서비스란 무수히 많이 존재한다.
IP address : 인터넷이라는 infrastructure 위에 서비스가 구동되는데, 여러 대의 컴퓨터들이 서로 데이터를 주고 받아야 하는데 이를 위해서는 상대방 컴퓨터를 식별할 수 있는 식별자가 필요하다.
=> 4자리로 구성된 숫자를 이용하자라는 의미로 등장한 것이 IP address.
초창기에는 IPv4 라고 불리우며 32 bit 로 주소를 설정했다. ex) 0~255.0~255.0~255.0~255
최근에는 IPv6 라고 해서 128 bit 로 주소를 설정한다.
이러한 IP address 는 NIC(Network Interface Card)
라고 불리우는, 고유한 IP address 가 담긴 칩에 할당된다. 컴퓨터에는 LAN 카드에 NIC 가 장착되어 있다. 그래서 하나의 컴퓨터에 IP address 를 여러 개 할당 받을 수 있다.
이런 IP address 역시 정해져 있는 체계가 있고, 관리하는 국가적인 주체가 존재한다.
IP address 는 할당을 요청하고 받는 구조이기 때문에 당연히 논리적인 주소에 해당한다. 즉 IP address 자체가 고정된 것이 아니기 때문에 기존의 주소를 대신해 새로운 IP address 로 교체할 수도 있다.
따라서 이런 논리적인 주소를 대신해서 실제로는 물리적인(고정된) 주소를 이용해서 통신을 수행하는데, 이 떄 사용하는 물리적인 주소값이 mac address
이다. 이 mac address 역시 IP address 와 같이 NIC 에 같이 찍혀서 나오게 된다.
대표적으로 자주 쓰이는 IP address 로 자기 자신을 가르키는 127.0.0.1 이 있다.
서브넷(서브넷 네트워크) : IP address 는 결국 숫자로 구성되어 있기 때문에 결국 생성될 수 있는 IP address 의 갯수에는 제한이 있다. 이를 해결하기 위해 등장한 것이 IPv6 이다.
그런데 실사용에서 IPv6 로 버전이 업그레이드가 이루어지지 않고 있는 이유는, IPv4 에서 IPv6 로 올라가기 위해 비용이 발생하지만 그 비용 만큼의 베네핏이 일반 사용자의 눈에는 띄지 않기 떄문이다.
하나의 IP address 를 이용해서 다수의 가상 IP address 를 사용하게 만들어 놓은 것이 subnet. 물론 가상의 address 인 만큼 제약이 존재한다.
DNS
(Domain Name System) : IP address 는 숫자로 구성되어 있어서 주소를 암기하기가 어렵다. 따라서 숫자를 문자로 변환시켜서 사용할 수 있게끔 해주는 체계를 의미한다.
또한 DNS 에는 또 다른 의미가 있는데 Domain Name Server
이다. 이 의미란, 누군가는 문자를 숫자로 바꾸어주어야 하고, 숫자를 문자로 바꿔주는 역할을 해야 한다. 이 작업을 처리하는 컴퓨터, 프로그램 DNS(Domain Name Server) 라고 부른다.
Port : 0~65535 사이의 range 를 가진 하나의 정수. 컴퓨터 내엣 실행되고 있는 프로세스(프로그램)에 할당된 번호. 모든 프로세스가 다 가지고 있는 것은 아니고, 프로세스가 포트번호를 필요로 한다면 포트 번호를 부여할 수도 있다.
port 란 하나의 컴퓨터가 다른 컴퓨터의 프로세스를 식별하기 위한 식별자. 즉 ip address(정확히는 mac address) 가 컴퓨터와 컴퓨터를 식별하는 식별자라면, port 는 컴퓨터 내에서 하나의 프로세스를 식별하기 위한 식별자.
network 통신에서 한 computer 의 process 가 다른 computer의 process 를 식별하기 위한 수단.
하나의 process 가 network 로 연결된 다른 process 와 데이터 통신을 하려면
ip address 를 알아야 하고
통신 하려는 프로세스의 port 를 알아야 하고
데이터 통신 규칙 규약(protocol
) 을 알아야 한다.
⭐️3가지로 만들어진 형식 : protocol :// ip : port
, 이것을 Domain
이라고 부른다.
HyperText : 사용자의 선택에 따라서 관려된 정보 쪽으로 옮겨 갈 수 있도록 만들어진 조직화된 정보. 대표적으로 hyperLink
www : world wide web, 짧게 줄여서 web
이라고 통칭한다. 이 web은 infernet infrastructure 안에서 작동하는 service. 흔히 인터넷 이라고 부르기도 한다.
Protocol : 데이터 통신을 위해 정해 놓은 통신 규약
이 존재한다. 이런 규약들을 통칭해서 Protocol
이라고 부른다. www 상에서 가장 흔하게 많이 사용되는 Protocol 이 HTTP
(hyperText transfer Protocol) 라는 protocol 이다.
⭐️REST
: REpresentational state Tranfer. 표현이 가능한 상태(정보)를 전송해주는 시스템 아키텍처. 즉 자원을 이름으로 구분해서 자원의 정보로 주고 받는 것을 의미한다.
ex)
img파일을 요청하면 -> img 데이터를 전송
index.html 을 요청하면 -> 문자열을 전송
영화에 대한 open Api 를 요청하면 -> 영화정보가 담긴 json 데이터를 전송..
결과(자원의 정보)를 전송할 때에는 일반적으로 JSON 과 XML 을 이용한다. 물론 img나 문자열도 전송은 가능하다.
이런 형태의 아키텍처 스타일, 이라고 표현하기도 한다.
이런 REST 는 기존의 WEB 의 HTTP 방식과 거의 유사하다.
즉 HTTP
를 REST style 로 사용하자는 것.
풀어서 이야기하면,
HTTP URI(Uniform Resource Indentifier) : 웹 상에서 유일하게 식별할 수 있는 식별자. 즉 웹 상에 존재하는 이미지, 텍스트, 동영상, html 문서와 같은 resource 대해서 식별할 수 있는 식별자를 부여한다. URI는 그러만 식별자를 부여하는 프로토콜 이다.
URI : uniform resource identifier
URL : uniform resource locator 주소, 좌표.. 즉 주소를 의미한다. 그리고 URL 을 만들 떄에는 URI 을 기반으로 해서 만든다. 따라서 사람의 눈으로 볼 때에는 URI 와 URL 이 동일해보이지만 개념적으로는 다른 개념이다.
📌풀어서 설명하자면
HTTP URI 를 통해 자원을 명시한다.(=REST의 자원을 이름으로 구분해서 자원의 정보로 통신한다.)
HTTP 의 method 로 4가지 방식이 존재한다.
(GET-read
, POST-create
, PUT-update
, DELETE-delete
)
자원에 대한 CRUD operation 을 적용한 후 그 결과를 json 이나 xml 로 받겠다는 의미이다.
만약 REST 방식으로 HTTP 통신을 하겠다고 한다면, HTTP 의 method 를 적합한 기능에 맞춰서 사용해주어야 한다.
REST 를 적용하기 위해서 별도의 아키텍처(Infarstructure)가 필요하지 않다. 왜냐하면 web http protocol 을 그대로 이용하기 때문이다. 또한 method 에 따라 작업이 구분되기 때문에 명확한 코드 처리가 가능하다.
우리가 만약 REST 기반의 API 를 작성한다, 라고 하면?
=> REST API 작성 규칙이 존재한다. 이를 만족시키게 되면 RESTFUL API 기반의 server program, 이라고 할 수 있다. 그런데 REST 를 사용했더라도 작성규칙을 지키기 못했다면 그냥 server program 이 된다.
SOAP : Simple Object Access Ptorocol. 통신을 위한 규칙. Web과는 궁합이 좋지 않아서 웹 프로그램에는 사용이 잘 되지 않지만, 일반 network program 에서는 보안성이 상대적으로 뛰어나서 활용도가 높다.
Web bowser : web-client
Web server
HTTP Request
Request Line : (get, post, put, delete) method 방식 "공백" URL(이 자원에 대해) "공백" HTTP/1.1(http 버전 정보)
Reqeust Header : 세부적인 정보
Request Body : 클라이언트가 서버에 보내는 data. key=value 의 형태로 전달
HTTP Response
Stauts Line : HTTP/1.1 '공백' 200 '공백' OK
Response header : 세부적인 정보
Response Body : 결과값(HTML, XML, JSON..)
c/s 구조
) 이다.서버는 상대적으로 소수이고, 클라이언트가 절대 다수이다.
따라서 클라이언트와 지속적인 연결을 유지하기가 어렵다
두 가지 종류가 존재한다.
static web project
dynamic web project
Web Server 가 있어야 한다.
tomcat 을 다운로드 받는다.
IDE 와 tomcat을 연동시킨다.
Tomcat 이 proejct 를 인지해야 한다.(configure)
Tomcat 을 이용해 project 를 web 에 deploy 한다.
Serlvet : Dynamic resource 를 요청하고 응답하는 구조. 즉 java program 을 실행시켜 독적으로 만들어지는 resource
URL mapping : '/myServlet'
/로 시작하는, web 상에서 URL을 이용해 클라이언트가 이 servlet 을 실행시키기 위한 identifier
라이브러리가 없어서 생기는 문제이다. Java Build Path 에 추가해주어야 한다.
WAS : Web Application Server
모든 WAS 가 그림과 같은 구조인 것은 아니다. 하지만 반드시 Container 는 가지고 있어야 한다.
또한 WAS 가 Web Server 를 가지고 있지 않다면, 외부에서 Web Server를 반드시 가지고 와야 한다.
Web Server 는 요청을 Container 에게 위임-전달한다.
Container 는 가장 먼저 Container 안에 servlet instance 가 있는지 확인하고, 없다면 servlet instance
를 생성한다.
Container 는 생성된 servlet instance 가 가진 init() 메소드를 호출한다.
servlet instance 가 가진 init() 메소드의 목적은 servlet intance 를 초기화 하는 것이다.
3- Web Server 로 부터 온 request를 받아서 reqeust 객체, 정확히는 HttpServletReqeust
class type 의 객체를 생성한다.
4- responce 객체, 정확히는 HttpServletResponce
class type의 객체를 생성한다.
5- Thread Invoker 를 통해서 Thread 를 생성한다. 생성된 쓰레드는 생성된 servlet instance 가 가진 service 를 호출한다.
6- service 가 호출될 때에는 HttpReqeust 객체와 HttpResopnse 객체를 인자로 받아서 호출이 이루어진다.
단, service 메소드는 굳이 오버라이딩 하지 않는다. 왜냐하면 client 의 method 종류가 get이면 doGet() 메소드를 호출하고, post 방식이라면 doPost() 를 호출한다. 즉 service() 메소드가 doGet() 과 doPost() 라는 각각의 메소드를 호출한다.
doGet() 과 doPost() 라는 method 는 httpServlet 이라는 class를 구현해서 작동한다.
7- doGet 혹은 doPost 가 끝나면, service 가 끝나고, 그러면 Thread 가 종료된다. 하지만 생성된 servlet instance 만은 살아서 존재하다가 새로운 요청이 오게 되면 다시 똑같은 작업을 반복한다.
만약 web client 가 한 개가 아니라 여러 개가 들어온다면, 각각의 client 마다 Thread 가 생성된다. 그리고 최초의 container 과정에서 생성된 servlet instance 가 일종의 공용객체로써 작용해서 하나의 객체가 모든 Thread 에서 공용으로 사용된다.
이러한 데이터 패턴을 싱글톤 패턴
이라고 부른다.