1. 요청과 응답 이해하기
- 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에게 응답(response)를 보냄
- 클라이언트로부터 요청이 왔을때 어떤 작업을 수행할지 이벤트 리스너를 만들어 놓아야 함
① http 서버가 있어야 웹브라우저 요청을 처리하므로 http 모듈 사용
② createServer메서드
- 인자로 요청에 대한 콜백 함수를 넣을 수 있음
- 요청이 들어올 때마다 콜백 함수 실행, 따라서 이 콜백 함수에 응답을 적어주면됨
- 콜백함수의 인자로 요청에 관한 정보를 담는 req, 응답에 관한 정보를 담는 res 가 들어감
- res.write의 첫 번째 인자는 클라이언트로 보낼 데이터
- res.end는 응답을 종료하는 메서드로 인자가 있다면 그 데이터를 클라이언트로 보내고 응답을 종료함
③ listen 메서드
- createServer메서드 뒤에 listen 메서드를 붙이고 클라이언트에게 공개할 포트 번호와 포트 연결 완료 후 실행될 콜백 함수를 넣음
- 이제 이 파일을 실행하면 서버는 8080포트에서 요청이 오길 대기함
- listen메서드에 콜백 함수 대신 이벤트 리스너를 붙여도 됨
클라이언트와 서버 간의 HTTP 요청에서는 사용자에 대한 정보를 저장하지 않기 때문에(Stateless) 쿠키와 세션으로 HTTP에 상태 정보를 유지함
쿠키
- 클라이언트에 저장
- 쿠키 저장 시 만료일시 설정 가능
- 클라이언트에서 쿠키 정보를 쉽게 변경, 삭제 가능하여 보안에 취약한 편
요청/응답 헤더에 저장됨
서버에서 직접 쿠키를 만들어 클라이언트(브라우저)에 보내기
res.writeHead메서드: 헤더에 쿠키를 기록하기 위해 사용, 첫 번째 인자로 상태코드를 두 번째 인자로는 헤더의 내용을 입력함
Set-Cookie: 브라우저한테 다음과 같은 값의 쿠키를 저장하라는 의미, 실제로 응답을 받은 브라우저는 mycookie=test라는 쿠키를 저장함
쿠키로 식별하기
- 주소가 '/login'으로 시작할 경우 url과 querystsring 모듈로 각각 주소와 주소에 딸려오는 query를 분석
- 그 외의 경우 먼저 쿠키가 있는지 없는지 확인하여 쿠키가 없다면 로그인할 수 있는 페이지를 보냄
세션
- 웹 서버에 저장
- 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용
- 클라이언트가 요청시 서버는 세션 ID를 생성하여 전달하고 클라이언트는 이를 받아 세션쿠키로 저장
서버가 사용자 정보를 관리하기 위해 세션 사용을 사용하는 예제
- 쿠키에 이름을 담아서 보내지 않고 randomInt라는 임의의 숫자를 보냄
- 사용자의 이름과 만료 시간은 session이라는 객체에 저장함
- cookie.session이 존재하고 만료기한을 넘기지 않았다면 session 변수에서 사용자 정보를 가져와서 사용
- 서버에 사용자 아이디를 저장하고 클라이언트와는 세션 아이디로 주고 받음
1. HTTP 헤더의 용도
HTTP 전송에 필요한 모든 부가 정보를 담기위해 사용
- 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등 전송에 필요한 모든 부가 정보
request/response 구조
1) Request
구조 | 내용 | 설명 | |
시작줄(start line) | GET naver.com HTTP/1.1 | API 호출, URL주소, HTTP/버전 | |
헤더(headers) | Content-Type | 없음 | - |
application/x-www-form-urlencoded | HTML | ||
application/json | AJAX | ||
본문(body) | (보통) 내용 없음 | GET요청 시 | |
(보통) 사용자가 입력한 폼 데이터 또는 json데이터 | POST요청 시 |
2) Response
구조 | 내용 | 설명 | |
상태줄( status line) | HTTP/1.1 404 Not Found | API 요청 결과(HTTP/버전, 상태 코드, 상태 텍스트) | |
헤더(headers) | Content-Type | 없음 | - |
text/html | HTML | ||
application/json | AJAX | ||
Location | http://localhost:8080/hello.html | Redirect할 페이지 URL | |
본문(body) | <!DOCTYPE html> <html> <head><title>By @ResponseBody</title></head> <body>Hello, Spring 정적 웹 페이지!!</body> </html> |
컨텐츠 타입이 HTML일 경우 | |
{ "name":"홍길동", "age": 20 } |
컨텐츠 타입이 JSON일 경우 |
'Node.js' 카테고리의 다른 글
[Node.js] SQLite 데이터를 MariaDB로 마이그레이션하기 (0) | 2023.11.06 |
---|---|
[Node.js] 노드에서 시퀄라이즈(Sequelize)로 db다루기 (0) | 2023.11.02 |
[Node.js] Express 프로젝트 만들기 (0) | 2023.10.30 |
[Node.js] 노드 내장 객체와 모듈 (0) | 2023.10.24 |
[Node.js] Node.js(노드) 란? (0) | 2023.10.23 |