• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

serialize, desserialize의 뜻

20.09.22 22:16 작성 조회수 1.33k

1

serialize, desserialize의 뜻이 궁금합니다. 개발할때 많이 쓰이는 용어 같은 데 어떤 의미를 지니나요 ?

답변 7

·

답변을 작성해보세요.

3

1. 세션쿠키로 세션ID를 찾아 그 세션 안에 들어있는 DB ID를 찾습니다.

2. 세션은 데이터를 저장할 수 있는 공간이면 됩니다. 서버 메모리도 될 수 있고 파일도 될 수 있고 DB도 될 수 있습니다(설정하기 나름입니다).

1

궁금한게 있습니다.

세션 id라는 것과 세션입니다.

1. 여기서는 쿠키를 통해서 세션에서 id값을 찾는데 이 id값이 데이터베이스에서 해당 데이터의 index를 뜻하는 것인지 세션id를 뜻하는 것인지 궁금합니다. 제 생각엔 db의 User.findOne을 통해 디비에서 찾아낸 user의 id값이기 때문에 자동생성되어진 index 값 같습니다.  세션 id라는 것은 지금 강의에서 브라우저에 보내는 쿠키로 바꿔져서 브라우저에 넘겨주는 것 같고 로그인 이후 보내진 쿠키를 다시 세션 id로 바꾸고 이 세션id로 세션을 찾은다음 그 안에 있는 db의 id값을 찾아오는 형식인가요?

2. 조금 헷갈리는 것이 쿠키 같은 경우 브라우저 저장소에서 Cookies라는 곳에 저장됩니다. 세션이라는 것은 Cookies라는 것과 같은 저장소 개념인가요 아니면 쿠키와 같은 정보를 담고있는 하나의 데이터 파일인가요 ? 

1

네 맞습니다

1

deserialize에서 복구된 값은 req.body가 아니라 req.user에 들어갑니다. 그리고 deserializeUser는 serializeUser의 user.id를 가져오는 게 아닙니다. 세션쿠키를 통해서 메모리에 저장된 id를 찾아서 가져오는 겁니다.

req.login 시에 serializeUser가 호출되면서 done이 호출될 때 res.setHeader 되는 것이고, 세션쿠키도 그 때 만들어집니다.

1

serialize는 직렬화, deserialize는 역직렬화인데요.

직렬화라는 것은 어떤 데이터를 다른 곳에서 사용할 수 있게 다른 포맷의 데이터로 바꾸는 것을 의미합니다.

지금 패스포트에서는 시퀄라이즈 객체를 세션에 저장할 수 있는 데이터로 바꾸고 있습니다.

반대로 역직렬화는 다른 포맷의 데이터로 바뀐 데이터를 원래 포맷으로 복구하는 것입니다.

세션에 저장된 데이터를 다시 시퀄라이즈 객체로 바꾸는 작업을 의미합니다.

0

답변 감사합니다.

그러면 serializeUser에서 done이후에 만들어진 세션쿠키와 가져온 id값을 done이후에 시리얼라이즈 객체로 만든뒤 직렬화시키고 세션에 저장되는건가요?

0

passport.serializeUser라는 메서드는 id값을 직렬화를 통해 세션에 저장될 수 있는 포맷으로 바꾼 뒤 저장시키고

passport.deserializeUser를 통해 브라우저에서 쿠키를 넣어서 요청을 할 경우 세션에서 쿠키에 해당하는 id값을 찾은뒤 역직렬화로 데이터포맷을 바꿔서 가져온뒤 그 id값을 활용해 디비에 요청해서 유저 데이터를 복구한뒤 req.body에 넣어주는 역할을 하겠군요  <- 이부분은 조금 헷갈리네요. id값은 passport.serializeUser의 done(null,user.id)에서 user.id를 인자로 가져오니까요.. 쿠키가 언제 필요한거죠?..

여기서 질문이 세션에 cookie값은 언제 넣어지나요 ? req.login()에서 res.setHeader('Cookie', 쿠키값)을 자동으로 해준다고 하셨는데  이때 이미 Cookie는 알아서 만들어져있고 passport.serializeUser가 호출될때 Cookie는 알아서 id값과 같이 들어가지는건가요?