Node.js

[Node.js] 4. Express 프레임워크 (get과 post)

반응형

지금까지 진행했던 방식은 get을 이용해 사용자가 데이터를 가져오는 방식이었다.


get방식은 사용자의 접속에 의해 애플리케이션이 응답하고, 사용자가 정보를 가져오는 것을 말한다.


이때 쿼리 스트링으로 애플리케이션에 요청하여 정보를 가져오게 된다. 이처럼 get방식은 우리가 서버에 정보를 요청해서 가져오는 것을 말한다.




POST



이번에는 post방식에 대해서 알아보자.

post 방식은 사용자의 정보를 서버로 전송하는 것을 말한다.


예를 들면, 우리가 홈페이지에서 로그인을 할 때 아이디나 패스워드를 서버로 전송하는 과정이 필요하다. 이럴 때 사용하는 것이 바로 get 방식이 아닌 post방식이다.


post 방식을 알아보기 위해 views폴더에 form.jade를 만들자


제목과 내용을 각각 text와 textarea를 통해 작성할 수 있도록 텍스트 상자를 만들고, input으로 전송할 수 있는 버튼을 구성하자. form태그 안에 action 기능으로 form_receiver로 경로를 이동하도록 만들고, method를 통해 get과 post를 지정할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
doctype html
html
  head
    meta(charset='utf-8')
  body
    form(action='/form_receiver' method='post')
      p
        input(type='text' name='title')
      p
        textarea(name='description')
      p
        input(type='submit')
cs

현재 method는 post로 지정되어 있는 걸 볼 수 있다.



우선 method를 get으로 지정해두었을 때 app.js에서 제목과 내용을 가져오는 방법은 다음과 같다.

1
2
3
4
5
6
7
8
//method='get'일 때
 
app.get('/form_receiver', function(req, res){
  var title = req.query.title;
  var description = req.query.description;
 
  res.send(title+', '+description);
})
cs

지금처럼 request의 query 객체를 이용해 제목과 내용을 가져와 response로 출력하는걸 볼 수 있다.

node에서 app.js를 재실행하고, 제목과 내용에 값을 넣은 후 submit 해보자. url을 확인해보면 내가 입력한 제목과 내용이 모두 나타난다.

만약 이게 로그인이라면, 내 아이디와 비밀번호가 모두 쿼리 스트링으로 url에 표시가 된다. 이러면 당연히 안되지 않겠는가? 전송하는 건 post를 이용해보자.


post 방식으로는, 다른 과정을 거쳐야한다.

method가 post일 때는, 우선 제목(title)과 내용(description)을 가져오는 객체가 query가 아닌 body를 활용하자.

즉 app에서 post를 활용한 모습은 아래와 같다.

1
2
3
4
5
app.post('/form_receiver', function(req, res){
  var title = req.body.title;
  var description = req.body.description;
  res.send(title+','+description);
});
cs


node를 재실행해도 정상적으로 작동하지 않는다.

이유는 body 객체를 사용하기 위해서는 이에 필요한 body-parser를 설치해주어야 한다. npm을 통해 설치를 시작한다.

1
npm install body-parser --save
cs

그리고 이를  require하기 위해 app.js에 다음과 같이 선언을 해주어야 한다.


1
2
3
var bodyParser = require('body-parser');
 
app.use(bodyParser.urlencoded({ extended: false }))
cs

이제 node를 재실행하면 내가 입력한 제목과 내용이 잘 출력되고, url에도 쿼리스트링으로 나타나지 않는 것을 확인할 수 있다.

물론 url에 표시되지 않는다고 해서 get보다 post가 보안이 더 좋다는 건 아니다. 두 방식 모두 전송 과정에서 정보를 가져갈 수 있는 위험이 있기 때문에, 이와는 다른 기능인 https나 ssl과 같은 다른 접근이 필요하다. 일단은 get과 post에 대해서 제대로 이해하고 넘어가자.


다시한번 get과 post를 정리해보자

get방식 : request의 query 객체로 title이나 description의 정보를 쿼리 스트링을 이용하여 사용자가 요청한 데이터를 받을 수 있다. 이 정보는 url에서도 쿼리 스트링으로 값을 확인이 가능하다.

post방식 : url에 데이터가 포함되지 않고, 암시적으로 동작해 불필요한 정보가 노출되지 않는 방식이다. 용량이 큰 데이터를 전송하는 것도 제한이 없다. 또한 post방식은 객체가 기본적으로 제공이 되지 않기 때문에, body-parser이라는 미들웨어로 로드를 해야 사용이 가능하다.



반응형