Node/http 모듈로 서버 만들기

쿠키 이해하기

webmaster 2022. 9. 5. 22:54
728x90

쿠키의 필요성

쿠키를 주고받는 서버-클라이언트

요청에는 한 가지 단점이 있음

  • 누가 요청을 보냈는지 모른다(IP 주소와 브라우저 정보 정도만 알 수 있다)
  • 로그인을 구현하면 된다(누가 요청 한지 알기 위해서)
  • 쿠키와 세션이 필요하다
  •  

쿠키: 키=값의 쌍

  • ex) name=zerocho
  • 매 요청마다 서버에 동봉해서 보내면 된다.
  • 서버는 쿠키를 읽어 누구인지 파악할 수 있다.

쿠키 서버 만들기

쿠키 만들기
결과

    • writeHead: 요청 헤더에 입력하는 메서드
    • Set-Cookie: 브라우저에게 쿠키를 설정하라고 명령
    • 쿠키 : 키 = 값의 쌍( name=zerocho)
      • 요청마다 서버에 동봉해서 보냄
    • req.headers.cookie: 쿠키가 문자열로 담겨있음
    • req.url: 요청 주소
    • 요청이 전송되고 응답이 왔을 때 쿠키가 설정됨
    • favicon.ico는 브라우저가 자동으로 보내는 요청
      • 번째 요청인 favicon.ico 쿠키가 넣어짐

헤더와 본문

  • http 요청과 응답은 헤더와 본문을 가진다
  • 본문은 주고받는 실제 데이터이다
  • 헤더는 요청 또는 응답에 대한 정보를 가진다
    • 쿠키는 부가적인 정보이므로 헤더에 저장한다

writeHead 메서드에 첫 번째 인수로 넣은 값(요청이 성공했는지 실패했는지를 알려줌)

  • 2XX: 성공을 알리는 상태 코드입니다. 대표적으로 200(성공), 201(작성됨)이 많이 사용됩니다.
  • 3XX: 리다이렉션(다른 페이지로 이동)을 알리는 상태 코드입니다. 어떤 주소를 입력했는데 다른 주소의 페이지로 넘어갈 때 이 코드가 사용됩니다. 대표적으로 301(영구 이동), 302(임시 이동)가 있습니다.
  • 4XX: 요청 오류를 나타냅니다. 요청 자체에 오류가 있을 때 표시됩니다. 대표적으로 401(권한 없음), 403(금지됨), 404(찾을 수 없음)가 있습니다.
  • 5XX: 서버 오류를 나타냅니다. 요청은 제대로 왔지만 서버에 오류가 생겼을  발생합니다.  오류가 뜨지 않게 주의해서 프로그래밍해야 합니다.  오류를 클라이언트로 res.writeHead 직접 보내는 경우는 없고, 예기치 못한 에러 발생  서버가 알아서 5XX 코드를 보냅니다. 500(내부 서버 오류), 502(불량 게이트웨이), 503(서비스를 사용할  없음)이 자주 사용됩니다.

쿠키로 식별하기

  • 쿠키에 내 정보를 입력한다
    • parseCookies: 쿠키 문자열을 객체로 변환한다
  • 주소가 /login인 경우와 /인 경우로 나뉜다
    • /login인 경우 쿼리스트링으로 온 이름을 쿠키로 저장한다
    • 그 외의 경우 쿠키가 있는지 없는지 판단한다 -> 있으면 환영 인사 없으면 로그인 페이지로 리다이렉트
  • Set-Cookie 시 다양한 옵션이 있음
    • 쿠키명=쿠키값: 기본적인 쿠키의 값입니다. mycookie=test 또는 name=zerocho 같이 설정합니다.
    •  Expires=날짜: 만료 기한입니다. 이 기한이 지나면 쿠키가 제거됩니다. 기본값은 클라이언트가 종료될 때까지입니다.
    •  Max-age=초: Expires와 비슷하지만 날짜 대신 초를 입력할 수 있습니다. 해당 초가 지나면 쿠기가 제거됩니다. Expires보다 우선합니다.
    •  Domain=도메인명: 쿠키가 전송될 도메인을 특정할 수 있습니다. 기본값은 현재 도메인입니다.
    •  Path=URL: 쿠키가 전송될 URL을 특정할 수 있습니다. 기본값은 ‘/’이고 이 경우 모든 URL에서 쿠키를 전송할 수 있습니다.
    •  Secure: HTTPS일 경우에만 쿠키가 전송됩니다.
    •  HttpOnly: 설정 시 자바스크립트에서 쿠키에 접근할 수 없습니다. 쿠키 조작을 방지하기 위해 설정하는 것이 좋습니다.
728x90

'Node > http 모듈로 서버 만들기' 카테고리의 다른 글

https, http2  (0) 2022.09.05
세션 사용하기  (0) 2022.09.05
REST API 서버 만들기  (0) 2022.09.05
fs로 HTML 읽어 제공하기  (0) 2022.09.05
HTTP 서버 만들기  (0) 2022.09.05