3rd day

(2015) Summer/Node.js 2015. 8. 5. 12:18

-Request Handling 

-URL에 대한 동적 binding -> 편하게 사용할 수 있지만 request path와 혼동될 우려가 있다

-Query String을 이용한 방식

 Query String은 특별한 형식의 문자열

 쿼리스트링은 무조건 물음표로 시작하고 키와밸류의 쌍이 나옴 또다른키와밸류쌍연결은 & 로 연결

 ?name=홍길동&age=20&address=서울   // URL뒤에 붙여서 사용


- Cookie, Session, File Upload, ec.

- Database Handling (MySQL)

-> 기본적인 Web Application 작성


Cookie : 문자열 ( 길이에 제한이 있어요! ) e.g. 시스템마다 다르다. 예를 들어, 맥과 pc 에서 사용되는 cookie 의 길이제한은 서로 다르다.

       key 와 value 의 쌍으로 데이터를 저장

       Client 쪽에 저장된다 (좀 더 엄밀히 말하자면, 브라우저 쪽 어느 공간에 저장된다)

       내 컴퓨터에 저장된 cookie 를 열어볼 수 있을까? 물론이다. 따라서 보안성이라고는 찾아볼 수가 없다 라고도 볼 수 있다.

       서버가 특정목적을 가지고 클라이언트쪽에 저장하는 문자열

       **signed cookie - 사용자가 편하게 cookie를 열어볼 수 있는 대신, 보안을 위해 서버쪽에서 RSA 방식으로 cookie 내용을 128 bit 로 암호화한다

  - 다시 말해, 내 컴퓨터에 있는 쿠키를 맘대로 열고, 지울 순 있지만, 열어봐도 알아볼 수 없다. 암호화 되어 있기 때문에. 

동작방법 예

- 클라이언트가 서버쪽으로 request 를 보낼 때 해당 cookie가 request 에 딸려가요!!

- 그래서 서버가 cookie 를 받고, "아 어제 접속했던 '홍길동' 이구나 라고 인지하고

- 목적: 사용자 tracking 

쿠키가 나온 이유

수많은 사람들이 접속하는 클라이언트-서버 모델 상 이 부하를 감당해내기 위한 방법으로서 HTTP 는 client 가 request 를 보내면 소켓을 열고, client 에게 response 를 보내고

그 다음에 session 을 끊고 소켓을 끊는 방식을 사용했다. 그런데 이렇게 하기 시작하자 금방 접속했던 친구가 A 인지 B 인지 확인하는 것이 너무 번거로워진 것이다. 

그래서 사용자 tracking 을 위해 쿠키가 필요하게 되어 쿠키라는 개념이 생기게 된 것.


요즘은 session을 더 많이 쓰지만, session 자체가 cookie 에 기반하고 있기 때문에 cookie 개념을 잘 이해해야 한다.

browser 별로 따로 관리. cookie 는 내가 컴퓨터를 새로 포맷할 때까지 계속 남아있나요? cookie 유지기간을 정할 수 있다. 

어떤 사이트에 접속한다. 그럼 그 사이트가 내 컴퓨터에 cookie 를 남긴다. 그리고 내가 나중에 다시 그 사이트에 접속할 때, 즉, request 를 보낼 때 

그 해당 cookie 가 함께 보내진다. 물론 내 컴퓨터에 쌓여있는 모든 쿠키가 보내지는게 아니라, 그 domain 과 매칭되는 쿠키만 보내진다.

쿠키는 도메인 단위로 관리되요. 

서버가 특정목적을 가지고 클라이언트쪽에 저장하는 문자열 

signed cookie



Session

=> 쿠키의 단점 때문에 등장

     Cookie가 문자열기반이기 때문에 사용상에 불편함이 있고,

     보안성 없고, 대역폭 낙비

     저장길이에 제한있다..


    Session : 데이터를 저장하기 위한 객체

    Key 와 value 의 쌍으로 데이터를 저장

    이 저장객체는 서버쪽에 위치...



1. 클라이언트가 서버에 접속을 해요


2. 서버쪽에서는 session이라는 객체를 하나 만들어요.

   그리고 이 객체에 꼬리표를 하나 달아요 (숫자값)

3. 응답을 돌려줄 때 signed cookie를 이용해서 

     해당 숫자값을 클라이언트에게 전송

4. 이 클라이언트가 다시 서버에 request 를 보내요.

    당연히 아까 설정된 cookie 값(꼬리표 숫자값)이 서버로 전송되요

5. 서버는 이 숫자값을 가지고 아까 있던 객체를 찾아서 이용.

6. 이 객체는 언제까지 유지되나요



session 만료의 의미 - 서버 쪽에 있는 session 객체가 날라가서 존재하지 않는다는 의미


장점 : 서버쪽에 존재 (안전)

  프로그램하기도 편해요 (객체)

  크기에 제한이 있나요 

  (크기에 제한은 없어요)

  대역폭 낭비도 훨씬 적어요!!


Session 의 단점 : cookie 가 동작하지 않으면 session 자체를 사용할 수 없어요!!

=> 따라서, 브라우저 상에서 '쿠키 사용 안 함' 을 클릭하면 session 을 사용하지 못하게 되는 것이다

=> 그럼 어떻게 해? => 이를 해결하기 위해 쿠키를 사용하지 않고 URL 을 이용하는 방식으로 session 을 이용

=> e.g. 은행권 사이트 들어가서 로그인 하면 그 뒤에 URL 이 엄~~청 길어진다. 서버측에서 클라이언트 쪽에 쿠키를 심지 못하다 보니

            URL 내에 키 값을 심는 방식으로 문제를 우회한 것이고, 그렇기 때문에 URL 이 길어진 것이다.


session <- 서버 쪽에 있는 객체


e..g 

쇼핑사이트에서 장바구니에 넣는 순간 쿠키가 우리 컴퓨터에 저장된다. 

나중에 결제할때 전체결제 들어가면 확인할 수 있다.


다시 한번 말해, HTTP 가 가지고 있는 약점! 즉, 사용자 구분이 불가능하다는 단점을 쿠키를 통해 해결!


사용자 구분을 위해 쿠키는 무조건 필요하다.

Web Application 에 쿠키 개념이 안 들어가는 경우가 없다.





http://localhost:5000/?name=홍길동&age=20&address=서울

express안 쓰면!!! 헤더 짜르고 거기서 또 스트링 짤라서 쿼리스트링 아주 복잡하게 처리해야되지만

express쓰면 그냥 req.query.key값 으로 간단하게 꺼낼수있음 당길수잇음~



client 에서 보내는 데이터는 

query string 혹은 form tag 이다.



















서버와 클라이언트가 데이터를 주고 받는다.

그리고

서버와 데이터베이스가 데이터를 주고 받는다.


데이터를 주고 받을 때 (많은 양의 데이터를 주고 받을 때)


홍길동,20,서울,김길동,30,인천,김구,40,제주도

CSV (Comma Separated Value)

-> 문제점

     데이터를 구조화 할 수 없어요!

     파싱 프로그램을 짜야되요! (더군다나, 1회성이다. 앞으로 들어오는 데이터들이 '이름,나이,주소' 인 패턴을 가지고 있을리가 없다.)

  

     장점

     부가적인 데이터가 상대적으로 크지 않아요

     대용량의 데이터를 보내기에 적합해요



XML

<name> 홍길동 </name> <age> 20 </age> <addr> 서울 </addr> ...

장점

구조화된 데이터를 만들기 쉬워요

파싱프로그램을 쉽게 만들 수 있어요

단점

부가적인 데이터가 많아요 (왜? e.g. <name> </name> <age> </age> ... 식으로 태그를 다 붙여야 하니까)


그러다 결국 다음 언어를 사용하게 되었다

JSON (JavaScript Object Notation)

->표준, 데이터를 표현하는 형식

    특정언어에 종속되지 않아요!

{ name : "홍길동", age : 20, addr : "서울" }     <- 마치 자바스크립트 객체와 같이 생겼다. 실제로 JSON 을 만들 때 자바스크립트를 참조해서 만들었기 때문이라 볼 수 있다.



























WRITTEN BY
서상호

,