ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22-08-25_web programming draft note
    main 2022. 8. 25. 19:36


    tier와 peer의 차이?

      - peer : 물리적인 식별자를 가지고 있는공간
    우리 PC도 각자 고유한 IP주소, 물리적 식별자를 가지고 있음. 
    [peer의 전제조건]
    1)네트워크를 사용해야 함. 
    2) 동일한 프로토콜을 사용하는 상대방이 있어야 함. 
    3) 네트워크상의 동이 ㄹ프로토콜을 사용하는 두개의 식별자 중에서 한 쪽 끝단을 peer 라고 함. 
    ==> 즉 네트워크 상에서 통신이 이루어지려면 최소 2개 이상의 peer가 있어야 함. 

      - tier : 
    요청에 대한 부담을 낮추기 위해 tier를 쪼갬. 

    web에서 request를 발생시키면
    ewb server 
    요청을 받았으면 response 해야 함

    양 끝단에 있는데, 하나의 네트워크
    + 2 tier 구조
    요청이 많아지면 어려움. 쪼개야 함. 
    차수를 올림

    정적인 콘텐츠를 요청하는것 :정적요청 (이미지,동영상파일 등)
    현재 서버의 시간이 몇시인지? : 고정될 수 없는 요청. 

    역할에 따라서 쪼개게 되는. 
    ==> 웹 서버 : 정적인 요청만 담당하게 쪼갬.
    req 오면 이게 내가 감당할 수 있는 요청인지 검증. 가능하면 처리. 
    그런데 아닌 경우, 즉 동적인 요청의 경우. application을 동작시킬 수 있는 server가 뒤에 있음. 
    web에서만 동작. 
    WAS. 
    요청자, 웹서버, WAS어플리케이션서버
    3tier 구조가 됨. 

    그런데  DB를 내가 원하는 형태의 UI로 요청하면
    1단계 DB가져와야 
    2단계 UI입혀야
    3단계 UI입혀서 주어야

    =>DB서버가 다시 쪼개진다고 하면, 

    -> 하나의 요청이 처리되는데 4tier구조가 됨. 

    - 그래서 실제 웹 상에서 처리되는 대부분의 서버들은 4tier구조를 가짐. 



    peer와 tier의 차이.

    - 서버가 얼마나 분리가 되어있는지를 표현하기 위해서 사용하는 단어들임. 

    클라이언트 서버 시스템의 이해 


    ----------------------------------------------

    클라이언트의 눈에 보이는 부분 || 안보이는 부분
    Frontend module backend module

    html(markup language)
    css(style sheet)
    (정적 UI)

    동적 인터페이스를 구현하기 위한 언어가 필요했음. 
    -> javascript
    -> 효율적으로 사용하기 위해 JSP, bootstrap 등등 나옴


    java
    (우리가 계속 나오는게 자바라서 동작원리도 이해해야 함)
    WAS가 사용하는 주언어는 java


    관계형DB(mariaDB, Oracle, ...)
    =>관계형 DB, Entity
    (E/R)
    SQL을 가지고 중간에서 대화 가능
    사이에서 데이터 가져올 수 있게
    변환하는게 ibatis

    //
    NodeJS를 쓰면 javascript로 backend
    쓸수도있고 JAP같은거 쓰면
    java로 front도 구성할 수 있기도 함
    //



    **이제 JAVA를 이용해서 개발 할 수 있는 환경을 구축하는 것도 필요함.
    **network이나 web을 쓰지 않고 standalone app 개발.

    -------------------------------------------------------
     
     자바 : compiler필요
    자바가 쉽다 : 갖다 쓸 수 있는 API가 많아서 활용이 용이하다는 뜻
    API필요
    bite code를 실행해 줄 Virtual Machine

    ==>이 세 가지가 있어야지 프로그램이 가능. 
    ==jdk toolkit에 묶여있음

    SE, Standard Edition은 Web 구성 위한게 없었음. 



    --------------------------------------------------------
    어제의 미션을 봐보도록하자

    ---

    package kr.or.ddit.web.dummy;
    
    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet{
    	public void doGet(HttpServletRequest req, HttpServletResponse resp)
    		throws ServletException, IOException
    	{
    		System.out.println("Hello Servlet");
    	}



    현재 컴파일러가 사용하는 위치에 참조해야 하는 것들이 없음. 


    * classPath
     두개를 정해둠. 
     현재위치와, 
     %JAVA_HOME%\jre\lib\rt.jar 위치

     근데 이 안에 있는건 IOException한개만 있음...
     근데 이제 HttpServlet, HttpServletRequest, HttpServletResponse, ServletException, annotation은 없음. 

     

    import java.io.*
    import javax.servlet.http.*
    import javax.servlet.*

     


     우리가 안 갖고 있는 (SE) API를 톰캣WAS에서 빌려다쓰자. 

     servlet-api.jar 
     우리(SE)가 안 가진 servlet이라는 스펙을 가진 jar

    -----------------------------------------

    톰캣 설치도 다시 짚어보자

     우리는 수업시간에 
     먼저 Servlet Spec
     다음에 JSP Spec
     나중에 EL Spec 도 확인해야 함

    major version 이 버전없 된 건  : 크게 바뀐
    ( . 앞)
    minor version이 버전없 된 건 : 크게 바뀌진 않은
    ( . 뒤)

    현재 우리나라에서는 아직 Servlet Spec 3점대를 사용함.

    자바EE버전은 보통 SE버전보다 한 단계 낮음.

    --------------------------------------------
    설치한 후, 
    환경변수 설정 할 것 


    톰캣의 설치 위치를 CATALINA_HOME
    라고 잡았는데, tomcat의 별칭이 catalina
    tomcat 개발할 떄 엔진 이름이었음


    우리가 찾아가던 것 처럼. "여기서부터" 라고 하는 위치를 classpath로 추가해 주는 것. 


    얘네는 standalone 형태로 동작을 안한다는 것. ==동작 위해서 위치를 바꿔주었거든..

    ==> servlet을 동작하기 위해서는 server가 필요하다. 
    == 다른 말로 container라고도 하는데, 이 소스는 container가 없으면 동작하지 않음. 왜?


    1) Main Thread가 있으려면, main이라는 정확한 signature를 가지고 있는 메서드가 있어야 하는데 없음. 그래서  JVM이 명확하게 구동할 수 없는 것임. 

    ** tomcat을 쓰는 이유
    1) Tomcat이 가진 추가 api를 이용 위해서
    2) tomcat을 이용해서 구동을 해야 하기 때문에


    ========================================

    @@ 오늘 수업의 첫 번째 주제 : Tomcat
    두 번째 : Servleet
    세 번쨰 : web

    - web이라는 공간을 명확하게 알고 이해해야 tomcat이 어떻게 동작하고 servlet이 왜 필요한 지 알 수 없음.

     * 교재 타이틀에 Web이라고ㅓ 써있음./ web을 알아볼 것. 



    인터넷 : 물리적으로 존재하는 통신망 (like 한반도)
    웹 : 논리적 공간( like 대한민국)


    한반도 : 손에 만져지는 물리적인 객체
    대한민국 : 추상적, 논리적인, 만져지지 않는 

    국가 성립 첫번째 조건. 언어. 국가 내 사용 독립적 언어.
    web이라는 가상 공간에서 통용되는 언어 필요, 그 언어가 html

     - web에는 최소 두개의 요소가 필요. 
      Client, Server

    web : html로 표현되는 데이터를 주고받고 있는 공간. 

    주고 받을 때 패키지로묶어주는게 protocol.그걸 http로 사용

     한 서버를 식별할 수 있는 식별자의 체계가 필요함
    ==>IP Address

    ==>IP v4, v6방식 두가지 있음. 

    1~255(8bit)가 4개의 섹터를 구성 : 32비트로 표현할 수 있는 자리수
    => IP v4방식으로는 2^32갯수만 표현가능

    =>70억 인구가 최소 3개의 ip를 가질 수 있도록 만든 게 IPV6버전. (v5버전 만들고 보니까 자리가 별로 안늘어서 v6만들고 v5폐기)
    ==> : 콜론으로 구성. 8자리. f까지 간. 16진수체계
    ==> 한 섹터에 16진수 4개 들어감. 
    4bit * 16개...
    16bit가 8개가 모임...128bit...

    v6방식은, 2^128개. 
    근데 여기서 a class, b class... 식으로 쪼개면 무한대로 쪼개기 가능
    지금은 넘어가는 과도기라 v4, v6같이사용중.


    - 대화를 위해서는 물리적 peer의 주소를 알아야 대화가능. 이게 ip address
    - port라는 번호도 있음. 이건 무슨 역할?

    두개의 티어가 한 티어 안에 존재... W.S. 와D.B. 하나의 ip address를 둘이 갖고 있음... 그러면 ip만으로는 식별 불가능해서, 논리적 주소로 갖는게 port임. ( :8080 ) 
    오라클 포트넘버( :1521)등 
    이 ip내에서 하나의 단말 안에서는 db서버도 tomcat 서버도 있어서, 한 ip 주소 안에 있는 여러개의 서버를 논리적으로 식별 위해서 0~65535까지 존재하는 port 넘버가 생김. 64bit

    0~1023포트 : well-known port라고 함. 이미 정의하고 있는 server들, protocol들이 있음. 

    가용 포트넘버를 쓴다고 하면 10
    24번 이후 사용했었음well-known 포트넘버를 비껴가기 위한 것


     -서버는 24시간 늘 요청이 들어오는지 감시하고 있어야 함 (listening)
    - client가 들어올 수 있는 문이 근데 65535개 있음. 
    - 몇 번째 문을 listening 할 지 먼저 정해주어야
    ( 톰캣 설치할 때 포트넘버 설정)
    - 우리가 만들 요청을 통해서 클라이언트의 요청을 감시함.


    ============================

    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81

    bin : binary -- 2진법 batch 파일

    리눅스계열 (sh)
    윈도우계열 (bat)(shutdown.bat, startup.bat / 서버 끄고 키는 것)


    conf : configuration 설정파일. --대부분이 xml파일.
    : 왜 xml파일로 만들까?
    --> 시스템에 상관없이 공통적으로 파일을 이용하기 위함 (범용성) 
    --> 요즘은 json으로 만들기도 함. 
    ==>xml과 json의 사용목적이 같다는것을 알 수 있음. 

    webapps
     (WAS, MS, SC)

    ========================
    ---
    C:\Windows\System32\cmd.exe
    ---이 위치에서 
    startup.bat 실행
    ==>tomcat 콘솔창 켜짐

    -? 에러가 난다? cmd창에서 다시
    catalina.bat run

    으로 하면
    콘솔창이 안바뀌고 실행됨


    ##
    오호
     톰캣도 자바로 만들어놔서 톰캣이랑 자바랑 버전이 안맞으면 실행이 안됨.

    ===========================
    콘솔창에 에러가 있는지 없는지 우선 확인.
    대ㅜ분 에러가 떠..있어요..?....
    (
    .initInternal Failed to initialize connector [Connector[HTTP/1.1-8080]]
    )
    ==>8080포트넘버에 문제가 생겨서 에러가 났다고 함


    netstat -ano
    명령어를 통해서 어떤 포트번호가 어떻게 사용되는지 보여줌

    ( | ==pipeline문자라고 함, 하나의 콘솔 안에 여러개의 명령을 엮을 떄)

    netstat -ano | findstr "8080"
    명령 실행

    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\bin>netstat -ano | findstr "8080"
      TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       3580
      TCP    [::]:8080              [::]:0                 LISTENING       3580


    현재 점유되어있음. 3580에게

    => 작업관리자에서 세부정보의 PID(Process ID) 보면 됨

    => TNSLSNR.EXE
    (TNS listener : 오라클임)
    ==> 톰캣을 구동시키려면 포트번호를 바꿔야함

    ------------------------------------


    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\bin>netstat -ano | findstr "18080"

    180180검색해봣는데 안나온다? => 할당이 안된 사용해도 되는거인거지
    ==> server.xml파일에서 포트번호 바꿔줌. 

    crtl+c는 cmd에서 취소키임. 


    바꾸니까 에러가 없죠


    ------------------
    크롬에서 
    http://127.0.0.1/

    이 어드레스는 다시 돌아서 나에게 오는 address
    ;oopback address
    IPv4 주소 : 127.0.0.1

    IPv6주소 : 0:0:0:0:0:0:0:1
    => 축약형 == 0::1

    domain name =localhost



    http://localhost:18080/

    w정상적으로 서버 도는거..


    http://물리적주소(IP, 도메인네임):논리주소(port)/자원의경로


    정상적인 GarbageCollection 처리가 되려면shutdown 처리가 잘 되어야 server가 꺼짐.
     bin 폴더에서 

    shutdown.bat 해야 함.


     - 톰캣을 설치한 첫번째 이유, 80번포트를 우리를대신해서 감시하라고 

     - 톰캣 welcome page ( D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\webapps\ROOT의 index.jsp)


     //자원의 주소를 생략해도 볼 수 있는것 == welcomepage


    --------------------------------------

    웹 리소스


    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\webapps\ROOT\bg-nav.png

    네트워크 클라이언트가 이렇게 접근할 수는 없으니까, localhost라는 가상의 주소를 준 것

    http://localhost/bg-nav.png 이렇게 접근.


     - 원래 어떤 자원을요청할 떄, 자원의 이름을 생략할 수 있는 경우는 웰컴페이지 등 몇개 안되죠.

    webapps에 context가 다섯개임.
    ROOT는 최상위..폴더라서 이름 생략 가능

    이 파일의 경로는


    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\webapps\docs\index.html

    이건데, 클라이언트가 이렇게 접근 안 되니까.  http://localhost/docs/index.html
    로 일단 바꿔줌. 

    url이라는 논리주소체계에서는 경로 구분에 / 이용. 
    http://localhost/docs/index.html
    이렇게 하면 접근 가능. 

    localhost라는 논리주소체계는. webapps라는 폴더가 가진 context까지만 접근할 수 있는 별칭인것. (일부영역만 공개)

    document(doc) base / app base 라고 함
    이 app base 이후에는 파일시스템의 주소체계가 그대로 보임

    http://ip:port/depth....
    (doc/root부터 시작하는 구조)


    ---------
    docs라는 context의 ....index임. index 생략가능 (웰컴페이지라)
    http://localhost/docs/
    이 주소로 접근가능

    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\webapps\docs\api
    이 폴더도 와 보니 index있네

    http://localhost/docs/api/index.html
    == http://localhost/docs/api/


    ---- 그러면 어딘가는 index가 뜨게 설정해주는데가 있을 것

    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\conf
    이 컨텍스트에 보게 되면 web.xml 파일에 제일 아래에 

        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>


    이렇게 설정되어있음. 



    우리가 그동안 만들었던 프로젝트들도 톰캣이라는 상위 어플리케이션 아래에 종속된 하위 어플리케이션. 같은 규칙을 가진다는 거지..



    #과제1
    클라이언트 입장에서 브라우저를 이용해 
    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\webapps\examples\jsp\async
    의 async3.jsp를 열어보자

    http://localhost/examples/jsp/async/async3.jsp
    ==> 이런 식으로 일부 영역을 웹상에 공개하는 걸 publishing이라고 함.


    >>오옼 request.getContextPath가 여기 webapps네



    http://localhost/first/
    우리는 이제 최초의 application을 하나 만듦. 다만 이건 정적자원임. 



    =================
    <style type = "text/css">

    이 type.. 이런게 MIME TEXT임 아주 중요함 내일 수업 주제중 하나임
    =>정해진 용법이 있고, 그 용법을 통해 표현하는게 있음. 

    오 우리가 지금 소스를 수정하는동안, 서버를 재구동하지도, 컴파일 하지도 않았음. 
     특징의 하나임


     클라이언트가 현재시간을 요청한다고 한다면 동적으로 정보를 받아야 하기에, html, css만으로 안 됨 javascript필요

    이제span tag에 인쇄한다고 하면, 이 element가져와야함. 

    documnet.getElementById로 id를 기준으로 element를 가져오는건데, document를 사용해서 가져옴. 이걸
    spanTag라는 변수명에 저장하고

    이 spanTag의 값을 now변수에 담긴 날짜를html로 넣어줌. 
    바꿔줌


    ---------------------------
    우리가 만든 모든 소스를 클라이언트가 볼 수 있다는건, 클라이언트 페이지가 다 만들고 있는 거임. 


    클라이언트가 보낸 요청에 대해서 F12개발자 툴에서network - response에 가서 보면, 이 소스를 그대로 가져와서 본 거임 


    ==> 이걸 Frontend module이라고 함

    여기에서 소스를 가져온거라서 date 객체에 의해 만들어 진 시간 객체는 client의 시간객체임.


    server side background 언어는 java.
    1)프로토콜을 받을 수 있어야 하고..
    2)클라이언트가 보낸 요청을 받을 수 있어야 함
    3)요청을 받았으면 다시 해당 클라이언트한테 답을 반환 해 줄 수 있어야 함. 

    자바로 만들어야 하는 건 html인데 
    http라는 프로토콜을 받고 또 요청을 받아서 web으로.. 보내 줄 수 있는.. .. 그런 객체를 servlet이라고 부름


    //
    D:\B_Util\5.ApacheTomcat\apache-tomcat-8.5.81\webapps
    이거 docbase하고 함.
    //


    context마다 WEB-INF 폴더는 다 가지고 있음. 
    약속이 된 거라는거지,


    -----

    이걸 만들어 보자 근데

    http://localhost/first/WEB-INF/inner.html

    안나와
    404. 서버는 도는데, 찾을 수 없다고 나옴. 

    WEB-INF는 보안폴더임. 이 영역은 외부에서 접근 못하게 막아두는 거임. 
    clsspath는 그래서 이 WEB-INF에 들어있음


     (web-information 폴더)
    WEB-INF
    안에 html파일이 없어. 하나도 정적인 파일. 서비스가 안 됨.

    jsp폴더도 있음. 
    => 보호되고 있는 jsp 파일들. 이 jsp들이 동작하려면 적어도 model2로 되어야 함. model1으로 동작 안 함.

    classes 폴더
    하나의 context가 독립적으로 사용하고 있는 class들

    이 classes 폴더 안에 폴더가 있다면 base package 라는거지


    개발순서를 생각해보면, servlet 소스를 src폴더에 만들고, 컴파일 된 폴더들은 classes폴더에 만들어 져야 하고, 
    앞으로 그러면  -d. 라는 폴더의 위치는 이 classes폴더여야 하는거지 


    --


    한칸 위로
    cd..



    metadata-complete="true">
    이 값이 true면 annotation이 제 기능을 못 함



    ---------

    서버사이드 개발자들은, req, res를 잘 가지고 놀 수 있으면 하나의 백 어플리케이션을 만들 수 있음. 

    요청을 분석하는 작업이 50%. 나머지 50%작업인 응답을 생성할 수 있음. 잘 분석해야지만.

    System.out.println("Hello Servlet");
     이건 서버의 시스템. 클라이언트쪽이 아니라 서버쪽에 출력이 되어서, 클라이언트는 이 텍스트의 존재를 모름. 

    클라이언트가 확인할 수 있는 종류로 바꿔보자. 


    스트림은 크게 두 가지가 있음. 문자단위와 byte단위. 
    --> 
    지금 우리가 받아온 건 2byte단위의 문자스트림임. 
    기록해야 하는 단위라 String이라서 char 스트림이 필요했음
    System.out.println의 out도 2byte 스트림임

    ###### 다음주 화요일 io보강. 


    ----------
    과제
     qualified name은 상관없고...

    클라이언트가 
    /first/today/now.do 형태의 주소를 사용했을 때, 현재 서버의 시간을 알 수 있는 servlet을 하나 만들고 이 sevlet으로 서비스를 제공해보자. 

    kr.or.ddit.web.TimeServlet 이라는 이름으로 해보자




    set classpath 환경변수 확인하는 명령문
    환경변수 설정할 때 %% 쓰지 않음..

     


    ----------------------

    javac -d ..\classes TimeServlet.java

    http://localhost/first/WEB_INF/classes/kr/or/ddit/web/TimeServlet.java



    -----------------------

    servlet spec의 동작구조를 디테일하게 뜯어 볼 텐데, 
    지금 annotation 사용해서 하는건 servlet 3.0에서만 사용가능. 내일은 2.5방식으로 수업을 해본다고 함.
    더 어려움

    오늘까지 수업내용이 정리가 되어 잇으면 따라올 수 있음

    MIME 이라는게 어떤 데이터를 표현, 의미하는지, 이것으로 무엇을 할 수 있는지. 

    지금까지는 단순하게 문자열 서비스만 햇는데
    streaming service를 해보자. 동영상을 해보자. 
    그 때 가장 필요한게 MIME이라는 구조임. 

    디테일하게 말하는 이유는, 한번쯤은 검색해보라고. 


    ##
    오늘 미션. 

    now.servlet 이거는 지금 현재시간만 서비스하고있죠. 

    클라이언트 시간과, 서버 시간이 다 표시되도록 하기

    타이틀을 하나 주고 
    welcome first app
    client now : asdfd
    server now : adsfasf

    써야 하는 언어가 몇가지?
    java 서버시간 잡을 떄
    javascript 클라이언트 시간 잡을 떄
    html UI구성할 떄
    css 디자인할때


    결과물 완성 되었을 때, 각각의 언어가 어떤 위치에서 작동하는지를 확인해 보면, frontend와 backend가 확연히 구분 될 거라고 함. 




    --tomcat콘솔......은 상대경로 허용안함

    'main' 카테고리의 다른 글

    22-09-06_파이썬  (0) 2022.09.06
    살려주세요  (0) 2022.09.05
    220905_파이썬  (0) 2022.09.05
    22-08-26_python Day03  (0) 2022.08.26
    22-08-25 python _draft note  (0) 2022.08.25
Designed by Tistory.